/* Sourcy Structural web app on the Sourcy app design system (tokens.css): sidebar shell, frosted toolbar, quiet
   hairline tables, grouped forms and a ⌘K palette. Light by default; dark follows the switch in the sidebar. */
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
html,body{margin:0}
body{background:var(--canvas);color:var(--ink);font:400 var(--fs-13)/1.5 var(--font);letter-spacing:-.003em;-webkit-font-smoothing:antialiased;
  min-height:100vh;transition:background .3s var(--ease),color .3s var(--ease)}
a{color:var(--accent-ink);text-decoration:none}a:hover{text-decoration:underline}
p{margin:0}
code,.mono{font-family:var(--mono);font-size:12px}
::selection{background:var(--accent-soft)}
:focus{outline:none}
:focus-visible{outline:none;box-shadow:0 0 0 1px var(--accent),0 0 0 4px color-mix(in srgb,var(--accent) 28%,transparent);border-radius:var(--r-s)}
svg.i{width:16px;height:16px;flex:none;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.skip{position:absolute;left:-999px}
.skip:focus{left:12px;top:12px;background:var(--raised);color:var(--ink);padding:8px 12px;z-index:200;border-radius:var(--r-s);box-shadow:var(--shadow-pop)}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
[hidden]{display:none!important}

/* ── shell ── */
.shell{display:grid;grid-template-columns:var(--side) minmax(0,1fr);min-height:100vh}
.sidebar{position:sticky;top:0;height:100vh;background:var(--side-bg);backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:saturate(180%) blur(20px);
  border-right:.5px solid var(--hair-2);display:flex;flex-direction:column;padding:12px 10px;overflow-y:auto;z-index:40}
.ws{display:flex;align-items:center;gap:9px;padding:6px 8px 14px;border-radius:var(--r-m);color:var(--ink);text-decoration:none!important}
.ws img{width:24px;height:24px;border-radius:6px;flex:none}
.ws b{font-size:var(--fs-13);font-weight:600;display:block;line-height:16px}
.ws small{font-size:var(--fs-11);color:var(--ink-3);display:block;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.search{display:flex;align-items:center;gap:8px;height:28px;padding:0 8px;margin:0 0 12px;border-radius:var(--r-s);background:var(--hover);
  color:var(--ink-3);font:inherit;border:0;width:100%;cursor:pointer;text-align:left}
.search:hover{background:var(--select)}.search .k{margin-left:auto}
.nav{display:flex;flex-direction:column;gap:1px}
.nav a{display:flex;align-items:center;gap:9px;height:28px;padding:0 8px;border-radius:var(--r-s);color:var(--ink);font-weight:500;
  text-decoration:none!important;transition:background .15s var(--ease)}
.nav a .i{color:var(--ink-3)}.nav a:hover{background:var(--hover)}
.nav a[aria-current=page]{background:var(--select)}.nav a[aria-current=page] .i{color:var(--accent)}
.nav-h{font-size:var(--fs-11);font-weight:600;color:var(--ink-3);padding:16px 8px 4px}
.side-foot{margin-top:auto;display:flex;flex-direction:column;gap:10px;padding:12px 4px 2px}
.me{display:flex;align-items:center;gap:8px;font-size:var(--fs-12);color:var(--ink-2);min-width:0}
.me .av{width:22px;height:22px;border-radius:50%;background:var(--sunken);border:.5px solid var(--hair-2);display:grid;place-items:center;
  font-size:10px;font-weight:600;color:var(--ink-2);flex:none;text-transform:uppercase}
.me .em{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.me form{margin:0 0 0 auto}
.main{min-width:0;display:flex;flex-direction:column;min-height:100vh}
.topbar{height:var(--bar);flex:none;display:flex;align-items:center;gap:10px;padding:0 24px;position:sticky;top:0;z-index:30;
  background:var(--frost);backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:saturate(180%) blur(20px);border-bottom:.5px solid var(--hair)}
.crumbs{display:flex;align-items:center;gap:6px;font-size:var(--fs-13);color:var(--ink-3);min-width:0}
.crumbs a{color:var(--ink-3)}.crumbs a:hover{color:var(--ink);text-decoration:none}
.crumbs b{color:var(--ink);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.crumbs .sep{color:var(--ink-4)}
.topbar .sp{flex:1}
.topbar .btn.menu-btn,.topbar .btn.search-m{display:none}
.page{flex:1;padding:8px 32px 64px;width:100%;animation:enter .45s var(--spring) both}
.k{font:500 11px/1 var(--font);color:var(--ink-3);background:var(--canvas);border:.5px solid var(--hair-2);border-radius:4px;padding:2px 5px;min-width:18px;text-align:center}
.seg{display:inline-flex;padding:2px;border-radius:7px;background:var(--sunken);box-shadow:inset 0 0 0 .5px var(--hair)}
.seg button{border:0;background:none;font:500 var(--fs-12)/1 var(--font);color:var(--ink-2);height:22px;padding:0 10px;border-radius:5px;cursor:pointer;transition:color .2s}
.seg button[aria-pressed=true]{color:var(--ink);background:var(--raised);box-shadow:0 1px 2px rgba(0,0,0,.08),0 0 0 .5px var(--hair-2)}
.seg.full{display:flex}.seg.full button{flex:1}
.drawer-scrim{display:none}

/* public pages (sign-in, messages) */
body.public{background:var(--chrome)}
.pubbar{display:flex;align-items:center;gap:12px;height:var(--bar);padding:0 24px}
.pubbar .ws{padding:0}
.pubbar .sp{flex:1}
.pubbar a.out{color:var(--ink-3);font-size:var(--fs-12)}

/* ── type ── */
h1,h2,h3{margin:0;font-weight:600;color:var(--ink)}
h1{font-size:var(--fs-22);line-height:28px;letter-spacing:-.022em}
h2{font-size:var(--fs-17);line-height:22px;letter-spacing:-.016em}
h3{font-size:var(--fs-13);line-height:18px;letter-spacing:-.006em;margin:0 0 6px}
.g{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.eyebrow{font-size:var(--fs-12);color:var(--ink-3);margin:0 0 4px}
.eyebrow a{color:var(--ink-3)}
.lede{font-size:var(--fs-13);color:var(--ink-2);max-width:620px;margin-top:4px}
.lede b{color:var(--ink);font-weight:500}
.small{font-size:var(--fs-12);color:var(--ink-3)}
.muted{color:var(--ink-2)}.faint{color:var(--ink-3)}

/* ── pages ── */
.wrap{max-width:1120px;margin:0 auto;padding:0}
.wrap.wide{max-width:none}
.pagehead{padding-top:20px;padding-bottom:20px}
.pagehead .lede{margin-top:6px}
.sec{padding:24px 0;border-top:.5px solid var(--hair)}
.sec:last-of-type{padding-bottom:40px}
.two{display:grid;grid-template-columns:240px minmax(0,1fr);gap:40px;align-items:start}
.two>*{min-width:0}
.sec .intro{font-size:var(--fs-12);color:var(--ink-3);margin-top:6px;max-width:260px}
.narrow{max-width:480px}.narrow.wide{max-width:860px}
.gap-top{margin-top:20px}.gap-sm{margin-top:10px}

/* sign-in */
.entry{min-height:calc(100vh - 2 * var(--bar));display:grid;place-items:center;padding:24px 16px}
.entry .wrap{width:min(380px,100%);text-align:left;animation:enter .6s var(--spring) both}
.entry .wrap::before{content:"";display:block;width:52px;height:52px;border-radius:12px;margin:0 auto 18px;
  background:url(/static/ibeam.svg) center/cover;box-shadow:var(--shadow-pop)}
.entry h1{text-align:center;font-size:var(--fs-22)}
.entry .lede{margin:6px auto 0;text-align:center}
.entry form{margin-top:22px;background:var(--raised);border-radius:var(--r-l);box-shadow:var(--shadow-1);padding:18px}
.entry .actions .btn{width:100%;height:34px;font-size:var(--fs-15)}
.entry .after{margin-top:16px;color:var(--ink-3);font-size:var(--fs-12);text-align:center}

/* ── buttons ── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:30px;padding:0 12px;border-radius:var(--r-s);border:0;
  background:var(--primary);color:var(--primary-ink);font:500 var(--fs-13)/1 var(--font);cursor:pointer;text-decoration:none!important;
  white-space:nowrap;transition:transform .2s var(--spring),background .15s}
.btn:hover{background:color-mix(in srgb,var(--primary) 86%,var(--canvas))}
.btn:active{transform:scale(.97)}
.btn.small{height:26px;padding:0 10px;font-size:var(--fs-12);color:var(--primary-ink)}
.btn.ghost{background:var(--raised);color:var(--ink);box-shadow:var(--shadow-1)}
.btn.ghost:hover{background:color-mix(in srgb,var(--raised) 94%,var(--ink))}
.btn.danger{background:var(--raised);color:var(--bad);box-shadow:var(--shadow-1)}
.btn.danger:hover{background:var(--bad-soft)}
.btn.plain{background:transparent;color:var(--ink-2);box-shadow:none}.btn.plain:hover{background:var(--hover);color:var(--ink)}
.btn.icon{width:26px;padding:0}
.btn[disabled]{opacity:.5;cursor:default}
.btn .i{width:14px;height:14px}
.link{background:none;border:0;padding:0;color:var(--accent-ink);font:inherit;cursor:pointer}
.link:hover{text-decoration:underline}
summary.btn{list-style:none}summary.btn::-webkit-details-marker{display:none}

/* ── forms ── */
label,legend{display:block;font-weight:500;font-size:var(--fs-13);margin:0 0 6px;padding:0}
fieldset{border:0;margin:0;padding:0;min-width:0}
input[type=text],input[type=email],input[type=search],input[type=number],input[type=date],select,textarea{width:100%;height:32px;
  border-radius:var(--r-s);border:0;background:var(--field);box-shadow:inset 0 0 0 .5px var(--field-line),0 .5px 1px rgba(0,0,0,.04);
  color:var(--ink);font:400 var(--fs-13) var(--font);padding:0 10px;transition:box-shadow .15s}
select{padding-right:6px}
input:focus,select:focus,textarea:focus{box-shadow:inset 0 0 0 1px var(--accent),0 0 0 3.5px color-mix(in srgb,var(--accent) 25%,transparent)}
textarea{min-height:110px;height:auto;padding:8px 10px;resize:vertical;line-height:1.5}
textarea.code{font:400 12px/1.6 var(--mono);min-height:340px;white-space:pre;overflow:auto}
textarea.code.short{min-height:120px}
pre.json{margin:0;padding:12px 14px;background:var(--sunken);border-radius:var(--r-m);box-shadow:inset 0 0 0 .5px var(--hair);overflow:auto;
  font:400 12px/1.6 var(--mono);max-height:520px;color:var(--ink-2)}
input.code{height:44px;font:500 22px var(--mono);letter-spacing:.35em;padding-left:14px;max-width:260px}
.field{margin-top:16px}.field:first-child{margin-top:0}
.hint{color:var(--ink-3);font-size:var(--fs-12);margin-top:6px}
.actions{display:flex;gap:10px;align-items:center;margin-top:20px;flex-wrap:wrap}
.actions.tight{margin-top:0}.actions form{display:inline-flex;margin:0}
.choice{display:grid;grid-template-columns:20px 1fr;gap:2px 10px;align-items:start;padding:10px 12px;position:relative}
.choice+.choice::before{content:"";position:absolute;top:0;left:12px;right:0;height:.5px;background:var(--hair)}
fieldset.field .choice:first-of-type{border-radius:var(--r-l) var(--r-l) 0 0}
fieldset.field{background:var(--raised);border-radius:var(--r-l);box-shadow:var(--shadow-1);padding:4px 0}
fieldset.field legend{float:left;width:100%;padding:8px 12px 4px;margin:0}
.choice input{margin:3px 0 0;accent-color:var(--accent);width:16px;height:16px}
.choice label{margin:0;font-weight:500}
.choice .hint{margin:0;grid-column:2}
.inline{display:flex;gap:10px;align-items:end;flex-wrap:wrap}.inline .field{margin:0;flex:1 1 220px}
.toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:end;margin-bottom:16px}.toolbar .field{margin:0;flex:1 1 180px}
.grp{margin-top:20px}.grp h3{font-size:var(--fs-11);color:var(--ink-3);font-weight:600;margin-bottom:4px;text-transform:none}
.pick{list-style:none;margin:0;padding:0}
.pick li{border-bottom:.5px solid var(--hair);padding:9px 4px;transition:background .15s}
.pick li:hover{background:var(--hover)}
.pick a{font-weight:500;color:var(--ink);text-decoration:none}
.pick .sub{display:block;color:var(--ink-3);font-size:var(--fs-12);margin-top:1px}
.pickgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:0 40px}
.check{display:flex;gap:8px;align-items:center;font-weight:500}
.field-error{color:var(--bad);font-size:var(--fs-12);margin-top:6px}
.field.has-error input,.field.has-error select,.field.has-error textarea{box-shadow:inset 0 0 0 1px var(--bad),0 0 0 3.5px var(--bad-soft)}
.more{margin-top:20px;border-top:.5px solid var(--hair);padding-top:12px}
.more summary{cursor:pointer;font-weight:500;padding:4px 0;color:var(--ink-2)}
.row-actions{display:flex;gap:8px;flex-wrap:wrap}
.js-only{display:none}.js .js-only{display:inline-flex}
.js .js-hide{display:none}

/* calculation forms */
.formgrid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,.9fr);gap:40px;align-items:start}
.formgrid .side{position:sticky;top:calc(var(--bar) + 16px)}
.dg{width:100%;height:auto;color:var(--ink-2);font:500 11px var(--mono);margin-bottom:12px}
.about p{color:var(--ink-3);font-size:var(--fs-12);margin-top:8px}
.sub-h{font-size:var(--fs-15);margin:24px 0 4px}
.with-unit{display:flex;align-items:stretch}
.with-unit input{border-top-right-radius:0;border-bottom-right-radius:0}
.unit{display:inline-flex;align-items:center;padding:0 10px;color:var(--ink-3);font:400 var(--fs-12) var(--font)}
.with-unit .unit{background:var(--sunken);box-shadow:inset 0 0 0 .5px var(--field-line);border-radius:0 var(--r-s) var(--r-s) 0;min-width:48px;justify-content:center}
label .unit,.lbl .unit,th .unit{padding:0 0 0 4px}
.lbl{display:block;font-weight:500;margin-bottom:6px}
.table-wrap{overflow-x:auto}
table.grid{border-collapse:collapse;width:100%}
table.grid th{font-size:var(--fs-11);color:var(--ink-3);font-weight:500;text-align:left;padding:0 8px 6px 0;white-space:nowrap}
table.grid td{padding:0 8px 6px 0}
table.grid input{height:28px;font-size:var(--fs-12);min-width:84px}

/* ── messages ── */
.notice{margin:12px 0 4px;padding:10px 12px;border-radius:var(--r-m);background:var(--sunken);font-size:var(--fs-13);color:var(--ink-2)}
.notice.err{background:var(--bad-soft);color:var(--bad)}
.notice.ok{background:var(--ok-soft);color:var(--ok)}
.secret-box{margin:12px 0 24px;padding:16px 18px;border-radius:var(--r-l);background:var(--raised);box-shadow:var(--shadow-1),inset 3px 0 0 var(--ok)}
.secret-box h2{font-size:var(--fs-15)}
.secret{display:block;margin:12px 0;padding:12px 14px;background:var(--sunken);border-radius:var(--r-m);box-shadow:inset 0 0 0 .5px var(--hair);
  font:500 13px/1.5 var(--mono);word-break:break-all;user-select:all}
.honest{margin:0 0 16px;padding:10px 12px;border-radius:var(--r-m);background:var(--warn-soft);font-size:var(--fs-13);color:var(--ink-2)}
.honest.ok{background:var(--ok-soft)}.honest strong{color:var(--ink);font-weight:600}

/* ── tables ── */
.rows{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--fs-13)}
.rows th{position:sticky;top:var(--bar);z-index:2;background:var(--frost);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);
  text-align:left;font-weight:500;font-size:var(--fs-12);color:var(--ink-3);height:32px;padding:0 12px;border-bottom:.5px solid var(--hair);white-space:nowrap}
.table-wrap .rows th{position:static}
.rows td{padding:9px 12px;border-bottom:.5px solid var(--hair);vertical-align:middle}
.rows th:first-child,.rows td:first-child{padding-left:4px}
.rows td:last-child,.rows th:last-child{padding-right:4px;text-align:right}
.rows tbody tr{transition:background .15s}.rows tbody tr:hover td,.rows tbody tr:hover th{background:var(--hover)}
.rows th[scope=row]{position:static;background:none;backdrop-filter:none;font-size:var(--fs-13);color:var(--ink);font-weight:500;height:auto;padding:9px 12px 9px 4px}
.rows .name{font-weight:500}
.rows .sub{display:block;color:var(--ink-3);font-size:var(--fs-12);font-weight:400}
.rows tr.dim td{color:var(--ink-3)}
.rows td.num,.rows .num{font-variant-numeric:tabular-nums}
.tag{display:inline-flex;align-items:center;height:20px;padding:0 7px;border-radius:5px;font-size:var(--fs-11);font-weight:500;background:var(--sunken);color:var(--ink-2);white-space:nowrap}
.tag.ok{background:var(--ok-soft);color:var(--ok)}
.tag.bad{background:var(--bad-soft);color:var(--bad)}
.tag.warn{background:var(--warn-soft);color:var(--warn)}
.tag.off{color:var(--ink-3)}
.empty{padding:28px 12px;color:var(--ink-3);text-align:center;border:.5px dashed var(--hair-2);border-radius:var(--r-l)}

/* ── figures ── */
.figs,.stats{margin:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));border-top:.5px solid var(--hair);border-bottom:.5px solid var(--hair)}
.figs>div,.stat{padding:12px 16px 12px 0;margin:0}
.figs>div+div,.stat+.stat{padding-left:16px;border-left:.5px solid var(--hair)}
.figs dt,.stat dt{font-size:var(--fs-12);color:var(--ink-3);margin:0}
.figs dd,.stat dd{margin:4px 0 0;font-size:var(--fs-22);font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:28px}
.figs dd small{display:block;margin-top:2px;font-size:var(--fs-12);font-weight:400;color:var(--ink-3);letter-spacing:0;line-height:16px}
.stat dd .unit{font-size:var(--fs-13);color:var(--ink-3);font-weight:500;padding:0 0 0 3px}
.kv{margin:0;display:grid;grid-template-columns:180px minmax(0,1fr)}
.kv dt,.kv dd{padding:9px 0;border-bottom:.5px solid var(--hair);margin:0}
.kv dt{color:var(--ink-3)}
.steps{margin:14px 0 0;padding:0;list-style:none;counter-reset:s;border-top:.5px solid var(--hair)}
.steps li{counter-increment:s;display:grid;grid-template-columns:28px 1fr;padding:10px 0;color:var(--ink-2);border-bottom:.5px solid var(--hair)}
.steps li::before{content:counter(s);display:inline-grid;place-items:center;width:18px;height:18px;border-radius:50%;background:var(--ink);color:var(--canvas);font-size:11px;font-weight:600}
.urlbox{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.urlbox code{flex:1 1 260px;padding:7px 10px;background:var(--sunken);border-radius:var(--r-s);box-shadow:inset 0 0 0 .5px var(--hair);word-break:break-all}
ul.plain{margin:0;padding-left:18px;color:var(--ink-2)}ul.plain li{padding:3px 0}
details summary{cursor:pointer;color:var(--ink-2);margin-bottom:8px}

/* ── results ── */
.verdict{display:flex;gap:12px;align-items:center;padding:12px 14px;border-radius:var(--r-l);background:var(--sunken);margin:12px 0}
.verdict svg{flex:none;width:28px;height:28px;padding:5px;border-radius:50%;background:var(--ink-3);color:#fff}
.verdict.ok svg{background:var(--ok)}.verdict.bad svg{background:var(--bad)}
.verdict.ok{background:var(--ok-soft)}.verdict.bad{background:var(--bad-soft)}
.verdict-head{margin:0;font-weight:600;font-size:var(--fs-15);color:var(--ink)}
.verdict-sub{margin:1px 0 0;color:var(--ink-2);font-size:var(--fs-13)}
table.checks td.num,table.checks th.num{font-variant-numeric:tabular-nums;text-align:left}
table.checks td{text-align:left}
table.checks tr.failed td,table.checks tr.failed th{background:var(--bad-soft)}
.ratio{display:block;width:96px;height:4px;margin-top:6px;border-radius:2px;overflow:hidden}
.ratio .track{fill:var(--sunken)}.ratio .fill.ok{fill:var(--accent)}.ratio .fill.bad{fill:var(--bad)}
.viewer{width:100%;height:min(70vh,560px);border:0;border-radius:var(--r-l);box-shadow:inset 0 0 0 .5px var(--hair),var(--shadow-1);background:var(--sunken)}
#model{scroll-margin-top:calc(var(--bar) + 12px)}

/* ── footer ── */
.foot{border-top:.5px solid var(--hair);padding:16px 32px 20px;color:var(--ink-3);font-size:var(--fs-11);display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}
.foot a{color:var(--ink-3)}.foot a:hover{color:var(--ink)}

/* ── command palette ── */
.scrim{position:fixed;inset:0;z-index:80;background:rgba(0,0,0,.18);display:flex;justify-content:center;align-items:flex-start;padding-top:14vh;animation:fade .2s var(--ease)}
[data-theme=dark] .scrim{background:rgba(0,0,0,.4)}
.palette{width:min(620px,calc(100vw - 32px));max-height:min(460px,70vh);display:flex;flex-direction:column;border-radius:14px;background:var(--frost);
  backdrop-filter:blur(40px) saturate(180%);-webkit-backdrop-filter:blur(40px) saturate(180%);box-shadow:var(--shadow-pop);overflow:hidden;animation:sheet .35s var(--spring)}
.palette input{flex:none;height:52px;border:0;border-radius:0;background:transparent;font:400 var(--fs-17) var(--font);color:var(--ink);padding:0 18px;
  box-shadow:none;border-bottom:.5px solid var(--hair)}
.palette input:focus,.palette input:focus-visible{box-shadow:none;border-radius:0}
.palette ul{list-style:none;margin:0;padding:6px;overflow:auto;flex:0 1 auto;min-height:0}
.palette li{display:flex;align-items:center;gap:10px;height:36px;padding:0 10px;border-radius:8px;cursor:pointer;color:var(--ink)}
.palette li .i{color:var(--ink-3)}
.palette li[aria-selected=true]{background:var(--accent);color:#fff}
.palette li[aria-selected=true] .i,.palette li[aria-selected=true] .faint{color:rgba(255,255,255,.85)}
.palette li .faint{margin-left:auto;font-size:var(--fs-12);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:45%}
.palette li .l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.palette .pgrp{font-size:var(--fs-11);font-weight:600;color:var(--ink-3);padding:8px 10px 4px}
.palette .pfoot{display:flex;gap:14px;padding:8px 14px;border-top:.5px solid var(--hair);font-size:var(--fs-11);color:var(--ink-3)}

/* ── motion ── */
@keyframes enter{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@keyframes sheet{from{opacity:0;transform:translateY(-8px) scale(.97)}to{opacity:1;transform:none}}
@keyframes fade{from{opacity:0}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}

/* ── tablet and phone ── */
@media (max-width:1000px){
  .two{grid-template-columns:1fr;gap:12px}.sec .intro{max-width:none}
  .formgrid{grid-template-columns:1fr;gap:24px}.formgrid .side{position:static;order:-1}
}
@media (max-width:820px){
  .shell{grid-template-columns:minmax(0,1fr)}
  .sidebar{position:fixed;left:0;top:0;bottom:0;width:min(280px,86vw);height:auto;transform:translateX(-102%);transition:transform .35s var(--spring);
    background:var(--chrome);box-shadow:var(--shadow-pop)}
  .drawer-open .sidebar{transform:none}
  .drawer-open .drawer-scrim{display:block;position:fixed;inset:0;z-index:35;background:rgba(0,0,0,.25)}
  .topbar .btn.menu-btn,.topbar .btn.search-m{display:inline-flex}
  .topbar{padding:0 16px;gap:8px}
  .topbar .btn .lbl-m{display:none}
  .page{padding:4px 16px 64px}
  .foot{padding:16px}
  .kv{grid-template-columns:1fr}.kv dt{padding-bottom:0;border-bottom:0}.kv dd{padding-top:2px}
  .figs>div:nth-child(odd),.stat:nth-child(odd){border-left:0;padding-left:0}
  .figs,.stats{grid-template-columns:1fr 1fr}
  .figs>div:nth-child(n+3),.stat:nth-child(n+3){border-top:.5px solid var(--hair)}
}
@media (max-width:620px){
  .rows thead{position:absolute;left:-9999px}
  .rows,.rows tbody,.rows tr,.rows td,.rows th[scope=row]{display:block;width:100%}
  .rows tr{padding:10px 0;border-bottom:.5px solid var(--hair)}
  .rows td,.rows th[scope=row]{padding:2px 0;border:0;text-align:left!important}
  .rows td[data-label]::before{content:attr(data-label) "  ";color:var(--ink-3);font-size:var(--fs-12)}
  .rows td.go{padding-top:8px}
  .rows tbody tr:hover td{background:none}
  .ratio{width:100%}
  .crumbs .sec-crumb{display:none}
}

/* ── sign-up plans (billing) ── */
fieldset.plans,fieldset.periods{border:0;padding:0;margin:0 0 24px;min-width:0}
fieldset legend{font-weight:600;margin-bottom:10px;padding:0;font-size:var(--fs-13)}
.plans{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.plan{position:relative}
.plan input{position:absolute;opacity:0;width:1px;height:1px}
.plan label{display:flex;flex-direction:column;gap:6px;height:100%;padding:16px;border:.5px solid var(--hair-2);border-radius:var(--r-l);
  background:var(--raised);box-shadow:var(--shadow-1);cursor:pointer;margin:0;font-weight:400}
.plan input:checked+label{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.plan input:focus-visible+label{box-shadow:0 0 0 1px var(--accent),0 0 0 4px color-mix(in srgb,var(--accent) 28%,transparent)}
.plan-name{font-weight:600;font-size:var(--fs-17)}
.plan-price{color:var(--ink-2);font-size:var(--fs-13)}.plan-price b{color:var(--ink);font-family:var(--mono)}
.plan-blurb{color:var(--ink-3);font-size:var(--fs-12)}
.plan-feats{margin:6px 0 0;padding-left:18px;color:var(--ink-2);font-size:var(--fs-12)}.plan-feats li{padding:2px 0}
@media(max-width:900px){.plans{grid-template-columns:minmax(0,1fr)}}
.entry form.signup{max-width:1000px}.signup .field,.signup fieldset.periods{max-width:460px}
.entry .secret-box{margin-top:28px}
.entry .wrap:has(form.signup){width:min(1000px,100%)}

/* ── photos ── */
.thumbs{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(160px,100%),1fr));gap:12px;margin:10px 0 0}
.thumb{margin:0}.thumb img{display:block;width:100%;height:120px;object-fit:cover;border-radius:var(--r-m);border:.5px solid var(--hair-2)}
.thumb figcaption{font-size:var(--fs-12);color:var(--ink-2);margin-top:6px;word-break:break-all}
.nothumb{height:120px;display:flex;align-items:center;justify-content:center;border:1px dashed var(--hair-2);border-radius:var(--r-m);color:var(--ink-3);font-size:var(--fs-12)}
.sec h3{margin-bottom:10px}

/* scans */
.plan{margin:0 0 18px;padding:18px;border:1px solid var(--line);border-radius:12px;color:var(--ink)}
.plan-svg{display:block;width:100%;height:auto;max-height:70vh}
.plan-svg .plan-gap{stroke:var(--bg)}
.plan-svg .plan-dim,.plan-svg .plan-label{fill:var(--ink2)}
table.edit input.num-in{width:7.5em;max-width:100%;padding:7px 9px;font:500 14px var(--font-mono)}
table.edit td{vertical-align:top}
.fill{margin-top:28px;padding-top:20px;border-top:1px solid var(--line)}
.fill-list li{padding:6px 0}.fill-list .link{margin-right:8px}
.js-only-block{display:none}.js .js-only-block{display:block}

/* photos */
.thumb a{display:block;border-radius:8px}.thumb a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.photo-review{margin:0 0 18px}
.photo-review .overlay{position:relative;display:inline-block;max-width:100%;line-height:0}
.photo-review img{display:block;max-width:100%;height:auto;max-height:75vh;width:auto;border-radius:10px;border:1px solid var(--line)}
.photo-review .boxes{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.boxes rect{fill:none;stroke:var(--warn)}.boxes .ok rect{stroke:var(--ok)}.boxes .rej rect{stroke:var(--ink3);stroke-dasharray:8 6}
.boxes rect.tagbg{fill:var(--warn);stroke:none}.boxes .ok rect.tagbg{fill:var(--ok)}.boxes .rej rect.tagbg{fill:var(--ink3)}
.boxes text{fill:#050b14;font-family:var(--font-mono);font-weight:600}
table.findings td strong{display:block}
.decide{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.decide input.text-in{min-width:0;flex:1 1 10em;padding:7px 9px}
.decide select{width:auto;padding:7px 9px}
