@font-face{font-family:"MBM UI Fraunces";src:url(/fonts/ui-fraunces.woff2) format("woff2");font-weight:300 700;font-style:normal;font-display:swap}
@font-face{font-family:"MBM UI Fraunces";src:url(/fonts/ui-fraunces-italic.woff2) format("woff2");font-weight:300 700;font-style:italic;font-display:swap}
@font-face{font-family:"MBM UI Jost";src:url(/fonts/ui-jost-var.woff2) format("woff2");font-weight:300 600;font-display:swap}
@font-face{font-family:"MBM UI Cinzel";src:url(/fonts/ui-cinzel-500.woff2) format("woff2");font-weight:500;font-display:swap}
:root{--f-disp:"MBM UI Fraunces",Georgia,"Times New Roman",serif;--f-body:"MBM UI Jost","Avenir Next","Segoe UI",system-ui,sans-serif;--f-cap:"MBM UI Cinzel","Trajan Pro",Georgia,serif;--bg:#020304;--ink:#e8eee9;--dim:rgba(220,240,228,.62);--line:rgba(160,220,180,.28);--accent:#9fdcae}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);font-family:var(--f-body);overflow:hidden;overscroll-behavior:none}
canvas#realm{position:fixed;inset:0;width:100%;height:100%;display:block;touch-action:none}
.fallback{display:none;position:fixed;inset:0}
.no-gl .fallback{display:block}.no-gl canvas#realm{display:none}
.fallback img{width:100%;height:100%;object-fit:cover;opacity:.55}
.fallback-copy{position:absolute;left:6vw;bottom:12vh;max-width:480px}
.fallback h1{font:italic 400 clamp(30px,5vw,56px)/1.05 var(--f-disp);letter-spacing:-.01em;margin:.3em 0}
.fallback p{color:var(--dim);margin:0}
.eyebrow{font:500 10.5px/1.2 var(--f-cap);letter-spacing:.24em;color:var(--accent);opacity:.8;margin:0 0 12px}
dialog#brief-dialog{width:min(460px,calc(100vw - 32px));max-height:calc(100dvh - 32px);overflow:auto;padding:0;border:1px solid var(--line);border-radius:16px;background:rgba(6,10,9,.92);color:var(--ink);box-shadow:0 30px 80px rgba(0,0,0,.6)}
dialog#brief-dialog::backdrop{background:rgba(0,0,0,.55);backdrop-filter:blur(3px)}
#brief-form{position:relative;padding:28px 26px 22px;display:grid;gap:14px}
#brief-form h2{font:italic 400 27px/1.15 var(--f-disp);margin:0 0 4px;letter-spacing:-.01em;text-wrap:balance}
#brief-form label{display:grid;gap:6px;font-size:13px;color:var(--dim);letter-spacing:.03em}
#brief-form input,#brief-form textarea{font:15px/1.4 inherit;font-family:inherit;color:var(--ink);background:rgba(255,255,255,.04);border:1px solid rgba(220,240,228,.18);border-radius:10px;padding:11px 12px;width:100%;resize:vertical}
#brief-form input:focus,#brief-form textarea:focus{outline:none;border-color:rgba(160,220,180,.65)}
.row{display:flex;flex-wrap:wrap;align-items:center;gap:14px}
.send{font:500 14px/1 var(--f-body);letter-spacing:.04em;color:#04110a;background:var(--accent);border:0;border-radius:999px;padding:12px 18px;cursor:pointer}
.alt{color:var(--dim);font-size:12.5px;text-decoration:none;border-bottom:1px solid rgba(220,240,228,.3)}
.note{font-size:11.5px;color:rgba(220,240,228,.45);margin:0}
.err{color:#ff9d8a;font-size:12.5px;margin:0;min-height:0}
.err:empty{display:none}
.x{position:absolute;top:10px;right:12px;background:none;border:0;color:var(--dim);font-size:24px;line-height:1;cursor:pointer;padding:6px}
.ns{position:fixed;left:6vw;bottom:10vh;max-width:520px;color:var(--dim)}.ns a{color:var(--ink)}
@media (prefers-reduced-motion:reduce){.project-link{transition:none}}
.lost{overflow:auto}.lost-copy{position:fixed;left:6vw;bottom:14vh;max-width:520px}.lost-copy h1{font:italic 400 clamp(30px,5vw,52px)/1.1 var(--f-disp);margin:.3em 0}.lost-copy p{color:var(--dim);line-height:1.6}.lost-copy a{color:var(--ink)}

.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.sent{font:italic 400 19px/1.4 var(--f-disp);color:var(--ink);margin:0}

/* Realm chrome: sound, stats, results, and the studio's four words */
canvas#realm{cursor:grab}canvas#realm.grabbing{cursor:grabbing}
#snd{position:fixed;top:calc(16px + env(safe-area-inset-top,0px));left:calc(18px + env(safe-area-inset-left,0px));font:400 11px/1 var(--f-body);letter-spacing:.16em;text-transform:uppercase;color:var(--dim);padding:11px 14px;border:1px solid var(--line);border-radius:999px;background:rgba(6,10,9,.45);cursor:pointer;z-index:6}
#snd:hover,#snd:focus-visible{color:var(--ink);outline:none;border-color:rgba(200,240,215,.5)}
#hint{position:fixed;left:calc(4.5vw + env(safe-area-inset-left,0px));bottom:calc(18px + env(safe-area-inset-bottom,0px));font:400 10.5px/1.6 var(--f-body);letter-spacing:.12em;color:var(--dim);z-index:5;user-select:none;pointer-events:none;transition:opacity 1.2s}
#hint b{font-weight:400;color:rgba(220,240,228,.75)}
#stat{position:fixed;right:calc(18px + env(safe-area-inset-right,0px));bottom:calc(18px + env(safe-area-inset-bottom,0px));font:400 10px/1 ui-monospace,Menlo,Consolas,monospace;color:rgba(200,235,215,.38);z-index:5;pointer-events:none}
#wpm{position:fixed;left:0;right:0;bottom:calc(46px + env(safe-area-inset-bottom,0px));text-align:center;font:500 11px/1 var(--f-cap);letter-spacing:.3em;text-transform:uppercase;color:var(--dim);opacity:0;transition:opacity 1.4s;z-index:5;pointer-events:none;font-variant-numeric:tabular-nums}
.menu{position:fixed;top:calc(18px + env(safe-area-inset-top,0px));right:calc(20px + env(safe-area-inset-right,0px));display:flex;gap:26px;z-index:8}
.menu button,.sheet .x,.sheet .go{all:unset;cursor:pointer;font:500 11px/1 var(--f-cap);letter-spacing:.24em;text-transform:uppercase;color:var(--dim);padding:8px 0;border-bottom:1px solid transparent;transition:color .3s,border-color .3s}
.menu button:hover,.menu button:focus-visible,.menu button[aria-expanded="true"],.sheet .go:hover,.sheet .go:focus-visible{color:var(--ink);border-color:var(--line)}
.res{position:fixed;left:0;right:0;top:19%;text-align:center;color:var(--ink);opacity:0;transition:opacity 1.6s;z-index:5;pointer-events:none}
.res .n{font:italic 400 clamp(64px,11vw,128px)/1 var(--f-disp);font-variant-numeric:tabular-nums}
.res .l{font:500 11px/1 var(--f-cap);letter-spacing:.34em;text-transform:uppercase;color:var(--dim);margin-top:12px}
.res .t{font:italic 400 17px/1.3 var(--f-disp);color:var(--dim);margin-top:16px}
.res svg{display:block;margin:20px auto 0;width:min(240px,60vw);height:44px;overflow:visible}
@media (max-width:640px){.menu{top:auto;bottom:calc(18px + env(safe-area-inset-bottom,0px));left:0;right:0;justify-content:center;gap:20px}.menu button{font-size:10px;letter-spacing:.18em}#wpm{bottom:calc(58px + env(safe-area-inset-bottom,0px))}}
@media (prefers-reduced-motion:reduce){.res{transition:none}}
@media (max-width:600px){#stat{display:none}}
@media (prefers-reduced-motion:reduce){#hint{transition:none}}
.no-gl #inv,.no-gl #snd,.no-gl #hint,.no-gl #stat,.no-gl #wpm,.no-gl .res{display:none}

/* Realm chrome v11: the bowl, the depth marks, the invitation doorway */
/* the bowl: sound is one small mark. A still ring when silent, a ring that keeps leaving when it sings */
#snd{width:40px;height:40px;padding:0;border:0;border-radius:50%;background:none;font-size:0;letter-spacing:0;color:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}
#snd::before{content:"";position:absolute;inset:16px;border-radius:50%;background:rgba(200,240,220,.5);transition:background .6s,box-shadow .6s}
#snd::after{content:"";position:absolute;inset:7px;border-radius:50%;border:1px solid var(--line);transition:border-color .4s}
#snd:hover::after,#snd:focus-visible::after{border-color:rgba(200,240,215,.75)}
#snd[aria-pressed="true"]::before{background:rgba(169,240,200,.95);box-shadow:0 0 14px rgba(169,240,200,.55)}
#snd[aria-pressed="true"]::after{animation:bowl 3.2s ease-out infinite}
@keyframes bowl{0%{transform:scale(.4);opacity:.95}100%{transform:scale(1.35);opacity:0}}
/* the four doors are depth marks down the right edge; the one the realm is offering right now lights */
@media (min-width:641px){
.menu{top:50%;transform:translateY(-50%);flex-direction:column;align-items:flex-end;gap:24px}
.menu button{display:flex;align-items:center;gap:12px;font-size:10px;letter-spacing:.3em;padding:4px 0;border:0;color:rgba(220,240,228,.36);transition:color .5s}
.menu button::after{content:"";width:16px;height:1px;background:currentColor;transition:width .5s}
.menu button:hover,.menu button:focus-visible,.menu button.lit{color:var(--ink);border:0}
.menu button:hover::after,.menu button:focus-visible::after,.menu button.lit::after{width:40px}
body:has(.sheet:not([hidden])) .menu{top:calc(18px + env(safe-area-inset-top,0px));transform:none;flex-direction:row;align-items:center;gap:26px}
body:has(.sheet:not([hidden])) .menu button{font-size:11px;letter-spacing:.24em;padding:8px 0;border-bottom:1px solid transparent;color:var(--dim)}
body:has(.sheet:not([hidden])) .menu button::after{display:none}
body:has(.sheet:not([hidden])) .menu button[aria-expanded="true"]{color:var(--ink);border-bottom:1px solid var(--line)}
}
@media (max-width:640px){.menu button.lit{color:var(--ink);border-color:var(--line)}}
/* an invitation is a line of the realm's own letters; this is only its doorway: four corner marks and a hand */
#inv{all:unset;position:fixed;z-index:6;box-sizing:border-box;cursor:pointer;opacity:0;pointer-events:none;transition:opacity 1.4s;--c:rgba(169,240,200,.85);
background:linear-gradient(var(--c),var(--c)) left top/18px 1px,linear-gradient(var(--c),var(--c)) left top/1px 18px,linear-gradient(var(--c),var(--c)) right top/18px 1px,linear-gradient(var(--c),var(--c)) right top/1px 18px,linear-gradient(var(--c),var(--c)) left bottom/18px 1px,linear-gradient(var(--c),var(--c)) left bottom/1px 18px,linear-gradient(var(--c),var(--c)) right bottom/18px 1px,linear-gradient(var(--c),var(--c)) right bottom/1px 18px;background-repeat:no-repeat}
#inv.on{opacity:.55;pointer-events:auto;animation:door 3.6s ease-in-out infinite}
#inv.on:hover,#inv.on:focus-visible{opacity:1;animation:none}
#inv::after{content:"";position:absolute;left:50%;bottom:-1px;width:0;height:1px;background:var(--c);transform:translateX(-50%);transition:width .6s cubic-bezier(.2,.7,.2,1)}
#inv.on:hover::after,#inv.on:focus-visible::after{width:calc(100% - 44px)}
@keyframes door{0%,100%{opacity:.4}50%{opacity:.8}}
@media (prefers-reduced-motion:reduce){#snd[aria-pressed="true"]::after,#inv.on{animation:none}}

/* Storefront v12 */
/* The studio is a chamber of the realm, not a popup: the worlds keep turning behind a hush, and the offer is set like a title sequence */
.sheet{position:fixed;inset:0;width:auto;box-sizing:border-box;z-index:7;overflow-y:auto;overscroll-behavior:contain;color:var(--ink);border:0;padding:clamp(96px,15vh,168px) clamp(28px,7vw,128px) 120px;background:radial-gradient(140% 110% at 50% 45%,rgba(2,4,4,.8),rgba(2,4,4,.66) 55%,rgba(2,4,4,.44));animation:hush .9s ease both;scrollbar-width:none}
.sheet::-webkit-scrollbar{display:none}
@keyframes hush{from{opacity:0}to{opacity:1}}
@keyframes rise{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:none}}
#sheetBody{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:clamp(40px,7vw,128px);max-width:1320px;margin:0 auto;align-items:start}
.sheet .x{position:fixed;top:calc(18px + env(safe-area-inset-top,0px));left:clamp(28px,7vw,128px);z-index:9;display:inline-flex;align-items:center;gap:12px;font-size:0;letter-spacing:0;padding:8px 0;border:0;color:var(--dim);transition:color .4s}
.sheet .x::before{content:"";width:22px;height:1px;background:currentColor;transition:width .5s}
.sheet .x::after{content:"Back to the realm";font:500 10.5px/1 var(--f-cap);letter-spacing:.28em;text-transform:uppercase}
.sheet .x:hover,.sheet .x:focus-visible{color:var(--ink);border:0}
.sheet .x:hover::before,.sheet .x:focus-visible::before{width:44px}
.sheet .lead{position:sticky;top:0;animation:rise 1s cubic-bezier(.2,.7,.2,1) both}
.sheet .eye{font:500 10.5px/1 var(--f-cap);letter-spacing:.34em;text-transform:uppercase;color:rgba(169,240,200,.85)}
.sheet h2{font:italic 400 clamp(40px,5.4vw,86px)/1.02 var(--f-disp);letter-spacing:-.012em;margin:26px 0 28px;text-wrap:balance}
.sheet .sub{font:400 clamp(15px,1.2vw,18px)/1.65 var(--f-body);color:var(--dim);max-width:36ch;margin:0}
.sheet .lead p{font:400 14px/1.6 var(--f-body);color:var(--dim);margin:22px 0 0}
.sheet .go{display:inline-flex;align-items:center;gap:14px;margin:34px 28px 0 0;padding:6px 0;font-size:12px;letter-spacing:.3em;color:var(--ink);border:0}
.sheet .go::after{content:"";width:34px;height:1px;background:rgba(169,240,200,.95);transition:width .5s cubic-bezier(.2,.7,.2,1)}
.sheet .go:hover,.sheet .go:focus-visible{border:0}
.sheet .go:hover::after,.sheet .go:focus-visible::after{width:72px}
.sheet .list{counter-reset:n}
.sheet .row{counter-increment:n;display:grid;grid-template-columns:46px minmax(0,1fr) auto;gap:8px 18px;padding:26px 0 28px;border-top:1px solid var(--line);align-items:baseline;animation:rise .9s cubic-bezier(.2,.7,.2,1) both}
.sheet .row::before{content:counter(n,decimal-leading-zero);font:500 10.5px/1 var(--f-cap);letter-spacing:.2em;color:rgba(169,240,200,.7)}
.sheet .row:last-of-type{border-bottom:1px solid var(--line)}
.sheet .row b{font:italic 400 clamp(24px,2.5vw,38px)/1.1 var(--f-disp);transition:color .4s}
.sheet .row:hover b{color:#c9f7dc}
.sheet .row i{font:400 clamp(18px,1.7vw,26px)/1 var(--f-disp);font-style:normal;color:rgba(169,240,200,.95);font-variant-numeric:tabular-nums;white-space:nowrap}
.sheet .row span{grid-column:2/-1;font:400 15px/1.6 var(--f-body);color:var(--dim);max-width:48ch}
.sheet .row .act{all:unset;grid-column:2/-1;justify-self:start;display:inline-flex;align-items:center;gap:12px;margin-top:8px;padding:6px 0;cursor:pointer;font:500 10.5px/1 var(--f-cap);letter-spacing:.28em;text-transform:uppercase;color:var(--ink)}
.sheet .row .act::after{content:"";width:22px;height:1px;background:rgba(169,240,200,.95);transition:width .5s cubic-bezier(.2,.7,.2,1)}
.sheet .row .act:hover::after,.sheet .row .act:focus-visible::after{width:56px}
.sheet .row.say b{font-size:clamp(19px,1.7vw,26px);line-height:1.3;grid-column:2/-1}
.sheet .row:nth-child(1){animation-delay:.12s}.sheet .row:nth-child(2){animation-delay:.2s}.sheet .row:nth-child(3){animation-delay:.28s}.sheet .row:nth-child(4){animation-delay:.36s}.sheet .row:nth-child(5){animation-delay:.44s}.sheet .row:nth-child(6){animation-delay:.52s}.sheet .row:nth-child(7){animation-delay:.6s}.sheet .row:nth-child(8){animation-delay:.68s}
.sheet .list p{font:400 14px/1.6 var(--f-body);color:var(--dim);margin:24px 0 0 64px;max-width:48ch;animation:rise .9s .7s cubic-bezier(.2,.7,.2,1) both}
.sheet .mail{font:400 15px/1.4 var(--f-body);color:var(--ink);text-decoration:none;user-select:all;border-bottom:1px solid var(--line);padding-bottom:3px}
@media (max-width:900px){#sheetBody{grid-template-columns:minmax(0,1fr);gap:40px}.sheet .lead{position:static}.sheet{padding:84px 24px 130px}.sheet .x{left:24px}.sheet h2{font-size:clamp(36px,10.5vw,56px);margin:20px 0 20px}.sheet .row{grid-template-columns:32px minmax(0,1fr) auto;padding:22px 0 24px}.sheet .list p{margin-left:50px}}
@media (prefers-reduced-motion:reduce){.sheet,.sheet .lead,.sheet .row,.sheet .list p{animation:none}}
body:has(.sheet:not([hidden])) #snd,body:has(.sheet:not([hidden])) #hint,body:has(.sheet:not([hidden])) #wpm{opacity:0;pointer-events:none}
@media (max-width:640px){body:has(.sheet:not([hidden])) .menu{bottom:0;padding:34px 0 calc(34px + env(safe-area-inset-bottom,0px));background:linear-gradient(rgba(2,4,4,0),rgba(2,4,4,.94) 46%)}}

/* Type test v13 */
/* The test: begun on purpose. The realm stays; the page falls quiet around one line, a clock and your pace */
.menu{transition:opacity .7s}
#begin{all:unset;position:fixed;left:50%;bottom:calc(60px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);z-index:6;cursor:pointer;box-sizing:border-box;padding:17px 32px;font:500 11px/1 var(--f-cap);letter-spacing:.34em;text-transform:uppercase;color:var(--ink);white-space:nowrap;transition:opacity .8s,letter-spacing .6s cubic-bezier(.2,.7,.2,1);--c:rgba(169,240,200,.85);
background:linear-gradient(var(--c),var(--c)) left top/14px 1px,linear-gradient(var(--c),var(--c)) left top/1px 14px,linear-gradient(var(--c),var(--c)) right top/14px 1px,linear-gradient(var(--c),var(--c)) right top/1px 14px,linear-gradient(var(--c),var(--c)) left bottom/14px 1px,linear-gradient(var(--c),var(--c)) left bottom/1px 14px,linear-gradient(var(--c),var(--c)) right bottom/14px 1px,linear-gradient(var(--c),var(--c)) right bottom/1px 14px;background-repeat:no-repeat}
#begin:hover,#begin:focus-visible{letter-spacing:.44em}
#bar{position:fixed;top:0;left:0;right:0;height:1px;background:rgba(169,240,200,.85);transform-origin:left center;transform:scaleX(0);z-index:6;opacity:0;transition:opacity .8s}
#hud{position:fixed;top:calc(26px + env(safe-area-inset-top,0px));left:0;right:0;text-align:center;z-index:6;pointer-events:none;opacity:0;transition:opacity .8s;color:var(--ink)}
#hud b{display:block;font:italic 400 clamp(42px,6vw,76px)/1 var(--f-disp);font-variant-numeric:tabular-nums}
#hud span{display:block;margin-top:12px;min-height:11px;font:500 10.5px/1 var(--f-cap);letter-spacing:.3em;text-transform:uppercase;color:var(--dim);font-variant-numeric:tabular-nums}
#setup{position:fixed;top:calc(150px + env(safe-area-inset-top,0px));left:0;right:0;display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:10px 22px;z-index:6;opacity:0;pointer-events:none;transition:opacity .8s;padding:0 20px}
#setup button{all:unset;cursor:pointer;font:500 10.5px/1 var(--f-cap);letter-spacing:.28em;text-transform:uppercase;color:rgba(220,240,228,.7);padding:8px 0;border-bottom:1px solid transparent;transition:color .4s,border-color .4s}
#setup button:hover,#setup button:focus-visible{color:var(--ink)}
#setup button.on{color:var(--ink);border-color:rgba(169,240,200,.7)}
#setup span{width:1px;height:14px;background:var(--line)}
#next{position:fixed;left:0;right:0;box-sizing:border-box;padding:0 24px;text-align:center;z-index:5;pointer-events:none;font:italic 400 15px/1.4 var(--f-disp);color:rgba(220,240,228,.4);opacity:0;transition:opacity .8s}
#quit{all:unset;position:fixed;top:calc(26px + env(safe-area-inset-top,0px));right:calc(22px + env(safe-area-inset-right,0px));z-index:6;cursor:pointer;display:inline-flex;align-items:center;gap:12px;font:500 10px/1 var(--f-cap);letter-spacing:.3em;text-transform:uppercase;color:var(--dim);opacity:0;pointer-events:none;transition:opacity .8s,color .4s}
#quit::after{content:"";width:16px;height:1px;background:currentColor;transition:width .5s}
#quit:hover,#quit:focus-visible{color:var(--ink)}
#quit:hover::after{width:36px}
#kb{position:fixed;left:0;bottom:0;width:1px;height:1px;opacity:0;border:0;padding:0;margin:0;font-size:16px;background:none;color:transparent;caret-color:transparent;outline:none}
body.testing #hud,body.testing #next,body.testing #bar{opacity:1}
body.testing #quit{opacity:1;pointer-events:auto}
body.testing:not(.running) #setup{opacity:1;pointer-events:auto}
body.testing .menu,body.testing #hint,body.testing #begin,body.testing #wpm,body.testing .res,body.testing #res{opacity:0;pointer-events:none}
body.testing #wpm,body:has(.sheet:not([hidden])) #wpm{opacity:0!important}
body:has(.sheet:not([hidden])) #begin{opacity:0;pointer-events:none}
#resultBody{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:clamp(40px,7vw,128px);max-width:1320px;margin:0 auto;align-items:start}
.sheet .big{font:italic 400 clamp(110px,16vw,250px)/.86 var(--f-disp);letter-spacing:-.03em;margin:22px 0 14px;font-variant-numeric:tabular-nums}
@media (max-width:900px){#resultBody{grid-template-columns:minmax(0,1fr);gap:40px}}
@media (max-width:640px){#begin{bottom:calc(72px + env(safe-area-inset-bottom,0px))}#hint{bottom:calc(6px + env(safe-area-inset-bottom,0px))}#setup{top:calc(120px + env(safe-area-inset-top,0px))}}

/* Results as visuals: a graph of the run, three rings, one bar, a few numbers */
.viz{display:grid;gap:38px;min-width:0}
.viz .cap,.ring b,.nums b{display:block;font:500 10.5px/1.3 var(--f-cap);letter-spacing:.28em;text-transform:uppercase;color:rgba(220,240,228,.6)}
.viz .cap{margin:0 0 16px}
.graph{display:block;width:100%;height:auto;overflow:visible}
.graph .grid{stroke:rgba(220,240,228,.1);stroke-width:1}
.graph .ax{font:400 10px/1 var(--f-body);fill:rgba(220,240,228,.5);letter-spacing:.06em}
.graph .area{fill:rgba(169,240,200,.08);stroke:none}
.graph .pace{fill:none;stroke:#a9f0c8;stroke-width:1.8;stroke-linejoin:round;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1;animation:draw 1.6s .35s cubic-bezier(.2,.7,.2,1) forwards}
.graph .net{fill:none;stroke:#b08cff;stroke-width:1.3;stroke-linejoin:round}
.graph .best{stroke:rgba(220,240,228,.45);stroke-width:1;stroke-dasharray:3 5}
.graph .slip{fill:#ff6b62}
@keyframes draw{to{stroke-dashoffset:0}}
.key{display:flex;flex-wrap:wrap;gap:8px 22px;margin-top:14px;font:400 12px/1.2 var(--f-body);color:rgba(220,240,228,.62)}
.key span::before{content:"";display:inline-block;width:14px;height:2px;margin-right:8px;vertical-align:middle;background:#a9f0c8}
.key .k2::before{background:#b08cff}.key .k3::before{background:#ff6b62;width:6px;height:6px;border-radius:50%}.key .k4::before{background:none;border-top:1px dashed rgba(220,240,228,.6);height:0}
.rings{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;align-items:start}
.ring{display:grid;justify-items:center;text-align:center;gap:10px}
.ring svg{display:block;width:min(136px,100%);height:auto}
.ring .track{fill:none;stroke:rgba(220,240,228,.1);stroke-width:3}
.ring .arc{fill:none;stroke:#a9f0c8;stroke-width:3;stroke-linecap:round;stroke-dasharray:var(--v) 100;animation:arc 1.5s .45s cubic-bezier(.2,.7,.2,1) backwards}
.ring:nth-child(2) .arc{stroke:#b08cff}
.ring .num{font:italic 400 30px/1 var(--f-disp);fill:var(--ink)}
.ring span{font:400 12px/1.4 var(--f-body);color:rgba(220,240,228,.5)}
@keyframes arc{from{stroke-dasharray:0 100}}
.split{display:flex;height:6px;gap:3px}
.split i{display:block;min-width:2px;border-radius:3px;background:#a9f0c8}
.split .er{background:#ff6b62}
.nums{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;border-top:1px solid var(--line);padding-top:28px}
.nums i{display:block;font:italic 400 clamp(30px,3.4vw,46px)/1 var(--f-disp);color:var(--ink);margin-bottom:10px;font-variant-numeric:tabular-nums}
@media (prefers-reduced-motion:reduce){.graph .pace{animation:none;stroke-dashoffset:0}.ring .arc{animation:none}}

/* Prices v15: a price is set like a figure, not a footnote. Upright lining numerals, a small currency mark, the terms beneath; quoted work wears a quiet tag */
.sheet .row{grid-template-columns:46px minmax(0,1fr) minmax(96px,auto);align-items:baseline}
.sheet .row i{grid-column:3;grid-row:1/span 3;justify-self:end;text-align:right}
.sheet .row i:empty{display:none}
.sheet .row i.paid{font:300 clamp(40px,3.9vw,62px)/.86 var(--f-disp);font-style:normal;color:var(--ink);letter-spacing:-.02em;font-variant-numeric:lining-nums tabular-nums;font-feature-settings:"lnum","tnum"}
.sheet .row i.paid sup{font-size:.42em;vertical-align:.95em;margin-right:.14em;letter-spacing:0;color:rgba(169,240,200,.95);line-height:0}
.sheet .row i.paid::after{content:"USD · one time";display:block;margin-top:14px;font:500 9.5px/1 var(--f-cap);letter-spacing:.26em;text-transform:uppercase;color:rgba(220,240,228,.55)}
.sheet .row i.ask{font:500 9.5px/1 var(--f-cap);font-style:normal;letter-spacing:.26em;text-transform:uppercase;color:rgba(220,240,228,.85);padding:10px 14px 9px;border:1px solid rgba(169,240,200,.32);border-radius:999px}
.sheet .row span,.sheet .row .act{grid-column:2}
.sheet .row.say b{grid-column:2/-1}
@media (max-width:900px){.sheet .row{grid-template-columns:32px minmax(0,1fr) minmax(84px,auto)}.sheet .row i.paid{font-size:38px}.sheet .row i.paid::after{font-size:8.5px;letter-spacing:.2em;margin-top:10px}.sheet .row i.ask{font-size:8.5px;padding:8px 10px 7px;letter-spacing:.2em}}
/* Get lost in it: when you stop moving, every control melts away and only the realm is left. Move, touch or scroll and they return */
body.idle:not(.testing):not(:has(.sheet:not([hidden]))) :is(.menu,#hint,#snd,#begin,#wpm){opacity:0!important;transition:opacity 1.8s ease}
/* Your run as a world: the pace of the test, wound into a flower, shown beside the score and born at the heart of the realm */
.sheet .mine{display:flex;align-items:center;gap:22px;margin:30px 0 6px;max-width:440px}
.sheet .mine svg{flex:none;width:112px;height:112px;overflow:visible}
.sheet .mine path{fill:none;stroke:#a9f0c8;stroke-width:1;vector-effect:non-scaling-stroke;opacity:.9}
.sheet .mine path:nth-child(even){stroke:#b08cff}
.sheet .mine p{margin:0;font:400 14px/1.55 var(--f-body);color:rgba(220,240,228,.62)}
.sheet .mine b{display:block;font:500 10.5px/1.3 var(--f-cap);letter-spacing:.28em;text-transform:uppercase;color:var(--ink);margin-bottom:8px}

/* One door: the shop. Sections are quiet headings inside a single index */
.sheet .sec{font:500 10.5px/1 var(--f-cap);letter-spacing:.3em;text-transform:uppercase;color:rgba(169,240,200,.85);margin:52px 0 16px;animation:rise .9s cubic-bezier(.2,.7,.2,1) both}
.sheet .sec:first-child{margin-top:0}
/* one door: once the shop or the results are open the door has done its job, so it steps away (it floated over the list on phones) */
body:has(.sheet:not([hidden])) .menu,body:has(#result:not([hidden])) .menu{opacity:0!important;pointer-events:none}
/* ---- the shop, second look: cards, a cart, one clear button under every price ---- */
#sheetBody>.shop{grid-column:1/-1;width:100%;max-width:1080px;margin:0 auto}
.sheet .shop .head{max-width:640px;animation:rise 1s cubic-bezier(.2,.7,.2,1) both}
.sheet .shop h2{font-size:clamp(30px,3.6vw,52px);margin:18px 0 14px}
.sheet .shop .sub{max-width:54ch}
.sheet .shop .sec{display:flex;align-items:center;gap:16px;margin:44px 0 16px}
.sheet .shop .sec::after{content:"";flex:1;height:1px;background:var(--line)}
.sheet .shop .cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.sheet .shop .svcs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.sheet .shop .row{counter-increment:none;display:flex;flex-direction:column;align-items:stretch;gap:0;padding:24px;border:1px solid var(--line);border-radius:16px;background:rgba(7,15,15,.66);animation:none;transition:border-color .3s,background .3s}
.sheet .shop .row::before{content:none}
.sheet .shop .row:hover,.sheet .shop .row.on{border-color:rgba(169,240,200,.55);background:rgba(10,22,20,.78)}
.sheet .shop .row b{font:italic 400 25px/1.15 var(--f-disp);color:var(--ink)}
.sheet .shop .row span{font:400 14.5px/1.55 var(--f-body);color:var(--dim);margin-top:10px;max-width:none}
.sheet .shop .card span{flex:1}
.sheet .shop .card i.paid{align-self:flex-start;margin-top:24px;font:300 52px/.9 var(--f-disp);font-style:normal;text-align:left}
.sheet .shop .card i.paid::after{margin-top:10px}
.sheet .shop .cta{display:flex;flex-direction:column;gap:8px;margin-top:16px}
.sheet .shop .add,.sheet .cart .pay{all:unset;box-sizing:border-box;cursor:pointer;text-align:center;padding:17px 18px;border-radius:999px;background:#a9f0c8;color:#04201c;font:600 11px/1 var(--f-cap);letter-spacing:.2em;text-transform:uppercase;white-space:nowrap;transition:background .3s,color .3s,box-shadow .3s}
.sheet .shop .add:hover,.sheet .shop .add:focus-visible,.sheet .cart .pay:hover,.sheet .cart .pay:focus-visible{background:#d6fbe6}
.sheet .shop .add[aria-pressed="true"]{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1px rgba(169,240,200,.7)}
.sheet .shop .row .act{all:unset;box-sizing:border-box;cursor:pointer;display:block;text-align:center;margin:0;padding:13px 18px;border-radius:999px;box-shadow:inset 0 0 0 1px rgba(169,240,200,.32);font:500 10.5px/1 var(--f-cap);letter-spacing:.2em;text-transform:uppercase;color:var(--ink);white-space:nowrap;transition:box-shadow .3s,background .3s}
.sheet .shop .row .act::after{content:none}
.sheet .shop .row .act:hover,.sheet .shop .row .act:focus-visible{box-shadow:inset 0 0 0 1px rgba(169,240,200,.9);background:rgba(169,240,200,.08)}
.sheet .shop .svc{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 18px;align-items:center;padding:18px 22px}
.sheet .shop .svc b{grid-column:1;font-size:21px}
.sheet .shop .svc span{grid-column:1;margin:0}
.sheet .shop .svc i.ask{display:none}
.sheet .shop .svc .act{grid-column:2;grid-row:1/span 2}
.sheet .shop .foot{display:flex;flex-wrap:wrap;align-items:center;gap:8px 28px;margin-top:40px}
.sheet .shop .foot p{font:400 14px/1.6 var(--f-body);color:var(--dim);margin:0}
.sheet .shop .foot .go{margin:0}
.sheet .cart{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(18px + env(safe-area-inset-bottom,0px));z-index:10;box-sizing:border-box;width:min(720px,calc(100vw - 28px));display:flex;align-items:center;gap:10px;padding:10px 10px 10px 24px;border-radius:999px;background:#050c0c;border:1px solid rgba(169,240,200,.55);box-shadow:0 18px 60px rgba(0,0,0,.6)}
.sheet .cart[hidden]{display:none}
.sheet .cart .sum{flex:1;min-width:0}
.sheet .cart .cnt{font:600 11px/1.2 var(--f-cap);letter-spacing:.2em;text-transform:uppercase;color:#a9f0c8}
.sheet .cart .names{font:400 13.5px/1.4 var(--f-body);color:var(--dim);margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sheet .cart .clr{all:unset;cursor:pointer;padding:12px 10px;font:500 10px/1 var(--f-cap);letter-spacing:.2em;text-transform:uppercase;color:var(--dim)}
.sheet .cart .clr:hover,.sheet .cart .clr:focus-visible{color:var(--ink)}
.sheet .shop :is(.add,.act):focus-visible,.sheet .cart :is(.pay,.clr):focus-visible{outline:2px solid #a9f0c8;outline-offset:3px}
.sheet::before{content:"";position:fixed;left:0;right:0;top:0;height:calc(76px + env(safe-area-inset-top,0px));z-index:8;pointer-events:none;background:linear-gradient(rgba(2,4,4,.96) 45%,rgba(2,4,4,0))}
@media (max-width:900px){.sheet .shop .cards,.sheet .shop .svcs{grid-template-columns:minmax(0,1fr)}.sheet .shop .card span{flex:none}.sheet .shop .svc{grid-template-columns:minmax(0,1fr)}.sheet .shop .svc .act{grid-column:1;grid-row:auto;justify-self:start;margin-top:12px}.sheet .cart{border-radius:20px;padding:10px 10px 10px 18px}.sheet .cart .names{display:none}.sheet .cart .pay{padding:15px 16px;letter-spacing:.14em}.sheet .shop h2{font-size:32px;margin:14px 0 10px}.sheet .shop .sub{font-size:14.5px;line-height:1.55}.sheet .shop .sec{margin:30px 0 14px}.sheet .shop .row{padding:20px}}
/* pre-release audit, 13 Nov: hidden controls stay out of the tab order; touch targets are at least 44 px tall */
body:not(.testing) #quit{visibility:hidden}
@media (pointer:coarse){.sheet .x,.sheet .cart .clr,.sheet .shop .row .act{min-height:44px}.sheet .x{padding:0}}
