/* Astor Academy v2 — shared tokens (see DESIGN.md) */
@font-face{font-family:"Inter Tight";src:url(../fonts/inter-tight-latin-wght-normal.woff2) format("woff2");font-weight:100 900;font-display:swap}
@font-face{font-family:"Inter Tight";src:url(../fonts/inter-tight-latin-wght-italic.woff2) format("woff2");font-weight:100 900;font-style:italic;font-display:swap}
@font-face{font-family:"JetBrains Mono";src:url(../fonts/jetbrains-mono-latin-wght-normal.woff2) format("woff2");font-weight:100 800;font-display:swap}
:root{
  --tq:#14a7a0; --em:#1fae6e; /* v3 shared highlight pair: deep turquoise + emerald, ACCENTS ONLY (glows, rules, hover, motion) */
  --bg:#0d0e0f; --bg-2:#131516; --bg-3:#1a1c1e;
  --fg:#e7e6e2; --fg-2:#b9b9b5; --fg-3:#85878a; --fg-4:#56595c;
  --rule:rgba(231,230,226,.10); --rule-2:rgba(231,230,226,.22);
  --accent:#9fd6c2;              /* per-course override */
  --sans:"Inter Tight",ui-sans-serif,system-ui,sans-serif;
  --mono:"JetBrains Mono",ui-monospace,Menlo,monospace;
  --measure:38rem; --gutter:clamp(1.25rem,4vw,3rem);
  --ease:cubic-bezier(.2,.7,.1,1);
  --s1:.25rem;--s2:.5rem;--s3:1rem;--s4:1.5rem;--s5:2.5rem;--s6:4rem;--s7:6.5rem;--s8:10rem;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;color-scheme:dark}
body{margin:0;background:var(--bg);color:var(--fg);font:400 1.0625rem/1.68 var(--sans);font-feature-settings:"ss01","cv11";-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1,h2,h3,h4,p,figure,ol,ul,blockquote{margin:0}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}
::selection{background:var(--accent);color:var(--bg)}
:focus-visible{outline:1px solid var(--accent);outline-offset:3px}
.mono{font-family:var(--mono);font-size:.78rem;letter-spacing:.02em;font-feature-settings:"zero"}
.dim{color:var(--fg-3)}
.skip{position:absolute;left:-9999px}.skip:focus{left:1rem;top:1rem;z-index:100;background:var(--fg);color:var(--bg);padding:.4rem .8rem}
/* links: hairline underline that draws in */
.ul{background:linear-gradient(currentColor,currentColor) 0 100%/0 1px no-repeat;transition:background-size .5s var(--ease)}
.ul:hover,.ul:focus-visible{background-size:100% 1px}
.ul-on{background:linear-gradient(var(--rule-2),var(--rule-2)) 0 100%/100% 1px no-repeat}
/* caret */
.caret{display:inline-block;width:.55em;height:1.05em;vertical-align:-.15em;background:var(--accent);margin-left:.15em;animation:blink 1.1s steps(1) infinite}
@keyframes blink{50%{opacity:0}}
/* crop marks: four corner brackets drawn with gradients, no box */
.crop{--c:var(--rule-2);--l:14px;position:relative;background:
 linear-gradient(var(--c),var(--c)) 0 0/var(--l) 1px, linear-gradient(var(--c),var(--c)) 0 0/1px var(--l),
 linear-gradient(var(--c),var(--c)) 100% 0/var(--l) 1px, linear-gradient(var(--c),var(--c)) 100% 0/1px var(--l),
 linear-gradient(var(--c),var(--c)) 0 100%/var(--l) 1px, linear-gradient(var(--c),var(--c)) 0 100%/1px var(--l),
 linear-gradient(var(--c),var(--c)) 100% 100%/var(--l) 1px, linear-gradient(var(--c),var(--c)) 100% 100%/1px var(--l);background-repeat:no-repeat}
/* hairline that draws in */
.rule{height:1px;background:var(--rule-2);transform-origin:left;transform:scaleX(0);transition:transform 1.2s var(--ease)}
.in .rule,.rule.in{transform:scaleX(1)}
/* reveal by mask wipe (no boxes) */
.wipe{-webkit-mask:linear-gradient(90deg,#000 45%,transparent 55%) 100% 0/220% 100% no-repeat;mask:linear-gradient(90deg,#000 45%,transparent 55%) 100% 0/220% 100% no-repeat;transition:-webkit-mask-position 1.3s var(--ease),mask-position 1.3s var(--ease)}
.in .wipe,.wipe.in{-webkit-mask-position:0 0;mask-position:0 0}
.rise{opacity:0;transform:translateY(14px);transition:opacity .9s var(--ease),transform .9s var(--ease)}
.in .rise,.rise.in{opacity:1;transform:none}
/* texture field */
.tex{position:absolute;inset:0;overflow:hidden;pointer-events:none}
.tex canvas{display:block;position:absolute;inset:0;width:100%!important;height:100%!important}
.tex-fallback{background:radial-gradient(60% 50% at 30% 30%,color-mix(in srgb,var(--accent) 12%,transparent),transparent),var(--bg)}
.grainfix{position:fixed;inset:0;pointer-events:none;z-index:1;opacity:.05;mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}.rise,.wipe{opacity:1;transform:none;-webkit-mask:none;mask:none}.rule{transform:none}}
