diff --git a/README.md b/README.md index 7432210..89da51c 100644 --- a/README.md +++ b/README.md @@ -71,9 +71,12 @@ Semantic classes so a site can drop hand-written CSS entirely: | `.wt-nav-links` / `.wt-nav-link` (`.is-active` / `[aria-current=page]`) | nav link row | | `.wt-main` | centred content column (= `.wt-container` + vertical padding) | | `.wt-footer` / `.wt-footer-inner` | footer with border + responsive row | -| `.wt-card` (`--hover` `--raised` `--link`) + `.wt-card-date/-title/-desc` | post/list card | +| `.wt-card` (`--hover` `--raised` `--link` `--compact` `--flush` `--alt`) + `.wt-card-date/-title/-desc` | post/list card; compact = small item, flush = table inside, alt = second voice (chat) | +| `.wt-dropzone` (`.is-over`) | dashed file drop area | | `.wt-chip` | pill tag-link | -| `.wt-btn` (`--primary`) / `.wt-input` / `.wt-tag` / `.wt-muted` | controls | +| `.wt-btn` (`--primary` `--ghost` `--sm` `--lg`) / `.wt-input` (`--lg`) / `.wt-tag` / `.wt-muted` | controls | +| `.wt-btn[aria-pressed=true]` / `.wt-btn.is-active` | toggle state for filter and segment buttons | +| `.wt-kbd` | keyboard key | | `.wt-tag--good` / `--warn` / `--bad` / `--accent` | status tags (tinted, readable in every palette) | | `.wt-pre` | monospace output box for logs / terminal captures | | `.wt-row` (`--between`) / `.wt-stack` | wrapping flex row / vertical grid stack with the theme gap | diff --git a/adapters/tailwind.css b/adapters/tailwind.css index 0f3d851..c7596ca 100644 --- a/adapters/tailwind.css +++ b/adapters/tailwind.css @@ -7,7 +7,10 @@ @import "tailwindcss"; @import ".../adapters/tailwind.css"; // tokens - @import ".../weirsoe-theme.css"; // base/glow, toggle, prose, .wt-* + @import ".../weirsoe-theme.css" layer(components); // base/glow, toggle, prose, .wt-* + + layer(components) puts the .wt-* classes below Tailwind's utilities, so a + utility on the same element (pl-9, font-mono, p-0) still wins. Font is intentionally NOT set here (consumer-specific). Token VALUES mirror weirsoe-theme.css — keep the two in sync. diff --git a/examples/demo.html b/examples/demo.html index 8630bd8..7da2e40 100644 --- a/examples/demo.html +++ b/examples/demo.html @@ -37,6 +37,17 @@ +
+ + + + + fremhævet + Søg: Ctrl K +
+ +
Slip en fil her
+

Ønske

Et kort med hover-løft.

Liste

Kort-baseret layout.

diff --git a/weirsoe-theme.css b/weirsoe-theme.css index b72b9e0..6ae4970 100644 --- a/weirsoe-theme.css +++ b/weirsoe-theme.css @@ -168,6 +168,18 @@ body::before { .wt-card-title { margin-top: 0.25rem; font-size: 1.125rem; font-weight: 600; letter-spacing: -0.01em; } .wt-card--link:hover .wt-card-title, a.wt-card--hover:hover .wt-card-title { color: var(--color-accent); } .wt-card-desc { margin-top: 0.5rem; font-size: 0.875rem; color: var(--color-muted); } +.wt-card--compact { padding: 0.5rem 0.75rem; border-radius: var(--wt-radius-sm); } +/* flush: content touches the edge (a table or list inside the card) */ +.wt-card--flush { padding: 0; overflow: hidden; } +/* alt: the second voice next to plain cards, e.g. the user's side of a chat */ +.wt-card--alt { background: var(--color-surface-2); } +/* file drop area; add .is-over while a file is dragged over it */ +.wt-dropzone { + border: 1px dashed var(--color-border); border-radius: 1rem; padding: 2rem; text-align: center; + background: color-mix(in srgb, var(--color-surface) 40%, transparent); + transition: border-color 0.2s, background-color 0.2s; +} +.wt-dropzone.is-over { border-color: var(--color-accent); background: color-mix(in srgb, var(--color-accent) 8%, var(--color-surface)); } /* Drag-and-drop sortable lists (paired with weirsoe-ui.js). Mark the container with [data-wt-sortable] + data-order-url; children need [data-item-id]; add a @@ -212,6 +224,18 @@ body::before { .wt-btn:hover { border-color: color-mix(in srgb, var(--color-accent) 50%, var(--color-border)); } .wt-btn--primary { background: var(--color-accent); border-color: transparent; color: var(--color-accent-ink); font-weight: 650; } .wt-btn--primary:hover { filter: brightness(1.08); } +.wt-btn:disabled { opacity: 0.55; cursor: not-allowed; filter: none; } +/* sizes: --sm for filter rows and toolbars, --lg for calls to action (same height as .wt-input--lg) */ +.wt-btn--sm { padding: 0.35rem 0.8rem; font-size: 0.85rem; gap: 0.35rem; } +.wt-btn--lg { padding: 0.625rem 1.25rem; border-radius: var(--wt-radius); } +/* ghost: no fill and muted text until hovered (secondary actions, filter rows) */ +.wt-btn--ghost { background: transparent; color: var(--color-muted); } +.wt-btn--ghost:hover { color: var(--color-text); } +/* toggle state for filter and segment buttons: aria-pressed="true" (or .is-active) */ +.wt-btn[aria-pressed="true"], .wt-btn.is-active { + background: var(--color-surface-2); color: var(--color-text); + border-color: color-mix(in srgb, var(--color-accent) 40%, var(--color-border)); +} .wt-input { background: var(--color-surface-2); border: 1px solid var(--color-border); @@ -221,6 +245,7 @@ body::before { } .wt-input::placeholder { color: color-mix(in srgb, var(--color-muted) 80%, transparent); } .wt-input:focus { outline: none; border-color: var(--color-accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-accent) 25%, transparent); } +.wt-input--lg { padding: 0.625rem 1rem; border-radius: var(--wt-radius); } .wt-tag { display: inline-flex; align-items: center; padding: 0.15rem 0.6rem; border-radius: 999px; @@ -228,6 +253,11 @@ body::before { color: var(--color-text); font-size: 0.8rem; } .wt-muted { color: var(--color-muted); } +/* keyboard key, e.g. a shortcut hint */ +.wt-kbd { + display: inline-block; padding: 0.05rem 0.4rem; border: 1px solid var(--color-border); border-radius: 0.3rem; + background: var(--color-surface-2); color: var(--color-text); font: 0.7rem/1.4 var(--wt-font-mono); +} /* status tags: tinted surface + coloured edge, text stays theme text so it reads in every palette */ .wt-tag--good, .wt-tag--warn, .wt-tag--bad, .wt-tag--accent { --wt-tag-tone: var(--color-accent);