/**
 * agentic.css — Agentic Semantic Web
 * A standalone CSS framework for agent-generated web content.
 *
 * Semantic HTML + data-attributes. Zero classes required.
 * Single file. Builds on Open Props token foundation.
 *
 * Lineage: Open Props (tokens), Pico CSS (semantic HTML patterns),
 *          Charts.css (data-attribute vocabulary pattern).
 * License: MIT
 */

/* ── Open Props: props.colors.css ─────────────────────────────── */
:where(html) {
  --gray-0: #f8f9fa;
  --gray-1: #f1f3f5;
  --gray-2: #e9ecef;
  --gray-3: #dee2e6;
  --gray-4: #ced4da;
  --gray-5: #adb5bd;
  --gray-6: #868e96;
  --gray-7: #495057;
  --gray-8: #343a40;
  --gray-9: #212529;
  --gray-10: #16191d;
  --gray-11: #0d0f12;
  --gray-12: #030507;
  --stone-0: #f8fafb;
  --stone-1: #f2f4f6;
  --stone-2: #ebedef;
  --stone-3: #e0e4e5;
  --stone-4: #d1d6d8;
  --stone-5: #b1b6b9;
  --stone-6: #979b9d;
  --stone-7: #7e8282;
  --stone-8: #666968;
  --stone-9: #50514f;
  --stone-10: #3a3a37;
  --stone-11: #252521;
  --stone-12: #121210;
  --red-0: #fff5f5;
  --red-1: #ffe3e3;
  --red-2: #ffc9c9;
  --red-3: #ffa8a8;
  --red-4: #ff8787;
  --red-5: #ff6b6b;
  --red-6: #fa5252;
  --red-7: #f03e3e;
  --red-8: #e03131;
  --red-9: #c92a2a;
  --red-10: #b02525;
  --red-11: #962020;
  --red-12: #7d1a1a;
  --pink-0: #fff0f6;
  --pink-1: #ffdeeb;
  --pink-2: #fcc2d7;
  --pink-3: #faa2c1;
  --pink-4: #f783ac;
  --pink-5: #f06595;
  --pink-6: #e64980;
  --pink-7: #d6336c;
  --pink-8: #c2255c;
  --pink-9: #a61e4d;
  --pink-10: #8c1941;
  --pink-11: #731536;
  --pink-12: #59102a;
  --purple-0: #f8f0fc;
  --purple-1: #f3d9fa;
  --purple-2: #eebefa;
  --purple-3: #e599f7;
  --purple-4: #da77f2;
  --purple-5: #cc5de8;
  --purple-6: #be4bdb;
  --purple-7: #ae3ec9;
  --purple-8: #9c36b5;
  --purple-9: #862e9c;
  --purple-10: #702682;
  --purple-11: #5a1e69;
  --purple-12: #44174f;
  --violet-0: #f3f0ff;
  --violet-1: #e5dbff;
  --violet-2: #d0bfff;
  --violet-3: #b197fc;
  --violet-4: #9775fa;
  --violet-5: #845ef7;
  --violet-6: #7950f2;
  --violet-7: #7048e8;
  --violet-8: #6741d9;
  --violet-9: #5f3dc4;
  --violet-10: #5235ab;
  --violet-11: #462d91;
  --violet-12: #3a2578;
  --indigo-0: #edf2ff;
  --indigo-1: #dbe4ff;
  --indigo-2: #bac8ff;
  --indigo-3: #91a7ff;
  --indigo-4: #748ffc;
  --indigo-5: #5c7cfa;
  --indigo-6: #4c6ef5;
  --indigo-7: #4263eb;
  --indigo-8: #3b5bdb;
  --indigo-9: #364fc7;
  --indigo-10: #2f44ad;
  --indigo-11: #283a94;
  --indigo-12: #21307a;
  --blue-0: #e7f5ff;
  --blue-1: #d0ebff;
  --blue-2: #a5d8ff;
  --blue-3: #74c0fc;
  --blue-4: #4dabf7;
  --blue-5: #339af0;
  --blue-6: #228be6;
  --blue-7: #1c7ed6;
  --blue-8: #1971c2;
  --blue-9: #1864ab;
  --blue-10: #145591;
  --blue-11: #114678;
  --blue-12: #0d375e;
  --cyan-0: #e3fafc;
  --cyan-1: #c5f6fa;
  --cyan-2: #99e9f2;
  --cyan-3: #66d9e8;
  --cyan-4: #3bc9db;
  --cyan-5: #22b8cf;
  --cyan-6: #15aabf;
  --cyan-7: #1098ad;
  --cyan-8: #0c8599;
  --cyan-9: #0b7285;
  --cyan-10: #095c6b;
  --cyan-11: #074652;
  --cyan-12: #053038;
  --teal-0: #e6fcf5;
  --teal-1: #c3fae8;
  --teal-2: #96f2d7;
  --teal-3: #63e6be;
  --teal-4: #38d9a9;
  --teal-5: #20c997;
  --teal-6: #12b886;
  --teal-7: #0ca678;
  --teal-8: #099268;
  --teal-9: #087f5b;
  --teal-10: #066649;
  --teal-11: #054d37;
  --teal-12: #033325;
  --green-0: #ebfbee;
  --green-1: #d3f9d8;
  --green-2: #b2f2bb;
  --green-3: #8ce99a;
  --green-4: #69db7c;
  --green-5: #51cf66;
  --green-6: #40c057;
  --green-7: #37b24d;
  --green-8: #2f9e44;
  --green-9: #2b8a3e;
  --green-10: #237032;
  --green-11: #1b5727;
  --green-12: #133d1b;
  --lime-0: #f4fce3;
  --lime-1: #e9fac8;
  --lime-2: #d8f5a2;
  --lime-3: #c0eb75;
  --lime-4: #a9e34b;
  --lime-5: #94d82d;
  --lime-6: #82c91e;
  --lime-7: #74b816;
  --lime-8: #66a80f;
  --lime-9: #5c940d;
  --lime-10: #4c7a0b;
  --lime-11: #3c6109;
  --lime-12: #2c4706;
  --yellow-0: #fff9db;
  --yellow-1: #fff3bf;
  --yellow-2: #ffec99;
  --yellow-3: #ffe066;
  --yellow-4: #ffd43b;
  --yellow-5: #fcc419;
  --yellow-6: #fab005;
  --yellow-7: #f59f00;
  --yellow-8: #f08c00;
  --yellow-9: #e67700;
  --yellow-10: #b35c00;
  --yellow-11: #804200;
  --yellow-12: #663500;
  --orange-0: #fff4e6;
  --orange-1: #ffe8cc;
  --orange-2: #ffd8a8;
  --orange-3: #ffc078;
  --orange-4: #ffa94d;
  --orange-5: #ff922b;
  --orange-6: #fd7e14;
  --orange-7: #f76707;
  --orange-8: #e8590c;
  --orange-9: #d9480f;
  --orange-10: #bf400d;
  --orange-11: #99330b;
  --orange-12: #802b09;
  --choco-0: #fff8dc;
  --choco-1: #fce1bc;
  --choco-2: #f7ca9e;
  --choco-3: #f1b280;
  --choco-4: #e99b62;
  --choco-5: #df8545;
  --choco-6: #d46e25;
  --choco-7: #bd5f1b;
  --choco-8: #a45117;
  --choco-9: #8a4513;
  --choco-10: #703a13;
  --choco-11: #572f12;
  --choco-12: #3d210d;
  --brown-0: #faf4eb;
  --brown-1: #ede0d1;
  --brown-2: #e0cab7;
  --brown-3: #d3b79e;
  --brown-4: #c5a285;
  --brown-5: #b78f6d;
  --brown-6: #a87c56;
  --brown-7: #956b47;
  --brown-8: #825b3a;
  --brown-9: #6f4b2d;
  --brown-10: #5e3a21;
  --brown-11: #4e2b15;
  --brown-12: #422412;
  --sand-0: #f8fafb;
  --sand-1: #e6e4dc;
  --sand-2: #d5cfbd;
  --sand-3: #c2b9a0;
  --sand-4: #aea58c;
  --sand-5: #9a9178;
  --sand-6: #867c65;
  --sand-7: #736a53;
  --sand-8: #5f5746;
  --sand-9: #4b4639;
  --sand-10: #38352d;
  --sand-11: #252521;
  --sand-12: #121210;
  --camo-0: #f9fbe7;
  --camo-1: #e8ed9c;
  --camo-2: #d2df4e;
  --camo-3: #c2ce34;
  --camo-4: #b5bb2e;
  --camo-5: #a7a827;
  --camo-6: #999621;
  --camo-7: #8c851c;
  --camo-8: #7e7416;
  --camo-9: #6d6414;
  --camo-10: #5d5411;
  --camo-11: #4d460e;
  --camo-12: #36300a;
  --jungle-0: #ecfeb0;
  --jungle-1: #def39a;
  --jungle-2: #d0e884;
  --jungle-3: #c2dd6e;
  --jungle-4: #b5d15b;
  --jungle-5: #a8c648;
  --jungle-6: #9bbb36;
  --jungle-7: #8fb024;
  --jungle-8: #84a513;
  --jungle-9: #7a9908;
  --jungle-10: #658006;
  --jungle-11: #516605;
  --jungle-12: #3d4d04;
}

/* ── Open Props: props.gray-oklch.css ─────────────────────────────── */
:where(*) {
  --gray-0: oklch(99% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-1: oklch(95% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-2: oklch(88% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-3: oklch(80% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-4: oklch(74% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-5: oklch(68% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-6: oklch(63% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-7: oklch(58% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-8: oklch(53% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-9: oklch(49% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-10: oklch(43% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-11: oklch(37% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-12: oklch(31% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-13: oklch(25% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-14: oklch(18% var(--gray-chroma, none) var(--gray-hue, none));
  --gray-15: oklch(10% var(--gray-chroma, none) var(--gray-hue, none));
}

/* ── Open Props: props.sizes.css ─────────────────────────────── */
:where(html) {
  --size-000: -.5rem;
  --size-00: -.25rem;
  --size-1: .25rem;
  --size-2: .5rem;
  --size-3: 1rem;
  --size-4: 1.25rem;
  --size-5: 1.5rem;
  --size-6: 1.75rem;
  --size-7: 2rem;
  --size-8: 3rem;
  --size-9: 4rem;
  --size-10: 5rem;
  --size-11: 7.5rem;
  --size-12: 10rem;
  --size-13: 15rem;
  --size-14: 20rem;
  --size-15: 30rem;
  --size-px-000: -8px;
  --size-px-00: -4px;
  --size-px-1: 4px;
  --size-px-2: 8px;
  --size-px-3: 16px;
  --size-px-4: 20px;
  --size-px-5: 24px;
  --size-px-6: 28px;
  --size-px-7: 32px;
  --size-px-8: 48px;
  --size-px-9: 64px;
  --size-px-10: 80px;
  --size-px-11: 120px;
  --size-px-12: 160px;
  --size-px-13: 240px;
  --size-px-14: 320px;
  --size-px-15: 480px;
  --size-fluid-1: clamp(.5rem, 1vw, 1rem);
  --size-fluid-2: clamp(1rem, 2vw, 1.5rem);
  --size-fluid-3: clamp(1.5rem, 3vw, 2rem);
  --size-fluid-4: clamp(2rem, 4vw, 3rem);
  --size-fluid-5: clamp(4rem, 5vw, 5rem);
  --size-fluid-6: clamp(5rem, 7vw, 7.5rem);
  --size-fluid-7: clamp(7.5rem, 10vw, 10rem);
  --size-fluid-8: clamp(10rem, 20vw, 15rem);
  --size-fluid-9: clamp(15rem, 30vw, 20rem);
  --size-fluid-10: clamp(20rem, 40vw, 30rem);
  --size-content-1: 20ch;
  --size-content-2: 45ch;
  --size-content-3: 60ch;
  --size-header-1: 20ch;
  --size-header-2: 25ch;
  --size-header-3: 35ch;
  --size-xxs: 240px;
  --size-xs: 360px;
  --size-sm: 480px;
  --size-md: 768px;
  --size-lg: 1024px;
  --size-xl: 1440px;
  --size-xxl: 1920px;
  --size-relative-000: -.5ch;
  --size-relative-00: -.25ch;
  --size-relative-1: .25ch;
  --size-relative-2: .5ch;
  --size-relative-3: 1ch;
  --size-relative-4: 1.25ch;
  --size-relative-5: 1.5ch;
  --size-relative-6: 1.75ch;
  --size-relative-7: 2ch;
  --size-relative-8: 3ch;
  --size-relative-9: 4ch;
  --size-relative-10: 5ch;
  --size-relative-11: 7.5ch;
  --size-relative-12: 10ch;
  --size-relative-13: 15ch;
  --size-relative-14: 20ch;
  --size-relative-15: 30ch;
}

/* ── Open Props: props.fonts.css ─────────────────────────────── */
:where(html) {
  --font-system-ui: system-ui, sans-serif;
  --font-transitional: Charter, Bitstream Charter, Sitka Text, Cambria, serif;
  --font-old-style: Iowan Old Style, Palatino Linotype, URW Palladio L, P052, serif;
  --font-humanist: Seravek, Gill Sans Nova, Ubuntu, Calibri, DejaVu Sans, source-sans-pro, sans-serif;
  --font-geometric-humanist: Avenir, Montserrat, Corbel, URW Gothic, source-sans-pro, sans-serif;
  --font-classical-humanist: Optima, Candara, Noto Sans, source-sans-pro, sans-serif;
  --font-neo-grotesque: Inter, Roboto, Helvetica Neue, Arial Nova, Nimbus Sans, Arial, sans-serif;
  --font-monospace-slab-serif: Nimbus Mono PS, Courier New, monospace;
  --font-monospace-code: Dank Mono,Operator Mono, Inconsolata, Fira Mono, ui-monospace, SF Mono, Monaco, Droid Sans Mono, Source Code Pro, Cascadia Code, Menlo, Consolas, DejaVu Sans Mono, monospace;
  --font-industrial: Bahnschrift, DIN Alternate, Franklin Gothic Medium, Nimbus Sans Narrow, sans-serif-condensed, sans-serif;
  --font-rounded-sans: ui-rounded, Hiragino Maru Gothic ProN, Quicksand, Comfortaa, Manjari, Arial Rounded MT, Arial Rounded MT Bold, Calibri, source-sans-pro, sans-serif;
  --font-slab-serif: Rockwell, Rockwell Nova, Roboto Slab, DejaVu Serif, Sitka Small, serif;
  --font-antique: Superclarendon, Bookman Old Style, URW Bookman, URW Bookman L, Georgia Pro, Georgia, serif;
  --font-didone: Didot, Bodoni MT, Noto Serif Display, URW Palladio L, P052, Sylfaen, serif;
  --font-handwritten: Segoe Print, Bradley Hand, Chilanka, TSCu_Comic, casual, cursive;
  --font-sans: var(--font-system-ui);
  --font-serif: ui-serif, serif;
  --font-mono: var(--font-monospace-code);
  --font-weight-1: 100;
  --font-weight-2: 200;
  --font-weight-3: 300;
  --font-weight-4: 400;
  --font-weight-5: 500;
  --font-weight-6: 600;
  --font-weight-7: 700;
  --font-weight-8: 800;
  --font-weight-9: 900;
  --font-lineheight-00: .95;
  --font-lineheight-0: 1.1;
  --font-lineheight-1: 1.25;
  --font-lineheight-2: 1.375;
  --font-lineheight-3: 1.5;
  --font-lineheight-4: 1.75;
  --font-lineheight-5: 2;
  --font-letterspacing-0: -.05em;
  --font-letterspacing-1: .025em;
  --font-letterspacing-2: .050em;
  --font-letterspacing-3: .075em;
  --font-letterspacing-4: .150em;
  --font-letterspacing-5: .500em;
  --font-letterspacing-6: .750em;
  --font-letterspacing-7: 1em;
  --font-size-00: .5rem;
  --font-size-0: .75rem;
  --font-size-1: 1rem;
  --font-size-2: 1.1rem;
  --font-size-3: 1.25rem;
  --font-size-4: 1.5rem;
  --font-size-5: 2rem;
  --font-size-6: 2.5rem;
  --font-size-7: 3rem;
  --font-size-8: 3.5rem;
  --font-size-fluid-0: clamp(.75rem, 2vw, 1rem);
  --font-size-fluid-1: clamp(1rem, 4vw, 1.5rem);
  --font-size-fluid-2: clamp(1.5rem, 6vw, 2.5rem);
  --font-size-fluid-3: clamp(2rem, 9vw, 3.5rem);
}

/* ── Open Props: props.borders.css ─────────────────────────────── */
:where(html) {
  --border-size-1: 1px;
  --border-size-2: 2px;
  --border-size-3: 5px;
  --border-size-4: 10px;
  --border-size-5: 25px;
  --radius-1: 2px;
  --radius-2: 5px;
  --radius-3: 1rem;
  --radius-4: 2rem;
  --radius-5: 4rem;
  --radius-6: 8rem;
  --radius-drawn-1: 255px 15px 225px 15px / 15px 225px 15px 255px;
  --radius-drawn-2: 125px 10px 20px 185px / 25px 205px 205px 25px;
  --radius-drawn-3: 15px 255px 15px 225px / 225px 15px 255px 15px;
  --radius-drawn-4: 15px 25px 155px 25px / 225px 150px 25px 115px;
  --radius-drawn-5: 250px 25px 15px 20px / 15px 80px 105px 115px;
  --radius-drawn-6: 28px 100px 20px 15px / 150px 30px 205px 225px;
  --radius-round: 1e5px;
  --radius-blob-1: 30% 70% 70% 30% / 53% 30% 70% 47%;
  --radius-blob-2: 53% 47% 34% 66% / 63% 46% 54% 37%;
  --radius-blob-3: 37% 63% 56% 44% / 49% 56% 44% 51%;
  --radius-blob-4: 63% 37% 37% 63% / 43% 37% 63% 57%;
  --radius-blob-5: 49% 51% 48% 52% / 57% 44% 56% 43%;
  --radius-conditional-1: clamp(0px, calc(100vw - 100%) * 1e5, var(--radius-1));
  --radius-conditional-2: clamp(0px, calc(100vw - 100%) * 1e5, var(--radius-2));
  --radius-conditional-3: clamp(0px, calc(100vw - 100%) * 1e5, var(--radius-3));
  --radius-conditional-4: clamp(0px, calc(100vw - 100%) * 1e5, var(--radius-4));
  --radius-conditional-5: clamp(0px, calc(100vw - 100%) * 1e5, var(--radius-5));
  --radius-conditional-6: clamp(0px, calc(100vw - 100%) * 1e5, var(--radius-6));
}

/* ── Open Props: props.shadows.css ─────────────────────────────── */
@import 'props.media.css';

:where(html) {
  --shadow-color: 220 3% 15%;
  --shadow-strength: 1%;
  --shadow-strength-3: calc(var(--shadow-strength) + 2%);
  --shadow-strength-4: calc(var(--shadow-strength) + 3%);
  --shadow-strength-5: calc(var(--shadow-strength) + 4%);
  --shadow-strength-6: calc(var(--shadow-strength) + 5%);
  --shadow-strength-7: calc(var(--shadow-strength) + 6%);
  --shadow-strength-8: calc(var(--shadow-strength) + 7%);
  --shadow-strength-10: calc(var(--shadow-strength) + 9%);
  --inner-shadow-highlight: inset 0 -.5px 0 0 #fff, inset 0 .5px 0 0 #0001;
  --shadow-1: 0 1px 2px -1px hsl(var(--shadow-color) / var(--shadow-strength-10));
  --shadow-2: 
    0 3px 5px -2px hsl(var(--shadow-color) / var(--shadow-strength-4)),
    0 7px 14px -5px hsl(var(--shadow-color) / var(--shadow-strength-6));
  --shadow-3: 
    0 -1px 3px 0 hsl(var(--shadow-color) / var(--shadow-strength-3)),
    0 1px 2px -5px hsl(var(--shadow-color) / var(--shadow-strength-3)),
    0 2px 5px -5px hsl(var(--shadow-color) / var(--shadow-strength-5)),
    0 4px 12px -5px hsl(var(--shadow-color) / var(--shadow-strength-6)),
    0 12px 15px -5px hsl(var(--shadow-color) / var(--shadow-strength-8));
  --shadow-4: 
    0 -2px 5px 0 hsl(var(--shadow-color) / var(--shadow-strength-3)),
    0 1px 1px -2px hsl(var(--shadow-color) / var(--shadow-strength-4)),
    0 2px 2px -2px hsl(var(--shadow-color) / var(--shadow-strength-4)),
    0 5px 5px -2px hsl(var(--shadow-color) / var(--shadow-strength-5)),
    0 9px 9px -2px hsl(var(--shadow-color) / var(--shadow-strength-6)),
    0 16px 16px -2px hsl(var(--shadow-color) / var(--shadow-strength-7));
  --shadow-5: 
    0 -1px 2px 0 hsl(var(--shadow-color) / var(--shadow-strength-3)),
    0 2px 1px -2px hsl(var(--shadow-color) / var(--shadow-strength-4)),
    0 5px 5px -2px hsl(var(--shadow-color) / var(--shadow-strength-4)),
    0 10px 10px -2px hsl(var(--shadow-color) / var(--shadow-strength-5)),
    0 20px 20px -2px hsl(var(--shadow-color) / var(--shadow-strength-6)),
    0 40px 40px -2px hsl(var(--shadow-color) / var(--shadow-strength-8));
  --shadow-6: 
    0 -1px 2px 0 hsl(var(--shadow-color) / var(--shadow-strength-3)),
    0 3px 2px -2px hsl(var(--shadow-color) / var(--shadow-strength-4)),
    0 7px 5px -2px hsl(var(--shadow-color) / var(--shadow-strength-4)),
    0 12px 10px -2px hsl(var(--shadow-color) / var(--shadow-strength-5)),
    0 22px 18px -2px hsl(var(--shadow-color) / var(--shadow-strength-6)),
    0 41px 33px -2px hsl(var(--shadow-color) / var(--shadow-strength-7)),
    0 100px 80px -2px hsl(var(--shadow-color) / var(--shadow-strength-8));
  --inner-shadow-0: inset 0 0 0 1px hsl(var(--shadow-color) / var(--shadow-strength-10));
  --inner-shadow-1: inset 0 1px 2px 0 hsl(var(--shadow-color) / var(--shadow-strength-10)), var(--inner-shadow-highlight);
  --inner-shadow-2: inset 0 1px 4px 0 hsl(var(--shadow-color) / var(--shadow-strength-10)), var(--inner-shadow-highlight);
  --inner-shadow-3: inset 0 2px 8px 0 hsl(var(--shadow-color) / var(--shadow-strength-10)), var(--inner-shadow-highlight);
  --inner-shadow-4: inset 0 2px 14px 0 hsl(var(--shadow-color) / var(--shadow-strength-10)), var(--inner-shadow-highlight);
}

@media (--OSdark) {
  :where(html) {
    --shadow-color: 220 40% 2%;
    --shadow-strength: 25%;
    --inner-shadow-highlight: inset 0 -.5px 0 0 #fff1, inset 0 .5px 0 0 #0007;
  }
}
/* ── Open Props: props.easing.css ─────────────────────────────── */
:where(html) {
  --ease-1: cubic-bezier(.25, 0, .5, 1);
  --ease-2: cubic-bezier(.25, 0, .4, 1);
  --ease-3: cubic-bezier(.25, 0, .3, 1);
  --ease-4: cubic-bezier(.25, 0, .2, 1);
  --ease-5: cubic-bezier(.25, 0, .1, 1);
  --ease-in-1: cubic-bezier(.25, 0, 1, 1);
  --ease-in-2: cubic-bezier(.50, 0, 1, 1);
  --ease-in-3: cubic-bezier(.70, 0, 1, 1);
  --ease-in-4: cubic-bezier(.90, 0, 1, 1);
  --ease-in-5: cubic-bezier(1, 0, 1, 1);
  --ease-out-1: cubic-bezier(0, 0, .75, 1);
  --ease-out-2: cubic-bezier(0, 0, .50, 1);
  --ease-out-3: cubic-bezier(0, 0, .3, 1);
  --ease-out-4: cubic-bezier(0, 0, .1, 1);
  --ease-out-5: cubic-bezier(0, 0, 0, 1);
  --ease-in-out-1: cubic-bezier(.1, 0, .9, 1);
  --ease-in-out-2: cubic-bezier(.3, 0, .7, 1);
  --ease-in-out-3: cubic-bezier(.5, 0, .5, 1);
  --ease-in-out-4: cubic-bezier(.7, 0, .3, 1);
  --ease-in-out-5: cubic-bezier(.9, 0, .1, 1);
  --ease-elastic-out-1: cubic-bezier(.5, .75, .75, 1.25);
  --ease-elastic-out-2: cubic-bezier(.5, 1, .75, 1.25);
  --ease-elastic-out-3: cubic-bezier(.5, 1.25, .75, 1.25);
  --ease-elastic-out-4: cubic-bezier(.5, 1.5, .75, 1.25);
  --ease-elastic-out-5: cubic-bezier(.5, 1.75, .75, 1.25);
  --ease-elastic-in-1: cubic-bezier(.5, -0.25, .75, 1);
  --ease-elastic-in-2: cubic-bezier(.5, -0.50, .75, 1);
  --ease-elastic-in-3: cubic-bezier(.5, -0.75, .75, 1);
  --ease-elastic-in-4: cubic-bezier(.5, -1.00, .75, 1);
  --ease-elastic-in-5: cubic-bezier(.5, -1.25, .75, 1);
  --ease-elastic-in-out-1: cubic-bezier(.5, -.1, .1, 1.5);
  --ease-elastic-in-out-2: cubic-bezier(.5, -.3, .1, 1.5);
  --ease-elastic-in-out-3: cubic-bezier(.5, -.5, .1, 1.5);
  --ease-elastic-in-out-4: cubic-bezier(.5, -.7, .1, 1.5);
  --ease-elastic-in-out-5: cubic-bezier(.5, -.9, .1, 1.5);
  --ease-step-1: steps(2);
  --ease-step-2: steps(3);
  --ease-step-3: steps(4);
  --ease-step-4: steps(7);
  --ease-step-5: steps(10);
  --ease-elastic-1: var(--ease-elastic-out-1);
  --ease-elastic-2: var(--ease-elastic-out-2);
  --ease-elastic-3: var(--ease-elastic-out-3);
  --ease-elastic-4: var(--ease-elastic-out-4);
  --ease-elastic-5: var(--ease-elastic-out-5);
  --ease-squish-1: var(--ease-elastic-in-out-1);
  --ease-squish-2: var(--ease-elastic-in-out-2);
  --ease-squish-3: var(--ease-elastic-in-out-3);
  --ease-squish-4: var(--ease-elastic-in-out-4);
  --ease-squish-5: var(--ease-elastic-in-out-5);
  --ease-spring-1: linear(
    0, 0.006, 0.025 2.8%, 0.101 6.1%, 0.539 18.9%, 0.721 25.3%, 0.849 31.5%,
    0.937 38.1%, 0.968 41.8%, 0.991 45.7%, 1.006 50.1%, 1.015 55%, 1.017 63.9%,
    1.001
  );
  --ease-spring-2: linear(
    0, 0.007, 0.029 2.2%, 0.118 4.7%, 0.625 14.4%, 0.826 19%, 0.902, 0.962,
    1.008 26.1%, 1.041 28.7%, 1.064 32.1%, 1.07 36%, 1.061 40.5%, 1.015 53.4%,
    0.999 61.6%, 0.995 71.2%, 1
  );
  --ease-spring-3: linear(
    0, 0.009, 0.035 2.1%, 0.141 4.4%, 0.723 12.9%, 0.938 16.7%, 1.017, 1.077,
    1.121, 1.149 24.3%, 1.159, 1.163, 1.161, 1.154 29.9%, 1.129 32.8%,
    1.051 39.6%, 1.017 43.1%, 0.991, 0.977 51%, 0.974 53.8%, 0.975 57.1%,
    0.997 69.8%, 1.003 76.9%, 1
  );
  --ease-spring-4: linear(
    0, 0.009, 0.037 1.7%, 0.153 3.6%, 0.776 10.3%, 1.001, 1.142 16%, 1.185,
    1.209 19%, 1.215 19.9% 20.8%, 1.199, 1.165 25%, 1.056 30.3%, 1.008 33%, 0.973,
    0.955 39.2%, 0.953 41.1%, 0.957 43.3%, 0.998 53.3%, 1.009 59.1% 63.7%,
    0.998 78.9%, 1
  );
  --ease-spring-5: linear(
    0, 0.01, 0.04 1.6%, 0.161 3.3%, 0.816 9.4%, 1.046, 1.189 14.4%, 1.231,
    1.254 17%, 1.259, 1.257 18.6%, 1.236, 1.194 22.3%, 1.057 27%, 0.999 29.4%,
    0.955 32.1%, 0.942, 0.935 34.9%, 0.933, 0.939 38.4%, 1 47.3%, 1.011,
    1.017 52.6%, 1.016 56.4%, 1 65.2%, 0.996 70.2%, 1.001 87.2%, 1
  );
  --ease-bounce-1: linear(
    0, 0.004, 0.016, 0.035, 0.063, 0.098, 0.141, 0.191, 0.25, 0.316, 0.391 36.8%,
    0.563, 0.766, 1 58.8%, 0.946, 0.908 69.1%, 0.895, 0.885, 0.879, 0.878, 0.879,
    0.885, 0.895, 0.908 89.7%, 0.946, 1
  );
  --ease-bounce-2: linear(
    0, 0.004, 0.016, 0.035, 0.063, 0.098, 0.141 15.1%, 0.25, 0.391, 0.562, 0.765,
    1, 0.892 45.2%, 0.849, 0.815, 0.788, 0.769, 0.757, 0.753, 0.757, 0.769, 0.788,
    0.815, 0.85, 0.892 75.2%, 1 80.2%, 0.973, 0.954, 0.943, 0.939, 0.943, 0.954,
    0.973, 1
  );
  --ease-bounce-3: linear(
    0, 0.004, 0.016, 0.035, 0.062, 0.098, 0.141 11.4%, 0.25, 0.39, 0.562, 0.764,
    1 30.3%, 0.847 34.8%, 0.787, 0.737, 0.699, 0.672, 0.655, 0.65, 0.656, 0.672,
    0.699, 0.738, 0.787, 0.847 61.7%, 1 66.2%, 0.946, 0.908, 0.885 74.2%, 0.879,
    0.878, 0.879, 0.885 79.5%, 0.908, 0.946, 1 87.4%, 0.981, 0.968, 0.96, 0.957,
    0.96, 0.968, 0.981, 1
  );
  --ease-bounce-4: linear(
    0, 0.004, 0.016 3%, 0.062, 0.141, 0.25, 0.391, 0.562 18.2%, 1 24.3%, 0.81,
    0.676 32.3%, 0.629, 0.595, 0.575, 0.568, 0.575, 0.595, 0.629, 0.676 48.2%,
    0.811, 1 56.2%, 0.918, 0.86, 0.825, 0.814, 0.825, 0.86, 0.918, 1 77.2%,
    0.94 80.6%, 0.925, 0.92, 0.925, 0.94 87.5%, 1 90.9%, 0.974, 0.965, 0.974, 1
  );
  --ease-bounce-5: linear(
    0, 0.004, 0.016 2.5%, 0.063, 0.141, 0.25 10.1%, 0.562, 1 20.2%, 0.783, 0.627,
    0.534 30.9%, 0.511, 0.503, 0.511, 0.534 38%, 0.627, 0.782, 1 48.7%, 0.892,
    0.815, 0.769 56.3%, 0.757, 0.753, 0.757, 0.769 61.3%, 0.815, 0.892, 1 68.8%,
    0.908 72.4%, 0.885, 0.878, 0.885, 0.908 79.4%, 1 83%, 0.954 85.5%, 0.943,
    0.939, 0.943, 0.954 90.5%, 1 93%, 0.977, 0.97, 0.977, 1
  );
  --ease-circ-in: cubic-bezier(.6,.04,.98,.335);
  --ease-circ-in-out: cubic-bezier(.785,.135,.15,.86);
  --ease-circ-out: cubic-bezier(.075,.82,.165,1);
  --ease-cubic-in: cubic-bezier(.55,.055,.675,.19);
  --ease-cubic-in-out: cubic-bezier(.645,.045,.355,1);
  --ease-cubic-out: cubic-bezier(.215,.61,.355,1);
  --ease-expo-in: cubic-bezier(.95,.05,.795,.035);
  --ease-expo-in-out: cubic-bezier(1,0,0,1);
  --ease-expo-out: cubic-bezier(.19,1,.22,1);
  --ease-quad-in: cubic-bezier(.55,.085,.68,.53);
  --ease-quad-in-out: cubic-bezier(.455,.03,.515,.955);
  --ease-quad-out: cubic-bezier(.25,.46,.45,.94);
  --ease-quart-in: cubic-bezier(.895,.03,.685,.22);
  --ease-quart-in-out: cubic-bezier(.77,0,.175,1);
  --ease-quart-out: cubic-bezier(.165,.84,.44,1);
  --ease-quint-in: cubic-bezier(.755,.05,.855,.06);
  --ease-quint-in-out: cubic-bezier(.86,0,.07,1);
  --ease-quint-out: cubic-bezier(.23,1,.32,1);
  --ease-sine-in: cubic-bezier(.47,0,.745,.715);
  --ease-sine-in-out: cubic-bezier(.445,.05,.55,.95);
  --ease-sine-out: cubic-bezier(.39,.575,.565,1);
}

/* ── Open Props: props.animations.css ─────────────────────────────── */
@import 'props.media.css';

:where(html) {
  --animation-fade-in: fade-in .5s var(--ease-3);
  --animation-fade-in-bloom: fade-in-bloom 2s var(--ease-3);
  --animation-fade-out: fade-out .5s var(--ease-3);
  --animation-fade-out-bloom: fade-out-bloom 2s var(--ease-3);
  --animation-scale-up: scale-up .5s var(--ease-3);
  --animation-scale-down: scale-down .5s var(--ease-3);
  --animation-slide-out-up: slide-out-up .5s var(--ease-3);
  --animation-slide-out-down: slide-out-down .5s var(--ease-3);
  --animation-slide-out-right: slide-out-right .5s var(--ease-3);
  --animation-slide-out-left: slide-out-left .5s var(--ease-3);
  --animation-slide-in-up: slide-in-up .5s var(--ease-3);
  --animation-slide-in-down: slide-in-down .5s var(--ease-3);
  --animation-slide-in-right: slide-in-right .5s var(--ease-3);
  --animation-slide-in-left: slide-in-left .5s var(--ease-3);
  --animation-shake-x: shake-x .75s var(--ease-out-5);
  --animation-shake-y: shake-y .75s var(--ease-out-5);
  --animation-shake-z: shake-z 1s var(--ease-in-out-3);
  --animation-spin: spin 2s linear infinite;
  --animation-ping: ping 5s var(--ease-out-3) infinite;
  --animation-blink: blink 1s var(--ease-out-3) infinite;
  --animation-float: float 3s var(--ease-in-out-3) infinite;
  --animation-bounce: bounce 2s var(--ease-squish-2) infinite;
  --animation-pulse: pulse 2s var(--ease-out-3) infinite;
}

@keyframes fade-in {
  to { opacity: 1 }
}
@keyframes fade-in-bloom {
  0% { opacity: 0; filter: brightness(1) blur(20px) }
 10% { opacity: 1; filter: brightness(2) blur(10px) }
100% { opacity: 1; filter: brightness(1) blur(0) }
}
@keyframes fade-out {
  to { opacity: 0 }
}
@keyframes fade-out-bloom {
100% { opacity: 0; filter: brightness(1) blur(20px) }
 10% { opacity: 1; filter: brightness(2) blur(10px) }
  0% { opacity: 1; filter: brightness(1) blur(0) }
}
@keyframes scale-up {
  to { transform: scale(1.25) }
}
@keyframes scale-down {
  to { transform: scale(.75) }
}
@keyframes slide-out-up {
  to { transform: translateY(-100%) }
}
@keyframes slide-out-down {
  to { transform: translateY(100%) }
}
@keyframes slide-out-right {
  to { transform: translateX(100%) }
}
@keyframes slide-out-left {
  to { transform: translateX(-100%) }
}
@keyframes slide-in-up {
  from { transform: translateY(100%) }
}
@keyframes slide-in-down {
  from { transform: translateY(-100%) }
}
@keyframes slide-in-right {
  from { transform: translateX(-100%) }
}
@keyframes slide-in-left {
  from { transform: translateX(100%) }
}
@keyframes shake-x {
  0%, 100% { transform: translateX(0%) }
  20% { transform: translateX(-5%) }
  40% { transform: translateX(5%) }
  60% { transform: translateX(-5%) }
  80% { transform: translateX(5%) }
}
@keyframes shake-y {
  0%, 100% { transform: translateY(0%) }
  20% { transform: translateY(-5%) }
  40% { transform: translateY(5%) }
  60% { transform: translateY(-5%) }
  80% { transform: translateY(5%) }
}
@keyframes shake-z {
  0%, 100% { transform: rotate(0deg) }
  20% { transform: rotate(-2deg) }
  40% { transform: rotate(2deg) }
  60% { transform: rotate(-2deg) }
  80% { transform: rotate(2deg) }
}
@keyframes spin {
  to { transform: rotate(1turn) }
}
@keyframes ping {
  90%, 100% {
    transform: scale(2);
    opacity: 0;
  }
}
@keyframes blink {
  0%, 100% {
    opacity: 1
  }
  50% {
    opacity: .5
  }
}
@keyframes float {
  50% { transform: translateY(-25%) }
}
@keyframes bounce {
  25% { transform: translateY(-20%) }
  40% { transform: translateY(-3%) }
  0%, 60%, 100% { transform: translateY(0) }
}
@keyframes pulse {
  50% { transform: scale(.9,.9) }
}
@media (--OSdark) {
  @keyframes fade-in-bloom {
    0% { opacity: 0; filter: brightness(1) blur(20px) }
   10% { opacity: 1; filter: brightness(0.5) blur(10px) }
  100% { opacity: 1; filter: brightness(1) blur(0) }
  }
}
@media (--OSdark) {
  @keyframes fade-out-bloom {
  100% { opacity: 0; filter: brightness(1) blur(20px) }
   10% { opacity: 1; filter: brightness(0.5) blur(10px) }
    0% { opacity: 1; filter: brightness(1) blur(0) }
  }
}
/* ── Open Props: props.gradients.css ─────────────────────────────── */
:where(html) {
  --gradient-space: ;
  --gradient-1: linear-gradient(to bottom right var(--gradient-space), #1f005c, #5b0060, #870160, #ac255e, #ca485c, #e16b5c, #f39060, #ffb56b);
  --gradient-2: linear-gradient(to bottom right var(--gradient-space), #48005c, #8300e2, #a269ff);
  --gradient-3: 
    radial-gradient(
      circle at top right var(--gradient-space), 
      hsl(180 100% 50%), hsl(180 100% 50% / 0%)
    ),
    radial-gradient(
      circle at bottom left var(--gradient-space), 
      hsl(328 100% 54%), hsl(328 100% 54% / 0%)
    );
  --gradient-4: linear-gradient(to bottom right var(--gradient-space), #00F5A0, #00D9F5);
  --gradient-5: conic-gradient(from -270deg at 75% 110% var(--gradient-space), fuchsia, floralwhite);
  --gradient-6: conic-gradient(from -90deg at top left var(--gradient-space), black, white);
  --gradient-7: linear-gradient(to bottom right var(--gradient-space), #72C6EF, #004E8F);
  --gradient-8: conic-gradient(from 90deg at 50% 0% var(--gradient-space), #111, 50%, #222, #111);
  --gradient-9: conic-gradient(from .5turn at bottom center var(--gradient-space), lightblue, white);
  --gradient-10: conic-gradient(from 90deg at 40% -25% var(--gradient-space), #ffd700, #f79d03, #ee6907, #e6390a, #de0d0d, #d61039, #cf1261, #c71585, #cf1261, #d61039, #de0d0d, #ee6907, #f79d03, #ffd700, #ffd700, #ffd700);
  --gradient-11: conic-gradient(at bottom left var(--gradient-space), deeppink, cyan);
  --gradient-12: conic-gradient(from 90deg at 25% -10% var(--gradient-space), #ff4500, #d3f340, #7bee85, #afeeee, #7bee85);
  --gradient-13: radial-gradient(circle at 50% 200% var(--gradient-space), #000142, #3b0083, #b300c3, #ff059f, #ff4661, #ffad86, #fff3c7);
  --gradient-14: conic-gradient(at top right var(--gradient-space), lime, cyan);
  --gradient-15: linear-gradient(to bottom right var(--gradient-space), #c7d2fe, #fecaca, #fef3c7);
  --gradient-16: radial-gradient(circle at 50% -250% var(--gradient-space), #374151, #111827, #000);
  --gradient-17: conic-gradient(from -90deg at 50% -25% var(--gradient-space), blue, blueviolet);
  --gradient-18: 
    linear-gradient(0deg var(--gradient-space),   hsla(0   100% 50% / 80%), hsla(0   100% 50% / 0) 75%),
    linear-gradient(60deg var(--gradient-space),  hsla(60  100% 50% / 80%), hsla(60  100% 50% / 0) 75%),
    linear-gradient(120deg var(--gradient-space), hsla(120 100% 50% / 80%), hsla(120 100% 50% / 0) 75%),
    linear-gradient(180deg var(--gradient-space), hsla(180 100% 50% / 80%), hsla(180 100% 50% / 0) 75%),
    linear-gradient(240deg var(--gradient-space), hsla(240 100% 50% / 80%), hsla(240 100% 50% / 0) 75%),
    linear-gradient(300deg var(--gradient-space), hsla(300 100% 50% / 80%), hsla(300 100% 50% / 0) 75%)
  ;
  --gradient-19: linear-gradient(to bottom right var(--gradient-space), #ffe259, #ffa751);
  --gradient-20: conic-gradient(from -135deg at -10% center var(--gradient-space), #ffa500, #ff7715, #ff522a, #ff3f47, #ff5482, #ff69b4);
  --gradient-21: conic-gradient(from -90deg at 25% 115% var(--gradient-space), #ff0000, #ff0066, #ff00cc, #cc00ff, #6600ff, #0000ff, #0000ff, #0000ff, #0000ff);
  --gradient-22: linear-gradient(to bottom right var(--gradient-space), #acb6e5, #86fde8);
  --gradient-23: linear-gradient(to bottom right var(--gradient-space), #536976, #292E49);
  --gradient-24: conic-gradient(from .5turn at 0% 0% var(--gradient-space), #00c476, 10%, #82b0ff, 90%, #00c476);
  --gradient-25: conic-gradient(at 125% 50% var(--gradient-space), #b78cf7, #ff7c94, #ffcf0d, #ff7c94, #b78cf7);
  --gradient-26: linear-gradient(to bottom right var(--gradient-space), #9796f0, #fbc7d4);
  --gradient-27: conic-gradient(from .5turn at bottom left var(--gradient-space), deeppink, rebeccapurple);
  --gradient-28: conic-gradient(from -90deg at 50% 105% var(--gradient-space), white, orchid);
  --gradient-29: 
    radial-gradient(
      circle at top right var(--gradient-space), 
      hsl(250 100% 85%), hsl(250 100% 85% / 0%)
    ),
    radial-gradient(
      circle at bottom left var(--gradient-space), 
      hsl(220 90% 75%), hsl(220 90% 75% / 0%)
    );
  --gradient-30: radial-gradient(
      circle at top right var(--gradient-space), 
      hsl(150 100% 50%), hsl(150 100% 50% / 0%)
    ),
    radial-gradient(
      circle at bottom left var(--gradient-space), 
      hsl(150 100% 84%), hsl(150 100% 84% / 0%)
    );
  --noise-1: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.005' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
  --noise-2: url("data:image/svg+xml,%3Csvg viewBox='0 0 300 300' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.05' numOctaves='1' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
  --noise-3: url("data:image/svg+xml,%3Csvg viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.25' numOctaves='1' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
  --noise-4: url("data:image/svg+xml,%3Csvg viewBox='0 0 2056 2056' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.5' numOctaves='1' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
  --noise-5: url("data:image/svg+xml,%3Csvg viewBox='0 0 2056 2056' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='1' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
  --noise-filter-1: contrast(300%) brightness(100%);
  --noise-filter-2: contrast(200%) brightness(150%);
  --noise-filter-3: contrast(200%) brightness(250%);
  --noise-filter-4: contrast(200%) brightness(500%);
  --noise-filter-5: contrast(200%) brightness(1000%);
}

@supports (background: linear-gradient(to right in oklab, #000, #fff)) {
  :where(html) {
    --gradient-space: in oklab;
  }
}
/* ── Layer: 00-reset ─────────────────────────────────── */
/**
 * 00-reset.css
 * CSS reset and normalization
 * Ported from: Pico CSS v2.1.1
 */

/* Box-sizing reset */
*,
*::before,
*::after {
  box-sizing: border-box;
  background-repeat: no-repeat;
}

::before,
::after {
  text-decoration: inherit;
  vertical-align: inherit;
}

/* Document */
:where(:root) {
  -webkit-tap-highlight-color: transparent;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  text-rendering: optimizeLegibility;
  overflow-wrap: break-word;
  tab-size: 4;
}

/* Root font-size — 100% default, responsive scaling in 01-tokens.css */
html {
  font-size: 100%;
}

/* Body */
body {
  width: 100%;
  margin: 0;
  padding: 0;
  font-size: var(--text-base);   /* 1rem — inherits html responsive scaling */
  font-family: var(--font-ui);
  background-color: var(--surface);
  color: var(--text);
}

/* Prose font — same neo-grotesque stack, consistent across all contexts */
/* article and [data-layout="prose"] inherit body font — no override needed */

/* Main */
main {
  display: block;
}

/* Nested lists */
:where(dl, ol, ul) :where(dl, ol, ul) {
  margin: 0;
}

/* ── Layer: 01-tokens ─────────────────────────────────── */
/**
 * 01-tokens.css
 * ASW semantic layer — builds on Open Props
 *
 * Open Props (included by build.sh) provides the base scales:
 *   --gray-0…15, --green-0…12, --blue-0…12, --red-0…12, --yellow-0…12
 *   --size-1…15, --font-size-0…8, --font-weight-1…9
 *   --font-lineheight-0…5, --radius-1…6, --shadow-1…6
 *   --ease-1…5, --ease-spring-1…5, --ease-bounce-1…5
 *   --gradient-1…30, --animation-*, @keyframes
 *
 * This file defines only what Open Props doesn't:
 *   1. Surface / text / accent — semantic aliases (override to theme)
 *   2. Font stack aliases — prose, heading, ui (map to OP font stacks)
 *   3. Agent-native tokens — task, callout, session, wikilink, redacted
 *   4. A handful of precise values without direct OP equivalents
 *
 * To theme ASW:
 *   Override semantic aliases at :root in your own CSS.
 *   Use Open Props base tokens (--gray-*, --green-*, --size-*) as values.
 *
 * Lineage: absorbed patterns from Pico CSS, Open Props, Charts.css.
 */

/* ══════════════════════════════════════════════════════════════════
   DARK THEME (default)
   Using Open Props oklch gray scale — perceptually uniform steps.
   Set --gray-hue to tint all surfaces. Example:
     Trentuna:     --gray-hue: 45   (warm amber tint)
     vigilio-garden: --gray-hue: 150  (subtle green tint)
   ══════════════════════════════════════════════════════════════════ */

:root {

  /* ── Surfaces ──────────────────────────────────────────────────── */

  --surface:        var(--gray-15);   /* deepest background (oklch 10%) */
  --surface-1:      var(--gray-14);   /* cards, sidebars       (oklch 18%) */
  --surface-2:      var(--gray-13);   /* hover, raised elements (oklch 25%) */
  --surface-card:   var(--surface-1);
  --surface-hover:  var(--surface-2);

  /* ── Text ──────────────────────────────────────────────────────── */

  --text:           var(--gray-1);    /* primary   (95% lightness) */
  --text-2:         var(--gray-3);    /* secondary (80%) */
  --text-3:         var(--gray-5);    /* muted     (68%) */
  --text-dim:       var(--gray-7);    /* dim       (58%) */

  /* ── Accent ────────────────────────────────────────────────────── */

  --accent:              var(--green-5);
  --accent-hover:        var(--green-4);
  --on-accent:           var(--gray-15);
  --accent-focus:        rgba(34, 197, 94, 0.35);
  --accent-subtle:       rgba(34, 197, 94, 0.10);
  --accent-underline:    rgba(34, 197, 94, 0.45);
  --accent-hover-underline: rgba(34, 197, 94, 0.55);

  /* ── Links ─────────────────────────────────────────────────────── */
  /* Blue — web convention. Accent (green) reserved for UI chrome.   */

  --link:                  var(--blue-5);            /* #339af0 */
  --link-hover:            var(--blue-4);            /* #4dabf7 */
  --link-underline:        rgba(51, 154, 240, 0.4);
  --link-hover-underline:  rgba(51, 154, 240, 0.55);
  --link-focus:            rgba(51, 154, 240, 0.35);

  /* Secondary accents — reachable as named aliases */
  --accent-blue:    var(--blue-5);
  --accent-red:     var(--red-7);
  --accent-orange:  var(--yellow-6);

  /* ── Border ────────────────────────────────────────────────────── */

  --border:         var(--gray-11);   /* 37% lightness — visible against 10% bg */
  --border-subtle:  var(--gray-12);   /* 31% lightness — very subtle */
  --border-width:   1px;
  --outline-width:  2px;

  /* ── Font stacks ───────────────────────────────────────────────── */
  /* Open Props named stacks — no web font loading required.         */
  /* --font-neo-grotesque: Inter, Roboto, Helvetica Neue, Arial Nova  */
  /* --font-monospace-code: Dank Mono, Operator Mono, Inconsolata...  */

  --font-prose:    var(--font-neo-grotesque);
  --font-heading:  var(--font-neo-grotesque);
  --font-ui:       var(--font-neo-grotesque);
  /* --font-mono: var(--font-monospace-code) — provided directly by Open Props */

  /* ── Typography scale ─────────────────────────────────────────── */
  /* Open Props provides: --font-size-0 (.75rem) through --font-size-8 (3.5rem) */
  /* We define only the one gap: 0.875rem has no OP equivalent        */

  --text-xs:    var(--font-size-0);   /* 0.75rem  — badges, fine print */
  --text-sm:    0.875rem;             /* 0.875rem — metadata, captions (no OP match) */
  --text-base:  var(--font-size-1);   /* 1rem     — body */
  --text-2xl:   var(--font-size-4);   /* 1.5rem   — subheadings */
  --text-3xl:   var(--font-size-5);   /* 2rem     — section headings */

  /* ── Heading scale ─────────────────────────────────────────────── */

  --h1-size:   1.875rem;
  --h2-size:   1.5rem;
  --h3-size:   1.25rem;
  --h4-size:   1.0625rem;
  --h5-size:   0.9375rem;
  --h6-size:   0.8125rem;

  --h1-weight: var(--font-weight-4);   /* 400 */
  --h2-weight: var(--font-weight-4);
  --h3-weight: var(--font-weight-4);
  --h4-weight: var(--font-weight-5);   /* 500 */
  --h5-weight: var(--font-weight-6);   /* 600 */
  --h6-weight: var(--font-weight-6);

  --h1-color: var(--text);
  --h2-color: var(--text);
  --h3-color: var(--text);
  --h4-color: var(--text-2);
  --h5-color: var(--text-2);
  --h6-color: var(--text-3);

  /* ── Spacing aliases ─────────────────────────────────────────────
     Open Props sizes: --size-1 (.25rem), --size-2 (.5rem), --size-3 (1rem),
     --size-5 (1.5rem), --size-7 (2rem), --size-9 (4rem)
     We alias these with semantic names AND define --space-3 (0.75rem gap)
     ──────────────────────────────────────────────────────────────── */

  --space-1:  var(--size-1);    /* 0.25rem */
  --space-2:  var(--size-2);    /* 0.50rem */
  --space-3:  0.75rem;          /* 0.75rem — no OP equivalent */
  --space-4:  var(--size-3);    /* 1.00rem */
  --space-5:  var(--size-5);    /* 1.50rem */
  --space-6:  var(--size-7);    /* 2.00rem */
  --space-8:  var(--size-9);    /* 4.00rem */

  /* ── Rhythm ─────────────────────────────────────────────────────── */

  --type-space:      var(--space-4);    /* paragraph / element spacing */
  --type-space-top:  var(--space-5);    /* heading top margin after content */
  --leading:         1.6;
  --leading-tight:   var(--font-lineheight-1);   /* 1.25 */

  /* ── Radius ─────────────────────────────────────────────────────── */
  /* Open Props: --radius-1 (2px), --radius-2 (5px), --radius-3 (1rem) */

  --radius-sm:  var(--radius-1);   /* 2px */
  --radius-md:  4px;               /* between OP radius-1 and radius-2 */

  /* ── Easing ─────────────────────────────────────────────────────── */
  /* Open Props provides rich curves — we alias the most-used ones */

  --ease:       0.2s var(--ease-3);
  --ease-fast:  0.1s var(--ease-2);

  /* ── Inline element tokens ─────────────────────────────────────── */

  --selection:   rgba(96, 165, 250, 0.25);
  --mark-bg:     rgba(245, 158, 11, 0.2);
  --mark-color:  var(--accent-orange);
  --kbd-bg:      var(--text);
  --kbd-color:   var(--surface);
  --code-color:  var(--text-2);
  --table-stripe: rgba(38, 38, 38, 0.5);

  /* ── Form tokens ─────────────────────────────────────────────────── */

  --input-bg:         var(--surface-1);
  --input-border:     var(--border);
  --input-active-bg:  var(--surface);
  --input-selected:   rgba(34, 197, 94, 0.2);
  --input-px:         var(--space-4);
  --input-py:         var(--space-3);
  --disabled-opacity: 0.5;

  /* ── State colors ─────────────────────────────────────────────────── */

  --ok:           var(--green-5);
  --warn:         var(--yellow-5);
  --error:        var(--red-7);
  --info:         var(--blue-5);
  --blocked:      var(--gray-5);

  --error-active: var(--red-9);
  --error-focus:  rgba(239, 68, 68, 0.375);

  /* ── Component tokens ─────────────────────────────────────────────── */

  --track-bg:         var(--surface-2);   /* progress / meter background */
  --modal-overlay:    rgba(10, 10, 10, 0.8);
  --modal-backdrop:   blur(0.375rem);
  --accordion-active: var(--accent-hover);

  --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 115, 115)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");


  /* ══════════════════════════════════════════════════════════════════
     AGENT-NATIVE TOKENS
     These are ASW's actual contribution — concepts no other framework has.
     Propose additions to Open Props: data-task, data-callout, data-session.
     ══════════════════════════════════════════════════════════════════ */

  --task-done:    var(--green-5);
  --task-blocked: var(--red-5);
  --task-wip:     var(--yellow-5);
  --task-todo:    var(--gray-5);

  --callout-info:  var(--blue-5);
  --callout-warn:  var(--yellow-5);
  --callout-error: var(--red-5);
  --callout-note:  var(--gray-5);

  --session-bg:   var(--surface-1);
  --wikilink:     var(--blue-4);
  --redacted:     var(--gray-8);

}


/* ══════════════════════════════════════════════════════════════════
   LIGHT MODE — override semantic aliases only
   ══════════════════════════════════════════════════════════════════ */

@media (prefers-color-scheme: light) {
  :root {
    color-scheme: light;

    --surface:        var(--gray-0);    /* 99% lightness */
    --surface-1:      var(--gray-1);    /* 95% */
    --surface-2:      var(--gray-2);    /* 88% */
    --surface-card:   var(--gray-0);
    --surface-hover:  var(--gray-1);

    --text:           var(--gray-14);   /* 18% — dark but not pure black */
    --text-2:         var(--gray-11);   /* 37% */
    --text-3:         var(--gray-8);    /* 53% */
    --text-dim:       var(--gray-6);    /* 63% */

    --accent:         var(--green-8);
    --accent-hover:   var(--green-9);
    --on-accent:      var(--gray-0);
    --accent-focus:   rgba(22, 163, 74, 0.35);
    --accent-subtle:  rgba(22, 163, 74, 0.10);

    --border:         var(--gray-3);    /* 80% — visible on near-white */
    --border-subtle:  var(--gray-2);    /* 88% — very subtle */

    --link:                  var(--blue-8);            /* #1971c2 */
    --link-hover:            var(--blue-7);            /* #1c7ed6 */
    --link-underline:        rgba(25, 113, 194, 0.4);
    --link-hover-underline:  rgba(25, 113, 194, 0.55);
    --link-focus:            rgba(25, 113, 194, 0.35);

    --h1-color: var(--gray-15);
    --h2-color: var(--gray-14);
    --h3-color: var(--gray-13);
    --h4-color: var(--gray-12);
    --h5-color: var(--gray-11);
    --h6-color: var(--gray-10);

    --mark-bg:    #fce6bf;
    --mark-color: var(--gray-15);
    --selection:  rgba(37, 99, 235, 0.2);

    --code-color:   var(--text-3);
    --table-stripe: rgba(111, 120, 135, 0.04);

    --input-bg:        var(--gray-0);
    --input-border:    var(--gray-4);
    --input-active-bg: var(--gray-0);
    --input-selected:  var(--gray-2);

    --track-bg:       var(--gray-3);
    --modal-overlay:  rgba(232, 234, 237, 0.75);

    --error:          oklch(50% 0.17 20);
    --error-active:   oklch(44% 0.18 20);

    --session-bg:     var(--surface-1);
  }
}


/* ══════════════════════════════════════════════════════════════════
   RESPONSIVE FONT SCALING
   Subtle upscaling at large viewports — all rem values follow.
   ══════════════════════════════════════════════════════════════════ */

@media (min-width: 1024px) { html { font-size: 103%; } }
@media (min-width: 1280px) { html { font-size: 106%; } }
@media (min-width: 1536px) { html { font-size: 109%; } }

/* ── Layer: 02-semantic ─────────────────────────────────── */
/**
 * 02-semantic.css
 * Semantic HTML element styles
 * Part of: Agentic Semantic Web
 * 
 * Ported from: Pico CSS v2.1.1
 * License: MIT
 * 
 * This layer handles typography and semantic HTML elements.
 * Classes are NOT supported—use semantic tags only.
 */

/* ── Typography: Headings ──────────────────────────────────────────── */

h1,
h2,
h3,
h4,
h5,
h6 {
  margin-top: 0;
  margin-bottom: var(--type-space);
  line-height: var(--leading-tight);
  font-family: var(--font-heading);
  text-wrap: balance;
}

h1 {
  font-size: var(--h1-size);
  color: var(--h1-color);
  font-weight: var(--h1-weight);
}

h2 {
  font-size: var(--h2-size);
  color: var(--h2-color);
  font-weight: var(--h2-weight);
}

h3 {
  font-size: var(--h3-size);
  color: var(--h3-color);
  font-weight: var(--h3-weight);
}

h4 {
  font-size: var(--h4-size);
  color: var(--h4-color);
  font-weight: var(--h4-weight);
}

h5 {
  font-size: var(--h5-size);
  color: var(--h5-color);
  font-weight: var(--h5-weight);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

h6 {
  font-size: var(--h6-size);
  color: var(--h6-color);
  font-weight: var(--h6-weight);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

/* Add spacing before headings that follow content elements */
:where(article, address, blockquote, dl, figure, form, ol, p, pre, table, ul) ~ :is(h1, h2, h3, h4, h5, h6) {
  margin-top: var(--type-space-top);
}

/* ── Typography: UI elements — structural, navigational, informational ── */
/* These override the prose body font with the humanist sans UI stack.    */

nav,
header,
footer,
label,
th,
caption,
small,
figcaption,
button,
input,
select,
textarea,
hgroup > p,
hgroup > small {
  font-family: var(--font-ui);
}

/* ── Typography: Paragraphs ────────────────────────────────────────── */

p {
  margin-top: 0;
  margin-bottom: var(--type-space);
  color: var(--text);
  font-style: normal;
  font-weight: var(--font-weight-4);
}

/* ── Typography: Lists ─────────────────────────────────────────────── */

address,
dl,
ol,
ul {
  margin-top: 0;
  margin-bottom: var(--type-space);
  color: var(--text);
  font-style: normal;
  font-weight: var(--font-weight-4);
}

:where(ol, ul) li {
  margin-bottom: calc(var(--type-space) * 0.25);
}

/* Nested lists: reduce spacing */
:where(dl, ol, ul) :where(dl, ol, ul) {
  margin: 0;
  margin-top: calc(var(--type-space) * 0.25);
}

ul li {
  list-style: square;
}

/* ── Typography: Blockquote ────────────────────────────────────────── */

blockquote {
  display: block;
  margin: var(--type-space) 0;
  padding: var(--space-4);
  border-right: none;
  border-left: 0.25rem solid var(--border);
  border-inline-start: 0.25rem solid var(--border);
  border-inline-end: none;
}

blockquote footer {
  margin-top: calc(var(--type-space) * 0.5);
  color: var(--text-3);
}

/* ── Typography: Horizontal Rule ───────────────────────────────────── */

hr {
  height: 0;
  margin: var(--type-space) 0;
  border: 0;
  border-top: 1px solid var(--border);
  color: inherit;
}

/* ── Typography: Inline Elements ───────────────────────────────────── */

b,
strong {
  font-weight: bolder;
}

mark {
  padding: 0.125rem 0.25rem;
  background-color: var(--mark-bg);
  color: var(--mark-color);
  vertical-align: baseline;
}

ins {
  color: var(--text-2);
  text-decoration: none;
}

del {
  color: var(--accent-red);
}

abbr[title] {
  border-bottom: 1px dotted;
  text-decoration: none;
  cursor: help;
}

sub,
sup {
  position: relative;
  font-size: 0.75em;
  line-height: 0;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

small {
  font-size: 0.875em;
}

/* ── Links ─────────────────────────────────────────────────────────── */

:where(a:not([role=button])),
[role=link] {



  outline: none;
  background-color: transparent;
  color: var(--link);
  text-decoration: underline;
  text-decoration-color: var(--link-underline);
  text-underline-offset: 0.125em;
  transition: background-color var(--ease), 
              color var(--ease), 
              text-decoration var(--ease), 
              box-shadow var(--ease);
}

:where(a:not([role=button])):is(:hover, :active, :focus),
[role=link]:is(:hover, :active, :focus) {
  color: var(--link-hover);
  text-decoration-color: var(--link-hover-underline);
}

:where(a:not([role=button])):focus-visible,
[role=link]:focus-visible {
  box-shadow: 0 0 0 var(--outline-width) var(--link-focus);
}

/* ── Text Selection ────────────────────────────────────────────────── */

::selection {
  background-color: var(--selection);
}

/* ── Tables ────────────────────────────────────────────────────────── */

:where(table) {
  width: 100%;
  margin-top: 0;
  margin-bottom: var(--type-space);
  border-collapse: collapse;
  border-spacing: 0;
  text-indent: 0;
  color: var(--text);
  font-style: normal;
  font-weight: var(--font-weight-4);
}

th,
td {
  padding: calc(var(--space-4) / 2) var(--space-4);
  border-bottom: var(--border-width) solid var(--border);
  background-color: transparent;
  color: var(--text);
  font-weight: var(--font-weight-4);
  text-align: left;
}

thead th,
thead td {
  font-weight: 600;
  border-bottom-width: 2px;
}

tfoot th,
tfoot td {
  border-top: var(--border-width) solid var(--border);
  border-bottom: 0;
}

/* Striped tables (class-based but useful) */
table.striped tbody tr:nth-child(odd) th,
table.striped tbody tr:nth-child(odd) td {
  background-color: var(--table-stripe);
}

/* ── Code & Preformatted Text ──────────────────────────────────────── */

pre,
code,
kbd,
samp {
  font-size: 0.875em;
  font-family: var(--font-mono);
  border-radius: var(--radius-md);
  background: var(--surface-1);
  color: var(--code-color);
  font-weight: var(--font-weight-4);
  line-height: initial;
}

/* Inline code elements */
code,
kbd,
samp {
  display: inline-block;
  padding: 0.375rem;
}

/* Code blocks */
pre {
  display: block;
  margin-top: 0;
  margin-bottom: var(--space-4);
  padding: var(--space-4);
  overflow-x: auto;
  -ms-overflow-style: scrollbar;
}

pre > code,
pre > samp {
  display: block;
  padding: 0;
  background: none;
  font-size: inherit;
  font-family: inherit;
  line-height: var(--leading);
}

/* Keyboard input */
kbd {
  background-color: var(--kbd-bg);
  color: var(--kbd-color);
  vertical-align: baseline;
}

/* ── Prism.js Syntax Highlighting Theme ────────────────────────────── *
 *
 * These rules style Prism.js token classes using ASW tokens.
 * agentic.css provides the theme; each page loads Prism via:
 *
 *   <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism.min.css">
 *   <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js"></script>
 *   <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js"></script>
 *
 * The CDN theme's colors are overridden here. ASW tokens handle dark/light.
 * ─────────────────────────────────────────────────────────────────── */

/* Reset Prism default background — pre already styled by ASW */
code[class*="language-"],
pre[class*="language-"] {
  color: var(--code-color);
  background: none;
  text-shadow: none;
}

pre[class*="language-"] {
  background: var(--surface-1);
}

/* Token colors — dark (default) */
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
  color: var(--gray-6);       /* muted: ~55% lightness */
  font-style: italic;
}

.token.punctuation {
  color: var(--text-3);       /* slightly muted */
}

.token.tag,
.token.deleted {
  color: var(--red-4);        /* HTML tags, deleted code */
}

.token.attr-name,
.token.namespace {
  color: var(--yellow-4);     /* attribute names */
}

.token.string,
.token.attr-value,
.token.char,
.token.inserted {
  color: var(--green-4);      /* strings, values */
}

.token.number,
.token.boolean,
.token.constant,
.token.symbol {
  color: var(--orange-4);     /* literals */
}

.token.selector,
.token.builtin {
  color: var(--teal-4);       /* CSS selectors, builtins */
}

.token.keyword,
.token.atrule {
  color: var(--blue-4);       /* keywords, @rules */
}

.token.function,
.token.class-name {
  color: var(--cyan-4);       /* function/class names */
}

.token.property {
  color: var(--blue-5);       /* object properties */
}

.token.operator,
.token.entity,
.token.url {
  color: var(--text-2);       /* operators */
}

.token.regex {
  color: var(--orange-5);     /* regex literals */
}

.token.important,
.token.variable {
  color: var(--yellow-5);     /* !important, variables */
  font-weight: var(--font-weight-5);
}

.token.bold   { font-weight: var(--font-weight-7); }
.token.italic { font-style: italic; }

/* Light mode overrides */
@media (prefers-color-scheme: light) {
  .token.comment,
  .token.prolog,
  .token.doctype,
  .token.cdata    { color: var(--gray-6); }

  .token.punctuation   { color: var(--gray-8); }

  .token.tag,
  .token.deleted       { color: var(--red-8); }

  .token.attr-name,
  .token.namespace     { color: var(--yellow-9); }

  .token.string,
  .token.attr-value,
  .token.char,
  .token.inserted      { color: var(--green-8); }

  .token.number,
  .token.boolean,
  .token.constant,
  .token.symbol        { color: var(--orange-8); }

  .token.selector,
  .token.builtin       { color: var(--teal-8); }

  .token.keyword,
  .token.atrule        { color: var(--blue-8); }

  .token.function,
  .token.class-name    { color: var(--cyan-9); }

  .token.property      { color: var(--blue-9); }

  .token.operator,
  .token.entity,
  .token.url           { color: var(--gray-8); }

  .token.regex         { color: var(--orange-7); }

  .token.important,
  .token.variable      { color: var(--yellow-9); }
}

/* ── Details / Summary ─────────────────────────────────────────────── */

details {
  display: block;
  margin-bottom: var(--space-4);
}

details summary {
  line-height: 1rem;
  list-style-type: none;
  cursor: pointer;
  transition: color var(--ease);
  color: var(--accent);
}

/* Hide browser default marker */
details summary::-webkit-details-marker {
  display: none;
}

details summary::marker {
  display: none;
}

details summary::-moz-list-bullet {
  list-style-type: none;
}

/* CSS-drawn chevron using Unicode character ▸ (U+25B8) */
details summary::after {
  content: "▸";
  display: inline-block;
  width: 1rem;
  height: 1rem;
  margin-inline-start: calc(var(--space-4, 1rem) * 0.5);
  float: right;
  font-size: var(--text-sm);
  line-height: 1rem;
  text-align: center;
  color: var(--text-3);
  transform: rotate(90deg);  /* Point down when closed */
  transition: transform var(--ease);
}

details summary:focus {
  outline: none;
}

details summary:focus-visible {
  outline: var(--outline-width) solid var(--accent-focus);
  outline-offset: calc(var(--space-4, 1rem) * 0.5);
  color: var(--accordion-active);
}

/* Open state */
details[open] > summary {
  margin-bottom: var(--space-4);
  color: var(--text-3);
}

details[open] > summary::after {
  transform: rotate(180deg);  /* Point down when open */
}

/* ── Dialog / Modal ────────────────────────────────────────────────── */

dialog {
  display: flex;
  z-index: 999;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  align-items: center;
  justify-content: center;
  width: inherit;
  min-width: 100%;
  height: inherit;
  min-height: 100%;
  padding: 0;
  border: 0;
  backdrop-filter: var(--modal-backdrop);
  background-color: var(--modal-overlay);
  color: var(--text);
}

dialog > article {
  width: 100%;
  max-height: calc(100vh - var(--space-4) * 2);
  margin: var(--space-4);
  overflow: auto;
}

/* Responsive max-widths for modal content */
@media (min-width: 576px) {
  dialog > article {
    max-width: 510px;
  }
}

@media (min-width: 768px) {
  dialog > article {
    max-width: 700px;
  }
}

/* Modal header */
dialog > article > header > * {
  margin-bottom: 0;
}

dialog > article > header .close,
dialog > article > header :is(a, button)[rel=prev] {
  margin: 0;
  margin-left: var(--space-4);
  padding: 0;
  float: right;
}

/* Modal footer */
dialog > article > footer {
  text-align: right;
}

dialog > article > footer button,
dialog > article > footer [role=button] {
  margin-bottom: 0;
}

dialog > article > footer button:not(:first-of-type),
dialog > article > footer [role=button]:not(:first-of-type) {
  margin-left: calc(var(--space-4) * 0.5);
}

/* Close button: Unicode ✕ (U+2715) instead of SVG */
dialog > article .close,
dialog > article :is(a, button)[rel=prev] {
  display: block;
  width: 1.5rem;
  height: 1.5rem;
  margin-top: calc(var(--space-4) * -0.5);
  margin-bottom: var(--space-4);
  margin-left: auto;
  border: none;
  background-color: transparent;
  color: var(--text-3);
  font-size: 1.5rem;
  line-height: 1;
  text-align: center;
  opacity: 0.5;
  transition: opacity var(--ease);
  cursor: pointer;
}

dialog > article .close::before,
dialog > article :is(a, button)[rel=prev]::before {
  content: "✕";  /* Unicode heavy multiplication X */
}

dialog > article .close:is([aria-current]:not([aria-current=false]), :hover, :active, :focus),
dialog > article :is(a, button)[rel=prev]:is([aria-current]:not([aria-current=false]), :hover, :active, :focus) {
  opacity: 1;
}

/* Hidden state */
dialog:not([open]),
dialog[open=false] {
  display: none;
}

/* Body scroll lock when modal is open */
.modal-is-open {
  padding-right: var(--scrollbar-width, 0px);
  overflow: hidden;
  pointer-events: none;
  touch-action: none;
}

.modal-is-open dialog {
  pointer-events: auto;
  touch-action: auto;
}

/* Animations (only if motion is not reduced) */
@media (prefers-reduced-motion: no-preference) {
  :where(.modal-is-opening, .modal-is-closing) dialog,
  :where(.modal-is-opening, .modal-is-closing) dialog > article {
    animation-duration: 0.2s;
    animation-timing-function: ease-in-out;
    animation-fill-mode: both;
  }
  
  :where(.modal-is-opening, .modal-is-closing) dialog {
    animation-duration: 0.8s;
    animation-name: modal-overlay;
  }
  
  :where(.modal-is-opening, .modal-is-closing) dialog > article {
    animation-delay: 0.2s;
    animation-name: modal;
  }
  
  .modal-is-closing dialog,
  .modal-is-closing dialog > article {
    animation-delay: 0s;
    animation-direction: reverse;
  }
  
  @keyframes modal-overlay {
    from {
      backdrop-filter: none;
      background-color: transparent;
    }
  }
  
  @keyframes modal {
    from {
      transform: translateY(-100%);
      opacity: 0;
    }
  }
}

/* Respect reduced motion: instant show/hide */
@media (prefers-reduced-motion: reduce) {
  dialog,
  dialog > article {
    animation: none !important;
    transition: none !important;
  }
}

/* ── Figure & Figcaption ───────────────────────────────────────────── */

figure {
  display: block;
  margin: 0;
  margin-bottom: var(--space-4);
  padding: 0;
}

figure figcaption {
  padding: calc(var(--space-4) * 0.5) 0;
  color: var(--text-3);
  font-size: var(--text-sm);
}

/* ── Progress ──────────────────────────────────────────────────────── */

progress {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  display: inline-block;
  vertical-align: baseline;
  width: 100%;
  height: 0.5rem;
  margin-bottom: calc(var(--space-4) * 0.5);
  overflow: hidden;
  border: 0;
  border-radius: var(--radius-md);
  background-color: var(--track-bg);
  color: var(--accent);
}

progress::-webkit-progress-bar {
  border-radius: var(--radius-md);
  background: none;
}

progress[value]::-webkit-progress-value {
  background-color: var(--accent);
  transition: inline-size var(--ease);
}

progress::-moz-progress-bar {
  background-color: var(--accent);
}

/* Indeterminate progress (animated) - respect motion preferences */
@media (prefers-reduced-motion: no-preference) {
  progress:indeterminate {
    background: var(--track-bg) 
                linear-gradient(to right, 
                  var(--accent) 30%, 
                  var(--track-bg) 30%) 
                top left / 150% 150% no-repeat;
    animation: progress-indeterminate 1s linear infinite;
  }
  
  progress:indeterminate[value]::-webkit-progress-value {
    background-color: transparent;
  }
  
  @keyframes progress-indeterminate {
    0% {
      background-position: 200% 0;
    }
    100% {
      background-position: -200% 0;
    }
  }
}

@media (prefers-reduced-motion: reduce) {
  progress:indeterminate {
    background: var(--track-bg);
  }
}

/* ── Meter ─────────────────────────────────────────────────────────── */

meter {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  display: inline-block;
  vertical-align: baseline;
  width: 100%;
  height: 0.5rem;
  margin-bottom: calc(var(--space-4) * 0.5);
  overflow: hidden;
  border: 0;
  border-radius: var(--radius-md);
  background-color: var(--track-bg);
  accent-color: var(--accent);  /* Modern CSS: browser renders with our accent */
}

/* Webkit meter styling */
meter::-webkit-meter-bar {
  border-radius: var(--radius-md);
  background-color: var(--track-bg);
}

meter::-webkit-meter-optimum-value {
  background-color: var(--accent);
}

meter::-webkit-meter-suboptimum-value {
  background-color: var(--accent-blue);
}

meter::-webkit-meter-even-less-good-value {
  background-color: var(--accent-red);  /* Red-ish for bad values */
}

/* Firefox meter styling */
meter::-moz-meter-bar {
  border-radius: var(--radius-md);
  background-color: var(--accent);
}

meter:-moz-meter-optimum::-moz-meter-bar {
  background-color: var(--accent);
}

meter:-moz-meter-sub-optimum::-moz-meter-bar {
  background-color: var(--accent-blue);
}

meter:-moz-meter-sub-sub-optimum::-moz-meter-bar {
  background-color: var(--accent-red);
}

/* ── Content Container ─────────────────────────────────────────────── */
/* body > nav, body > main, and body > footer share container alignment so agents
   can write <body><nav>…<main>…<footer> and get consistent widths.
   Scoped to body > nav/main/footer to avoid affecting nested elements
   (breadcrumbs, pagination, mains inside grid layouts). */

body > nav,
body > main,
body > footer {
  width: 100%;
  margin-right: auto;
  margin-left: auto;
  padding-right: var(--space-4);
  padding-left: var(--space-4);
}

/* Default: constrained container (replaces .container class) */
@media (min-width: 576px) {
  body > nav,
  body > main:not([data-layout="fluid"]),
  body > footer {
    max-width: 510px;
    padding-right: 0;
    padding-left: 0;
  }
}

@media (min-width: 768px) {
  body > nav,
  body > main:not([data-layout="fluid"]),
  body > footer {
    max-width: 700px;
  }
}

@media (min-width: 1024px) {
  body > nav,
  body > main:not([data-layout="fluid"]),
  body > footer {
    max-width: 950px;
  }
}

@media (min-width: 1280px) {
  body > nav,
  body > main:not([data-layout="fluid"]),
  body > footer {
    max-width: 1200px;
  }
}

@media (min-width: 1536px) {
  body > nav,
  body > main:not([data-layout="fluid"]),
  body > footer {
    max-width: 1450px;
  }
}

/* Full-width opt-out */
body > main[data-layout="fluid"] {
  max-width: none;
}

/* ── Layer: 03-components ─────────────────────────────────── */
/**
 * 03-components.css
 * UI component patterns (buttons, forms, nav, dialog, details)
 * Part of: Agentic Semantic Web
 * 
 * Ported from: Pico CSS v2.1.1
 * License: MIT
 * 
 * Modernizations:
 * - Uses `accent-color` for checkbox/radio (simpler than background-image)
 * - Drops class-based button variants (.secondary, .contrast, .outline)
 */

/* ── Buttons ───────────────────────────────────────────────────────────*/

button {
  margin: 0;
  overflow: visible;
  font-family: inherit;
  text-transform: none;
}

button,
[type=submit],
[type=reset],
[type=button],
[role=button] {



  display: inline-block;
  padding: var(--input-py) var(--input-px);
  border: var(--border-width) solid var(--border);
  border-radius: var(--radius-md);
  outline: none;
  background-color: var(--surface);
  color: var(--text);
  font-weight: var(--font-weight-4);
  font-size: var(--text-base);
  line-height: var(--leading);
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  user-select: none;
  transition: background-color var(--ease), 
              border-color var(--ease), 
              color var(--ease);
}

button:is(:hover, :active, :focus-visible),
[type=submit]:is(:hover, :active, :focus-visible),
[type=reset]:is(:hover, :active, :focus-visible),
[type=button]:is(:hover, :active, :focus-visible),
[role=button]:is(:hover, :active, :focus-visible) {
  background-color: var(--surface-hover);
  border-color: var(--border);
  color: var(--text);
}

button:focus-visible,
[type=submit]:focus-visible,
[type=reset]:focus-visible,
[type=button]:focus-visible,
[role=button]:focus-visible {
  box-shadow: 0 0 0 var(--outline-width) var(--accent-focus);
}

button[disabled],
[type=submit][disabled],
[type=reset][disabled],
[type=button][disabled],
[role=button][disabled] {
  opacity: 0.5;
  pointer-events: none;
}

/* ── Form Elements ─────────────────────────────────────────────────────*/

input,
optgroup,
select,
textarea {
  margin: 0;
  font-size: var(--text-base);
  line-height: var(--leading);
  font-family: inherit;
  letter-spacing: inherit;
}

fieldset {
  width: 100%;
  margin: 0;
  margin-bottom: var(--space-4);
  padding: 0;
  border: 0;
}

fieldset legend,
label {
  display: block;
  margin-bottom: calc(var(--space-4) * 0.375);
  color: var(--text);
  font-weight: var(--font-weight-4);
}

input:not([type=checkbox], [type=radio], [type=range], [type=file]),
select,
textarea {
  width: 100%;
  padding: var(--input-py) var(--input-px);
  border: var(--border-width) solid var(--input-border);
  border-radius: var(--radius-md);
  outline: none;
  background-color: var(--input-bg);
  color: var(--text);
  font-weight: var(--font-weight-4);
  transition: background-color var(--ease), 
              border-color var(--ease), 
              color var(--ease);
}

input:not([type=checkbox], [type=radio], [type=range], [type=file], [readonly]):is(:active, :focus-visible),
select:not([readonly]):is(:active, :focus-visible),
textarea:not([readonly]):is(:active, :focus-visible) {
  border-color: var(--accent);
  background-color: var(--input-active-bg);
}

input:not([type=checkbox], [type=radio], [type=range], [type=file], [readonly]):focus-visible,
select:not([readonly]):focus-visible,
textarea:not([readonly]):focus-visible {
  box-shadow: 0 0 0 var(--outline-width) var(--accent);
}

input:not([type=checkbox], [type=radio], [type=range], [type=file])[disabled],
select[disabled],
textarea[disabled] {
  opacity: var(--disabled-opacity);
  pointer-events: none;
}

input::placeholder,
textarea::placeholder,
select:invalid {
  color: var(--text-3);
  opacity: 1;
}

input:not([type=checkbox], [type=radio]),
select,
textarea {
  margin-bottom: var(--space-4);
}

/* ── Select Dropdown ───────────────────────────────────────────────────*/

select:not([multiple], [size]) {
  padding-right: calc(var(--input-px) + 1.5rem);
  background-image: var(--icon-chevron);
  background-position: center right 0.75rem;
  background-size: 1rem auto;
  background-repeat: no-repeat;
}

select[multiple] option:checked {
  background: var(--input-selected);
  color: var(--text);
}

/* ── Textarea ──────────────────────────────────────────────────────────*/

textarea {
  display: block;
  resize: vertical;
}

/* ── Checkboxes & Radios (Modern CSS) ──────────────────────────────────*/

label:has([type=checkbox], [type=radio]) {
  width: fit-content;
  cursor: pointer;
}

[type=checkbox],
[type=radio] {
  width: 1.25em;
  height: 1.25em;
  margin-top: -0.125em;
  margin-right: 0.5em;
  vertical-align: middle;
  cursor: pointer;
  
  /* Modern CSS: use browser's native styling with our accent color */
  accent-color: var(--accent);
}

[type=checkbox] ~ label,
[type=radio] ~ label {
  display: inline-block;
  margin-bottom: 0;
  cursor: pointer;
}

[type=checkbox] ~ label:not(:last-of-type),
[type=radio] ~ label:not(:last-of-type) {
  margin-right: 1em;
}

/* ── Validation States ─────────────────────────────────────────────────*/

input[aria-invalid=false],
select[aria-invalid=false],
textarea[aria-invalid=false] {
  border-color: var(--accent);
}

input[aria-invalid=false]:is(:active, :focus-visible),
select[aria-invalid=false]:is(:active, :focus-visible),
textarea[aria-invalid=false]:is(:active, :focus-visible) {
  border-color: var(--accent-hover);
  box-shadow: 0 0 0 var(--outline-width) var(--accent-focus) !important;
}

input[aria-invalid=true],
select[aria-invalid=true],
textarea[aria-invalid=true] {
  border-color: var(--error);
}

input[aria-invalid=true]:is(:active, :focus-visible),
select[aria-invalid=true]:is(:active, :focus-visible),
textarea[aria-invalid=true]:is(:active, :focus-visible) {
  border-color: var(--error-active);
  box-shadow: 0 0 0 var(--outline-width) var(--error-focus) !important;
}

/* ── Helper Text ───────────────────────────────────────────────────────*/

:where(input, select, textarea, fieldset) + small {
  display: block;
  width: 100%;
  margin-top: calc(var(--space-4) * -0.75);
  margin-bottom: var(--space-4);
  color: var(--text-3);
}

:where(input, select, textarea, fieldset)[aria-invalid=false] + small {
  color: var(--accent);
}

:where(input, select, textarea, fieldset)[aria-invalid=true] + small {
  color: var(--accent-red);
}

label > :where(input, select, textarea) {
  margin-top: calc(var(--space-4) * 0.25);
}

/* ── Navigation ────────────────────────────────────────────────────────*/
/* Semantic nav: <nav><strong>Brand</strong><ul><li><a>...</a></li></ul></nav> */

body > nav {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-top: 1.5rem;
  padding-bottom: 1.5rem;
  margin-bottom: 2rem;
  border-bottom: 1px solid var(--border);
}

body > nav strong {
  font-family: var(--font-mono);
  font-weight: 700;
  font-size: var(--text-base);
  letter-spacing: -0.03em;
}

body > nav ul {
  list-style: none;
  display: flex;
  gap: 0;
  margin: 0;
  padding: 0;
  font-family: var(--font-mono);
  font-size: var(--text-sm);
}

body > nav ul li {
  list-style: none;
  margin: 0;
  padding: 0;
}

body > nav ul li + li::before {
  content: "|";
  color: var(--text-dim);
  margin: 0 0.75rem;
}

body > nav a {
  color: var(--text-2);
  text-decoration: none;
  transition: color 0.15s;
}

body > nav a:hover,
body > nav a[aria-current="page"] {
  color: var(--text);
}

/* Medium screens: allow links to wrap */
@media (max-width: 991px) {
  body > nav ul {
    flex-wrap: wrap;
    gap: 0.25rem 0;
  }
}

/* Small screens: stack brand above links */
@media (max-width: 767px) {
  body > nav {
    flex-direction: column;
    align-items: flex-start;
    gap: 0.5rem;
  }
  
  body > nav ul:last-child {
    flex-wrap: wrap;
  }
  
  body > nav ul:last-child li + li::before {
    display: none;
  }
}

/* ── Nav Dropdown ──────────────────────────────────────────────────────*/
/* <details> inside <nav> becomes a dropdown menu. No classes needed.
   Usage: <nav><ul><li><details><summary>Menu</summary><ul><li>...</li></ul></details></li></ul></nav> */

body > nav li:has(details) {
  display: flex;
  align-items: center;
}

body > nav details {
  position: relative;
  margin: 0;
}

body > nav details summary {
  color: var(--text-2);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  list-style: none;
  cursor: pointer;
  transition: color 0.15s;
}

body > nav details summary:hover {
  color: var(--text);
}

/* Override accordion chevron in nav context */
body > nav details summary::after {
  content: "▾";
  float: none;
  margin-inline-start: 0.25rem;
  transform: none;
  font-size: var(--text-xs);
}

body > nav details[open] > summary::after {
  content: "▴";
  transform: none;
}

/* Dropdown panel */
body > nav details > ul,
body > nav details > div {
  position: absolute;
  top: calc(100% + 0.5rem);
  left: 0;
  min-width: 160px;
  padding: 0.5rem 0;
  margin: 0;
  background: var(--surface-1);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
  z-index: 20;
  list-style: none;
  display: flex;
  flex-direction: column;
}

body > nav details > ul li {
  margin: 0;
  padding: 0;
}

/* Remove pipe separator in dropdown items */
body > nav details > ul li + li::before {
  display: none;
}

body > nav details > ul li a {
  display: block;
  padding: 0.35rem 1rem;
  color: var(--text-2);
  text-decoration: none;
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  transition: background-color 0.1s, color 0.1s;
}

body > nav details > ul li a:hover {
  background: var(--border-subtle);
  color: var(--text);
}

/* Close dropdown when clicking outside (CSS-only via :focus-within) */
nav details:not(:focus-within) > ul,
nav details:not(:focus-within) > div {
  /* Allow browser default open/close behavior — 
     no forced hiding. Agent can add JS for click-outside. */
}

/* Mobile: dropdown becomes full-width */
@media (max-width: 767px) {
  nav details > ul,
  nav details > div {
    position: static;
    box-shadow: none;
    border: none;
    border-left: 2px solid var(--border);
    margin-left: 0.5rem;
    padding: 0.25rem 0 0.25rem 0.5rem;
    background: transparent;
  }
}

/* ── Articles & Cards ──────────────────────────────────────────────────*/
/* Semantic article: <article><header><h3>Title</h3></header>Content</article> */
/* Container query: layout adapts to article's own width, not viewport.
   An article in a sidebar shrinks gracefully; at full width it expands. */

article {
  container-type: inline-size;
  container-name: article;
  background: transparent;
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: 1rem 1.25rem;
  margin: 0.75rem 0;
}

article > header {
  margin: 0 0 0.5rem 0;
  padding: 0 0 0.4rem 0;
  border-bottom: 1px solid var(--border-subtle);
  border-top: none;
  border-radius: 0;
  background-color: transparent;
}

article header h3 {
  margin: 0;
  padding: 0;
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-3);
}

/* Narrow container: compact card (sidebar, grid cell) */
@container article (max-width: 300px) {
  article > header {
    border-bottom: none;
    padding-bottom: 0;
    margin-bottom: 0.25rem;
  }
  
  article header h3 {
    font-size: var(--text-xs);
  }
  
  article > :is(p, dl, ul, ol) {
    font-size: var(--text-sm);
  }
}

/* Wide container: spacious layout */
@container article (min-width: 600px) {
  article {
    padding: 1.5rem 2rem;
  }
  
  article > header {
    margin-bottom: 0.75rem;
    padding-bottom: 0.5rem;
  }
}

/* ── Definition Lists ──────────────────────────────────────────────────*/
/* Monospace data display for dt/dd pairs */

dt {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--text-2);
  margin-top: 0.75rem;
}

dd {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--text);
  margin-left: 0;
  margin-top: 0.15rem;
}

article dt:first-of-type {
  margin-top: 0;
}

/* ── Sections ──────────────────────────────────────────────────────────*/

section + section {
  padding-top: 1.5rem;
  border-top: 1px solid var(--border-subtle);
}

hgroup p {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--text-3);
  margin-top: 0.25rem;
}

/* Section intro: hgroup as centered subtitle block */
section > hgroup:first-child {
  text-align: center;
  margin-bottom: var(--space-6);
}

/* Card variant: navigation cards use UI font h3, not session-log monospace */
article[data-role="card"] header h3 {
  font-family: var(--font-ui);
  font-size: var(--h3-size);
  font-weight: var(--h3-weight);
  text-transform: none;
  letter-spacing: normal;
  color: var(--text);
}

/* ── Footer ────────────────────────────────────────────────────────────*/

body > footer,
footer:last-child {
  margin-top: 3rem;
  padding-top: 1.5rem;
  padding-bottom: 2rem;
  border-top: 1px solid var(--border);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--text-3);
}

/* ── Layer: 04-data-attrs ─────────────────────────────────── */
/**
 * 04-data-attrs.css
 * Agentic extensions: data-attribute selectors for vault concepts
 * Part of: Agentic Semantic Web
 */

@layer data-attrs {

/* ══════════════════════════════════════════════════════════════════════════
   Vault-specific role patterns
   ══════════════════════════════════════════════════════════════════════════ */

/* Command box for install instructions */
[data-role="command-box"] {
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: var(--surface-1);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: 0.75rem 1rem;
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  margin: 1.5rem 0;
}

[data-role="command-box"] .prefix {
  color: var(--text-3);
  margin-right: 0.5rem;
  user-select: none;
}

/* ══════════════════════════════════════════════════════════════════════════
   Wikilinks — [[Note Name]]
   ══════════════════════════════════════════════════════════════════════════ */

[data-wikilink] {
  color: var(--accent-blue);
  font-family: var(--font-mono);
  font-size: 0.9em;
  text-decoration: none;
  border-bottom: 1px dotted var(--border);
  transition: border-color 0.15s;
}

[data-wikilink]:hover {
  border-bottom-color: var(--accent-blue);
}

[data-wikilink][data-unresolved] {
  color: var(--text-dim);
  border-bottom-color: var(--text-dim);
}

/* ══════════════════════════════════════════════════════════════════════════
   Tasks — - [ ] todo / - [x] done / - [?] blocked
   ══════════════════════════════════════════════════════════════════════════ */

[data-task] {
  display: block;
  padding: 0.4em 0;
  font-family: var(--font-mono);
  font-size: var(--text-sm);
}

[data-task]::before {
  margin-right: 0.75em;
  font-weight: 700;
}

[data-task="todo"]::before {
  content: "○";
  color: var(--accent-orange);
}

[data-task="done"]::before {
  content: "●";
  color: var(--accent);
}

[data-task="blocked"]::before {
  content: "◐";
  color: var(--accent-red);
}

/* ══════════════════════════════════════════════════════════════════════════
   Status indicators — awake / sleeping / blocked / unknown
   ══════════════════════════════════════════════════════════════════════════ */

[data-status] {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
}

[data-status="awake"] {
  color: var(--accent);
}

[data-status="sleeping"] {
  color: var(--text-3);
  font-style: italic;
}

[data-status="blocked"] {
  color: var(--accent-red);
}

[data-status="unknown"] {
  color: var(--text-dim);
}

/* ══════════════════════════════════════════════════════════════════════════
   Callouts — note / warning / error / tip
   ══════════════════════════════════════════════════════════════════════════ */

[data-callout] {
  margin: 1.5em 0;
  padding: 1em 1.25em;
  border-left: 3px solid var(--accent-blue);
  background: var(--surface-card);
  border-radius: 0 var(--radius-md) var(--radius-md) 0;
}

[data-callout="warning"] { border-left-color: var(--accent-orange); }
[data-callout="error"]   { border-left-color: var(--accent-red); }
[data-callout="tip"]     { border-left-color: var(--accent); }

[data-callout-title] {
  font-family: var(--font-mono);
  font-weight: 500;
  font-size: var(--text-sm);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text);
  margin-bottom: 0.5em;
  display: block;
}

/* ══════════════════════════════════════════════════════════════════════════
   Session metadata — mode / timestamp / hash
   ══════════════════════════════════════════════════════════════════════════ */

[data-session] {
  display: block;
  padding: 0.75em 1em;
  margin: 1em 0;
  background: var(--surface-card);
  border: 1px solid var(--border);
  border-left: 3px solid var(--accent);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
}

[data-mode="autonomous"] { color: var(--accent-blue); }
[data-mode="interactive"] { color: var(--accent); }

[data-session-meta] {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  color: var(--text-3);
}

/* ══════════════════════════════════════════════════════════════════════════
   Tags and hashes
   ══════════════════════════════════════════════════════════════════════════ */

[data-tag] {
  color: var(--accent-blue);
  font-family: var(--font-mono);
  font-size: 0.85em;
  text-decoration: none;
}

[data-tag]::before { content: "#"; }
[data-tag]:hover { color: var(--text); }

[data-hash] {
  font-family: var(--font-mono);
  color: var(--text-3);
  font-size: var(--text-sm);
  letter-spacing: -0.02em;
}

/* ══════════════════════════════════════════════════════════════════════════
   Semantic roles — timeline / status-card / diff
   ══════════════════════════════════════════════════════════════════════════ */

[data-role="timeline"] {
  border-left: 1px solid var(--border);
  padding-left: 1.5em;
  margin: 1.5em 0;
}

[data-role="timeline"] > * {
  position: relative;
  margin-bottom: 1.5em;
}

[data-role="timeline"] > *::before {
  content: "●";
  position: absolute;
  left: -1.85em;
  color: var(--accent);
  font-size: 0.7em;
}

[data-role="status-card"] {
  padding: 1.25em;
  background: var(--surface-card);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  margin: 1em 0;
}

[data-role="diff"] {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  padding: 0.75em 1em;
  background: var(--surface-1);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  overflow-x: auto;
}

[data-role="diff"] .add    { color: var(--accent); }
[data-role="diff"] .remove { color: var(--accent-red); }
[data-role="diff"] .context { color: var(--text-dim); }

/* ══════════════════════════════════════════════════════════════════════════
   Tooltips — hover/focus-visible, accessible
   Usage: <span data-tooltip="Explanation text">term</span>
   ══════════════════════════════════════════════════════════════════════════ */

[data-tooltip] {
  position: relative;
  cursor: help;
  border-bottom: 1px dotted var(--text-dim);
}

[data-tooltip]::after {
  content: attr(data-tooltip);
  position: absolute;
  bottom: calc(100% + 0.5rem);
  left: 50%;
  transform: translateX(-50%);
  padding: 0.4rem 0.75rem;
  background: var(--surface-1);
  color: var(--text);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  line-height: 1.4;
  white-space: nowrap;
  max-width: 280px;
  overflow: hidden;
  text-overflow: ellipsis;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.15s;
  z-index: 10;
}

/* Arrow */
[data-tooltip]::before {
  content: "";
  position: absolute;
  bottom: calc(100% + 0.15rem);
  left: 50%;
  transform: translateX(-50%);
  border: 0.35rem solid transparent;
  border-top-color: var(--border);
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.15s;
  z-index: 10;
}

[data-tooltip]:hover::after,
[data-tooltip]:hover::before,
[data-tooltip]:focus-visible::after,
[data-tooltip]:focus-visible::before {
  opacity: 1;
}

/* Bottom placement */
[data-tooltip-position="bottom"]::after {
  bottom: auto;
  top: calc(100% + 0.5rem);
}

[data-tooltip-position="bottom"]::before {
  bottom: auto;
  top: calc(100% + 0.15rem);
  border-top-color: transparent;
  border-bottom-color: var(--border);
}

/* Generator utility roles */
[data-role="log-entry"] {
  padding: 0.3rem 0;
  border-bottom: 1px solid var(--border-subtle);
}

[data-role="list-item"] {
  padding: 0.1rem 0;
}


/* ══════════════════════════════════════════════════════════════════════════
   Sub-navigation — section nav within a page group
   ══════════════════════════════════════════════════════════════════════════ */

/* Usage:
   <nav data-subnav>
     <a href="/vigilio/" aria-current="page">index</a>
     <a href="/vigilio/now">now</a>
     <a href="/vigilio/status">status</a>
   </nav>
   
   Place inside <main class="container"> before article content.
   aria-current="page" marks the active section. No classes needed. */

[data-subnav] {
  display: flex;
  align-items: center;
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  margin-bottom: 2rem;
  padding-bottom: 0.75rem;
  border-bottom: 1px solid var(--border);
}

[data-subnav] a {
  color: var(--text-dim);
  text-decoration: none;
  transition: color 0.15s;
}

[data-subnav] a + a::before {
  content: "/";
  color: var(--border);
  margin: 0 0.6rem;
}

[data-subnav] a:hover {
  color: var(--text);
}

[data-subnav] a[aria-current="page"] {
  color: var(--text);
}


/* ══════════════════════════════════════════════════════════════════════════
   data-diff — CSS diff viewer for code review and comparison output
   Issue: agentic-semantic-web#52
   ══════════════════════════════════════════════════════════════════════════ */

[data-diff] {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  background: var(--surface-1);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  overflow-x: auto;
  margin: var(--space-5) 0;
  padding: 0;
}

/* File header */
[data-diff-file] {
  display: block;
  background: var(--surface-card);
  border-bottom: 1px solid var(--border);
  padding: 0.4em 1em;
  font-size: var(--text-xs);
  color: var(--text-3);
  letter-spacing: 0.02em;
}

/* Individual diff lines */
[data-diff-line] {
  display: block;
  padding: 0.15em 1em 0.15em 3em;
  position: relative;
  line-height: 1.6;
  white-space: pre;
}

/* Prefix gutter marker */
[data-diff-line]::before {
  position: absolute;
  left: 1em;
  width: 1.5em;
  text-align: center;
}

[data-diff-line="added"] {
  background: rgba(34, 197, 94, 0.10);
  color: var(--green-3);
}

[data-diff-line="added"]::before {
  content: "+";
  color: var(--green-5);
}

[data-diff-line="removed"] {
  background: rgba(239, 68, 68, 0.10);
  color: #f8b4b4;
}

[data-diff-line="removed"]::before {
  content: "−";
  color: var(--red-6);
}

[data-diff-line="context"] {
  color: var(--text-3);
}

[data-diff-line="context"]::before {
  content: " ";
}

/* Hunk header — @@ line markers */
[data-diff-line="hunk"] {
  background: rgba(99, 179, 237, 0.07);
  color: var(--accent-blue);
  font-style: italic;
}

[data-diff-line="hunk"]::before {
  content: "@@";
  font-style: normal;
  color: var(--accent-blue);
  opacity: 0.6;
}


/* ══════════════════════════════════════════════════════════════════════════
   data-redacted — privacy-aware redaction styling
   Issue: agentic-semantic-web#55
   ══════════════════════════════════════════════════════════════════════════ */

/* Base: fully redacted — black bar, not selectable */
[data-redacted] {
  background: var(--text);
  color: transparent;
  border-radius: var(--radius-sm);
  user-select: none;
  /* Screen reader replacement handled via aria-label on element */
}

/* Block-level redaction */
[data-redacted]:is(p, div, section, article, li) {
  display: block;
  min-height: 1.2em;
}

/* Variant: reveal on hover/focus */
[data-redacted="reveal"] {
  cursor: pointer;
  transition: background 0.15s, color 0.15s;
}

[data-redacted="reveal"]:hover,
[data-redacted="reveal"]:focus {
  background: var(--surface-card);
  color: var(--text);
  outline: 1px solid var(--border);
  border-radius: var(--radius-sm);
  user-select: text;
}

/* Variant: label — shows [REDACTED] text */
[data-redacted="label"] {
  background: var(--surface-1);
  color: var(--text-dim);
  font-family: var(--font-mono);
  font-size: 0.85em;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 0 0.35em;
  user-select: none;
}

[data-redacted="label"]::before {
  content: "[REDACTED]";
}

[data-redacted="label"] > * {
  display: none;
}

/* Light mode adjustments */
@media (prefers-color-scheme: light) {
  [data-redacted] {
    background: #1a1a1a;
  }
  [data-redacted="reveal"]:hover,
  [data-redacted="reveal"]:focus {
    background: #f0f0f0;
    color: #111;
  }
}


/* ══════════════════════════════════════════════════════════════════════════
   data-reading-progress — CSS-only scroll progress bar
   Issue: agentic-semantic-web#53
   ══════════════════════════════════════════════════════════════════════════ */

@keyframes asw-reading-progress {
  from { width: 0%; }
  to   { width: 100%; }
}

[data-reading-progress]::before {
  content: "";
  position: fixed;
  top: 0;
  left: 0;
  height: 2px;
  background: var(--accent);
  z-index: 9999;
  /* animation-timeline: scroll() — fills as the element scrolls */
  animation: asw-reading-progress auto linear;
  animation-timeline: scroll(root);
}

/* Graceful degradation: if animation-timeline unsupported, ::before is empty */

/* Subtle shadow so bar is visible on light pages too */
[data-reading-progress]::before {
  box-shadow: 0 0 6px var(--accent-focus);
}


/* ══════════════════════════════════════════════════════════════════════════
   ai-disclosure — styling for AI content disclosure attributes
   Issue: agentic-semantic-web#58
   ══════════════════════════════════════════════════════════════════════════ */

/* Subtle accent on AI-generated sections — light left border indicator */
[ai-disclosure] {
  border-left: 2px solid transparent;
  padding-left: var(--space-3);
}

[ai-disclosure="ai-generated"] {
  border-left-color: rgba(34, 197, 94, 0.25);
}

[ai-disclosure="ai-assisted"] {
  border-left-color: rgba(99, 179, 237, 0.20);
}

/* Autonomous — more distinct: full accent treatment */
[ai-disclosure="autonomous"] {
  border-left-color: var(--accent);
  border-left-width: 2px;
}

/* Mixed — yellow/amber to signal blended provenance */
[ai-disclosure="mixed"] {
  border-left-color: rgba(245, 158, 11, 0.30);
}

/* Disclosure badge — optional ::after label for verbose mode */
[ai-disclosure][data-show-disclosure]::after {
  content: " [" attr(ai-disclosure) "]";
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--text-dim);
  vertical-align: super;
  font-size: 0.65em;
}

/* ── CTA buttons: data-role on <a> ─────────────────────────────────────── */
/* Agents write <a href="..."> naturally. data-role styles intent without class names. */
a[data-role="primary"] {
  display: inline-flex;
  align-items: center;
  padding: var(--space-2) var(--space-5);
  background: var(--accent);
  color: var(--on-accent);
  border-radius: var(--radius-md);
  font-weight: 500;
  text-decoration: none;
  transition: background var(--ease-1) 150ms;
}

a[data-role="primary"]:hover {
  background: var(--accent-hover);
  color: var(--on-accent);
  text-decoration: none;
}

a[data-role="secondary"] {
  display: inline-flex;
  align-items: center;
  padding: var(--space-2) var(--space-5);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  color: var(--text-2);
  text-decoration: none;
  transition: border-color var(--ease-1) 150ms, color var(--ease-1) 150ms;
}

a[data-role="secondary"]:hover {
  border-color: var(--accent);
  color: var(--text);
  text-decoration: none;
}

/* ── Badge atom ────────────────────────────────────────────────────────────── */
/* Icon badge / token pill. <span data-badge>token</span>. */
[data-badge] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: var(--space-2) var(--space-3);
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--accent);
  margin-bottom: var(--space-3);
}

} /* end @layer data-attrs */

/* ── Layer: 05-utilities ─────────────────────────────────── */
/**
 * 05-utilities.css
 * Utility patterns (layout helpers, text modifiers, responsive utilities)
 * Part of: Agentic Semantic Web
 */

@layer utilities {

/* ══════════════════════════════════════════════════════════════════════════
   Text utilities
   ══════════════════════════════════════════════════════════════════════════ */

[data-text~="mono"] {
  font-family: var(--font-mono);
}

[data-text~="dim"] {
  color: var(--text-3);
}

[data-text~="accent"] {
  color: var(--accent);
}

[data-text~="small"] {
  font-size: var(--text-xs);
}

/* Eyebrow — small monospace uppercase accent label above a heading */
[data-text~="eyebrow"] {
  display: block;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--accent);
  margin-bottom: var(--space-2);
}

/* ══════════════════════════════════════════════════════════════════════════
   Layout utilities
   ══════════════════════════════════════════════════════════════════════════ */

/* Grid layout with responsive stacking */
[data-layout="grid-2"] {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
}

@media (max-width: 600px) {
  [data-layout="grid-2"] {
    grid-template-columns: 1fr;
  }
}

/* Card grid — responsive wrap for article cards */
[data-layout="card-grid"] {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
}

[data-layout="card-grid"] > * {
  flex: 1 1 calc(50% - 0.75rem);
  min-width: 240px;
}

@media (max-width: 600px) {
  [data-layout="card-grid"] > * {
    flex-basis: 100%;
  }
}

/* Stats bar — horizontal row of key-value metrics */
[data-layout="stats"] {
  display: flex;
  flex-wrap: wrap;
  gap: 0;
}

[data-layout="stats"] > * {
  flex: 1 1 0;
  min-width: 5rem;
  padding: 0.75rem 0;
  text-align: center;
  border-right: 1px solid var(--border-subtle);
}

[data-layout="stats"] > *:last-child {
  border-right: none;
}

[data-layout="stats"] .value {
  display: block;
  font-family: var(--font-mono);
  font-size: 1.5rem;
  font-weight: 600;
  line-height: 1.2;
}

[data-layout="stats"] .label {
  display: block;
  font-family: var(--font-mono);
  font-size: 0.65rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-3);
  margin-top: 0.2rem;
}

@media (max-width: 400px) {
  [data-layout="stats"] > * {
    flex-basis: 33%;
    border-right: none;
    border-bottom: 1px solid var(--border-subtle);
  }
}

/* Inline definition lists */
dl[data-layout="inline"] {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 0.15rem 1rem;
  align-items: baseline;
}

dl[data-layout="inline"] dt,
dl[data-layout="inline"] dd {
  margin: 0;
  padding: 0;
  margin-inline-start: 0;
}

/* ══════════════════════════════════════════════════════════════════════════
   Responsive visibility
   ══════════════════════════════════════════════════════════════════════════ */

/* Hide on mobile */
[data-visible="desktop"] {
  display: none;
}

@media (min-width: 768px) {
  [data-visible="desktop"] {
    display: initial;
  }
}

/* Hide on desktop */
[data-visible="mobile"] {
  display: initial;
}

@media (min-width: 768px) {
  [data-visible="mobile"] {
    display: none;
  }
}

/* ══════════════════════════════════════════════════════════════════════════
   Loading indicator — aria-busy
   Usage: <button aria-busy="true">Loading…</button>
          <section aria-busy="true">Content loading…</section>
   ══════════════════════════════════════════════════════════════════════════ */

@keyframes spin {
  to { transform: rotate(360deg); }
}

[aria-busy="true"] {
  cursor: progress;
}

/* Inline spinner before text in buttons and interactive elements */
:is(button, [role="button"], a)[aria-busy="true"]::before {
  content: "";
  display: inline-block;
  width: 1em;
  height: 1em;
  margin-right: 0.5em;
  vertical-align: -0.125em;
  border: 2px solid currentColor;
  border-top-color: transparent;
  border-radius: 50%;
  animation: spin 0.6s linear infinite;
}

/* Disable interaction on busy buttons */
:is(button, [role="button"])[aria-busy="true"] {
  pointer-events: none;
  opacity: 0.7;
}

/* Block-level busy: overlay spinner centered */
:is(section, article, main, div)[aria-busy="true"] {
  position: relative;
  min-height: 3rem;
}

:is(section, article, main, div)[aria-busy="true"]::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 1.5rem;
  height: 1.5rem;
  margin: -0.75rem 0 0 -0.75rem;
  border: 2px solid var(--text-3);
  border-top-color: transparent;
  border-radius: 50%;
  animation: spin 0.6s linear infinite;
}

/* ══════════════════════════════════════════════════════════════════════════
   Accessibility enhancements
   ══════════════════════════════════════════════════════════════════════════ */

/* Disable all transitions and animations for reduced motion preference */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* Increase contrast for high-contrast preference */
@media (prefers-contrast: more) {
  :root {
    --border-color: #404040;
    --border-color-subtle: #2d2d2d;
    --text-primary: #ffffff;
    --text-secondary: #d4d4d4;
    --border-width: 2px;
  }
  
  /* Thicker borders on interactive elements */
  a,
  button,
  input,
  select,
  textarea,
  [data-wikilink] {
    border-width: 2px;
  }
  
  /* Stronger focus indicators */
  :focus-visible {
    outline-width: 3px;
    outline-offset: 3px;
  }
}

} /* end @layer utilities */

/* ── Layer: 06-charts ─────────────────────────────────── */
/**
 * 06-charts.css
 * Data-driven charts from semantic HTML tables.
 * Absorbed from Charts.css — class API converted to data-attributes.
 *
 * Core vocabulary:
 *   data-chart="bar|column|line|area|pie"   — chart type
 *   data-chart-labels                        — show axis labels (thead)
 *   data-chart-spacing="1–5"                — gap between bars (default 2)
 *   data-chart-stacked                       — stacked multi-dataset mode
 *   style="--size: 0.8"                      — data injection on <td> (legal exception)
 *   style="--color: #hex"                    — per-row color override on <tr>
 *
 * Pragmatic exception: style="--size: N" and style="--color: X" on table cells
 * are DATA injection, not presentation — they bind numeric values to CSS.
 * This is the one place ASW permits inline style attributes.
 *
 * Chart dimensions:
 *   --chart-height       Bar chart: bar thickness. Column chart: chart height.
 *   --chart-bar-size     Column chart: bar width.
 *   --chart-gap          Gap between data points.
 *
 * Lineage: Charts.css (MIT) — converted class API to data-attribute API.
 * Reference: chartscss.org
 */

@layer charts {

/* ══════════════════════════════════════════════════════════════════════════
   Shared chart tokens
   ══════════════════════════════════════════════════════════════════════════ */

[data-chart] {

  /* Data series colors — cycle via nth-child in each chart type */
  --chart-color-1:  var(--accent);           /* green  */
  --chart-color-2:  var(--accent-blue);      /* blue   */
  --chart-color-3:  var(--accent-orange);    /* orange */
  --chart-color-4:  var(--accent-red);       /* red    */
  --chart-color-5:  var(--purple-5, #ae3ec9);
  --chart-color-6:  var(--cyan-5, #15aabf);
  --chart-color-7:  var(--pink-5, #e64980);
  --chart-color-8:  var(--teal-5, #0ca678);

  /* Layout */
  --chart-height:   200px;   /* column chart area height */
  --chart-bar-size: 2rem;    /* column bar width / bar chart bar height */
  --chart-gap:      6px;     /* spacing between data points */

  /* Axis / labels */
  --chart-axis:          var(--border);
  --chart-axis-width:    2px;
  --chart-label:         var(--text-3);
  --chart-label-size:    var(--text-xs);

  /* Bar styling */
  --chart-radius:   var(--radius-2);

  /* Reset table styles — <table> is presentational structure here */
  display: block;
  inline-size: 100%;
  border-collapse: collapse;
  border-spacing: 0;
  background: transparent;
}

[data-chart] caption {
  display: block;
  font-size: var(--text-sm);
  color: var(--text-3);
  text-align: start;
  padding-block-end: var(--size-3);
  caption-side: top;
}

/* thead: hidden by default, shown with data-chart-labels */
[data-chart] thead {
  display: none;
}

[data-chart][data-chart-labels] thead {
  display: block;
}

/* tbody: each chart type overrides this */
[data-chart] tbody {
  display: block;
}

/* ══════════════════════════════════════════════════════════════════════════
   Bar chart — horizontal bars
   ══════════════════════════════════════════════════════════════════════════

   Structure:
     <table data-chart="bar">
       <caption>Title</caption>
       <tbody>
         <tr>
           <th scope="row">Label</th>
           <td style="--size: 0.8">80%</td>
         </tr>
       </tbody>
     </table>

   The bar width = 100% × --size. Bar is a ::before pseudo on td.
   ══════════════════════════════════════════════════════════════════════════ */

[data-chart="bar"] tbody {
  display: flex;
  flex-direction: column;
  gap: var(--chart-gap);

  /* Left axis line */
  border-inline-start: var(--chart-axis-width) solid var(--chart-axis);
  padding-inline-start: 0;
}

[data-chart="bar"] tr {
  display: flex;
  align-items: center;
  gap: var(--size-3);
}

/* Row label (th) */
[data-chart="bar"] th[scope="row"] {
  font-size: var(--chart-label-size);
  font-weight: 400;
  color: var(--chart-label);
  min-inline-size: 5rem;
  max-inline-size: 8rem;
  text-align: end;
  padding-block: 0;
  padding-inline: var(--size-2) 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  flex-shrink: 0;
}

/* Data cell — the track */
[data-chart="bar"] td {
  flex: 1;
  position: relative;
  block-size: var(--chart-bar-size);
  display: flex;
  align-items: center;
  padding: 0;
  overflow: visible;
}

/* The bar itself — ::before */
[data-chart="bar"] td::before {
  content: "";
  display: block;
  block-size: 100%;
  inline-size: calc(100% * var(--size, 0.5));
  background: var(--color, var(--chart-color-1));
  border-radius: 0 var(--chart-radius) var(--chart-radius) 0;
  transition: opacity 0.15s ease, inline-size 0.3s var(--ease-3, ease-out);
}

[data-chart="bar"] td:hover::before {
  opacity: 0.8;
}

/* Data label (text inside/after bar) */
[data-chart="bar"] td::after {
  content: attr(data-value);
  position: absolute;
  inset-inline-start: calc(100% * var(--size, 0.5) + 0.35rem);
  font-size: var(--chart-label-size);
  color: var(--text-3);
  white-space: nowrap;
}

/* Color cycling for multi-series */
[data-chart="bar"] tr:nth-child(1) td::before { background: var(--color, var(--chart-color-1)); }
[data-chart="bar"] tr:nth-child(2) td::before { background: var(--color, var(--chart-color-2)); }
[data-chart="bar"] tr:nth-child(3) td::before { background: var(--color, var(--chart-color-3)); }
[data-chart="bar"] tr:nth-child(4) td::before { background: var(--color, var(--chart-color-4)); }
[data-chart="bar"] tr:nth-child(5) td::before { background: var(--color, var(--chart-color-5)); }
[data-chart="bar"] tr:nth-child(6) td::before { background: var(--color, var(--chart-color-6)); }
[data-chart="bar"] tr:nth-child(7) td::before { background: var(--color, var(--chart-color-7)); }
[data-chart="bar"] tr:nth-child(8) td::before { background: var(--color, var(--chart-color-8)); }
[data-chart="bar"] tr:nth-child(n+9) td::before { background: var(--color, var(--chart-color-1)); }

/* ── Spacing modifiers ──────────────────────────────────── */
[data-chart="bar"][data-chart-spacing="1"] tbody { gap: 2px; }
[data-chart="bar"][data-chart-spacing="2"] tbody { gap: 6px; }
[data-chart="bar"][data-chart-spacing="3"] tbody { gap: 10px; }
[data-chart="bar"][data-chart-spacing="4"] tbody { gap: 16px; }
[data-chart="bar"][data-chart-spacing="5"] tbody { gap: 24px; }

/* ══════════════════════════════════════════════════════════════════════════
   Column chart — vertical bars
   ══════════════════════════════════════════════════════════════════════════

   Structure:
     <table data-chart="column">
       <caption>Title</caption>
       <tbody>
         <tr>
           <th scope="row">Jan</th>
           <td style="--size: 0.6">60</td>
         </tr>
       </tbody>
     </table>

   The chart area is --chart-height. Each column height = --chart-height × --size.
   Columns sit at the bottom of the chart area (flex-end alignment).
   ══════════════════════════════════════════════════════════════════════════ */

[data-chart="column"] tbody {
  display: flex;
  flex-direction: row;
  align-items: flex-end;
  gap: var(--chart-gap);
  block-size: var(--chart-height);
  border-block-end: var(--chart-axis-width) solid var(--chart-axis);
  padding: 0;
}

[data-chart="column"] tr {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  flex: 1;
  block-size: 100%;
  gap: var(--size-1);
}

/* Column label (th) at the bottom */
[data-chart="column"] th[scope="row"] {
  font-size: var(--chart-label-size);
  font-weight: 400;
  color: var(--chart-label);
  text-align: center;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-inline-size: 100%;
  padding: 0;
  padding-block-start: var(--size-1);
  /* Move below axis */
  order: 2;
  margin-block-start: var(--size-2);
}

/* Data cell — the column bar */
[data-chart="column"] td {
  display: block;
  inline-size: 100%;
  block-size: calc(var(--chart-height) * var(--size, 0.5));
  padding: 0;
  order: 1;
  transition: block-size 0.3s var(--ease-3, ease-out);
  border-radius: var(--chart-radius) var(--chart-radius) 0 0;
}

/* Color cycling for columns */
[data-chart="column"] tr:nth-child(1) td { background: var(--color, var(--chart-color-1)); }
[data-chart="column"] tr:nth-child(2) td { background: var(--color, var(--chart-color-2)); }
[data-chart="column"] tr:nth-child(3) td { background: var(--color, var(--chart-color-3)); }
[data-chart="column"] tr:nth-child(4) td { background: var(--color, var(--chart-color-4)); }
[data-chart="column"] tr:nth-child(5) td { background: var(--color, var(--chart-color-5)); }
[data-chart="column"] tr:nth-child(6) td { background: var(--color, var(--chart-color-6)); }
[data-chart="column"] tr:nth-child(7) td { background: var(--color, var(--chart-color-7)); }
[data-chart="column"] tr:nth-child(8) td { background: var(--color, var(--chart-color-8)); }
[data-chart="column"] tr:nth-child(n+9) td { background: var(--color, var(--chart-color-1)); }

[data-chart="column"] td:hover {
  opacity: 0.8;
}

/* ── Spacing modifiers ──────────────────────────────────── */
[data-chart="column"][data-chart-spacing="1"] tbody { gap: 2px; }
[data-chart="column"][data-chart-spacing="2"] tbody { gap: 6px; }
[data-chart="column"][data-chart-spacing="3"] tbody { gap: 12px; }
[data-chart="column"][data-chart-spacing="4"] tbody { gap: 20px; }
[data-chart="column"][data-chart-spacing="5"] tbody { gap: 32px; }

/* ── Column chart labels ───────────────────────────────── */
/* When data-chart-labels present, show thead as axis header */
[data-chart="column"][data-chart-labels] thead {
  display: flex;
  justify-content: space-around;
  margin-block-end: var(--size-2);
}

[data-chart="column"][data-chart-labels] thead th {
  font-size: var(--chart-label-size);
  color: var(--chart-label);
  font-weight: 400;
  text-align: center;
  flex: 1;
}

/* ══════════════════════════════════════════════════════════════════════════
   Area chart — filled area from baseline
   ══════════════════════════════════════════════════════════════════════════

   CSS-only area charts use linear-gradient on the td background.
   Each point's area = --size fraction of the column height.

   Structure identical to column — but cells connect visually.
   The visual connection requires identical widths and no gap (or clip).
   ══════════════════════════════════════════════════════════════════════════ */

[data-chart="area"] tbody {
  display: flex;
  flex-direction: row;
  align-items: flex-end;
  block-size: var(--chart-height);
  border-block-end: var(--chart-axis-width) solid var(--chart-axis);
  gap: 0; /* no gap — cells must connect */
  padding: 0;
}

[data-chart="area"] tr {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  justify-content: flex-end;
  flex: 1;
  block-size: 100%;
}

[data-chart="area"] th[scope="row"] {
  font-size: var(--chart-label-size);
  font-weight: 400;
  color: var(--chart-label);
  text-align: center;
  order: 2;
  padding-block-start: var(--size-1);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Area cell — filled gradient from --size down to baseline */
[data-chart="area"] td {
  display: block;
  inline-size: 100%;
  block-size: calc(var(--chart-height) * var(--size, 0.5));
  padding: 0;
  order: 1;
  background: linear-gradient(
    to bottom,
    var(--chart-color-1) 0%,
    color-mix(in oklch, var(--chart-color-1), transparent 70%) 100%
  );
}

/* ══════════════════════════════════════════════════════════════════════════
   Line chart — dots connected by a visual line
   ══════════════════════════════════════════════════════════════════════════

   CSS-only: we use the column approach but mark the top with a dot (::after)
   and use a border-top line to simulate connection between points.
   True line interpolation requires JavaScript or SVG.

   What we ship: column bars in outline/transparent mode with an accent dot
   at the top — semantic, readable, no JS.
   ══════════════════════════════════════════════════════════════════════════ */

[data-chart="line"] tbody {
  display: flex;
  flex-direction: row;
  align-items: flex-end;
  block-size: var(--chart-height);
  border-block-end: var(--chart-axis-width) solid var(--chart-axis);
  gap: 0;
  padding: 0;
  position: relative;
}

[data-chart="line"] tr {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  flex: 1;
  block-size: 100%;
}

[data-chart="line"] th[scope="row"] {
  font-size: var(--chart-label-size);
  font-weight: 400;
  color: var(--chart-label);
  text-align: center;
  order: 2;
  padding-block-start: var(--size-1);
  white-space: nowrap;
}

/* Line chart cell — transparent bar with accent top border + dot */
[data-chart="line"] td {
  display: block;
  inline-size: 100%;
  block-size: calc(var(--chart-height) * var(--size, 0.5));
  padding: 0;
  order: 1;
  background: linear-gradient(
    to bottom,
    color-mix(in oklch, var(--chart-color-1), transparent 80%) 0%,
    transparent 60%
  );
  border-block-start: 2px solid var(--chart-color-1);
  position: relative;
}

/* Dot at data point */
[data-chart="line"] td::before {
  content: "";
  display: block;
  position: absolute;
  inset-block-start: -5px;
  inset-inline-start: 50%;
  translate: -50% 0;
  inline-size: 8px;
  block-size: 8px;
  border-radius: 50%;
  background: var(--chart-color-1);
  border: 2px solid var(--surface);
  z-index: 1;
}

/* ══════════════════════════════════════════════════════════════════════════
   Pie chart — conic-gradient segments
   ══════════════════════════════════════════════════════════════════════════

   CSS-only pie charts use conic-gradient on a single element.
   Each segment's arc = --size × 360deg.
   Requires stacking values in CSS — not practical to automate per-row.

   For agent use: pie charts work best with explicit conic-gradient
   set as a custom property. The data-chart="pie" wrapper provides
   the shape and size; the agent sets --pie-segments.
   ══════════════════════════════════════════════════════════════════════════ */

[data-chart="pie"] {
  --pie-size: min(200px, 100%);
  --pie-segments: conic-gradient(
    var(--chart-color-1) 0% 25%,
    var(--chart-color-2) 25% 50%,
    var(--chart-color-3) 50% 75%,
    var(--chart-color-4) 75% 100%
  );
}

/* Pie uses a generated element — hide table structure visually */
[data-chart="pie"] tbody { display: none; }

/* Show caption + legend from thead */
[data-chart="pie"] thead {
  display: flex;
  flex-wrap: wrap;
  gap: var(--size-2);
  justify-content: center;
  margin-block-end: var(--size-3);
}

[data-chart="pie"] thead th {
  font-size: var(--chart-label-size);
  color: var(--chart-label);
  font-weight: 400;
}

/* The pie rendered as ::before on the table element */
[data-chart="pie"]::before {
  content: "";
  display: block;
  inline-size: var(--pie-size);
  block-size: var(--pie-size);
  border-radius: 50%;
  background: var(--pie-segments);
  margin-inline: auto;
}

/* ══════════════════════════════════════════════════════════════════════════
   Stacked bars — data-chart-stacked modifier
   ══════════════════════════════════════════════════════════════════════════
   When multiple <td> in one <tr>, stack them.
   ══════════════════════════════════════════════════════════════════════════ */

[data-chart="bar"][data-chart-stacked] td {
  /* Multiple tds per row — share the bar track inline */
  display: inline-block;
  inline-size: calc(100% * var(--size, 0.2));
  border-radius: 0;
}

[data-chart="bar"][data-chart-stacked] td::before {
  display: none; /* td IS the bar in stacked mode */
}

[data-chart="bar"][data-chart-stacked] td:first-of-type {
  border-radius: 0 0 0 0;
}

[data-chart="bar"][data-chart-stacked] td:last-of-type {
  border-radius: 0 var(--chart-radius) var(--chart-radius) 0;
}

/* Stacked color cycling */
[data-chart][data-chart-stacked] td:nth-of-type(1) { background: var(--chart-color-1); }
[data-chart][data-chart-stacked] td:nth-of-type(2) { background: var(--chart-color-2); }
[data-chart][data-chart-stacked] td:nth-of-type(3) { background: var(--chart-color-3); }
[data-chart][data-chart-stacked] td:nth-of-type(4) { background: var(--chart-color-4); }

/* ══════════════════════════════════════════════════════════════════════════
   Accessibility
   ══════════════════════════════════════════════════════════════════════════ */

/* Ensure cell content (the data value) is readable for screen readers
   but visually hidden inside the bar — text is in aria / caption */
[data-chart="bar"] td,
[data-chart="column"] td {
  font-size: var(--chart-label-size);
  color: transparent; /* data visible to SR, hidden visually */
}

/* Respect user preference — no transitions */
@media (prefers-reduced-motion: reduce) {
  [data-chart] td,
  [data-chart] td::before {
    transition: none;
  }
}

/* ══════════════════════════════════════════════════════════════════════════
   Radial chart — circular gauge
   ══════════════════════════════════════════════════════════════════════════

   Structure:
     <table data-chart="radial" style="--size: 0.72">
       <caption>Token budget used</caption>
       <tbody><tr><td><span>72%</span></td></tr></tbody>
     </table>

   The gauge is a conic-gradient on the td element.
   --size (0–1) drives the arc: --size × 360deg = colored portion.
   ::before pseudo creates a donut hole cutout over the gradient.
   <span> inside td floats the value text above the donut via z-index.
   ══════════════════════════════════════════════════════════════════════════ */

[data-chart="radial"] {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: var(--size-2);
}

[data-chart="radial"] caption {
  font-size: var(--chart-label-size);
  color: var(--chart-label);
  text-align: center;
  caption-side: bottom;
  padding-block-start: var(--size-2);
}

[data-chart="radial"] tbody { display: flex; }
[data-chart="radial"] tr { display: flex; }

/* The gauge circle */
[data-chart="radial"] td {
  position: relative;
  width: 120px;
  height: 120px;
  border-radius: 50%;
  background: conic-gradient(
    var(--color, var(--chart-color-1)) 0deg calc(var(--size, 0.5) * 360deg),
    var(--surface-1, #111111) 0deg
  );
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: none;
  color: transparent; /* data readable by SR, hidden visually */
}

/* Donut hole */
[data-chart="radial"] td::before {
  content: "";
  position: absolute;
  inset: 18px;
  border-radius: 50%;
  background: var(--surface);
  z-index: 0;
}

/* Value text centered in the donut hole */
[data-chart="radial"] td span {
  position: relative;
  z-index: 1;
  font-size: var(--text-xs);
  font-family: var(--font-mono);
  color: var(--text);
  font-weight: 600;
}

/* Status color variants */
[data-chart="radial"][data-status="warning"] td {
  background: conic-gradient(
    var(--accent-orange, #f08c00) 0deg calc(var(--size, 0.5) * 360deg),
    var(--surface-1, #111111) 0deg
  );
}

[data-chart="radial"][data-status="danger"] td {
  background: conic-gradient(
    var(--accent-red, #e03131) 0deg calc(var(--size, 0.5) * 360deg),
    var(--surface-1, #111111) 0deg
  );
}

/* ══════════════════════════════════════════════════════════════════════════
   Burndown chart — sprint burndown with CSS ideal-line overlay
   ══════════════════════════════════════════════════════════════════════════

   Structure: same as column chart, but:
   - Bars use --accent-red (remaining work = red)
   - tbody::after renders a diagonal linear-gradient as the ideal-line
   - Ideal line runs top-left to bottom-right: full work at start → zero at end

   <table data-chart="burndown">
     <caption>Sprint burndown</caption>
     <tbody>
       <tr><th scope="row">D1</th><td style="--size: 0.95">19</td></tr>
       ...
     </tbody>
   </table>
   ══════════════════════════════════════════════════════════════════════════ */

[data-chart="burndown"] tbody {
  display: flex;
  flex-direction: row;
  align-items: flex-end;
  block-size: var(--chart-height);
  border-block-end: var(--chart-axis-width) solid var(--chart-axis);
  position: relative; /* required for ::after overlay */
  gap: var(--chart-gap);
  padding: 0;
}

/* Ideal-line overlay — diagonal gradient = ideal burn velocity */
[data-chart="burndown"] tbody::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(
    to bottom right,
    color-mix(in oklch, var(--chart-color-2, var(--accent-blue, #4dabf7)), transparent 20%) 0%,
    transparent 100%
  );
  pointer-events: none;
  z-index: 2;
}

[data-chart="burndown"] tr {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  flex: 1;
  block-size: 100%;
  gap: var(--size-1);
}

/* Remaining-work bar — red, with ideal line overlay above it */
[data-chart="burndown"] td {
  display: block;
  inline-size: 100%;
  block-size: calc(var(--chart-height) * var(--size, 0.5));
  background: color-mix(in oklch, var(--chart-color-4, var(--accent-red, #e03131)), transparent 25%);
  border-radius: var(--chart-radius) var(--chart-radius) 0 0;
  order: 1;
  padding: 0;
  border: none;
  color: transparent;
  position: relative;
  z-index: 1;
  transition: opacity 0.15s ease;
}

[data-chart="burndown"] td:hover { opacity: 0.85; }

[data-chart="burndown"] th[scope="row"] {
  font-size: var(--chart-label-size);
  font-weight: 400;
  color: var(--chart-label);
  text-align: center;
  order: 2;
  padding-block-start: var(--size-1);
  white-space: nowrap;
  padding: 0;
  margin-block-start: var(--size-2);
}

/* ── Spacing modifiers for area and line (port from bar/column) ──── */

[data-chart="area"][data-chart-spacing="1"] tbody { gap: 0; }
[data-chart="area"][data-chart-spacing="2"] tbody { gap: 2px; }
[data-chart="area"][data-chart-spacing="3"] tbody { gap: 6px; }
[data-chart="area"][data-chart-spacing="4"] tbody { gap: 12px; }
[data-chart="area"][data-chart-spacing="5"] tbody { gap: 20px; }

[data-chart="line"][data-chart-spacing="1"] tbody { gap: 0; }
[data-chart="line"][data-chart-spacing="2"] tbody { gap: 2px; }
[data-chart="line"][data-chart-spacing="3"] tbody { gap: 6px; }
[data-chart="line"][data-chart-spacing="4"] tbody { gap: 12px; }
[data-chart="line"][data-chart-spacing="5"] tbody { gap: 20px; }

/* ── data-chart-reverse modifier ────────────────────────────────── */

[data-chart="bar"][data-chart-reverse] tbody {
  flex-direction: column-reverse;
}

[data-chart="column"][data-chart-reverse] tbody {
  flex-direction: row-reverse;
}

/* ── data-chart-stacked on column ───────────────────────────────── */

[data-chart="column"][data-chart-stacked] tr {
  flex-direction: row;
  align-items: flex-end;
  gap: 0;
}

[data-chart="column"][data-chart-stacked] td {
  flex: 1;
  border-radius: 0;
  block-size: calc(var(--chart-height) * var(--size, 0.2));
}

[data-chart="column"][data-chart-stacked] td:first-of-type {
  border-radius: var(--chart-radius) 0 0 0;
}

[data-chart="column"][data-chart-stacked] td:last-of-type {
  border-radius: 0 var(--chart-radius) 0 0;
}

/* ── data-chart-labels on bar ────────────────────────────────────── */

[data-chart="bar"][data-chart-labels] thead {
  display: block;
  margin-block-end: var(--size-2);
}

[data-chart="bar"][data-chart-labels] thead th {
  font-size: var(--chart-label-size);
  color: var(--chart-label);
  font-weight: 400;
}

} /* end @layer charts */

/* ── Layer: 08-layout ─────────────────────────────────── */
/**
 * 08-layout.css
 * Layout patterns: container, docs layout, grid helpers
 * Part of: Agentic Semantic Web
 */

/* ── Container ─────────────────────────────────────────────────────── */

.container {
  max-width: var(container-width, 1200px);
  margin-inline: auto;
  padding-inline: var(--space-5);
}

/* ── Body baseline ──────────────────────────────────────────────────── */

body {
  background-color: var(--surface);
  color: var(--text);
  font-weight: var(--font-weight-4);
  line-height: var(--leading);
  font-variant-emoji: text; /* render emoji as monochrome glyphs, not OS pictographs */
  min-height: 100vh;
  /* font-family and font-size live in 00-reset.css — do not set here */
}

/* ── Hero ──────────────────────────────────────────────────────────── */
/* Landing page hero block. Usually <header data-layout="hero">. */
[data-layout="hero"] {
  text-align: center;
  padding: var(--space-8) var(--space-5);
  border-bottom: 1px solid var(--border);
}

/* ── Install snippet ────────────────────────────────────────────────── */
/* One-liner install code pill. <p data-layout="install"><code>...</code></p> */
[data-layout="install"] {
  display: inline-block;
  background: var(--surface-1);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: var(--space-2) var(--space-4);
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  margin: var(--space-4) 0;
}

/* ── Actions row ────────────────────────────────────────────────────── */
/* CTA button row. <nav data-layout="actions"> wraps primary + secondary links. */
nav[data-layout="actions"] {
  display: flex;
  gap: var(--space-4);
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  margin-top: var(--space-5);
  padding: 0;
}

nav[data-layout="actions"] a {
  text-decoration: none;
  color: var(--text-2);
}

nav[data-layout="actions"] a:hover {
  color: var(--text);
}

/* ── Docs layout ────────────────────────────────────────────────────── */

[data-layout="docs"] {
  display: grid;
  grid-template-columns: 220px 1fr 200px;
  grid-template-rows: auto;
  gap: var(--space-6);
  max-width: 1400px;
  margin-inline: auto;
  padding: var(--space-6) var(--space-5);
  align-items: start;
}

/* ── Left sidebar ───────────────────────────────────────────────────── */

[data-layout="docs"] > aside:first-of-type {
  position: sticky;
  top: calc(60px + var(--space-4));
  max-height: calc(100vh - 80px);
  overflow-y: auto;
  /* ASW-styled scrollbar — thin, subtle, no system chrome */
  scrollbar-width: thin;
  scrollbar-color: var(--border) transparent;
}

[data-layout="docs"] > aside:first-of-type::-webkit-scrollbar {
  width: 4px;
}

[data-layout="docs"] > aside:first-of-type::-webkit-scrollbar-track {
  background: transparent;
}

[data-layout="docs"] > aside:first-of-type::-webkit-scrollbar-thumb {
  background: var(--border);
  border-radius: var(--radius-full);
}

[data-layout="docs"] > aside:first-of-type::-webkit-scrollbar-thumb:hover {
  background: var(--text-3);
}

/* Sidebar nav — vertical list, no top-bar chrome */
[data-layout="docs"] > aside:first-of-type nav,
nav[data-nav="sidebar"] {
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  align-items: stretch;
  padding: 0;
  margin: 0;
  border: none;
  gap: 0;
}

[data-layout="docs"] > aside:first-of-type nav small {
  display: block;
  color: var(--text-3);
  font-size: var(--text-xs);
  font-family: var(--font-mono);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  padding: 0 var(--space-3);
  margin-bottom: var(--space-2);
  margin-top: var(--space-4);
}

[data-layout="docs"] > aside:first-of-type nav small:first-child {
  margin-top: 0;
}

[data-layout="docs"] > aside:first-of-type nav ul,
nav[data-nav="sidebar"] ul {
  display: flex;
  flex-direction: column;
  list-style: none;
  margin: 0;
  padding: 0;
  gap: 0;
  font-family: var(--font-ui);
  font-size: var(--text-sm);
}

[data-layout="docs"] > aside:first-of-type nav ul li {
  margin: 0;
  padding: 0;
}

/* No pipe separators in sidebar */
[data-layout="docs"] > aside:first-of-type nav ul li + li::before,
nav[data-nav="sidebar"] ul li + li::before {
  display: none;
}

[data-layout="docs"] > aside:first-of-type nav a {
  display: block;
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-md);
  color: var(--text-2);
  text-decoration: none;
  transition: background-color var(--ease), color var(--ease);
  font-family: var(--font-ui);
  font-size: var(--text-sm);
}

[data-layout="docs"] > aside:first-of-type nav a:hover {
  background-color: var(--surface-hover);
  color: var(--text);
}

[data-layout="docs"] > aside:first-of-type nav a[aria-current] {
  background-color: var(--accent-subtle);
  color: var(--accent);
}

/* ── Main content ───────────────────────────────────────────────────── */

[data-layout="docs"] > article {
  min-width: 0;
}

/* ── Right TOC ──────────────────────────────────────────────────────── */

[data-layout="docs"] > aside[data-toc] {
  position: sticky;
  top: calc(60px + var(--space-4));
  max-height: calc(100vh - 80px);
  overflow-y: auto;
}

/* TOC nav — vertical, compact, no top-bar chrome */
[data-layout="docs"] > aside[data-toc] nav,
nav[data-nav="toc"] {
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  align-items: stretch;
  padding: 0;
  margin: 0;
  border: none;
  gap: 0;
}

[data-layout="docs"] > aside[data-toc] small {
  display: block;
  color: var(--text-3);
  font-size: var(--text-xs);
  font-family: var(--font-mono);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin-bottom: var(--space-2);
}

[data-layout="docs"] > aside[data-toc] nav ul,
nav[data-nav="toc"] ul {
  display: flex;
  flex-direction: column;
  list-style: none;
  margin: 0;
  padding: 0;
  gap: 0;
  font-size: var(--text-xs);
}

[data-layout="docs"] > aside[data-toc] nav ul li {
  margin: 0;
  padding: 0;
}

[data-layout="docs"] > aside[data-toc] nav ul li + li::before,
nav[data-nav="toc"] ul li + li::before {
  display: none;
}

[data-layout="docs"] > aside[data-toc] nav a {
  display: block;
  padding: 0.2rem var(--space-2);
  font-size: var(--text-xs);
  color: var(--text-3);
  text-decoration: none;
  border-left: 2px solid transparent;
  transition: color var(--ease), border-color var(--ease);
}

[data-layout="docs"] > aside[data-toc] nav a:hover {
  color: var(--text);
  border-left-color: var(--border);
}

[data-layout="docs"] > aside[data-toc] nav a[aria-current] {
  color: var(--accent);
  border-left-color: var(--accent);
}

/* ── Prev/Next navigation ───────────────────────────────────────────── */

[data-role="prev-next"] {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: var(--space-8);
  padding-top: var(--space-5);
  border-top: var(--border-width) solid var(--border);
  gap: var(--space-4);
}

[data-role="prev-next"] a {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  text-decoration: none;
  color: var(--text-2);
  max-width: 45%;
  transition: color var(--ease);
}

[data-role="prev-next"] a:hover {
  color: var(--accent);
}

[data-role="prev-next"] a[rel="prev"] {
  align-items: flex-start;
}

[data-role="prev-next"] a[rel="next"] {
  align-items: flex-end;
  margin-left: auto;
}

[data-role="prev-next"] small {
  font-size: var(--text-xs);
  font-family: var(--font-mono);
  color: var(--text-3);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

[data-role="prev-next"] span {
  font-size: var(--text-sm);
}

/* ── Responsive ─────────────────────────────────────────────────────── */

@media (max-width: 1100px) {
  [data-layout="docs"] {
    grid-template-columns: 200px 1fr;
  }
  [data-layout="docs"] > aside[data-toc] {
    display: none;
  }
}

@media (max-width: 768px) {
  [data-layout="docs"] {
    grid-template-columns: 1fr;
    padding: var(--space-4);
  }
  [data-layout="docs"] > aside:first-of-type {
    display: none;
  }
}

/* Allow <main> as content column in docs layout — override body > main container sizing */
[data-layout="docs"] > main {
  max-width: none;
  min-width: 0;
}

/* ── Grid helpers ───────────────────────────────────────────────────── */

[data-layout="grid-2"] {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-5);
}

[data-layout="grid-3"] {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--space-5);
}

[data-layout="card-grid"] {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: var(--space-5);
}

[data-layout="stats"] {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-5);
}

[data-layout="stats"] > * {
  flex: 1;
  min-width: 120px;
}

[data-layout="stats"] [data-stat="value"],
[data-layout="stats"] .value {
  font-family: var(--font-mono);
  font-size: var(--text-3xl);
  font-weight: var(--font-weight-7);
  color: var(--accent);
  display: block;
}

[data-layout="stats"] [data-stat="label"],
[data-layout="stats"] .label {
  font-size: var(--text-xs);
  color: var(--text-3);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  display: block;
}

@media (max-width: 768px) {
  [data-layout="grid-2"],
  [data-layout="grid-3"] {
    grid-template-columns: 1fr;
  }
}

/* ── Prose layout ───────────────────────────────────────────────────── */
/* Reading-optimised width. ~65 characters per line — Bringhurst/LaTeX  */
/* standard for comfortable prose. Use on <main> or any block element.  */

main[data-layout="prose"],
[data-layout="prose"] {
  max-width: 65ch;
  margin-inline: auto;
}

/* ── Timeline layout ────────────────────────────────────────────────── */
/* Chronological spine: vertical accent line, node per event.           */
/* Usage: <ol data-layout="timeline"> <li> <time>…</time> <article>     */
/* Issue: agentic-semantic-web#54                                        */

[data-layout="timeline"] {
  list-style: none;
  padding: 0;
  margin: var(--space-5) 0;
  position: relative;
}

/* Vertical spine */
[data-layout="timeline"]::before {
  content: "";
  position: absolute;
  left: 0.6rem;
  top: 0.5rem;
  bottom: 0.5rem;
  width: 1px;
  background: var(--border);
}

[data-layout="timeline"] > li {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 0 var(--space-5);
  align-items: start;
  padding-left: calc(1.2rem + var(--space-3));
  margin-bottom: var(--space-6);
  position: relative;
}

[data-layout="timeline"] > li:last-child {
  margin-bottom: 0;
}

/* Node dot */
[data-layout="timeline"] > li::before {
  content: "";
  position: absolute;
  left: 0.275rem;
  top: 0.45rem;
  width: 0.65rem;
  height: 0.65rem;
  border-radius: 50%;
  background: var(--accent);
  border: 2px solid var(--surface);
  box-shadow: 0 0 0 1px var(--accent);
}

/* Time element */
[data-layout="timeline"] > li > time {
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  color: var(--text-3);
  white-space: nowrap;
  padding-top: 0.1em;
  display: block;
  margin-bottom: var(--space-1);
}

/* Content */
[data-layout="timeline"] > li > article,
[data-layout="timeline"] > li > div {
  min-width: 0;
}

[data-layout="timeline"] > li > article > :first-child,
[data-layout="timeline"] > li > div > :first-child {
  margin-top: 0;
}

/* Alternate variant: alternating left/right */
[data-layout="timeline alternate"] > li:nth-child(even) {
  direction: rtl;
}

[data-layout="timeline alternate"] > li:nth-child(even) > * {
  direction: ltr;
}

/* ── Report layout ──────────────────────────────────────────────────── */
/* Print-first document layout. Clean on screen, correct on paper.      */
/* Light surface. Constrained width. Print stylesheet built in.         */
/* Issue: agentic-semantic-web#56                                        */

[data-layout="report"] {
  background: var(--surface);
  color: var(--text);
  font-family: var(--font-ui);
  font-size: 1rem;
  line-height: var(--leading);
}

[data-layout="report"] > header,
[data-layout="report"] > main,
[data-layout="report"] > footer {
  max-width: 72ch;
  margin-inline: auto;
  padding-inline: var(--space-5);
}

[data-layout="report"] > header {
  padding-top: var(--space-6);
  padding-bottom: var(--space-5);
  border-bottom: 2px solid var(--border);
  margin-bottom: var(--space-6);
}

[data-layout="report"] > header h1 {
  font-size: var(--text-2xl);
  margin: 0 0 var(--space-3);
  color: var(--text);
}

[data-layout="report"] > main {
  padding-bottom: var(--space-8);
}

[data-layout="report"] > footer {
  border-top: 1px solid var(--border);
  padding-top: var(--space-4);
  padding-bottom: var(--space-4);
  font-size: var(--text-sm);
  color: var(--text-3);
  font-family: var(--font-mono);
}

/* Print styles */
@media print {
  [data-layout="report"] {
    --surface: #ffffff;
    --text: #000000;
    font-size: 11pt;
  }

  [data-layout="report"] > header {
    page-break-after: avoid;
  }

  [data-layout="report"] h2,
  [data-layout="report"] h3 {
    page-break-after: avoid;
  }

  [data-layout="report"] pre,
  [data-layout="report"] table,
  [data-layout="report"] figure {
    page-break-inside: avoid;
  }

  [data-layout="report"] a::after {
    content: " (" attr(href) ")";
    font-size: 0.8em;
    color: #666;
  }

  [data-layout="report"] a[href^="#"]::after {
    content: "";
  }

  [data-layout="report"] nav,
  [data-layout="report"] [data-no-print] {
    display: none !important;
  }
}

