feat: legacy import — packs, examples, lab, themes, docs, lineage
Import from agentic-semantic-web/ into restructured repo: - 7 packs (apache, caddy, flask, hugo, nginx, pandoc, python) - shared error pages (403-503) - 17 lab experiments (boilerplate, charts, misc) - 31 example pages (charts, components, content, layout, vault) - 2 themes (garden, trentuna stub) - 4 docs (llms.txt, vocabulary, philosophy, agent-directive) - lineage.md (Pico/Open Props/Charts.css history) - Hugo mounts for lab/ and examples/ All agentic.css references updated to asw.css. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e9895cf90d
commit
86464f3e21
100 changed files with 14700 additions and 4 deletions
129
packs/hugo/README.md
Normal file
129
packs/hugo/README.md
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
# ASW-Hugo Pack
|
||||
|
||||
A Hugo theme that outputs pure [Agentic Semantic Web (ASW)](https://trentuna.com/asw/) semantic HTML with `data-*` attributes. Drop it into any Hugo project → content renders through ASW.
|
||||
|
||||
## What this is
|
||||
|
||||
This pack is an **ASW adapter for Hugo** — not a standalone theme. It makes Hugo output the semantic HTML + data-attribute vocabulary that ASW CSS understands.
|
||||
|
||||
```
|
||||
Markdown vault (Git)
|
||||
→ Hugo + ASW-Hugo pack (layouts emit ASW HTML)
|
||||
→ static HTML with ASW CSS + data-* attributes
|
||||
→ deploy anywhere
|
||||
```
|
||||
|
||||
Long-term: trentuna will build a native ASW Site Builder. This pack is the bridge to alpha.
|
||||
|
||||
## Install
|
||||
|
||||
1. Copy or symlink `packs/hugo/` from the ASW repo into your project's `themes/` directory:
|
||||
```bash
|
||||
# From the agentic-semantic-web repo root:
|
||||
cp -r packs/hugo/ /path/to/your-site/themes/asw-hugo/
|
||||
# or symlink:
|
||||
ln -s /path/to/agentic-semantic-web/packs/hugo/ /path/to/your-site/themes/asw-hugo
|
||||
```
|
||||
|
||||
2. Add to your `hugo.toml`:
|
||||
```toml
|
||||
theme = "asw-hugo"
|
||||
|
||||
[taxonomies]
|
||||
tag = "tags"
|
||||
```
|
||||
|
||||
3. Copy ASW CSS into the theme's static directory:
|
||||
```bash
|
||||
cp /path/to/agentic-semantic-web/asw.css themes/asw-hugo/static/css/asw.css
|
||||
```
|
||||
> **Note:** `asw.css` is the `asw.css` file from the ASW repo root. B.A.'s deploy script handles this copy automatically for trentuna-web deployments.
|
||||
|
||||
4. **Self-host fonts** (recommended for production): The default `theme.css` imports Inter and
|
||||
JetBrains Mono from Google Fonts. For self-hosted deployment, download the font files and
|
||||
replace the `@import` in `static/css/theme.css` with local `@font-face` declarations.
|
||||
See [google-webfonts-helper](https://gwfh.mranftl.com/) for font download.
|
||||
|
||||
## Usage
|
||||
|
||||
Write standard Markdown. Hugo renders it through ASW layouts automatically.
|
||||
|
||||
### Shortcodes
|
||||
|
||||
**Callout block:**
|
||||
```
|
||||
{{< callout note >}}
|
||||
This is a note callout. Types: note, warning, tip, info
|
||||
{{< /callout >}}
|
||||
```
|
||||
Renders as: `<aside data-callout="note">...</aside>`
|
||||
|
||||
**Wikilink:**
|
||||
```
|
||||
{{< wikilink "Page Name" "/path/to/page/" >}}
|
||||
```
|
||||
Renders as: `<a href="/path/to/page/" data-wikilink>Page Name</a>`
|
||||
|
||||
### ASW data-* vocabulary used
|
||||
|
||||
See `docs/agent-directive.md` in the ASW repo for the full vocabulary.
|
||||
|
||||
| Attribute | Where used | Meaning |
|
||||
|-----------|-----------|---------|
|
||||
| `data-callout="note\|warning\|tip\|info"` | `<aside>` | Callout block type |
|
||||
| `data-wikilink` | `<a>` | Internal vault-style link |
|
||||
| `data-role="tag-cloud"` | `<nav>` | Tag navigation |
|
||||
| `data-layout="grid"` | `<section>` | Grid layout for list pages |
|
||||
| `data-tag` | `<a>` | Tag label on links |
|
||||
|
||||
## Decap CMS
|
||||
|
||||
The `admin/` directory contains a minimal Decap CMS configuration for browser-based Markdown editing without SSH.
|
||||
|
||||
To enable:
|
||||
1. Update `admin/config.yml`: set `repo` to your Forgejo repo path
|
||||
2. Set `base_url` to your Forgejo instance URL
|
||||
3. Deploy the `admin/` directory alongside your Hugo output
|
||||
4. Access at `https://yoursite.com/admin/`
|
||||
|
||||
## Pack structure
|
||||
|
||||
```
|
||||
packs/hugo/
|
||||
├── README.md ← This file
|
||||
├── layouts/
|
||||
│ ├── _default/
|
||||
│ │ ├── baseof.html ← Base template (html, head, body structure)
|
||||
│ │ ├── single.html ← Single pages (articles)
|
||||
│ │ └── list.html ← List + taxonomy pages (grid)
|
||||
│ ├── partials/
|
||||
│ │ ├── head.html ← <head>: meta, CSS links
|
||||
│ │ └── tag-nav.html ← Tag cloud nav (use in list templates or sidebar)
|
||||
│ └── shortcodes/
|
||||
│ ├── callout.html ← {{< callout type >}} shortcode
|
||||
│ └── wikilink.html ← {{< wikilink text href >}} shortcode
|
||||
├── static/
|
||||
│ └── css/
|
||||
│ └── theme.css ← Trentuna design tokens (Inter, JetBrains Mono, dark palette)
|
||||
├── archetypes/
|
||||
│ └── default.md ← Default frontmatter template
|
||||
└── admin/
|
||||
└── config.yml ← Minimal Decap CMS config
|
||||
```
|
||||
|
||||
## Alpha scope (April 2026)
|
||||
|
||||
- [x] Pack scaffolded: all layouts + partials + shortcodes
|
||||
- [x] Tag navigation partial (`tag-nav.html`)
|
||||
- [x] Wikilink support (`wikilink` shortcode + `data-wikilink` on list page links)
|
||||
- [x] Callout blocks (`callout` shortcode → `<aside data-callout>`)
|
||||
- [x] Trentuna theme tokens (`theme.css`: Inter, JetBrains Mono, dark palette)
|
||||
- [x] Decap CMS config minimal but functional
|
||||
- [ ] Deployed to trentuna-web infra — B.A. task: wire `asw.css` copy + nginx config
|
||||
|
||||
## Relationship to existing packs
|
||||
|
||||
This pack joins the ASW server/framework integration packs:
|
||||
- `packs/nginx/` — nginx serving ASW content
|
||||
- `packs/pandoc/` — pandoc converting Markdown → ASW HTML
|
||||
- `packs/hugo/` ← **this pack** — Hugo site generation with ASW output
|
||||
82
packs/hugo/admin/config.yml
Normal file
82
packs/hugo/admin/config.yml
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
# Decap CMS configuration for ASW-Hugo pack
|
||||
# Browser-based Markdown editing — no backend server required.
|
||||
#
|
||||
# Setup:
|
||||
# 1. Update `repo` below to your Forgejo repo path (owner/repo)
|
||||
# 2. Update `base_url` to your Forgejo instance URL
|
||||
# 3. Register an OAuth app in Forgejo: Settings → Applications → OAuth2 Apps
|
||||
# - Redirect URL: https://yoursite.com/admin/
|
||||
# 4. Deploy admin/ alongside your Hugo output
|
||||
# 5. Access at https://yoursite.com/admin/
|
||||
|
||||
backend:
|
||||
name: gitea # Forgejo is Gitea-compatible
|
||||
repo: trentuna/vault # ← CHANGE: your repo (owner/repo)
|
||||
branch: main
|
||||
base_url: https://trentuna.com # ← CHANGE: your Forgejo instance URL
|
||||
auth_endpoint: /api/v1/oauth2/
|
||||
|
||||
media_folder: static/images
|
||||
public_folder: /images
|
||||
|
||||
# Slug format for new posts
|
||||
slug:
|
||||
encoding: ascii
|
||||
clean_accents: true
|
||||
|
||||
collections:
|
||||
- name: posts
|
||||
label: Posts
|
||||
label_singular: Post
|
||||
folder: content/posts
|
||||
create: true
|
||||
slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
|
||||
preview_path: "posts/{{slug}}/"
|
||||
fields:
|
||||
- label: Title
|
||||
name: title
|
||||
widget: string
|
||||
- label: Date
|
||||
name: date
|
||||
widget: datetime
|
||||
default: ""
|
||||
date_format: "YYYY-MM-DD"
|
||||
time_format: "HH:mm:ss"
|
||||
format: "YYYY-MM-DDTHH:mm:ssZ"
|
||||
- label: Description
|
||||
name: description
|
||||
widget: string
|
||||
required: false
|
||||
hint: Short summary shown in list views
|
||||
- label: Tags
|
||||
name: tags
|
||||
widget: list
|
||||
required: false
|
||||
hint: Comma-separated tags
|
||||
- label: Draft
|
||||
name: draft
|
||||
widget: boolean
|
||||
default: true
|
||||
- label: Body
|
||||
name: body
|
||||
widget: markdown
|
||||
|
||||
- name: pages
|
||||
label: Pages
|
||||
label_singular: Page
|
||||
folder: content
|
||||
create: true
|
||||
filter:
|
||||
field: _type
|
||||
value: page
|
||||
fields:
|
||||
- label: Title
|
||||
name: title
|
||||
widget: string
|
||||
- label: Description
|
||||
name: description
|
||||
widget: string
|
||||
required: false
|
||||
- label: Body
|
||||
name: body
|
||||
widget: markdown
|
||||
17
packs/hugo/archetypes/default.md
Normal file
17
packs/hugo/archetypes/default.md
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
description: ""
|
||||
tags: []
|
||||
---
|
||||
|
||||
<!-- Write content here. Use shortcodes for ASW-specific elements:
|
||||
|
||||
{{< callout note >}}
|
||||
This is a note.
|
||||
{{< /callout >}}
|
||||
|
||||
{{< wikilink "Related Page" "/related-page/" >}}
|
||||
|
||||
-->
|
||||
28
packs/hugo/layouts/_default/baseof.html
Normal file
28
packs/hugo/layouts/_default/baseof.html
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="{{ .Site.Language.LanguageCode | default "en" }}">
|
||||
<head>
|
||||
{{- partial "head.html" . -}}
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<nav>
|
||||
<a href="{{ .Site.BaseURL }}"><strong>{{ .Site.Title }}</strong></a>
|
||||
{{- range .Site.Menus.main }}
|
||||
<a href="{{ .URL }}">{{ .Name }}</a>
|
||||
{{- end }}
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
{{- block "main" . }}{{- end }}
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<small>
|
||||
<a href="{{ "/" | relURL }}">{{ .Site.Title }}</a>
|
||||
· {{ now.Year }}
|
||||
{{- with .Site.Params.description }} · {{ . }}{{- end }}
|
||||
</small>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
39
packs/hugo/layouts/_default/list.html
Normal file
39
packs/hugo/layouts/_default/list.html
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
{{ define "main" }}
|
||||
<section>
|
||||
<header>
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{- with .Description }}<p>{{ . }}</p>{{- end }}
|
||||
</header>
|
||||
|
||||
{{- if .IsHome }}
|
||||
{{- partial "tag-nav.html" . }}
|
||||
{{- end }}
|
||||
|
||||
<section data-layout="grid">
|
||||
{{- range .Pages }}
|
||||
<article>
|
||||
<header>
|
||||
<h3>
|
||||
<a href="{{ .RelPermalink }}" data-wikilink>{{ .Title }}</a>
|
||||
</h3>
|
||||
{{- if not .Date.IsZero }}
|
||||
<time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "Jan 2, 2006" }}</time>
|
||||
{{- end }}
|
||||
</header>
|
||||
|
||||
{{- with .Summary }}
|
||||
<p>{{ . }}</p>
|
||||
{{- end }}
|
||||
|
||||
{{- with .GetTerms "tags" }}
|
||||
<footer>
|
||||
{{- range . }}
|
||||
<a href="{{ .Permalink }}" data-tag="{{ .Name }}">{{ .Name }}</a>
|
||||
{{- end }}
|
||||
</footer>
|
||||
{{- end }}
|
||||
</article>
|
||||
{{- end }}
|
||||
</section>
|
||||
</section>
|
||||
{{ end }}
|
||||
36
packs/hugo/layouts/_default/single.html
Normal file
36
packs/hugo/layouts/_default/single.html
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{{ define "main" }}
|
||||
<article>
|
||||
<header>
|
||||
<h1>{{ .Title }}</h1>
|
||||
|
||||
{{- if not .Date.IsZero }}
|
||||
<time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "January 2, 2006" }}</time>
|
||||
{{- end }}
|
||||
|
||||
{{- with .Description }}
|
||||
<p>{{ . }}</p>
|
||||
{{- end }}
|
||||
|
||||
{{- with .GetTerms "tags" }}
|
||||
<nav data-role="tag-cloud" aria-label="Tags">
|
||||
{{- range . }}
|
||||
<a href="{{ .Permalink }}" data-tag="{{ .Name }}">{{ .Name }}</a>
|
||||
{{- end }}
|
||||
</nav>
|
||||
{{- end }}
|
||||
</header>
|
||||
|
||||
{{ .Content }}
|
||||
|
||||
{{- if .PrevInSection }}
|
||||
<footer>
|
||||
{{- with .PrevInSection }}
|
||||
<a href="{{ .RelPermalink }}" rel="prev" data-wikilink>← {{ .Title }}</a>
|
||||
{{- end }}
|
||||
{{- with .NextInSection }}
|
||||
<a href="{{ .RelPermalink }}" rel="next" data-wikilink>{{ .Title }} →</a>
|
||||
{{- end }}
|
||||
</footer>
|
||||
{{- end }}
|
||||
</article>
|
||||
{{ end }}
|
||||
20
packs/hugo/layouts/partials/head.html
Normal file
20
packs/hugo/layouts/partials/head.html
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>
|
||||
{{- if .IsHome -}}
|
||||
{{ .Site.Title }}
|
||||
{{- else -}}
|
||||
{{ .Title }} · {{ .Site.Title }}
|
||||
{{- end -}}
|
||||
</title>
|
||||
{{- with .Description }}<meta name="description" content="{{ . }}">{{- end }}
|
||||
{{- if not .Description }}{{- with .Site.Params.description }}<meta name="description" content="{{ . }}">{{- end }}{{- end }}
|
||||
|
||||
<!-- ASW framework CSS — absURL ensures correct path when served at a subpath -->
|
||||
<link rel="stylesheet" href="{{ "css/asw.css" | absURL }}">
|
||||
<!-- Trentuna theme tokens: Inter, JetBrains Mono, dark palette -->
|
||||
<link rel="stylesheet" href="{{ "css/theme.css" | absURL }}">
|
||||
|
||||
{{- range .AlternativeOutputFormats -}}
|
||||
<link rel="{{ .Rel }}" type="{{ .MediaType.Type }}" href="{{ .Permalink | safeURL }}">
|
||||
{{- end }}
|
||||
21
packs/hugo/layouts/partials/tag-nav.html
Normal file
21
packs/hugo/layouts/partials/tag-nav.html
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{{- /*
|
||||
tag-nav.html — renders all site tags as a navigable tag cloud.
|
||||
|
||||
Usage in a layout:
|
||||
{{ partial "tag-nav.html" . }}
|
||||
|
||||
Outputs: <nav data-role="tag-cloud"> with links to each tag page.
|
||||
The (N) count shows how many pages have each tag.
|
||||
*/ -}}
|
||||
{{- $tags := .Site.Taxonomies.tags -}}
|
||||
{{- if $tags }}
|
||||
<nav data-role="tag-cloud" aria-label="Browse by tag">
|
||||
{{- range $name, $pages := $tags }}
|
||||
{{- $tagPage := site.GetPage (printf "/tags/%s" ($name | urlize)) }}
|
||||
<a href="{{ if $tagPage }}{{ $tagPage.Permalink }}{{ else }}{{ print site.BaseURL "tags/" ($name | urlize) "/" }}{{ end }}" data-tag="{{ $name }}">
|
||||
{{ $name -}}
|
||||
<small>({{ len $pages }})</small>
|
||||
</a>
|
||||
{{- end }}
|
||||
</nav>
|
||||
{{- end }}
|
||||
16
packs/hugo/layouts/shortcodes/callout.html
Normal file
16
packs/hugo/layouts/shortcodes/callout.html
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{{- /*
|
||||
callout shortcode — wraps content in an ASW callout block.
|
||||
|
||||
Usage:
|
||||
{{< callout note >}}
|
||||
Content here. Markdown is rendered.
|
||||
{{< /callout >}}
|
||||
|
||||
First positional param: callout type.
|
||||
Valid types: note, warning, tip, info (maps to ASW data-callout attribute).
|
||||
Default: note
|
||||
*/ -}}
|
||||
{{- $type := .Get 0 | default "note" -}}
|
||||
<aside data-callout="{{ $type }}">
|
||||
{{ .Inner | markdownify }}
|
||||
</aside>
|
||||
20
packs/hugo/layouts/shortcodes/wikilink.html
Normal file
20
packs/hugo/layouts/shortcodes/wikilink.html
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
{{- /*
|
||||
wikilink shortcode — renders an internal link with ASW data-wikilink attribute.
|
||||
|
||||
Usage:
|
||||
{{< wikilink "Display Text" "/path/to/page/" >}}
|
||||
|
||||
Param 0 (required): display text
|
||||
Param 1 (optional): href path. Defaults to /display-text-slugified/
|
||||
|
||||
Examples:
|
||||
{{< wikilink "My Note" >}}
|
||||
→ <a href="/my-note/" data-wikilink>My Note</a>
|
||||
|
||||
{{< wikilink "My Note" "/vault/my-note/" >}}
|
||||
→ <a href="/vault/my-note/" data-wikilink>My Note</a>
|
||||
*/ -}}
|
||||
{{- $text := .Get 0 -}}
|
||||
{{- $slug := $text | lower | replace " " "-" -}}
|
||||
{{- $href := .Get 1 | default (printf "/%s/" $slug) -}}
|
||||
<a href="{{ $href | relURL }}" data-wikilink>{{ $text }}</a>
|
||||
82
packs/hugo/static/admin/config.yml
Normal file
82
packs/hugo/static/admin/config.yml
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
# Decap CMS configuration for ASW-Hugo pack
|
||||
# Browser-based Markdown editing — no backend server required.
|
||||
#
|
||||
# Setup:
|
||||
# 1. Update `repo` below to your Forgejo repo path (owner/repo)
|
||||
# 2. Update `base_url` to your Forgejo instance URL
|
||||
# 3. Register an OAuth app in Forgejo: Settings → Applications → OAuth2 Apps
|
||||
# - Redirect URL: https://yoursite.com/admin/
|
||||
# 4. Deploy admin/ alongside your Hugo output
|
||||
# 5. Access at https://yoursite.com/admin/
|
||||
|
||||
backend:
|
||||
name: gitea # Forgejo is Gitea-compatible
|
||||
repo: trentuna/vault # ← CHANGE: your repo (owner/repo)
|
||||
branch: main
|
||||
base_url: https://trentuna.com # ← CHANGE: your Forgejo instance URL
|
||||
auth_endpoint: /api/v1/oauth2/
|
||||
|
||||
media_folder: static/images
|
||||
public_folder: /images
|
||||
|
||||
# Slug format for new posts
|
||||
slug:
|
||||
encoding: ascii
|
||||
clean_accents: true
|
||||
|
||||
collections:
|
||||
- name: posts
|
||||
label: Posts
|
||||
label_singular: Post
|
||||
folder: content/posts
|
||||
create: true
|
||||
slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
|
||||
preview_path: "posts/{{slug}}/"
|
||||
fields:
|
||||
- label: Title
|
||||
name: title
|
||||
widget: string
|
||||
- label: Date
|
||||
name: date
|
||||
widget: datetime
|
||||
default: ""
|
||||
date_format: "YYYY-MM-DD"
|
||||
time_format: "HH:mm:ss"
|
||||
format: "YYYY-MM-DDTHH:mm:ssZ"
|
||||
- label: Description
|
||||
name: description
|
||||
widget: string
|
||||
required: false
|
||||
hint: Short summary shown in list views
|
||||
- label: Tags
|
||||
name: tags
|
||||
widget: list
|
||||
required: false
|
||||
hint: Comma-separated tags
|
||||
- label: Draft
|
||||
name: draft
|
||||
widget: boolean
|
||||
default: true
|
||||
- label: Body
|
||||
name: body
|
||||
widget: markdown
|
||||
|
||||
- name: pages
|
||||
label: Pages
|
||||
label_singular: Page
|
||||
folder: content
|
||||
create: true
|
||||
filter:
|
||||
field: _type
|
||||
value: page
|
||||
fields:
|
||||
- label: Title
|
||||
name: title
|
||||
widget: string
|
||||
- label: Description
|
||||
name: description
|
||||
widget: string
|
||||
required: false
|
||||
- label: Body
|
||||
name: body
|
||||
widget: markdown
|
||||
4931
packs/hugo/static/css/asw.css
Normal file
4931
packs/hugo/static/css/asw.css
Normal file
File diff suppressed because it is too large
Load diff
130
packs/hugo/static/css/theme.css
Normal file
130
packs/hugo/static/css/theme.css
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
/*
|
||||
* Trentuna theme tokens for ASW-Hugo pack
|
||||
* Overrides ASW custom properties with trentuna-specific values.
|
||||
*
|
||||
* Zero CDN dependencies — system font stacks only, matching ASW's own ethos.
|
||||
* ASW framework (web-fonts.css) uses system fonts by design: zero external requests,
|
||||
* zero layout shift, fonts resolve to native equivalents on every device.
|
||||
*
|
||||
* Inter and JetBrains Mono resolve to system-ui / monospace on most platforms.
|
||||
* To use web fonts: add @font-face declarations to a local fonts.css and
|
||||
* @import it before this file.
|
||||
*/
|
||||
|
||||
:root {
|
||||
/* --- Typography (system font stacks — no external loading) --- */
|
||||
--font-sans: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
||||
--font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', ui-monospace, monospace;
|
||||
|
||||
/* --- Dark palette --- */
|
||||
--color-bg: #0f0f0f;
|
||||
--color-surface: #1a1a1a;
|
||||
--color-surface-2:#222222;
|
||||
--color-border: #2e2e2e;
|
||||
--color-text: #e8e8e8;
|
||||
--color-muted: #888888;
|
||||
--color-accent: #e8c87a; /* warm gold */
|
||||
--color-accent-2: #7aadcf; /* cool blue */
|
||||
--color-danger: #cf7a7a;
|
||||
--color-success: #7acf9a;
|
||||
|
||||
/* --- Spacing scale (matches ASW defaults) --- */
|
||||
--space-xs: 0.25rem;
|
||||
--space-sm: 0.5rem;
|
||||
--space-md: 1rem;
|
||||
--space-lg: 1.5rem;
|
||||
--space-xl: 2.5rem;
|
||||
--space-2xl: 4rem;
|
||||
}
|
||||
|
||||
/* Base */
|
||||
html {
|
||||
background-color: var(--color-bg);
|
||||
color: var(--color-text);
|
||||
font-family: var(--font-sans);
|
||||
}
|
||||
|
||||
code, pre, kbd, samp, tt {
|
||||
font-family: var(--font-mono);
|
||||
}
|
||||
|
||||
/* Links */
|
||||
a {
|
||||
color: var(--color-accent);
|
||||
}
|
||||
a:hover {
|
||||
color: var(--color-accent-2);
|
||||
}
|
||||
a[data-wikilink] {
|
||||
text-decoration: underline dotted;
|
||||
}
|
||||
|
||||
/* Navigation */
|
||||
header nav {
|
||||
display: flex;
|
||||
gap: var(--space-md);
|
||||
align-items: center;
|
||||
padding: var(--space-md) var(--space-lg);
|
||||
border-bottom: 1px solid var(--color-border);
|
||||
}
|
||||
header nav a {
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
}
|
||||
header nav strong {
|
||||
color: var(--color-text);
|
||||
margin-right: var(--space-md);
|
||||
}
|
||||
|
||||
/* Tag cloud */
|
||||
nav[data-role="tag-cloud"] {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: var(--space-xs) var(--space-sm);
|
||||
}
|
||||
nav[data-role="tag-cloud"] a {
|
||||
font-size: 0.8rem;
|
||||
text-decoration: none;
|
||||
padding: 0.15em 0.5em;
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: 2px;
|
||||
color: var(--color-muted);
|
||||
}
|
||||
nav[data-role="tag-cloud"] a:hover {
|
||||
color: var(--color-accent);
|
||||
border-color: var(--color-accent);
|
||||
}
|
||||
a[data-tag] {
|
||||
font-size: 0.8rem;
|
||||
color: var(--color-muted);
|
||||
text-decoration: none;
|
||||
}
|
||||
a[data-tag]:hover {
|
||||
color: var(--color-accent);
|
||||
}
|
||||
|
||||
/* Grid layout */
|
||||
section[data-layout="grid"] {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
|
||||
gap: var(--space-lg);
|
||||
}
|
||||
|
||||
/* Article cards in grid */
|
||||
section[data-layout="grid"] article {
|
||||
border: 1px solid var(--color-border);
|
||||
padding: var(--space-md);
|
||||
border-radius: 3px;
|
||||
}
|
||||
section[data-layout="grid"] article:hover {
|
||||
border-color: var(--color-border);
|
||||
background: var(--color-surface);
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
footer {
|
||||
padding: var(--space-lg);
|
||||
color: var(--color-muted);
|
||||
border-top: 1px solid var(--color-border);
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue