/* Foxfire Fonts — the approved mockup (brand/mockup in the foxfire-fonts project), kept verbatim below,
   plus self-hosted fonts and a motion layer. Change the look in the mockup first, then here. */
@font-face{font-family:Manrope;src:url(../vendor/fonts/Manrope-Variable.ttf) format('truetype');font-weight:200 800;font-display:swap}
@font-face{font-family:'IBM Plex Mono';src:url(../collection/IBMPlexMono-Regular.ttf) format('truetype');font-weight:400;font-display:swap}
@font-face{font-family:Fraunces;src:url(../collection/Fraunces-Variable.ttf) format('truetype');font-weight:100 900;font-display:swap}
@font-face{font-family:Syne;src:url(../collection/Syne%5Bwght%5D.ttf) format('truetype');font-weight:100 900;font-display:swap}
@font-face{font-family:Unbounded;src:url(../collection/Unbounded%5Bwght%5D.ttf) format('truetype');font-weight:100 900;font-display:swap}
@font-face{font-family:'Bodoni Moda';src:url(../collection/BodoniModa%5Bopsz%2Cwght%5D.ttf) format('truetype');font-weight:100 900;font-display:swap}
@font-face{font-family:'Space Grotesk';src:url(../collection/SpaceGrotesk%5Bwght%5D.ttf) format('truetype');font-weight:100 900;font-display:swap}
/* ---- mockup ---- */
:root{--paper:#f5f4ee;--ink:#20251f;--muted:#596153;--line:#d6d8ce;--glow:#d7f75b;--white:#fff;--soft:#e8e9df;--green:#37533b;--error:#a53132}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:14px/1.5 Manrope,Arial,sans-serif}button,input,select,textarea{font:inherit;color:inherit}button,a,input,select{touch-action:manipulation}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}a{color:inherit}button{border:0;background:none}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--green);outline-offset:4px}svg{display:block}button svg{flex-shrink:0}button,a{ -webkit-tap-highlight-color:transparent}input[type=range]{accent-color:var(--ink)}input[type=checkbox]{accent-color:var(--green)}.hidden{display:none!important}.mono,.eyebrow{font-family:'IBM Plex Mono',monospace;font-size:11px}.eyebrow{letter-spacing:.09em;text-transform:uppercase}.muted{color:var(--muted)}.shell{max-width:1512px;margin:auto;padding:0 48px}.topbar{height:94px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);gap:24px}.logo{display:flex;align-items:center;gap:10px;text-decoration:none;font-weight:700;font-size:27px;letter-spacing:-1.5px}.brandmark{width:31px;height:34px}.brandmark path{fill:var(--ink)}.topnav{display:flex;gap:6px;background:#eaece2;padding:5px;border-radius:40px}.navbtn{height:39px;border-radius:30px;padding:0 22px;color:var(--muted);font-weight:600;font-size:13px}.navbtn.active{background:var(--ink);color:var(--paper)}.header-right{display:flex;gap:15px;align-items:center}.agentbtn{border:1px solid #b6bcae;border-radius:30px;padding:10px 16px;font-size:12px;display:flex;align-items:center;gap:8px}.avatar{height:34px;width:34px;border-radius:50%;background:#e0e4d7;display:grid;place-items:center;font-size:12px;font-weight:600}.btn{min-height:44px;padding:11px 20px;border-radius:40px;display:inline-flex;align-items:center;justify-content:center;gap:10px;font-size:12px;font-weight:650;text-decoration:none;border:1px solid transparent;white-space:nowrap}.btn.primary{background:var(--glow);color:var(--ink)}.btn.primary:hover{background:#c8ea43}.btn.dark{background:var(--ink);color:white}.btn.outline{border-color:#a4ac9b;background:transparent}.btn.soft{background:var(--soft)}.btn.small{min-height:36px;padding:7px 13px;font-size:11px}.iconbtn{width:44px;height:44px;border:1px solid transparent;border-radius:50%;display:grid;place-items:center}.iconbtn:hover{background:#e8e9df}.iconbtn.active{background:var(--ink);color:white}.hero{display:grid;grid-template-columns:1.6fr 1fr;gap:50px;padding:49px 0 40px;align-items:center}.hero h1{font-size:clamp(44px,4.9vw,74px);line-height:1.06;letter-spacing:-.055em;font-weight:500;margin:16px 0 19px}.hero h1 em{font-family:Fraunces,serif;font-weight:500;font-style:normal;letter-spacing:-.05em}.hero-copy{max-width:450px;font-size:14px;color:var(--muted);line-height:1.7}.hero-actions{display:flex;align-items:center;gap:16px;margin-top:22px}.maker-callout{position:relative;align-self:stretch;min-height:252px;border:1px solid var(--line);border-radius:14px;padding:22px 25px;background:#eeeee5;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden}.maker-callout .mini-art{position:absolute;right:19px;top:23px;width:180px;height:168px}.maker-callout .mini-art text{font-family:Fraunces;font-size:142px;fill:#20251f}.maker-callout h2{font-size:23px;letter-spacing:-.04em;font-weight:500;max-width:205px;line-height:1.2;margin:65px 0 16px;position:relative}.maker-callout .bottom{display:flex;align-items:end;justify-content:space-between}.round-arrow{height:42px;width:42px;background:var(--glow);border-radius:50%;display:grid;place-items:center}.workspace{padding-bottom:55px}.section-head{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:19px}.tabs{display:flex;gap:26px}.tab{padding:9px 0;border-bottom:2px solid transparent;font-size:13px;color:var(--muted);min-height:44px}.tab.active{border-color:var(--ink);color:var(--ink);font-weight:700}.count{margin-left:5px;font-size:10px;color:var(--muted)}.toolbar{display:flex;align-items:center;background:#fff;border:1px solid var(--line);border-radius:9px;padding:7px 8px 7px 19px;gap:15px;margin-bottom:18px;min-height:59px}.sample-input{flex:1;min-width:100px;border:0;background:none;outline-offset:6px!important;font-size:14px;height:40px}.rangegroup{display:flex;align-items:center;gap:10px;padding:0 20px;border-left:1px solid var(--line);border-right:1px solid var(--line)}.rangegroup input{width:100px}.viewtoggle{display:flex;gap:2px}.viewtoggle button{height:35px;width:35px;border-radius:5px}.viewtoggle button.active{background:var(--soft);color:var(--ink)}.toolbar .iconbtn{width:35px;height:35px}.filterline{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:19px 0 26px}.chips{display:flex;gap:8px;flex-wrap:wrap}.chip{min-height:34px;padding:7px 14px;border:1px solid var(--line);border-radius:30px;font-size:11px}.chip.active{background:var(--ink);color:#fff;border-color:var(--ink)}.search{border:0;border-bottom:1px solid #acb3a4;background:transparent;width:155px;padding:8px 0;font-size:12px}.cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px}.fontcard{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:white;transition:border-color .15s}.fontcard:hover{border-color:#7a8572}.specimen{height:206px;padding:21px;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden}.specimen .number{position:absolute;left:18px;top:16px;font-size:10px;opacity:.7}.favorite{position:absolute;right:10px;top:6px;color:inherit}.specimen-text{font-size:48px;line-height:1.1;text-align:center;letter-spacing:-.04em;overflow-wrap:anywhere;max-width:100%;cursor:text;white-space:pre-wrap;max-height:150px;overflow:hidden}.cardmeta{padding:17px 19px;display:flex;align-items:center;justify-content:space-between;gap:8px}.cardtitle{font-weight:650;font-size:13px;text-align:left;padding:0}.cardtitle:hover{text-decoration:underline}.cardtags{font-size:10px;color:var(--muted);margin-top:4px}.cardactions{display:flex;align-items:center;gap:1px}.cardactions .iconbtn{width:34px;height:36px}.cards.list{display:block}.cards.list .fontcard{display:grid;grid-template-columns:1.4fr 1fr;margin-bottom:12px}.cards.list .specimen{height:120px}.cards.list .specimen-text{font-size:40px!important}.catalog-note{font-size:11px;color:var(--muted);margin-top:19px;display:flex;align-items:center;gap:7px}.page-heading{padding:43px 0 27px;display:flex;align-items:flex-start;justify-content:space-between;gap:24px}.page-heading h1{font-weight:500;letter-spacing:-.055em;font-size:46px;line-height:1.12;margin:12px 0}.page-heading p{color:var(--muted);margin:0;max-width:590px}.steps{display:flex;gap:28px;border-bottom:1px solid var(--line);padding:0 0 19px;margin-bottom:30px;flex-wrap:wrap}.step{padding:0;display:flex;gap:9px;align-items:center;color:var(--muted);font-size:12px}.step .step-n{width:25px;height:25px;border:1px solid #bec4b6;border-radius:50%;display:grid;place-items:center;font-size:10px}.step.active{color:var(--ink);font-weight:650}.step.active .step-n{background:var(--glow);border-color:var(--glow)}.upload-layout{display:grid;grid-template-columns:1.5fr 1fr;gap:28px;padding:0 0 70px}.upload-zone{border:1px dashed #839071;border-radius:13px;min-height:370px;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;background:#eff0e7;padding:30px}.upload-zone.over{background:#e3efbb}.upload-icon{width:66px;height:66px;background:var(--glow);border-radius:18px;display:grid;place-items:center;margin-bottom:15px}.upload-zone h2{font-size:25px;font-weight:500;letter-spacing:-.04em;margin:10px 0}.upload-zone p{color:var(--muted);margin:0 0 23px;max-width:360px}.upload-zone img{max-width:100%;max-height:145px;border-radius:5px;margin-bottom:15px}.tips{background:white;border:1px solid var(--line);border-radius:13px;padding:29px}.tips h3{font-weight:500;font-size:21px;letter-spacing:-.03em;margin:0 0 22px}.tip{display:flex;gap:15px;margin-bottom:23px}.tip b{font-weight:650;display:block;font-size:13px;margin-bottom:4px}.tip p{font-size:12px;line-height:1.7;color:var(--muted);margin:0}.divider{height:1px;background:var(--line);margin:24px 0}.demo-link{font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:4px;padding:0;min-height:40px}.editor-layout{display:grid;grid-template-columns:1fr 260px;border:1px solid #c8cdbf;border-radius:12px;background:white;overflow:hidden}.canvas-section{min-width:0;border-right:1px solid var(--line)}.canvas-tools{height:59px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 17px;gap:10px}.toolgroup{display:flex;gap:4px;align-items:center}.toolgroup button{width:35px;height:35px;display:grid;place-items:center;border-radius:5px}.toolgroup button.active{background:var(--ink);color:white}.canvas-wrap{background-color:#f6f6f0;background-image:radial-gradient(#d4d9ca 1px,transparent 1px);background-size:18px 18px;position:relative;height:421px;overflow:hidden}.editor-svg{width:100%;height:100%;touch-action:none}.editor-svg .node{fill:#f5f4ee;stroke:#37533b;stroke-width:2;cursor:move}.editor-svg .node.selected{fill:#d7f75b;stroke-width:2.5}.editor-svg .handle{fill:white;stroke:#82916b;stroke-width:1.3;cursor:move}.node-guide{stroke:#8ca46b;stroke-width:1;pointer-events:none}.canvas-label{position:absolute;left:18px;bottom:17px;font-family:'IBM Plex Mono';font-size:10px;color:var(--muted)}.inspector{padding:22px 20px}.inspector h3{margin:0 0 20px;font-size:15px;font-weight:650}.field-label{display:block;font-size:11px;font-weight:650;margin:17px 0 7px}.field{width:100%;min-height:40px;padding:10px 12px;border:1px solid #9da790;border-radius:6px;background:white;font-size:13px}.coord-row{display:flex;gap:10px}.coord-row label{flex:1;min-width:0}.coord-row input{width:100%}.mini-help{font-size:11px;color:var(--muted);line-height:1.7}.badge{display:inline-flex;align-items:center;gap:6px;font-size:10px;background:#e5eddf;color:#37533b;border-radius:20px;padding:5px 10px}.badge.warning{background:#f6ecd3;color:#75521e}.glyph-strip{display:flex;gap:8px;padding:13px 16px;border-top:1px solid var(--line);overflow:auto}.glyph{flex:0 0 37px;height:40px;border:1px solid var(--line);border-radius:5px;display:grid;place-items:center;font-size:16px;color:#737d69}.glyph.active{background:var(--glow);border-color:#8a9a62;color:var(--ink)}.maker-bottom{display:flex;justify-content:space-between;gap:16px;align-items:center;margin:21px 0 45px}.canvas-status{display:flex;gap:10px;align-items:center;color:var(--muted);font-size:11px}.test-layout{display:grid;grid-template-columns:1fr 300px;gap:24px}.test-paper{background:#fff;border:1px solid var(--line);border-radius:12px;padding:35px;min-height:380px}.test-glyphs{display:flex;align-items:center;justify-content:center;gap:12px;height:230px}.test-glyphs svg{width:120px;height:155px}.test-note{padding:18px;background:var(--soft);border-radius:8px;font-size:12px;margin-top:15px}.export-layout{display:grid;grid-template-columns:1fr 1fr;gap:30px;padding-bottom:70px}.export-card{background:white;border:1px solid var(--line);border-radius:12px;padding:30px}.export-card h2{margin:0 0 14px;font-size:27px;font-weight:500;letter-spacing:-.035em}.export-card p{color:var(--muted);line-height:1.7}.row{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:13px 0;border-bottom:1px solid var(--line);font-size:12px}.vector-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:23px;padding-bottom:50px}.vector-art{height:260px;background:#e9ecdf;padding:20px;display:grid;place-items:center;overflow:hidden}.vector-art svg{width:100%;height:100%;max-width:280px}.vectorcard{border:1px solid var(--line);border-radius:12px;background:white;overflow:hidden}.vector-meta{padding:18px;display:flex;justify-content:space-between;align-items:center;gap:10px}.vector-meta h3{font-size:13px;margin:0 0 5px}.vector-meta p{font-size:10px;color:var(--muted);margin:0}.empty{padding:70px 20px;text-align:center;border:1px dashed #a4ad97;border-radius:12px;grid-column:1/-1}.empty h3{font-size:22px;font-weight:500}.empty p{color:var(--muted)}footer{border-top:1px solid var(--line);padding:23px 0 30px;display:flex;justify-content:space-between;gap:20px;font-size:10px;color:var(--muted)}.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%);background:var(--ink);color:white;border-radius:9px;padding:14px 22px;box-shadow:0 6px 25px #20251f20;z-index:100;font-size:12px;max-width:90vw}.compare-tray{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);background:var(--ink);color:white;border-radius:14px;padding:12px 14px 12px 22px;display:flex;align-items:center;gap:22px;box-shadow:0 10px 35px #20251f28;z-index:40;font-size:12px;max-width:94vw}.compare-tray button:not(.btn){color:inherit;text-decoration:underline;font-size:11px}.modal{border:1px solid #aab39d;border-radius:16px;background:var(--paper);padding:0;color:var(--ink);width:min(760px,calc(100% - 32px));max-height:88vh;box-shadow:0 24px 90px #20251f30}.modal::backdrop{background:#20251f70}.modal-head{padding:24px 30px 17px;display:flex;justify-content:space-between;align-items:center;gap:20px;border-bottom:1px solid var(--line)}.modal-head h2{margin:0;font-size:23px;font-weight:500;letter-spacing:-.035em}.modal-body{padding:25px 30px 30px}.modal-body p{color:var(--muted);font-size:13px;line-height:1.75}.codeblock{background:var(--ink);color:#d7f75b;font-family:'IBM Plex Mono';padding:20px;border-radius:9px;font-size:11px;line-height:1.9;white-space:pre-wrap;overflow-wrap:anywhere}.detail-specimen{padding:35px 15px;text-align:center;font-size:62px;line-height:1.2;word-break:break-word;min-height:150px}.glyph-list{font-size:26px;letter-spacing:6px;line-height:1.9;border-block:1px solid var(--line);padding:20px 0;margin-bottom:20px}.modal-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:24px}.compare-row{padding:24px 0;border-bottom:1px solid var(--line)}.compare-row .sample{font-size:44px;line-height:1.2;word-break:break-word;margin:16px 0}.dark-specimens .specimen{background:#20251f!important;color:#f5f4ee!important}.draft-preview{height:206px;background:#efeee5;padding:20px;display:grid;place-items:center}.draft-preview svg{height:160px;width:240px}.draft-card{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:white}.upload-status{max-width:420px;font-size:12px;margin-top:14px;color:var(--muted)}.back-link{font-size:12px;text-decoration:underline;text-underline-offset:4px}.filelabel{word-break:break-all;font-size:12px;max-width:100%}.badge-demo{font-family:'IBM Plex Mono';font-size:9px;border:1px solid #b8c0ad;padding:3px 7px;border-radius:4px;color:var(--muted)}
@media(min-width:1500px){.hero{padding-block:57px}.specimen{height:225px}}
@media(max-width:1100px){.shell{padding-inline:30px}.hero{gap:25px;grid-template-columns:1.4fr 1fr}.hero h1{font-size:55px}.maker-callout .mini-art{width:140px}.maker-callout h2{max-width:180px;font-size:22px}.navbtn{padding-inline:16px}.specimen-text{font-size:38px}.rangegroup{padding-inline:12px}.cards{gap:15px}.topbar{gap:12px}.avatar{display:none}}
@media(max-width:800px){.header-right .agentbtn{padding:10px;font-size:0;gap:0}.hero{grid-template-columns:1fr}.hero h1{font-size:60px}.maker-callout{display:none}.cards{grid-template-columns:repeat(2,minmax(0,1fr))}.editor-layout{grid-template-columns:1fr 220px}.toolbar{gap:7px}.rangegroup{display:none}.upload-layout{grid-template-columns:1fr}.upload-zone{min-height:330px}.tips{padding:24px}.tip{margin-bottom:15px}.vector-grid{grid-template-columns:repeat(2,1fr)}.export-layout,.test-layout{grid-template-columns:1fr}.page-heading{flex-wrap:wrap}.page-heading h1{font-size:40px}}
@media(max-width:540px){.shell{padding-inline:20px}.topbar{height:76px;flex-wrap:wrap;gap:0;border:0}.logo{font-size:24px}.brandmark{width:27px}.topnav{order:3;width:100%;justify-content:center;padding:4px;margin-top:13px;border:1px solid var(--line)}.navbtn{flex:1;padding-inline:8px;font-size:11px;white-space:nowrap}.header-right{margin-left:auto}.hero{padding-top:87px;padding-bottom:25px}.hero h1{font-size:47px;margin-top:14px}.hero-copy{font-size:13px}.hero-actions{gap:10px}.hero-actions .btn{font-size:11px;padding-inline:17px}.section-head{margin-bottom:11px;align-items:center}.tabs{gap:20px}.section-head>.mono{display:none}.toolbar{padding-left:12px;margin-bottom:9px}.toolbar .eyebrow{display:none}.sample-input{font-size:16px}.filterline{align-items:flex-start;gap:8px;flex-wrap:wrap;margin-top:12px;margin-bottom:18px}.chips{gap:5px}.chip{font-size:10px;padding:7px 12px}.search{width:100%;font-size:13px;margin-top:5px}.cards{grid-template-columns:1fr;gap:17px}.specimen{height:235px}.specimen-text{font-size:46px}.cardmeta{padding:16px}.cards.list .fontcard{grid-template-columns:1fr}.cards.list .specimen{height:105px}.page-heading{padding-top:85px;gap:10px}.page-heading h1{font-size:39px}.page-heading p{font-size:13px}.page-heading>.btn{min-height:38px;padding:8px 14px}.steps{gap:14px;margin-bottom:22px}.step{font-size:10px;gap:6px}.step .step-n{width:23px;height:23px}.upload-zone{padding:24px 18px}.upload-zone h2{font-size:23px}.upload-zone p{font-size:12px}.editor-layout{grid-template-columns:1fr}.canvas-section{border-right:0}.canvas-wrap{height:330px}.canvas-tools{padding:0 9px}.canvas-tools .mono{font-size:9px}.inspector{padding:18px;display:grid;grid-template-columns:1fr 1fr;gap:10px;border-top:1px solid var(--line)}.inspector h3{grid-column:1/-1;margin-bottom:0}.inspector .divider{display:none}.inspector .field-label{margin-top:7px}.inspector .mini-help{grid-column:1/-1;margin:0}.inspector>.badge{grid-column:1/-1;justify-self:start}.coord-row{grid-column:1/-1}.maker-bottom{align-items:flex-start;flex-direction:column}.maker-bottom .btn{align-self:flex-end}.vector-grid{grid-template-columns:1fr}.vector-art{height:280px}.compare-tray{gap:12px;padding:10px 12px;font-size:10px;bottom:14px;width:calc(100% - 28px);justify-content:space-between}.compare-tray .btn{font-size:11px;padding-inline:14px}.compare-tray>button:not(.btn){display:none}.modal-head{padding:18px 20px 12px}.modal-head h2{font-size:21px}.modal-body{padding:20px}.detail-specimen{font-size:45px}.glyph-list{font-size:22px;letter-spacing:4px}.compare-row .sample{font-size:32px}.modal{max-height:90vh}.export-card{padding:22px}footer{font-size:9px;flex-direction:column;gap:6px}.test-paper{padding:22px}.test-glyphs{gap:0}.test-glyphs svg{width:88px}.catalog-note{line-height:1.7;align-items:start}}
@media(max-width:800px){.toolbar{flex-wrap:wrap}.rangegroup{display:flex;order:2;width:100%;border:0;padding:3px 5px}.rangegroup input{width:auto;flex:1}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
/* ---- production additions (same tokens, same look) ---- */
[hidden]{display:none!important}
html{scroll-behavior:smooth}
body{-webkit-font-smoothing:antialiased;min-height:100vh}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
a.navbtn{display:inline-flex;align-items:center;text-decoration:none;position:relative;z-index:1;transition:color .25s}
.navbtn.active{background:transparent}
.topnav{position:relative}
.nav-pill{position:absolute;top:5px;left:0;height:39px;border-radius:30px;background:var(--ink);transition:transform .55s cubic-bezier(.2,.8,.2,1),width .55s cubic-bezier(.2,.8,.2,1);z-index:0;pointer-events:none}
.navbtn:not(.active):hover{color:var(--ink)}
button.avatar{border:0;cursor:pointer;color:var(--ink);transition:background .2s}
button.avatar:hover{background:#d4d9c8}
.agentbtn{transition:background .2s,border-color .2s}.agentbtn:hover{background:#eaece2;border-color:#788170}
.btn{transition:background .2s,border-color .2s,color .2s}
.btn.dark:hover{background:#37533b}.btn.outline:hover{border-color:var(--ink);background:#eaece2}.btn.soft:hover{background:#dfe1d4}
.btn svg,.round-arrow svg{transition:transform .35s cubic-bezier(.2,.8,.2,1)}
.btn:hover svg[data-i=arrow],.round-arrow:hover svg{transform:translateX(3px)}
.round-arrow{transition:background .2s,transform .35s cubic-bezier(.2,.8,.2,1)}.round-arrow:hover{background:#c8ea43}
.toast{transition:opacity .3s,transform .4s cubic-bezier(.2,.8,.2,1)}
.toast.hidden,.toast[hidden]{display:block!important;opacity:0;transform:translate(-50%,14px);pointer-events:none}
.toast[hidden]{visibility:hidden}
.modal[open]{animation:modalIn .38s cubic-bezier(.2,.8,.2,1)}
.modal[open]::backdrop{animation:fadeIn .3s ease}
@keyframes modalIn{from{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.field-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.field-row .field{flex:1;min-width:180px}
.form-note{font-size:12px;color:var(--muted);margin:10px 0 0}
.form-note.ok{color:var(--green)}.form-note.err{color:var(--error)}
.footer-link{color:inherit;text-decoration:underline;text-underline-offset:3px;font-size:inherit;padding:0}
.badge.error{background:#f6dcdc;color:var(--error)}
.badge.neutral{background:var(--soft);color:var(--muted)}

/* ---- motion: alive, never in the way (all of it switches off with reduced motion) ---- */
.rise{opacity:0;transform:translateY(18px);transition:opacity .8s cubic-bezier(.2,.7,.2,1),transform .9s cubic-bezier(.2,.7,.2,1);transition-delay:var(--d,0s)}
.rise.in{opacity:1;transform:none}
.line-mask{display:block;overflow:hidden;padding-bottom:.08em;margin-bottom:-.08em}
.line-mask>span{display:inline-block;transform:translateY(105%);transition:transform 1s cubic-bezier(.2,.75,.15,1);transition-delay:var(--d,0s)}
.ready .line-mask>span{transform:none}
.reveal{opacity:0;transform:translateY(22px);transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .8s cubic-bezier(.2,.7,.2,1);transition-delay:var(--d,0s)}
.reveal.in{opacity:1;transform:none}
.parallax{will-change:transform;transition:transform .2s linear}
.maker-callout .mini-art text{transition:font-variation-settings 1.2s cubic-bezier(.2,.8,.2,1)}
.maker-callout .mini-art .breath{animation:breath 7s ease-in-out infinite alternate}
@keyframes breath{from{font-variation-settings:'wght' 380,'SOFT' 0,'opsz' 144}to{font-variation-settings:'wght' 760,'SOFT' 100,'opsz' 144}}
.maker-callout .mini-art rect{transform-box:fill-box;transform-origin:center;animation:node 2.8s ease-in-out infinite}
.maker-callout .mini-art rect:nth-of-type(2){animation-delay:.7s}.maker-callout .mini-art rect:nth-of-type(3){animation-delay:1.4s}.maker-callout .mini-art rect:nth-of-type(4){animation-delay:2.1s}
@keyframes node{0%,100%{transform:scale(1)}50%{transform:scale(1.45)}}
.maker-callout{transition:border-color .3s}.maker-callout:hover{border-color:#a4ac9b}
.specimen-text{transition:font-variation-settings .9s cubic-bezier(.2,.8,.2,1),letter-spacing .9s cubic-bezier(.2,.8,.2,1)}
.specimen .number,.favorite{transition:opacity .3s,background .2s}
.favorite[aria-pressed=true] svg{fill:currentColor}
.favorite.pop svg{animation:pop .45s cubic-bezier(.2,.8,.2,1.4)}
@keyframes pop{0%{transform:scale(.6)}60%{transform:scale(1.25)}100%{transform:scale(1)}}
.caret{animation:blink 1.1s steps(1) infinite}@keyframes blink{50%{opacity:0}}
.tabs{position:relative}.tab{transition:color .2s}
.tab-line{position:absolute;bottom:0;left:0;height:2px;background:var(--ink);transition:transform .45s cubic-bezier(.2,.8,.2,1),width .45s cubic-bezier(.2,.8,.2,1)}
.tabs.has-line .tab.active{border-color:transparent}
.chip{transition:background .2s,color .2s,border-color .2s}.chip:not(.active):hover{border-color:#788170}
.upload-icon{animation:float 5s ease-in-out infinite}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
.upload-zone{transition:background .25s,border-color .25s}
.upload-zone.over{border-color:var(--green);border-style:solid}
.step .step-n{transition:background .35s,border-color .35s,transform .35s cubic-bezier(.2,.8,.2,1.4)}
.step.active .step-n{transform:scale(1.08)}
.step:not(:disabled):not(.active):hover{color:var(--ink)}
.stage-in{animation:stageIn .55s cubic-bezier(.2,.8,.2,1)}
@keyframes stageIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.rise,.reveal{opacity:1;transform:none}.line-mask>span{transform:none}.parallax{transform:none!important}*,*::before,*::after{animation:none!important}}
@media(max-width:540px){.nav-pill{top:4px;height:39px}}
@media(max-width:1100px){button.avatar{display:grid}}
