@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Space+Mono:wght@400;700&display=swap');
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
:root{
  --f:'Space Grotesk',system-ui,sans-serif;--fm:'Space Mono','Consolas',monospace;
  --bg:#F8FAFC;--bg2:#F1F5F9;--bg3:#E2E8F0;--srf:#FFFFFF;--brd:#CBD5E1;
  --tx:#0F172A;--tx2:#475569;--tx3:#94A3B8;--ink:#0F172A;
  --ac:#D9A820;--ac2:#B8860B;--ac-lt:#FEF9E7;
  --yw:#D97706;--rd:#DC2626;--bl:#2563EB;--gr:#16A34A;
  --side:210px;--right:240px;--bar:48px;--r:8px;
}
[data-t="d"]{
  --bg:#0B1120;--bg2:#111827;--bg3:#1E293B;--srf:#111827;--brd:#1E293B;
  --tx:#E2E8F0;--tx2:#94A3B8;--tx3:#475569;--ink:#F1F5F9;
  --ac:#F5D060;--ac2:#E8C84A;--ac-lt:#2A2200;
}
html{scroll-behavior:smooth;scroll-padding-top:60px}
body{font-family:var(--f);background:var(--bg);color:var(--tx);font-size:clamp(15px,1.05vw,17px);line-height:1.75;-webkit-font-smoothing:antialiased}
body::before{content:'';position:fixed;inset:0;pointer-events:none;z-index:9999;opacity:.018;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-repeat:repeat;background-size:180px}
[data-t="d"] body::before{opacity:.025;mix-blend-mode:soft-light}
a{color:var(--ac2);text-decoration:none}
a:hover{text-decoration:underline}
[data-t="d"] a{color:var(--ac)}
::selection{background:color-mix(in srgb,var(--ac) 30%,transparent);color:var(--ink)}

/* SCROLLBARS (Mac-like immersion) */
::-webkit-scrollbar{width:12px;height:12px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--tx3) 30%,transparent);border-radius:8px;border:3px solid var(--bg);background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--tx3) 60%,transparent);border:3px solid var(--bg)}

/* FOCUS VISIBLE (Accessibility) */
:focus-visible{outline:2px solid var(--ac);outline-offset:2px;border-radius:2px}

.bar{position:sticky;top:0;z-index:90;height:var(--bar);background:color-mix(in srgb,var(--srf) 80%,transparent);border-bottom:1px solid color-mix(in srgb,var(--bg3) 60%,transparent);display:flex;align-items:center;padding:0 20px;gap:12px;backdrop-filter:blur(16px) saturate(1.8);-webkit-backdrop-filter:blur(16px) saturate(1.8)}
.bar-logo{display:flex;align-items:center;gap:8px;text-decoration:none!important}
.logo-mark svg{width:16px;height:16px;fill:none;stroke:#fff;stroke-width:2}
.bar-name{font-family:var(--fm);font-size:13px;font-weight:700;color:var(--ink)}
.bar-ver{font-family:var(--fm);font-size:10px;color:var(--tx3);padding:2px 6px;background:var(--bg2);border-radius:4px;margin-left:2px}
.bar-nav{display:flex;gap:2px;margin-left:16px}
.bar-nav a{font-size:12px;color:var(--tx2);padding:4px 8px;border-radius:5px;transition:all .12s}
.bar-nav a:hover{color:var(--ink);background:var(--bg2);text-decoration:none}
.bar-nav a.on{color:var(--ac2);background:var(--ac-lt);font-weight:500}
[data-t="d"] .bar-nav a.on{color:var(--ac)}
.bar-right{margin-left:auto;display:flex;gap:8px;align-items:center}
/* THEME TOGGLE */
.tbtn{width:28px;height:28px;border:1px solid var(--brd);border-radius:6px;background:transparent;cursor:pointer;color:var(--tx2);font-size:14px;display:flex;align-items:center;justify-content:center;transition:background .15s,color .15s,transform .2s cubic-bezier(.34,1.56,.64,1)}
.tbtn:hover{color:var(--ink);background:var(--bg2)}
.tbtn:active{transform:scale(.85)}
.srch{position:relative}
.srch input{width:100%;height:30px;border:1px solid var(--brd);border-radius:6px;background:var(--bg);color:var(--tx);font-family:var(--f);font-size:12px;padding:0 8px 0 28px;outline:none;transition:border .15s}
.srch input:focus{border-color:var(--ac)}
.srch input::placeholder{color:var(--tx3)}
.srch-ico{position:absolute;left:8px;top:8px;width:13px;height:13px;color:var(--tx3);pointer-events:none}
.srch-res{position:absolute;top:34px;left:0;right:0;background:var(--srf);border:1px solid var(--brd);border-radius:8px;max-height:320px;overflow-y:auto;display:none;z-index:99;box-shadow:0 8px 32px rgba(0,0,0,.12)}
.srch-res.open{display:block}
.sr-item{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;font-size:13px;transition:background .08s}
.sr-item:hover{background:var(--bg2)}
.sr-t{color:var(--ink);font-weight:500}
.sr-k{font-size:11px;color:var(--tx3);margin-left:auto;font-family:var(--fm)}

.layout{display:flex;min-height:calc(100vh - var(--bar))}
.side{width:var(--side);flex-shrink:0;position:sticky;top:var(--bar);height:calc(100vh - var(--bar));overflow-y:auto;padding:20px 0 20px 16px;border-right:1px solid var(--bg3)}
.side::-webkit-scrollbar{width:0}
.side nav{font-size:12.5px;line-height:2.1;position:relative}
.side nav a{display:block;color:var(--tx3);padding:1px 6px;border-radius:4px;transition:color .2s ease,background .2s ease;text-decoration:none;position:relative;z-index:1}
.side nav a:hover{color:var(--ink);background:var(--bg2)}
.side nav a.on{color:var(--ac2);font-weight:600;background:transparent}
[data-t="d"] .side nav a.on{color:var(--ac)}
.side-pill{position:absolute;left:0;border-radius:4px;background:var(--ac-lt);pointer-events:none;z-index:0;transition:top .25s cubic-bezier(.16,1,.3,1),height .2s cubic-bezier(.16,1,.3,1),opacity .2s ease;opacity:0}
.side-pill.active{opacity:1}
.cat{font-family:var(--fm);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--tx3);margin:18px 0 3px 6px;opacity:.6}
.cat:first-child{margin-top:0}
.main{flex:1;min-width:0;max-width:1180px;padding:32px 56px 80px}
.rp{width:var(--right);flex-shrink:0;position:sticky;top:var(--bar);height:calc(100vh - var(--bar));overflow-y:auto;padding:28px 16px 20px 20px}
.rp::-webkit-scrollbar{width:0}
.rp h4{font-family:var(--fm);font-size:10px;color:var(--tx3);text-transform:uppercase;letter-spacing:.1em;margin-bottom:10px}
.rp a{display:block;font-size:12px;color:var(--tx3);padding:2px 0;line-height:1.7;text-decoration:none}
.rp a:hover{color:var(--ink)}
.rp a.on{color:var(--ac2);font-weight:500}
[data-t="d"] .rp a.on{color:var(--ac)}
.rp .sub{padding-left:14px;font-size:11px;opacity:.7;border-left:1px solid var(--bg3);margin-left:4px}
.rp .sub:hover{opacity:1}
@media(max-width:1380px){.rp{display:none}.main{max-width:1080px}}
@media(max-width:820px){.side{display:none}.main{padding:20px 16px 60px;max-width:100%}}

h1{font-size:clamp(28px,2.2vw,36px);font-weight:700;color:var(--ink);letter-spacing:-.04em;line-height:1.15;margin-bottom:8px}
h2{font-size:clamp(20px,1.4vw,24px);font-weight:700;color:var(--ink);letter-spacing:-.03em;margin:48px 0 10px;padding-top:8px;border-top:1px solid var(--bg3)}
h2:first-of-type{border-top:none;margin-top:0}
h3{font-size:15.5px;font-weight:600;color:var(--ink);margin:26px 0 8px}
h4{font-size:13.5px;font-weight:600;color:var(--ink);margin:18px 0 6px}
p{margin-bottom:12px;color:var(--tx2)}
.lead{font-size:16px;color:var(--tx2);margin-bottom:20px;line-height:1.7}
code{font-family:var(--fm);font-size:.83em;background:var(--bg2);padding:2px 6px;border-radius:4px;color:var(--ac2)}
[data-t="d"] code{background:var(--bg3);color:var(--ac)}
strong{font-weight:600;color:var(--ink)}
.slbl{display:inline-flex;align-items:center;gap:5px;font-family:var(--fm);font-size:10px;text-transform:uppercase;letter-spacing:.1em;color:var(--tx3);margin-bottom:4px}
.slbl::before{content:'';display:block;width:16px;height:2px;background:var(--ac);border-radius:1px}

/* ---- CALLOUT BLOCKS: glassmorphism + corner glow ---- */
@property --callout-angle{syntax:'<angle>';inherits:false;initial-value:0deg}
@keyframes callout-border-spin{to{--callout-angle:360deg}}

.info,.warn,.tip,.danger{
  --c1:#2563EB;--c2:#60A5FA;--cbg:var(--bg2);
  border-radius:12px;padding:14px 16px 14px 48px;margin:14px 0;font-size:13.5px;line-height:1.65;
  position:relative;overflow:hidden;border:1px solid color-mix(in srgb,var(--c1) 18%,transparent);
  background:var(--cbg);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
}
/* corner glow: radial gradient anchored top-left */
.info::after,.warn::after,.tip::after,.danger::after{
  content:'';position:absolute;top:-24px;left:-24px;width:96px;height:96px;border-radius:50%;
  background:radial-gradient(circle,color-mix(in srgb,var(--c1) 18%,transparent) 0%,transparent 70%);
  pointer-events:none;z-index:0;transition:opacity .4s ease,transform .4s ease;
}
.info:hover::after,.warn:hover::after,.tip:hover::after,.danger:hover::after{
  opacity:1.3;transform:scale(1.25);
}
/* animated gradient ring on top edge */
.info::before,.warn::before,.tip::before,.danger::before{
  display:flex;align-items:center;justify-content:center;
  position:absolute;left:12px;top:12px;width:26px;height:26px;border-radius:8px;z-index:2;
  font-size:13px;font-weight:700;line-height:1;
  background:linear-gradient(135deg,color-mix(in srgb,var(--c1) 14%,transparent),color-mix(in srgb,var(--c2) 10%,transparent));
  box-shadow:0 0 12px color-mix(in srgb,var(--c1) 12%,transparent);
  animation:callout-icon-breathe 3s ease-in-out infinite;
}
@keyframes callout-icon-breathe{
  0%,100%{box-shadow:0 0 8px color-mix(in srgb,var(--c1) 10%,transparent)}
  50%{box-shadow:0 0 18px color-mix(in srgb,var(--c1) 22%,transparent)}
}

/* ---- INFO ---- */
.info{--c1:#2563EB;--c2:#60A5FA;--cbg:color-mix(in srgb,#2563EB 4%,var(--bg2))}
.info::before{content:'\2139';color:var(--bl)}
[data-t="d"] .info{--cbg:color-mix(in srgb,#2563EB 6%,var(--bg2))}

/* ---- WARN ---- */
.warn{--c1:#D97706;--c2:#FBBF24;--cbg:#FFFDF5}
.warn::before{content:'\26A0';color:var(--yw)}
[data-t="d"] .warn{--cbg:color-mix(in srgb,#D97706 6%,var(--bg2))}

/* ---- TIP ---- */
.tip{--c1:#16A34A;--c2:#4ADE80;--cbg:#F6FEF9}
.tip::before{content:'\2713';color:var(--gr)}
[data-t="d"] .tip{--cbg:color-mix(in srgb,#16A34A 6%,var(--bg2))}

/* ---- DANGER ---- */
.danger{--c1:#DC2626;--c2:#F87171;--cbg:#FFF5F5}
.danger::before{content:'\2716';color:var(--rd)}
[data-t="d"] .danger{--cbg:color-mix(in srgb,#DC2626 6%,var(--bg2))}

.tw{overflow-x:auto;margin:14px 0}
table{width:100%;border-collapse:collapse;font-size:13.5px}
th,td{padding:7px 11px;text-align:left}
th{font-size:10.5px;font-weight:600;color:var(--tx3);border-bottom:2px solid var(--bg3);text-transform:uppercase;letter-spacing:.05em;font-family:var(--fm)}
td{border-bottom:1px solid var(--bg2);color:var(--tx2)}
td code{font-size:.8em}
tr:last-child td{border-bottom:none}
td{transition:background .25s ease}
tr:hover td{background:linear-gradient(90deg,color-mix(in srgb,var(--ac) 6%,transparent),color-mix(in srgb,var(--ac) 2%,transparent))}
[data-t="d"] tr:hover td{background:linear-gradient(90deg,color-mix(in srgb,var(--ac) 8%,transparent),transparent)}

pre{background:var(--ink);border-radius:var(--r);padding:15px 18px;overflow-x:auto;margin:14px 0;font-family:var(--fm);font-size:12.5px;line-height:1.8;color:#94A3B8;position:relative}
[data-t="d"] pre{background:#060D1A;border:1px solid var(--bg3)}

.cards{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:14px 0}
@media(max-width:520px){.cards{grid-template-columns:1fr}}
.card{background:var(--srf);border-radius:var(--r);padding:14px 16px;border:1px solid var(--bg3);transition:border-color .15s}
.card:hover{border-color:var(--brd)}
.card-t{font-size:13.5px;font-weight:600;color:var(--ink);margin-bottom:4px}
.card p{font-size:12.5px;color:var(--tx2);margin:0;line-height:1.5}
.card-tag{display:inline-block;font-family:var(--fm);font-size:10px;padding:2px 6px;border-radius:3px;font-weight:600;margin-bottom:6px}
.tag-strong{background:#D1FAE5;color:#065F46}
.tag-medium{background:#FEF3C7;color:#B45309}
.tag-weak{background:#FEE2E2;color:#991B1B}
.tag-none{background:#F3F4F6;color:#6B7280}
.tag-core{background:#FEF9E7;color:#92400E}
[data-t="d"] .tag-strong{background:#022C22;color:#6EE7B7}
[data-t="d"] .tag-medium{background:#3B2800;color:#FCD34D}
[data-t="d"] .tag-weak{background:#3B0000;color:#FCA5A5}
[data-t="d"] .tag-none{background:#1F2937;color:#D1D5DB}
[data-t="d"] .tag-core{background:#2A2200;color:#F5D060}

.trust-strip{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 10px}
.trust-pill{display:inline-flex;align-items:center;padding:6px 10px;border-radius:999px;background:var(--srf);border:1px solid var(--bg3);font-family:var(--fm);font-size:10.5px;color:var(--tx2);letter-spacing:.02em}
.trust-pill:hover{border-color:var(--ac);color:var(--ink)}

.dia{margin:16px 0;overflow-x:auto}
.dia svg{display:block;max-width:100%;height:auto;min-width:360px}
.dia svg text{font-family:'Space Grotesk',system-ui,sans-serif}
.nd{fill:var(--srf);stroke:var(--brd);stroke-width:1.2;rx:6}
.nd-ac{fill:var(--bg2);stroke:var(--ac);stroke-width:1.5;rx:6}
.nd-danger{fill:#FEE2E2;stroke:var(--rd);rx:6}
[data-t="d"] .nd-danger{fill:#3B0000}
.nd-success{fill:#D1FAE5;stroke:#16A34A;rx:8}
[data-t="d"] .nd-success{fill:#022C22}
.nd-warn{fill:#FEF3C7;stroke:#D97706;rx:8}
[data-t="d"] .nd-warn{fill:#3B2800}
.lbl-danger{fill:#991B1B;font-weight:700}
[data-t="d"] .lbl-danger{fill:#FCA5A5}
.lbl-success{fill:#065F46;font-weight:700}
[data-t="d"] .lbl-success{fill:#6EE7B7}
.lbl-warn{fill:#92400E;font-weight:700}
[data-t="d"] .lbl-warn{fill:#FCD34D}
.edge{stroke:var(--brd);stroke-width:1.2;fill:none;marker-end:url(#ah)}
.edge-ac{stroke:var(--ac);stroke-width:1.5;fill:none;marker-end:url(#ah2)}
.lbl{font-weight:600;fill:var(--ink);font-size:11px}
.dim{fill:var(--tx3);font-size:10px}

.step{counter-increment:step;background:var(--srf);border:1px solid var(--bg3);border-radius:var(--r);margin:20px 0;overflow:hidden}
.step-head{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--bg2);border-bottom:1px solid var(--bg3)}
.step-num{width:28px;height:28px;border-radius:50%;background:var(--ac);color:#fff;font-family:var(--fm);font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.step-title{font-size:14px;font-weight:600;color:var(--ink)}
.step-body{padding:14px 18px}
.step-body>p:last-child{margin-bottom:0}

.flow{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:12px 0;padding:12px 16px;background:var(--bg2);border-radius:var(--r)}
.fn{background:var(--srf);border:1px solid var(--brd);border-radius:5px;padding:5px 10px;color:var(--ink);font-family:var(--fm);font-size:12px}
.fn-ac{background:var(--ac-lt);border:1px solid var(--ac);border-radius:5px;padding:5px 10px;color:var(--ac2);font-family:var(--fm);font-size:12px;font-weight:600}
[data-t="d"] .fn-ac{color:var(--ac)}
.fa{color:var(--ac);font-weight:700;font-size:16px}

.strength{display:inline-flex;align-items:center;gap:4px;font-family:var(--fm);font-size:11px;font-weight:600;padding:2px 8px;border-radius:4px}
.s-strong{background:#D1FAE5;color:#065F46}
.s-medium{background:#FEF3C7;color:#92400E}
.s-weak{background:#FEE2E2;color:#991B1B}
.s-critical{background:#FEE2E2;color:#991B1B}
.s-none{background:#F3F4F6;color:#6B7280}
[data-t="d"] .s-critical{background:#3B0000;color:#FCA5A5}
[data-t="d"] .s-strong{background:#022C22;color:#6EE7B7}
[data-t="d"] .s-medium{background:#3B2800;color:#FCD34D}
[data-t="d"] .s-weak{background:#3B0000;color:#FCA5A5}
[data-t="d"] .s-none{background:#1F2937;color:#D1D5DB}

/* HERO */
.hero{text-align:center;padding:48px 24px 40px;position:relative;overflow:hidden}
.hero-logo{display:inline-block;max-width:min(640px,55vw);width:100%;position:relative}
.hero-logo svg{display:block;width:100%;height:auto;overflow:visible}
.hero-logo svg #logo-text{fill:var(--ink);transition:fill .3s}

/* The glow outline layer */
.hero-logo svg .logo-glow{
  stroke:#FEBF00;
  stroke-width:28;
  stroke-linejoin:round;
  filter:drop-shadow(0px 0px 4px rgba(254,191,0,0.4));
  animation:glow-pulse 3s ease-in-out infinite;
  display:none; /* Off in light mode to keep it clean, or can be left on */
}
[data-t="d"] .hero-logo svg .logo-glow{
  display:block;
  stroke:#FEBF00;
  stroke-width:35;
  filter:drop-shadow(0px 0px 8px rgba(254,191,0,0.8));
}
@keyframes glow-pulse{
  0%,100%{opacity:0.75}
  50%{opacity:1}
}

.hero-sub{font-size:15px;color:var(--tx2);margin-top:14px;font-weight:400;letter-spacing:.01em}
.hero-badges{display:flex;justify-content:center;gap:8px;margin-top:16px;flex-wrap:wrap}
.hero-badge{font-family:var(--fm);font-size:10.5px;padding:3px 10px;border-radius:5px;font-weight:600;border:1px solid var(--bg3);color:var(--tx2);background:var(--srf);transition:transform .2s cubic-bezier(.16,1,.3,1),border-color .2s ease,box-shadow .2s ease}
.hero-badge:hover{transform:translateY(-1px);border-color:var(--brd);box-shadow:0 4px 12px rgba(0,0,0,.05)}
.hero-badge-ac{border-color:var(--ac);color:var(--ac2);background:var(--ac-lt)}
.hero-badge-ac:hover{border-color:var(--ac2);box-shadow:0 4px 16px rgba(217,168,32,.12)}
[data-t="d"] .hero-badge-ac:hover{box-shadow:0 4px 16px rgba(245,208,96,.15)}
[data-t="d"] .hero-badge-ac{color:var(--ac)}
.hero-line{width:48px;height:2px;background:var(--ac);border-radius:1px;margin:20px auto 0;opacity:.5}

/* SCROLL REVEAL */
.reveal{opacity:0;transform:translateY(24px);transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1)}
.reveal.vis{opacity:1;transform:translateY(0)}
.reveal-left{opacity:0;transform:translateX(-30px);transition:opacity .6s cubic-bezier(.16,1,.3,1),transform .6s cubic-bezier(.16,1,.3,1)}
.reveal-left.vis{opacity:1;transform:translateX(0)}
.reveal-scale{opacity:0;transform:scale(.96);transition:opacity .6s cubic-bezier(.16,1,.3,1),transform .6s cubic-bezier(.16,1,.3,1)}
.reveal-scale.vis{opacity:1;transform:scale(1)}

/* STAGGER CHILDREN (cards, badges, steps) */
.stagger>.card,.stagger>.step,.stagger>.hero-badge{opacity:0;transform:translateY(16px);transition:opacity .5s cubic-bezier(.16,1,.3,1),transform .5s cubic-bezier(.16,1,.3,1)}
.stagger.vis>.card,.stagger.vis>.step,.stagger.vis>.hero-badge{opacity:1;transform:translateY(0)}
.stagger.vis>:nth-child(1){transition-delay:.05s}
.stagger.vis>:nth-child(2){transition-delay:.12s}
.stagger.vis>:nth-child(3){transition-delay:.19s}
.stagger.vis>:nth-child(4){transition-delay:.26s}
.stagger.vis>:nth-child(5){transition-delay:.33s}
.stagger.vis>:nth-child(6){transition-delay:.40s}

/* CARD HOVER LIFT */
.card{transition:border-color .15s,transform .28s cubic-bezier(.16,1,.3,1),box-shadow .28s cubic-bezier(.16,1,.3,1)}
.card:hover{border-color:var(--ac);transform:translateY(-4px);box-shadow:0 8px 24px rgba(0,0,0,.06)}
[data-t="d"] .card:hover{box-shadow:0 8px 24px rgba(0,0,0,.3)}

/* CALLOUT REVEAL: glass entrance */
.info,.warn,.tip,.danger{opacity:0;transform:translateY(16px) scale(.98);transition:opacity .6s cubic-bezier(.16,1,.3,1),transform .6s cubic-bezier(.16,1,.3,1),border-color .3s ease,box-shadow .3s ease}
.info.vis,.warn.vis,.tip.vis,.danger.vis{opacity:1;transform:translateY(0) scale(1)}
.info:hover,.warn:hover,.tip:hover,.danger:hover{border-color:color-mix(in srgb,var(--c1) 35%,transparent);box-shadow:0 4px 24px color-mix(in srgb,var(--c1) 8%,transparent)}
[data-t="d"] .info:hover,[data-t="d"] .warn:hover,[data-t="d"] .tip:hover,[data-t="d"] .danger:hover{box-shadow:0 4px 24px color-mix(in srgb,var(--c1) 12%,transparent)}

/* TABLE ROW FADE */
.tw{opacity:0;transform:translateY(12px);transition:opacity .5s cubic-bezier(.16,1,.3,1),transform .5s cubic-bezier(.16,1,.3,1)}
.tw.vis{opacity:1;transform:translateY(0)}

/* DIAGRAM REVEAL */
.dia{opacity:0;transform:scale(.97);transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1)}
.dia.vis{opacity:1;transform:scale(1)}

/* FLOW REVEAL */
.flow{opacity:0;transform:translateY(10px);transition:opacity .5s cubic-bezier(.16,1,.3,1),transform .5s cubic-bezier(.16,1,.3,1)}
.flow.vis{opacity:1;transform:translateY(0)}
.flow .fn,.flow .fn-ac,.flow .fa{transition:transform .2s ease,box-shadow .2s ease}
.flow .fn:hover,.flow .fn-ac:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.08)}

/* STEP HOVER */
.step{transition:border-color .2s,box-shadow .3s cubic-bezier(.16,1,.3,1)}
.step:hover{border-color:var(--ac);box-shadow:0 4px 20px rgba(217,168,32,.08)}
[data-t="d"] .step:hover{box-shadow:0 4px 20px rgba(245,208,96,.06)}

/* SIDEBAR ACTIVE (pill driven by JS) */
.side nav a:focus-visible{outline:none;background:var(--bg2)}

/* TOC ACTIVE TRANSITION */
.rp a{transition:color .2s,padding-left .2s}
.rp a.on{padding-left:6px}

/* BAR SMOOTH */
.bar{transition:background .4s ease,border-color .4s ease,backdrop-filter .3s ease}

/* HERO ENTRY + SCROLL PARALLAX */
.hero-logo{opacity:0;transform:translateY(-12px) scale(.98);will-change:transform,opacity}
.hero-logo.vis{opacity:1;transform:translateY(0) scale(1);transition:opacity .8s cubic-bezier(.16,1,.3,1),transform .8s cubic-bezier(.16,1,.3,1)}
.hero-sub{opacity:0;transform:translateY(8px)}
.hero-sub.vis{opacity:1;transform:translateY(0);transition:opacity .6s .2s cubic-bezier(.16,1,.3,1),transform .6s .2s cubic-bezier(.16,1,.3,1)}
.hero-line{opacity:0;transform:scaleX(0)}
.hero-line.vis{opacity:.5;transform:scaleX(1);transition:opacity .5s .5s ease,transform .5s .5s cubic-bezier(.16,1,.3,1)}

/* STRENGTH BADGE HOVER */
.strength{transition:transform .2s ease}
.strength:hover{transform:scale(1.08)}

/* THEME TOGGLE SPIN */
.tbtn{transition:transform .3s cubic-bezier(.16,1,.3,1),color .2s,background .2s}
.tbtn:active{transform:rotate(180deg)}

/* SMOOTH COLOR TRANSITIONS FOR THEME SWITCH */
body{transition:background .4s ease,color .4s ease}
.bar,.side,.main,.rp,footer{transition:background .4s ease,border-color .4s ease,color .3s ease}
h1,h2,h3,h4,strong,.lbl{transition:color .3s ease}
code{transition:background .3s ease,color .3s ease}
.card,.step{transition-property:opacity,transform,border-color,box-shadow,background,color;transition-duration:.3s}

/* PROGRESS BAR */
#pgbar{position:fixed;top:0;left:0;height:2px;background:linear-gradient(90deg,var(--ac),var(--ac2));z-index:200;transition:width .08s linear;pointer-events:none;border-radius:0 1px 1px 0;will-change:width;box-shadow:0 0 8px rgba(217,168,32,.3)}
[data-t="d"] #pgbar{box-shadow:0 0 10px rgba(245,208,96,.4)}

/* LINK HOVER UNDERLINE ANIMATION */
a{transition:color .2s ease}
.main a{position:relative}
.main a::after{content:'';position:absolute;bottom:-1px;left:0;width:0;height:1px;background:var(--ac);transition:width .25s cubic-bezier(.16,1,.3,1)}
.main a:hover::after{width:100%}
.main a:hover{text-decoration:none}

footer{text-align:center;padding:24px 0 16px;font-size:11px;color:var(--tx3);border-top:none;margin-top:40px;position:relative}
footer::before{content:'';position:absolute;top:0;left:50%;transform:translateX(-50%);width:120px;height:1px;background:linear-gradient(90deg,transparent,var(--ac),transparent);opacity:.4}
footer a{color:var(--tx3)}
footer a::after{display:none}

/* HEADING TEXT SPLIT REVEAL */
.h-reveal{overflow:hidden;display:inline}
.h-reveal .h-char{display:inline-block;opacity:0;transform:translateY(100%);transition:opacity .45s cubic-bezier(.16,1,.3,1),transform .45s cubic-bezier(.16,1,.3,1)}
.h-reveal.vis .h-char{opacity:1;transform:translateY(0)}

/* SVG LINE DRAW */
.dia svg line.draw,.dia svg path.draw{stroke-dasharray:var(--len,300);stroke-dashoffset:var(--len,300);transition:stroke-dashoffset 1.2s cubic-bezier(.16,1,.3,1)}
.dia.vis svg line.draw,.dia.vis svg path.draw{stroke-dashoffset:0}

/* CARD 3D TILT */
.card{transform-style:preserve-3d;perspective:800px}
.card .card-t,.card p,.card .card-tag{transition:transform .3s ease}
.card.tilt-active .card-t,.card.tilt-active p,.card.tilt-active .card-tag{transform:translateZ(20px)}

/* HERO GRADIENT ORB */
.hero{position:relative;overflow:hidden}
.hero-orb{position:absolute;width:400px;height:400px;border-radius:50%;background:radial-gradient(circle,rgba(254,191,0,0.12) 0%,transparent 70%);pointer-events:none;filter:blur(60px);animation:orb-float 8s ease-in-out infinite;top:-100px;left:50%;transform:translateX(-50%)}
[data-t="d"] .hero-orb{background:radial-gradient(circle,rgba(254,191,0,0.08) 0%,transparent 70%);filter:blur(80px)}
@keyframes orb-float{
  0%,100%{transform:translateX(-50%) translateY(0) scale(1)}
  33%{transform:translateX(-40%) translateY(20px) scale(1.05)}
  66%{transform:translateX(-60%) translateY(-10px) scale(0.95)}
}
.hero-orb-2{position:absolute;width:250px;height:250px;border-radius:50%;background:radial-gradient(circle,rgba(37,99,235,0.06) 0%,transparent 70%);pointer-events:none;filter:blur(50px);animation:orb-float-2 10s ease-in-out infinite;bottom:-50px;right:10%}
[data-t="d"] .hero-orb-2{background:radial-gradient(circle,rgba(37,99,235,0.04) 0%,transparent 70%)}
@keyframes orb-float-2{
  0%,100%{transform:translateY(0) scale(1)}
  50%{transform:translateY(-30px) scale(1.08)}
}

/* TABLE ROW CASCADE */
.tw.vis table tbody tr{opacity:0;transform:translateY(8px);animation:row-in .4s cubic-bezier(.16,1,.3,1) forwards}
.tw.vis table tbody tr:nth-child(1){animation-delay:.05s}
.tw.vis table tbody tr:nth-child(2){animation-delay:.1s}
.tw.vis table tbody tr:nth-child(3){animation-delay:.15s}
.tw.vis table tbody tr:nth-child(4){animation-delay:.2s}
.tw.vis table tbody tr:nth-child(5){animation-delay:.25s}
.tw.vis table tbody tr:nth-child(6){animation-delay:.3s}
.tw.vis table tbody tr:nth-child(7){animation-delay:.35s}
.tw.vis table tbody tr:nth-child(8){animation-delay:.4s}
@keyframes row-in{to{opacity:1;transform:translateY(0)}}

/* FLOW STEP SEQUENCE */
.flow.vis .fn,.flow.vis .fn-ac{opacity:0;animation:flow-step-in .4s cubic-bezier(.16,1,.3,1) forwards}
.flow.vis .fa{opacity:0;animation:flow-arrow-in .3s cubic-bezier(.16,1,.3,1) forwards}
.flow.vis>:nth-child(1){animation-delay:.1s}
.flow.vis>:nth-child(2){animation-delay:.2s}
.flow.vis>:nth-child(3){animation-delay:.3s}
.flow.vis>:nth-child(4){animation-delay:.4s}
.flow.vis>:nth-child(5){animation-delay:.5s}
.flow.vis>:nth-child(6){animation-delay:.6s}
.flow.vis>:nth-child(7){animation-delay:.7s}
.flow.vis>:nth-child(8){animation-delay:.8s}
.flow.vis>:nth-child(9){animation-delay:.9s}
.flow.vis>:nth-child(10){animation-delay:1s}
.flow.vis>:nth-child(11){animation-delay:1.1s}
@keyframes flow-step-in{from{opacity:0;transform:translateX(-12px) scale(.95)}to{opacity:1;transform:translateX(0) scale(1)}}
@keyframes flow-arrow-in{from{opacity:0;transform:translateX(-8px)}to{opacity:1;transform:translateX(0)}}

/* NUMBER COUNTER GLOW */
.counter-glow{transition:text-shadow .6s ease}
.counter-glow.counted{text-shadow:0 0 12px rgba(217,168,32,0.3)}
[data-t="d"] .counter-glow.counted{text-shadow:0 0 16px rgba(245,208,96,0.25)}

/* PRE CODE TYPING */
pre{overflow:hidden}
pre.vis{animation:pre-reveal .8s cubic-bezier(.16,1,.3,1)}
@keyframes pre-reveal{from{max-height:0;opacity:0;transform:translateY(8px)}to{max-height:600px;opacity:1;transform:translateY(0)}}

/* BADGE SHIMMER */
.hero-badge{position:relative;overflow:hidden}
.hero-badge::after{content:'';position:absolute;top:0;left:-100%;width:60%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.15),transparent);transition:none;pointer-events:none}
.hero-badge:hover::after{animation:badge-shimmer .6s ease forwards}
[data-t="d"] .hero-badge::after{background:linear-gradient(90deg,transparent,rgba(255,255,255,0.06),transparent)}
@keyframes badge-shimmer{to{left:150%}}

/* CALLOUT ICON ENTRANCE */
.info.vis::before,.warn.vis::before,.tip.vis::before,.danger.vis::before{animation:icon-glass-in .6s .2s cubic-bezier(.16,1,.3,1) both,callout-icon-breathe 3s 1s ease-in-out infinite}
@keyframes icon-glass-in{from{transform:scale(0) rotate(-20deg);opacity:0;backdrop-filter:blur(0)}to{transform:scale(1) rotate(0);opacity:1;backdrop-filter:blur(4px)}}

/* SECTION DIVIDER GROW */
h2{position:relative}
h2::before{content:'';position:absolute;top:-1px;left:0;width:0;height:2px;background:var(--ac);transition:width .8s cubic-bezier(.16,1,.3,1)}
section.vis>h2::before,section.reveal.vis>h2::before{width:32px}

/* SMOOTH FOCUS RING */
.srch input:focus{box-shadow:0 0 0 3px rgba(217,168,32,0.15);transition:border .15s,box-shadow .3s}
[data-t="d"] .srch input:focus{box-shadow:0 0 0 3px rgba(245,208,96,0.1)}

/* REDUCE MOTION */
@media(prefers-reduced-motion:reduce){
  .reveal,.reveal-left,.reveal-scale,.stagger>.card,.stagger>.step,.stagger>.hero-badge,.info,.warn,.tip,.danger,.tw,.dia,.flow,.hero-logo,.hero-sub,.hero-line{opacity:1!important;transform:none!important;transition:none!important}
  .hero-logo{animation:none!important}
  .hero-orb,.hero-orb-2{display:none!important}
  .callout-glow-orb{display:none!important}
  .side-pill{transition:none!important}
  body::before{display:none!important}
  .info::after,.warn::after,.tip::after,.danger::after{animation:none!important;transition:none!important}
  .h-reveal .h-char{opacity:1!important;transform:none!important;transition:none!important}
  .tw.vis table tbody tr{opacity:1!important;transform:none!important;animation:none!important}
  .flow.vis .fn,.flow.vis .fn-ac,.flow.vis .fa{opacity:1!important;animation:none!important}
  pre.vis{animation:none!important}
  .info.vis::before,.warn.vis::before,.tip.vis::before,.danger.vis::before{animation:none!important}
  h2::before{transition:none!important}
}
/* VIEW TRANSITIONS - snappy slide matching the segmented switch cadence.
   Total perceived duration ~ 280ms (slide 180ms + fade-in 250ms with overlap). */
@view-transition{navigation:auto}
::view-transition-old(root){animation:vt-slide-out .16s cubic-bezier(.45,.05,.55,.95) both}
::view-transition-new(root){animation:vt-slide-in .20s cubic-bezier(.45,.05,.55,.95) both}
@keyframes vt-slide-out{to{opacity:0;transform:translateX(-2%)}}
@keyframes vt-slide-in{from{opacity:0;transform:translateX(2%)}}
@media(prefers-reduced-motion:reduce){
  ::view-transition-old(root),::view-transition-new(root){animation-duration:.001s}
}

/* While [data-prep] is on, the slide owns the screen: content is hidden. */
html[data-prep] .main > .hero,
html[data-prep] .main > section,
html[data-prep] .main > h1,
html[data-prep] .main > h2,
html[data-prep] .main > p{
  opacity:0;
  transform:translateY(6px);
  transition:none;
}
html[data-prep] .hero-orb,
html[data-prep] .hero-orb-2,
html[data-prep] body::before{
  animation:none!important;
  opacity:0!important;
}

/* When JS removes [data-prep], content fades back in fast with a tight stagger. */
.main > .hero,
.main > section,
.main > h1,
.main > h2,
.main > p{
  transition:opacity .22s cubic-bezier(.16,1,.3,1),transform .22s cubic-bezier(.16,1,.3,1);
}
.main > .hero{transition-delay:0s}
.main > section:nth-of-type(1){transition-delay:.02s}
.main > section:nth-of-type(2){transition-delay:.04s}
.main > section:nth-of-type(3){transition-delay:.06s}
.main > section:nth-of-type(4){transition-delay:.08s}
.main > section:nth-of-type(5){transition-delay:.09s}
.main > section:nth-of-type(n+6){transition-delay:.10s}

@media print{.bar,.side,.rp,.tbtn,#pgbar{display:none!important}.main{max-width:100%;padding:8px}.reveal,.reveal-left,.reveal-scale{opacity:1!important;transform:none!important}.hero-orb,.hero-orb-2{display:none!important};body::before{display:none!important}}

/* =================================================================== */
/*  INTERACTIVE ARCHITECTURE GRAPH                                     */
/*  Yellow + grayscale only. Hover = highlight, others fade.           */
/* =================================================================== */
.arch-wrap{margin:24px -40px 28px;padding:0;background:linear-gradient(180deg,var(--bg2),var(--bg));border-top:1px solid var(--bg3);border-bottom:1px solid var(--bg3);position:relative}
@media(max-width:1160px){.arch-wrap{margin:24px -16px 28px}}
.arch-canvas{position:relative;width:100%;height:0;padding-bottom:65%;overflow:hidden}
.arch-svg{position:absolute;inset:0;width:100%;height:100%;display:block}
.arch-svg text{font-family:var(--fm);user-select:none}

/* edges (default = barely visible, but readable in both themes) */
.arch-edge{stroke:var(--brd);stroke-width:1;fill:none;opacity:.28;transition:stroke .35s ease,stroke-width .35s ease,opacity .35s ease}
[data-t="d"] .arch-edge{stroke:#475569;opacity:.42}

/* node group */
.arch-node{cursor:pointer}
.arch-node circle{fill:var(--srf);stroke:var(--brd);stroke-width:1.4;transition:fill .35s ease,stroke .35s ease,stroke-width .35s ease,r .45s cubic-bezier(.16,1,.3,1),opacity .35s ease,filter .35s ease}
[data-t="d"] .arch-node circle{fill:#1E293B;stroke:#475569;stroke-width:1.5}
.arch-node text{fill:var(--tx2);font-size:10.5px;font-weight:500;pointer-events:none;transition:fill .35s ease,opacity .35s ease,font-weight .35s ease;text-anchor:middle}
[data-t="d"] .arch-node text{fill:#CBD5E1;font-weight:600}

/* hub category : entry & contracts always slightly more visible */
.arch-node[data-cluster="entry"] circle{fill:var(--ac-lt);stroke:var(--ac);stroke-width:1.6}
.arch-node[data-cluster="entry"] text{fill:var(--ink);font-weight:600}
.arch-node[data-cluster="contracts"] circle{stroke:var(--ac);stroke-width:1.6}
.arch-node[data-cluster="contracts"] text{fill:var(--ink)}

/* default hover (no node active yet) */
.arch-node:hover circle{stroke:var(--ac);stroke-width:2.2}
.arch-node:hover text{fill:var(--ink);font-weight:700}

/* when graph has an active node - fade non-related, but stay readable */
.arch-svg.has-active .arch-node circle{opacity:.28}
.arch-svg.has-active .arch-node text{opacity:.32}
.arch-svg.has-active .arch-edge{opacity:.08}
[data-t="d"] .arch-svg.has-active .arch-node circle{opacity:.4}
[data-t="d"] .arch-svg.has-active .arch-node text{opacity:.55}
[data-t="d"] .arch-svg.has-active .arch-edge{opacity:.18}

/* the ACTIVE node : translucent gold fill + crisp stroke. The fill stays
   light enough to let the canvas grid breathe through, the stroke alone
   carries the focus state. */
.arch-svg.has-active .arch-node.active circle{opacity:1;fill:color-mix(in srgb,var(--ac) 55%,transparent);stroke:var(--ac2);stroke-width:2.5}
[data-t="d"] .arch-svg.has-active .arch-node.active circle{fill:color-mix(in srgb,var(--ac) 45%,transparent);stroke:var(--ac)}
.arch-svg.has-active .arch-node.active text{opacity:1;fill:var(--ink);font-weight:700;font-size:11.5px}

/* connected (neighbour) nodes */
.arch-svg.has-active .arch-node.connected circle{opacity:.95;stroke:var(--ac);stroke-width:1.8;fill:var(--ac-lt)}
.arch-svg.has-active .arch-node.connected text{opacity:.95;fill:var(--ink);font-weight:600}

/* connected edges */
.arch-svg.has-active .arch-edge.connected{stroke:var(--ac);stroke-width:1.6;opacity:.85;color:var(--ac)}
[data-t="d"] .arch-svg.has-active .arch-edge.connected{stroke:var(--ac);opacity:.9;color:var(--ac)}

/* edge labels : horizontal gold badge on the connected arrow, hidden by default */
.arch-edge-labels{pointer-events:none}
.arch-edge-label{opacity:0;transition:opacity .25s ease}
.arch-svg.has-active .arch-edge-label.connected{opacity:1}
.arch-edge-label-bg{fill:var(--bg);stroke:var(--ac);stroke-width:1.2}
[data-t="d"] .arch-edge-label-bg{fill:#0F172A;stroke:var(--ac);stroke-width:1.2}
.arch-edge-label-text{font-family:var(--fm);font-size:12px;font-weight:600;fill:var(--ac2);text-anchor:middle;letter-spacing:.02em}
[data-t="d"] .arch-edge-label-text{fill:var(--ac)}

/* directional arrowheads : polygons rendered ABOVE nodes so they never hide.
   transform transition stays in place : if the active node ever gets a halo
   again, placeArrow(poly, larger_offset) will slide the tip smoothly.
   No transform-box / transform-origin override here : the SVG transform
   attribute must keep its native pivot (0,0 local), otherwise the rotated
   tip ends up off the line by half the polygon width. */
.arch-edge-arrow{fill:var(--ac);opacity:0;pointer-events:none;transition:opacity .25s ease,transform .35s cubic-bezier(.16,1,.3,1)}
.arch-svg.has-active .arch-edge-arrow.connected{opacity:1;animation:arch-arrow-pulse 1.8s ease-in-out infinite}
@keyframes arch-arrow-pulse{0%,100%{filter:drop-shadow(0 0 1px var(--ac))}50%{filter:drop-shadow(0 0 6px var(--ac))}}
[data-t="d"] .arch-svg.has-active .arch-edge-arrow.connected{animation:arch-arrow-pulse-d 1.8s ease-in-out infinite}
@keyframes arch-arrow-pulse-d{0%,100%{filter:drop-shadow(0 0 2px var(--ac))}50%{filter:drop-shadow(0 0 9px var(--ac))}}

/* invisible hit areas : wide transparent strokes that capture mouse events
   on the thin visible edges. Cursor changes so the user knows lines are
   interactive. Placed under nodes so node hover wins on overlap. */
.arch-edge-hits{pointer-events:none}
.arch-edge-hit{stroke:transparent;stroke-width:14;fill:none;pointer-events:stroke;cursor:pointer}

/* single-edge focus : isolate one line among many. The visible edge gets
   bolder + brighter, its arrow and label step up, the OTHER connected
   pieces are dimmed so the eye locks on the chosen line. */
.arch-svg.has-edge-focus .arch-edge.connected:not(.edge-focus){opacity:.18}
.arch-svg.has-edge-focus .arch-edge-arrow.connected:not(.edge-focus){opacity:.25;animation:none}
.arch-svg.has-edge-focus .arch-edge-label.connected:not(.edge-focus){opacity:.2}
.arch-edge.edge-focus{stroke:var(--ac2)!important;stroke-width:2.6!important;opacity:1!important;filter:drop-shadow(0 0 6px color-mix(in srgb,var(--ac) 55%,transparent))}
[data-t="d"] .arch-edge.edge-focus{stroke:var(--ac)!important;filter:drop-shadow(0 0 8px color-mix(in srgb,var(--ac) 75%,transparent))}
.arch-edge-arrow.edge-focus{opacity:1!important;animation:arch-arrow-pulse 1.2s ease-in-out infinite!important}
[data-t="d"] .arch-edge-arrow.edge-focus{animation:arch-arrow-pulse-d 1.2s ease-in-out infinite!important}
.arch-edge-label.edge-focus{opacity:1!important}
.arch-edge-label.edge-focus .arch-edge-label-bg{stroke-width:2;filter:drop-shadow(0 0 4px color-mix(in srgb,var(--ac) 50%,transparent))}
.arch-edge-label.edge-focus .arch-edge-label-text{fill:var(--ac2);font-weight:700}
[data-t="d"] .arch-edge-label.edge-focus .arch-edge-label-text{fill:var(--ac)}

/* cluster halo bands (subtle background regions) */
.arch-cluster-halo{fill:var(--bg2);opacity:.55;stroke:var(--bg3);stroke-width:1;stroke-dasharray:3 5;rx:18;ry:18;transition:opacity .35s ease,stroke .35s ease}
[data-t="d"] .arch-cluster-halo{fill:#1E293B;opacity:.5;stroke:#475569}
.arch-cluster-label{fill:var(--tx3);font-size:9.5px;font-family:var(--fm);font-weight:600;letter-spacing:.14em;text-transform:uppercase;pointer-events:none;transition:fill .3s ease,opacity .3s ease}
[data-t="d"] .arch-cluster-label{fill:#94A3B8}
.arch-svg.has-active .arch-cluster-halo{opacity:.3}
.arch-svg.has-active .arch-cluster-label{opacity:.4}
[data-t="d"] .arch-svg.has-active .arch-cluster-halo{opacity:.35}
[data-t="d"] .arch-svg.has-active .arch-cluster-label{opacity:.5}

/* legend bar above the graph */
.arch-head{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 24px;border-bottom:1px solid var(--bg3);background:var(--srf);flex-wrap:wrap}
.arch-head-title{font-family:var(--fm);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--tx3)}
.arch-head-hint{font-family:var(--f);font-size:11.5px;color:var(--tx3);display:flex;align-items:center;gap:8px}
.arch-head-hint kbd{font-family:var(--fm);font-size:10px;background:var(--bg2);border:1px solid var(--bg3);border-radius:4px;padding:2px 6px;color:var(--tx2)}
.arch-cluster-legend{display:flex;flex-wrap:wrap;gap:6px}
.arch-leg{display:inline-flex;align-items:center;gap:5px;font-family:var(--fm);font-size:10px;color:var(--tx2);padding:3px 9px;border-radius:999px;background:var(--bg2);border:1px solid var(--bg3);cursor:pointer;transition:background .2s,border-color .2s,color .2s}
.arch-leg-dot{width:7px;height:7px;border-radius:50%;background:var(--tx3)}
.arch-leg[data-cluster="entry"] .arch-leg-dot,.arch-leg[data-cluster="contracts"] .arch-leg-dot{background:var(--ac)}
.arch-leg:hover{background:var(--bg3);color:var(--ink);border-color:var(--brd)}
.arch-leg.active{background:var(--ac-lt);color:var(--ac2);border-color:var(--ac)}
[data-t="d"] .arch-leg.active{color:var(--ac)}

/* detail panel below the graph */
.arch-detail{display:grid;grid-template-columns:1fr 2fr;gap:0;padding:0;border-top:1px solid var(--bg3);background:var(--srf);min-height:120px}
@media(max-width:720px){.arch-detail{grid-template-columns:1fr}}
.arch-detail-head{padding:18px 22px;border-right:1px solid var(--bg3);display:flex;flex-direction:column;justify-content:center}
@media(max-width:720px){.arch-detail-head{border-right:none;border-bottom:1px solid var(--bg3)}}
.arch-detail-eyebrow{font-family:var(--fm);font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--tx3);margin-bottom:6px}
.arch-detail-title{font-family:var(--fm);font-size:18px;color:var(--ink);font-weight:700;line-height:1.2;letter-spacing:-.01em}
.arch-detail-cluster{font-family:var(--fm);font-size:10px;color:var(--tx3);margin-top:4px;letter-spacing:.04em}
.arch-detail-body{padding:18px 24px;display:flex;flex-direction:column;justify-content:center;min-height:100px}
.arch-detail-desc{font-size:13.5px;color:var(--tx2);line-height:1.65;margin:0;min-height:1.6em}
.arch-detail-desc::after{content:'\258A';display:inline-block;color:var(--ac);margin-left:2px;animation:arch-caret 1s steps(2) infinite;font-weight:400}
.arch-detail-desc.done::after{display:none}
@keyframes arch-caret{0%,49%{opacity:1}50%,100%{opacity:0}}
.arch-detail-meta{display:flex;gap:14px;margin-top:10px;font-family:var(--fm);font-size:10.5px;color:var(--tx3);flex-wrap:wrap}
.arch-detail-meta strong{color:var(--ac2);font-weight:600}
[data-t="d"] .arch-detail-meta strong{color:var(--ac)}
.arch-detail-deps{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
.arch-detail-dep{font-family:var(--fm);font-size:10.5px;padding:2px 8px;border-radius:4px;background:var(--bg2);border:1px solid var(--bg3);color:var(--tx2);cursor:pointer;transition:background .15s,border-color .15s,color .15s;white-space:nowrap}
.arch-detail-dep:hover{background:var(--ac-lt);border-color:var(--ac);color:var(--ac2)}
[data-t="d"] .arch-detail-dep:hover{color:var(--ac)}
.arch-chip-arrow{color:var(--ac);font-weight:700;margin-right:1px}
.arch-chip-verb{color:var(--tx3);font-style:italic;font-size:.92em;margin:0 2px}
.arch-detail-dep:hover .arch-chip-verb{color:var(--ac2)}
[data-t="d"] .arch-detail-dep:hover .arch-chip-verb{color:var(--ac)}

/* idle (no hover) state */
.arch-idle-tip{display:flex;align-items:center;gap:8px;color:var(--tx3);font-size:13px;font-style:italic}
.arch-idle-pulse{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--ac);animation:arch-pulse 1.6s ease-in-out infinite;flex-shrink:0}
@keyframes arch-pulse{0%,100%{transform:scale(.6);opacity:.5}50%{transform:scale(1.2);opacity:1;box-shadow:0 0 12px var(--ac)}}

@media(prefers-reduced-motion:reduce){
  .arch-edge,.arch-node circle,.arch-node text,.arch-cluster-halo,.arch-detail-desc::after,.arch-idle-pulse,.arch-edge-arrow,.arch-edge-label{transition:none!important;animation:none!important}
}

