/* Page layouts of the app (components live in studio.css). From the prototype's inline styles, plus what
   production adds: links styled as cards and buttons, empty states, the visitor bar, checkout, print. */
.view{max-width:1240px;margin-inline:auto;min-height:420px}
.view:focus{outline:none}
.skip{position:absolute;left:-9999px;top:8px;z-index:70;background:var(--ink);color:var(--paper);padding:8px 12px}
.skip:focus{left:16px}
a.btn{text-decoration:none}
a.pcard,a.playbig{text-decoration:none}
a.pcard{color:var(--ink)}
.logo{text-decoration:none}
.menu button[role=menuitemcheckbox]{padding-left:10px}

/* home */
.hero{display:grid;grid-template-columns:minmax(0,400px) minmax(0,1fr);gap:64px;align-items:center;padding:44px 64px 0}
.hero .ttl{display:flex;gap:28px;align-items:center}
.hero .zh-t{font:44px/1.1 var(--f-zh)}
.hero .en-t{font:18px var(--f-display);color:var(--ink-3)}
.hero .scan{height:236px}
.hero .scan.poem-scan{font-size:24px;gap:4px 26px;letter-spacing:.14em}
/* a piece's cover: the same layout as the home page */
.cover{padding-bottom:8px}
/* counting in before the first note: the pause button breathes */
.play.starting{animation:qs-breathe 1s ease-in-out infinite alternate}
@keyframes qs-breathe{from{box-shadow:0 0 0 0 var(--cinnabar-tint)}to{box-shadow:0 0 0 8px var(--cinnabar-tint)}}
@media (prefers-reduced-motion:reduce){ .play.starting{animation:none;box-shadow:0 0 0 4px var(--cinnabar-tint)} }
/* section markers on the progress bar: the tick and its name are both easy to hit */
.scrub .mk::after{content:"";position:absolute;left:-7px;right:-7px;top:-4px;bottom:-4px}
.scrub .mk span{pointer-events:auto;cursor:pointer;padding:2px 3px}

/* the qin as an instrument (live.js): playable while no piece plays */
.stage:not(.live-off) .qin-svg{cursor:pointer;touch-action:none;-webkit-user-select:none;user-select:none}
.thumbpad{display:none;position:absolute;right:0;top:50%;transform:translateY(-50%);z-index:2;flex-direction:column;gap:6px}
.thumbpad button{width:58px;height:52px;border-radius:12px;border:1px solid var(--rule);background:color-mix(in srgb,var(--paper-3) 88%,transparent);color:var(--ink);display:grid;place-items:center;gap:0;padding:4px 0;touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;box-shadow:var(--shadow)}
.thumbpad b{font:400 22px/1 var(--f-zh)}
.thumbpad small{font:10px var(--f-data);color:var(--ink-3)}
.thumbpad button.hit{background:var(--cinnabar);color:var(--on-cinnabar);border-color:var(--cinnabar)}
.thumbpad button.hit small{color:var(--on-cinnabar)}
@media (pointer:coarse){ .stage:not(.live-off) .thumbpad{display:flex} }
body[data-route=print] .thumbpad{display:none}
.shelf-cards{padding:36px 0 0;display:grid;gap:14px}
/* the selector stays under the player, dimmed so the piece keeps the focus; it wakes on hover or focus */
.p-shelf{padding-top:28px;opacity:.38;filter:saturate(.6);transition:opacity .35s ease,filter .35s ease}
.p-shelf:hover,.p-shelf:focus-within{opacity:1;filter:none}
@media (hover:none){ .p-shelf{opacity:.6} }

/* player */
.player{display:grid;grid-template-columns:minmax(0,1fr);gap:0}
.player.owner{grid-template-columns:minmax(0,1fr) 300px}
.p-main{min-width:0;display:grid;grid-template-rows:auto}
.p-title{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;padding:20px 8px 8px}
.p-title .zh{font-size:26px}
.p-title .en{font:16px var(--f-display);color:var(--ink-3)}
.p-strip{border-block:1px solid var(--rule)}
.p-notes{border-left:1px solid var(--rule);padding:16px 0 16px 20px;display:grid;grid-template-rows:auto 1fr auto;min-height:0;align-content:start}
.note .w .note-act{font:12px var(--f-body);color:var(--ink-3)}
.visitor-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:space-between;margin-top:12px;padding:8px 12px;background:var(--azurite-tint);border:1px solid var(--azurite);font-size:14px;color:var(--ink-2)}
.standin{font-size:12.5px;color:var(--ink-3);padding:0 8px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.packs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.pack{color:var(--ink);font:inherit}

/* create */
.create{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0;min-height:600px}
.create .form{padding:36px 48px 36px 8px;display:grid;gap:22px;align-content:start}
.create .seen{background:var(--paper-2);padding:36px 40px;display:grid;gap:12px;align-content:start;margin-right:calc(-1 * max(16px,env(safe-area-inset-left,0px)))}
.more{display:grid;gap:14px;padding:14px 16px;border:1px solid var(--rule);background:var(--paper-3)}
.tile[draggable=true]{cursor:grab}
.seen-pages{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px}
.seen-pages figure{margin:0;display:grid;gap:4px;justify-items:center;font:12px var(--f-data);color:var(--ink-3)}
.seen-pages img{width:100%;height:auto;border:1px solid var(--rule);background:var(--pearl)}
.seen-pdf{width:100%;aspect-ratio:3/4;border:1px solid var(--rule);background:var(--pearl);display:grid;place-items:center;text-align:center;color:#3a2f26;padding:8px;word-break:break-all}
.seen-poem{font:17px/1.8 var(--f-display);white-space:pre-wrap}
.seen-poem.zh{font:20px/1.8 var(--f-zh)}

/* generating */
.gen{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:48px;padding:36px 8px}
.gen-title{font:400 34px/1.2 var(--f-display);margin:14px 0 4px}
.step.warn .st{border-color:var(--cinnabar);color:var(--cinnabar)}
.step.err .st{background:var(--cinnabar);border-color:var(--cinnabar);color:var(--on-cinnabar)}

/* library */
.lib{padding:32px 8px}
.lib-head{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.lib-head h1{font:400 32px var(--f-display);margin:0}

/* empty and not-found states */
.empty{display:grid;gap:12px;justify-items:center;text-align:center;padding:64px 16px;color:var(--ink-2)}
.empty h2{font:400 28px var(--f-display);margin:0;color:var(--ink)}
.empty p{margin:0;max-width:52ch}

/* checkout (mock) */
.checkout{max-width:460px;margin:40px auto;padding:28px;border:1px solid var(--rule);background:var(--paper-3);display:grid;gap:12px}
.checkout h1{font:400 34px var(--f-display);margin:0}
.checkout p{margin:0}
.ck-row{display:flex;justify-content:space-between;border-bottom:1px solid var(--rule);padding:8px 0;font-size:15px}
.ck-row span:first-child{color:var(--ink-3)}
.checkout .acts{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap;margin-top:8px}

/* techniques: the index entries are links */
.tech-index a{text-align:left;padding:3px 0;color:var(--ink-3);font-size:13.5px;text-decoration:none}
.tech-index a b{font:400 18px var(--f-zh);color:var(--ink-2);margin-right:8px}
.tech-index a.on{box-shadow:inset 2px 0 0 var(--cinnabar);padding-left:10px;margin-left:-12px;color:var(--ink)}
.tech-index a.on b{color:var(--cinnabar)}
.ref.tech{grid-template-columns:260px minmax(0,1fr)}
/* the reference pages' menu keeps clear of the window's edge (its active mark sits 12px to its left) */
.ref{padding-inline:clamp(12px,3vw,40px)}
/* techniques: search results */
.tech-none{font-size:13.5px;color:var(--ink-2);display:grid;gap:6px;justify-items:start;margin-top:10px}
.tech-sim{margin-top:40px;padding-top:14px;border-top:1px solid var(--rule);color:var(--ink-3);font-size:13.5px;max-width:62ch}
.tech-sim .eyebrow{display:block;margin-bottom:6px}
.tech-sim p{margin:0 0 8px}
.tech-sim pre.code{font-size:12px;opacity:.85}
.heard{display:grid;gap:4px}
.heard a{color:var(--ink);text-decoration:none;border-bottom:1px solid var(--rule);justify-self:start}
.heard a:hover{border-color:var(--cinnabar)}
.heard small{color:var(--ink-3);font:12px var(--f-data);margin-left:6px}

/* history */
.hist .art p{font-size:17px;line-height:1.75}
.hist .art blockquote{margin:18px 0 22px;padding:2px 0 2px 18px;border-left:2px solid var(--cinnabar);font:20px/1.7 var(--f-zh);color:var(--ink)}
.hist .art blockquote small{display:block;font:italic 14.5px/1.5 var(--f-body);color:var(--ink-2);margin-top:4px}
.schools{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 28px;margin:8px 0 18px}
.schools div{border-top:1px solid var(--rule);padding-top:10px;font-size:15px;color:var(--ink-2)}
.schools b{display:block;font:400 21px var(--f-zh);color:var(--ink);margin-bottom:2px}
.schools b span{font:13px var(--f-data);color:var(--ink-3);margin-left:8px;letter-spacing:.04em}
.links{display:grid;gap:12px;margin:8px 0 18px;padding:0;list-style:none}
.links a{font:19px var(--f-display);color:var(--ink);text-decoration:none;border-bottom:1px solid var(--rule)}
.links a:hover{border-color:var(--cinnabar)}
.links span{display:block;font-size:14.5px;color:var(--ink-2);margin-top:2px}

/* feedback: @ suggestions for qin terms */
.fb-wrap{position:relative}
.fb-sug{position:absolute;left:0;right:0;z-index:5;background:var(--paper-3);border:1px solid var(--ink);box-shadow:var(--shadow);max-height:240px;overflow:auto;margin:0;padding:4px 0;list-style:none}
.fb-sug li{display:flex;gap:10px;align-items:baseline;padding:6px 12px;cursor:pointer;font-size:14px}
.fb-sug li b{font:400 18px var(--f-zh);min-width:2.2em}
.fb-sug li i{font-style:italic;color:var(--ink-2)}
.fb-sug li span{color:var(--ink-3);font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fb-sug li[aria-selected=true]{background:var(--azurite-tint)}
.fb-hint{font-size:12.5px;color:var(--ink-3)}

/* print: a plain page, no qin or header */
body[data-route=print] .hdr,body[data-route=print] .stage{display:none}
.print-page{max-width:1000px;margin:0 auto;padding:24px 0 48px;color:var(--ink)}
.print-tools{display:flex;gap:10px;justify-content:flex-end;margin-bottom:12px}
.print-hd{display:flex;gap:20px;align-items:flex-start;border-bottom:1px solid var(--rule);padding-bottom:14px}
.print-zh{writing-mode:vertical-rl;font-size:36px;letter-spacing:.12em;line-height:1}
.print-hd h1{font:400 28px/1.2 var(--f-display);margin:0 0 6px}
.print-hd p{margin:0;color:var(--ink-2);font-size:13.5px}
.print-poem{display:grid;gap:4px;padding:14px 0;font:18px/1.6 var(--f-zh)}
.print-poem small{font:italic 12px var(--f-body);color:var(--ink-3)}
.print-sec{font:500 15px var(--f-body);margin:20px 0 6px;color:var(--ink-2)}
.print-sec i{font:italic 700 15px Georgia,serif;color:var(--ink);margin-left:6px}
.print-bars{display:flex;flex-wrap:wrap;row-gap:10px}
.print-bars.staff{row-gap:4px}
.pst{display:block;break-inside:avoid;overflow:visible}
.pst .pst-n{font:10px var(--f-data);fill:var(--ink-3)}
.pst .pst-rh{font-size:12px;font-weight:700;text-anchor:middle}
.pst .pst-lh{font-size:10.5px;fill:var(--ink-3);text-anchor:middle}
.pst .pst-w{font-size:13px;fill:var(--ink);text-anchor:middle}
.pbar{display:flex;align-items:flex-start;gap:2px;padding:14px 8px 4px;border-right:1px solid var(--ink-3);position:relative;break-inside:avoid}
.pbn{position:absolute;top:0;left:4px;font:10px var(--f-data);color:var(--ink-3)}
.pn{display:grid;grid-template-rows:18px 9px 26px minmax(7px,auto) 16px;justify-items:center;min-width:28px}
.prh{font:13px/18px var(--f-zh);color:var(--ink-2);white-space:nowrap}
.pd{font-size:9px;line-height:7px;letter-spacing:-1px}
.pnum{font:500 20px/26px var(--f-data)}
.pnum sup{font-size:11px;color:var(--ink-2)}
.ph{font:400 8px/9px var(--f-body)}
.pdb{display:flex;flex-direction:column;align-items:center;gap:2px;line-height:7px}
.pdb .ul{display:block;width:16px;border-top:1.5px solid var(--ink)}
.paug{font-weight:700;margin-left:1px}
.pn.pdash .pnum{color:var(--ink-2)}
.pn.slide .pnum{font-size:15px;font-style:italic;color:var(--ink-3)}
.plh{font:11px/16px var(--f-zh);color:var(--ink-3);white-space:nowrap}
.print-foot{font-size:12px;color:var(--ink-3);margin-top:24px}
@media print{
  :root{--paper:#fff;--ink:#000;--ink-2:#222;--ink-3:#555;--rule:#bbb}
  body{background:#fff;padding:0}
  .print-tools,#ov,.toast,.skip{display:none!important}
  .print-page{padding:0;max-width:none}
  @page{margin:14mm}
}

@media (max-width:900px){
  .hero{grid-template-columns:1fr;gap:28px;padding:28px 0 0}
  .hero .scan{height:180px!important}
  .shelf-cards{padding-top:24px}
  .player.owner{grid-template-columns:1fr}
  .p-notes{border-left:0;padding:16px 8px}
  .create{grid-template-columns:1fr}
  .create .form{padding:24px 0}
  .create .seen{margin:0 calc(-1 * max(16px,env(safe-area-inset-left,0px)));padding:24px max(16px,env(safe-area-inset-left,0px))}
  .gen{grid-template-columns:1fr;gap:24px}
  .ref,.ref.tech{grid-template-columns:1fr;gap:24px}
  .ref-toc{position:static;display:flex;flex-wrap:wrap;gap:8px 16px}
  .tech-index{display:flex;flex-wrap:wrap;gap:4px 14px}
  .tech-index .grp{flex-basis:100%;margin-top:8px}
  .tech-index #tsearch{flex-basis:100%}
  .tech-cols{grid-template-columns:1fr}
  .schools{grid-template-columns:1fr}
}
@media (max-width:560px){
  .hero .ttl{gap:16px}.hero .zh-t{font-size:32px}.playbig{width:68px;height:68px;font-size:22px}
  .transport{gap:12px}
  .art h1{font-size:32px}
  .ptable{grid-template-columns:1fr 1fr}
  .ptable > span:nth-child(3n){grid-column:1/-1;padding-top:0}
  .p-title .en{width:100%}
  .transport .scrub{order:-1;flex-basis:100%}
  .grid2{grid-template-columns:1fr}
  .packs{grid-template-columns:1fr}
  .dlg{padding:20px}
}

/* the stroke colours' key, in the ⋯ popover */
/* two even rows (thumb · index / middle · ring), never three-and-one */
.fkey{display:grid;grid-template-columns:auto auto;gap:4px 14px;justify-content:end;font-size:12.5px;color:var(--ink-2)}
.fkey span{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.fkey i{width:9px;height:9px;border-radius:50%;display:inline-block}
.fkey b{font:500 14px var(--f-zh)}

/* Physics and Techniques: the qin stays at the top while the page scrolls under it, so the demos are seen */
/* the reference pages (Physics, Techniques, History): the qin stays at the top; text scrolling up under it
   fades into the paper instead of being cut off; a side menu that fits stays in view */
:is(body[data-route=physics],body[data-route=techniques],body[data-route=history]) .stage{position:sticky;top:0;z-index:20;background:var(--paper);padding-top:max(6px,env(safe-area-inset-top,0px))}
:is(body[data-route=physics],body[data-route=techniques],body[data-route=history]) .stage::after{content:"";position:absolute;left:0;right:0;top:100%;height:44px;pointer-events:none;background:linear-gradient(var(--paper),color-mix(in srgb,var(--paper) 0%,transparent))}
:is(body[data-route=physics],body[data-route=history]) .ref-toc,body[data-route=techniques] .tech-index{position:sticky;top:calc(var(--stage-h,0px) + 16px);max-height:calc(100vh - var(--stage-h,0px) - 32px);overflow:auto;scrollbar-width:thin;padding-left:14px;margin-left:-14px}
:is(body[data-route=physics],body[data-route=techniques],body[data-route=history]) .art h2{scroll-margin-top:calc(var(--stage-h,0px) + 16px)}
@media (max-width:900px){ :is(body[data-route=physics],body[data-route=history]) .ref-toc,body[data-route=techniques] .tech-index{position:static;max-height:none;overflow:visible} }

/* a piece's own cover image: on its cover page and as its card's side panel */
/* a cover image stands on its own: no frame or panel behind it, just the image at its own proportions,
   beside the title (centred when the page stacks) */
.scan.cover-img{padding:0;display:block;writing-mode:horizontal-tb;background:none;border:0;box-shadow:none;outline:0}
.scan.cover-img img{width:100%;height:100%;object-fit:contain;object-position:right center;display:block}
@media (max-width:700px){ .scan.cover-img img{object-position:center} }   /* the whole image, its own proportions, fitted to the panel */
.pcard .pc-img{padding:0;overflow:hidden;align-self:stretch;writing-mode:horizontal-tb;width:64px;border-right:0}
.pcard .pc-img img{width:100%;height:100%;object-fit:contain;object-position:top center;display:block;opacity:.92}
/* create: the cover image picker */
.cover-pick{display:flex;gap:14px;align-items:center}
.cover-pick .cv{width:84px;height:84px;border:1px dashed var(--rule);display:grid;place-items:center;background:var(--paper-3) center/cover no-repeat;font-size:12.5px;color:var(--ink-3);text-align:center;cursor:pointer;flex:none}
.cover-pick .cv.has{border-style:solid}
.cover-pick p{margin:0;font-size:13.5px;color:var(--ink-3)}

/* the cover panel's clusters: plain characters on the paper, no boxes (only the lit one is marked) */
.hero .scan .box{outline:0;background:none}

/* the score strip takes sideways swipes itself (they scroll the score); the page still scrolls up and down */
.strip{touch-action:pan-y}
/* the Studio */
.lib-head h1 .zh{font-size:.8em;color:var(--ink-3);margin-left:6px}
.lib-head{align-items:center;gap:14px}
.lib-credits{font:13px var(--f-data);color:var(--ink-3)}
.lib-intro{max-width:62ch;color:var(--ink-2);font-size:15px;margin:0 0 18px}
/* the Studio: a piece's title and details, edited in place */
.p-eds{display:flex;flex-wrap:wrap;gap:4px 16px;align-items:baseline}
.ed{outline:none;border-bottom:1px dashed transparent;min-width:3ch;cursor:text;transition:border-color .2s,color .6s}
.ed:hover{border-bottom-color:var(--rule)}
.ed:focus{border-bottom-color:var(--cinnabar)}
.ed:empty::before{content:attr(data-ph);color:var(--ink-3);opacity:.7;font-style:italic}
.ed.wide{flex-basis:100%}
.ed.saving{opacity:.55}
.ed.saved{color:var(--jade)}
.p-title .ed + .ed{margin-left:12px}
.note p.note-ed{outline:none;border-bottom:1px dashed var(--cinnabar);cursor:text;white-space:pre-wrap}
.note p.saved{color:var(--jade);transition:color .6s}
.note-edbox{position:relative;margin:6px 0}
.note textarea.note-ed{width:100%;resize:none;overflow:hidden;font:inherit;line-height:1.5;min-height:2.4em}
/* the player's questions in the comments: a different pin, an answer beneath */
.note.asked{border-left:2px solid var(--jade);padding-left:10px}
.pin.ask{background:var(--jade)!important;color:var(--paper)!important}
.note .answer{margin-top:8px}
.note .answer textarea{width:100%;min-height:52px;font:inherit}
.note .answer .eyebrow{display:block;margin-bottom:2px}
/* New piece: how much of a score to digitize */
.scope{border:0;padding:0;margin:4px 0 6px;display:grid;gap:8px}
.scope legend{font-size:14.5px;font-weight:500;margin-bottom:4px}
.scope label{display:flex;gap:10px;align-items:flex-start;font-size:14.5px;cursor:pointer}
.scope input{margin-top:4px}
.scope em{font-style:normal;font-size:11.5px;color:var(--jade);border:1px solid var(--jade);border-radius:999px;padding:0 6px;margin-left:4px}
.scope small{color:var(--ink-3);font-size:13px;line-height:1.45}
.nprog{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin:2px 0 10px;padding:8px 10px;border:1px solid var(--rule);font-size:13.5px;color:var(--ink-2)}
.nprog .done{color:var(--jade)}
.p-eds{gap:6px 18px;padding-bottom:8px}
.edf{display:inline-flex;align-items:baseline;gap:6px}
.edf small{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);opacity:.8}
.edf.wide{flex-basis:100%}
.edf .ed{color:var(--ink-2)}
.p-title .ed:empty::before{opacity:.45}
.resolved{margin-top:6px;border-top:1px solid var(--rule);padding-top:6px}
.resolved summary{cursor:pointer;font-size:13px;color:var(--ink-3);padding:4px 0}
.resolved .note{opacity:.75}
.pc-prog{color:var(--jade)!important}
.p-waiting{font-size:13.5px;color:var(--jade);padding:0 8px 12px;margin-top:-6px}
.p-waiting a{color:inherit}

/* the welcome cover (welcome.js): once, on the first visit; the paper of the site, the score's page beside it */
.welcome{position:fixed;inset:0;z-index:10001;background:var(--paper);overflow:auto;display:grid;place-items:center;
  padding:max(32px,env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) max(32px,env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px));
  transition:opacity .55s ease,visibility 0s .55s}
.welcome.out{opacity:0;visibility:hidden;pointer-events:none}
html.wl-open{overflow:hidden}
.wl-in{display:grid;grid-template-columns:auto minmax(0,560px);gap:56px;align-items:center;justify-content:center;width:100%;max-width:880px}
/* a plain vertical block, a phrase to a column, as tall as the longest */
.wl-scan{display:block;height:max-content;font-size:24px;line-height:1.55;letter-spacing:.16em;color:#2a221b;padding:26px 22px;box-shadow:var(--shadow)}
.wl-txt{display:grid;gap:14px;align-content:center;min-width:0}
.wl-txt p{margin:0;color:var(--ink-2);max-width:62ch}
.wl-hd{display:flex;gap:18px;align-items:center;margin-bottom:6px}
.wl-hd h1{margin:2px 0 0;font:400 40px/1.1 var(--f-display);text-wrap:balance}
.wl-hd h1 .zh{font:44px/1.1 var(--f-zh);margin-right:6px}
.wl-hd h1 .en{color:var(--ink-3);font-size:24px}
.wl-txt .wl-lede{font:400 21px/1.35 var(--f-display);color:var(--ink)}
.wl-asks{list-style:none;margin:0;padding:0;display:grid;gap:0;border-top:1px solid var(--rule)}
.wl-asks li{display:grid;grid-template-columns:150px minmax(0,1fr);gap:16px;padding:9px 0;border-bottom:1px solid var(--rule);font-size:15px;color:var(--ink-2)}
.wl-asks b{font-weight:500;color:var(--ink)}
.wl-mail{font:500 15px var(--f-data);color:var(--cinnabar);text-decoration:none;border-bottom:1px solid var(--cinnabar-tint);white-space:nowrap}
.wl-mail:hover{border-bottom-color:var(--cinnabar)}
.wl-go{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-top:10px}
.wl-go .btn{padding-inline:26px}
.wl-go small{font-size:12.5px;color:var(--ink-3)}
@media (max-width:760px){
  .welcome{place-items:start center}
  .wl-in{grid-template-columns:minmax(0,1fr);gap:24px}
  .wl-scan{display:none}
  .wl-hd h1{font-size:32px} .wl-hd h1 .zh{font-size:36px}
  .wl-asks li{grid-template-columns:minmax(0,1fr);gap:2px}
}
@media (prefers-reduced-motion:reduce){ .welcome{transition:none} }

/* the Studio's door (main.js studioGate) and the handle */
.studio-gate{max-width:560px;margin:56px auto 0;display:grid;gap:14px;justify-items:start;text-align:left}
.studio-gate h1{font:400 34px/1.15 var(--f-display);margin:0}
.studio-gate p{margin:0;color:var(--ink-2)}
.hd-row{display:flex;align-items:center;border:1px solid var(--rule);background:var(--paper-3);border-radius:2px}
.hd-row span{padding:0 2px 0 12px;font:15px var(--f-data);color:var(--ink-3)}
.hd-row .input{border:0;background:none;padding-left:2px;font-family:var(--f-data)}
.hd-row:focus-within{outline:2px solid var(--cinnabar);outline-offset:1px}
.hd-row .input:focus-visible{outline:0}
.dlg .hd-msg{min-height:1.4em;font-size:13px;color:var(--ink-3)}
.dlg .hd-msg.ok{color:var(--jade)} .dlg .hd-msg.bad{color:var(--cinnabar)}
.lib-handle{background:none;border:0;padding:0;font:inherit;color:inherit;cursor:pointer;text-decoration:underline dotted;text-underline-offset:3px}
