/* Farnsworth Express: shared tokens and components */
.fx{--desk:#0d0d15;--bg:#14141f;--s1:#1b1b2a;--s2:#24243a;--s3:#2f2f49;--ln:#2c2c43;--ln2:#42425e;--tx:#f1f0f7;--tx2:#bdbcd1;--tx3:#9594ad;--ok:#5ed6b4;--okb:rgba(94,214,180,.14);--wn:#f2a541;--wnb:rgba(242,165,65,.15);--er:#ff6b6b;--erb:rgba(255,107,107,.14);--ero:#260707;--scrim:rgba(5,5,12,.6);--sh:0 18px 44px rgba(0,0,0,.5);font:14px/1.45 "Instrument Sans",ui-sans-serif,system-ui,sans-serif;color:var(--tx);-webkit-font-smoothing:antialiased}
.fx[data-theme=light]{--desk:#e3e3eb;--bg:#f6f6fa;--s1:#fff;--s2:#efeff5;--s3:#e3e3ed;--ln:#e0e0ea;--ln2:#c8c8d7;--tx:#15151e;--tx2:#44445a;--tx3:#5f5f77;--ok:#0a6e55;--okb:#dcf4eb;--wn:#a35200;--wnb:#ffeedb;--er:#c42f2b;--erb:#fde6e5;--ero:#fff;--scrim:rgba(20,20,40,.36);--sh:0 18px 44px rgba(30,30,60,.16)}
[data-ws=farnsworth]{--ac:#7259f7;--aco:#fff;--act:#ab9fff;--acb:rgba(124,102,255,.18);--acl:transparent}
[data-ws=citadel]{--ac:#f6c654;--aco:#1d1606;--act:#f6c654;--acb:rgba(246,198,84,.14);--acl:transparent}
[data-ws=philo]{--ac:#fe6b78;--aco:#2a0a0f;--act:#ff8f99;--acb:rgba(254,107,120,.15);--acl:transparent}
[data-theme=light][data-ws=farnsworth],[data-theme=light] [data-ws=farnsworth]{--ac:#5b41e8;--act:#4d34d6;--acb:#eeeaff}
[data-theme=light][data-ws=citadel],[data-theme=light] [data-ws=citadel]{--act:#835c00;--acb:#fff3d1;--acl:#c7972b}
[data-theme=light][data-ws=philo],[data-theme=light] [data-ws=philo]{--act:#bb2b45;--acb:#ffe8ea;--acl:#e0505e}
[data-ws=projects]{--ac:#f1f0f7;--aco:#14141f;--act:#f1f0f7;--acb:rgba(241,240,247,.09);--acl:transparent}
[data-theme=light][data-ws=projects],[data-theme=light] [data-ws=projects]{--ac:#15151e;--aco:#fff;--act:#15151e;--acb:#e8e8f0}
.pj{width:26px;height:26px;border-radius:7px;background:var(--tx);color:var(--bg);display:grid;place-items:center;flex:none;font-weight:700;font-size:11px;letter-spacing:.02em}.pj .ic{width:15px;height:15px}
.ctx{display:inline-flex;align-items:center;gap:6px;min-height:30px;padding:0 10px 0 4px;border-radius:999px;background:var(--s2);border:1px solid var(--ln);font-size:12px;font-weight:600;color:var(--tx2);white-space:nowrap}.ctx img{width:20px;height:20px;border-radius:6px}
.fx *{box-sizing:border-box}.fx :focus-visible{outline:2px solid var(--act);outline-offset:2px}.fx button,.fx input,.fx textarea,.fx select{font:inherit;color:inherit}.fx h1,.fx h2,.fx h3,.fx p,.fx ol,.fx ul,.fx dl,.fx dd{margin:0;padding:0}.fx a:not([class]){color:var(--act)}.fx input[type=radio],.fx input[type=checkbox]:not(.sw){accent-color:var(--ac);width:20px;height:20px;margin:0;flex:none}
.mono,.code,.tool code{font-family:"JetBrains Mono",ui-monospace,Menlo,monospace;font-size:12px}.t2{color:var(--tx2)}.t3{color:var(--tx3)}.sm{font-size:13px}.xs{font-size:12px}.b{font-weight:600}.tr{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.ic{width:20px;height:20px;flex:none;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.ic.s{width:16px;height:16px}.ic.f{fill:currentColor}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 16px;border-radius:10px;border:1px solid var(--ln2);background:var(--s2);color:var(--tx);font-weight:600;font-size:14px;line-height:1.2;cursor:pointer;text-decoration:none;white-space:nowrap}.btn.p{background:var(--ac);color:var(--aco);border-color:var(--acl)}.btn.q{background:none;border-color:transparent;color:var(--tx2)}.btn.d{background:var(--er);color:var(--ero);border-color:transparent}.btn.i{width:44px;padding:0}.btn.sm{min-height:34px;padding:0 12px;font-size:13px;border-radius:8px}.btn.sm.i{width:34px;padding:0}.btn.w{width:100%}.btn:disabled,.btn[aria-disabled=true]{opacity:.45;cursor:not-allowed}
.bd{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 8px;border-radius:999px;font-size:12px;font-weight:600;background:var(--s2);color:var(--tx2);white-space:nowrap}.bd.ok{background:var(--okb);color:var(--ok)}.bd.wn{background:var(--wnb);color:var(--wn)}.bd.er{background:var(--erb);color:var(--er)}.bd.ac{background:var(--acb);color:var(--act)}.bd .ic{width:13px;height:13px;stroke-width:2.2}.dot{width:7px;height:7px;border-radius:50%;background:currentColor;flex:none}
.chip{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 14px;border-radius:999px;border:1px solid var(--ln2);background:none;color:var(--tx2);font-size:13px;font-weight:600;white-space:nowrap;cursor:pointer}.chip[aria-pressed=true]{background:var(--acb);color:var(--act);border-color:transparent}
.men{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 7px 0 3px;border-radius:6px;background:var(--acb);color:var(--act);font-weight:600;font-size:13px;vertical-align:-5px;white-space:nowrap}.men i{width:18px;height:18px;border-radius:4px;flex:none}
.inp{display:block;width:100%;min-height:44px;padding:10px 12px;border-radius:10px;border:1px solid var(--ln2);background:var(--s2);color:var(--tx);font-size:16px;line-height:1.4;resize:none}.inp::placeholder{color:var(--tx3)}.inp[aria-invalid=true]{border-color:var(--er)}.lb{display:block;font-size:13px;font-weight:600;color:var(--tx2);margin-bottom:6px}
.sw{appearance:none;-webkit-appearance:none;margin:0;width:46px;height:28px;border-radius:999px;background:var(--s3);border:1px solid var(--ln2);position:relative;cursor:pointer;flex:none}.sw::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:var(--tx3);transition:transform .15s}.sw:checked{background:var(--ac);border-color:transparent}.sw:checked::after{transform:translateX(18px);background:var(--aco)}
.seg{display:flex;padding:3px;gap:2px;border-radius:10px;background:var(--s2);border:1px solid var(--ln)}.seg button{flex:1;min-height:38px;padding:0 12px;border:0;border-radius:7px;background:none;color:var(--tx2);font-weight:600;font-size:13px;cursor:pointer;white-space:nowrap;display:inline-flex;align-items:center;justify-content:center;gap:6px}.seg button[aria-pressed=true]{background:var(--s1);color:var(--tx);box-shadow:0 1px 3px rgba(0,0,0,.28)}
.tabs{display:flex;gap:2px;overflow-x:auto;border-bottom:1px solid var(--ln);padding:0 8px;flex:none}.tab{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 10px;border-bottom:2px solid transparent;color:var(--tx3);font-weight:600;font-size:14px;white-space:nowrap;text-decoration:none}.tab[aria-current=page]{color:var(--tx);border-bottom-color:var(--ac)}
.row{display:flex;align-items:center;gap:12px;padding:10px 16px;min-height:60px;border-bottom:1px solid var(--ln);color:inherit;text-decoration:none}.card{background:var(--s1);border:1px solid var(--ln);border-radius:14px}.code{display:block;line-height:1.55;background:var(--bg);border:1px solid var(--ln);border-radius:8px;padding:8px 10px;white-space:pre-wrap;word-break:break-word;color:var(--tx2);margin:0}
.ph{position:relative;width:390px;height:844px;overflow:hidden;border-radius:28px;border:1px solid var(--ln);background:var(--bg);display:flex;flex-direction:column;flex:none}.cap{font-size:13px;font-weight:600;color:var(--tx3);margin:0 0 12px 6px}.top{display:flex;align-items:center;gap:4px;min-height:56px;padding:0 6px 0 8px;border-bottom:1px solid var(--ln);flex:none}
.lens{width:34px;height:20px;flex:none;fill:none;stroke-width:2;stroke-linecap:round}.lens circle,.lens path{stroke:var(--tx3)}.lens .g{display:none}.lens.on circle{fill:var(--okb);stroke:var(--ok)}.lens.on path{stroke:var(--ok)}.lens.on .g{display:inline}.lens.re circle:first-of-type{fill:var(--okb);stroke:var(--ok)}.lens.re circle:last-of-type{stroke:var(--wn);stroke-dasharray:3 2.6}.lens.re path{stroke:var(--wn);stroke-dasharray:2 2}
.bn{display:flex;gap:4px;border-top:1px solid var(--ln);padding:6px 8px 20px;margin-top:auto;flex:none}.fx .bn a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:54px;border-radius:12px;text-decoration:none;color:var(--tx3);font-size:12px;font-weight:600}.fx .bn a[aria-current=page]{color:var(--tx);background:var(--acb)}.bn img{width:26px;height:26px;border-radius:7px}.dim{filter:grayscale(1);opacity:.4}
.sheet{position:absolute;left:0;right:0;bottom:0;background:var(--s1);border-top:1px solid var(--ln2);border-radius:22px 22px 0 0;box-shadow:var(--sh);padding:6px 16px 28px;display:flex;flex-direction:column;gap:14px}.grab{width:36px;height:4px;border-radius:2px;background:var(--ln2);margin:2px auto 0;flex:none}.scrim{position:absolute;inset:0;background:var(--scrim)}
.toast{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:12px;background:var(--s3);border:1px solid var(--ln2);box-shadow:var(--sh)}.ban{display:flex;gap:10px;align-items:center;padding:10px 12px 10px 16px;font-size:13px;font-weight:600;flex:none}.ban.wn{background:var(--wnb);color:var(--wn)}.ban.er{background:var(--erb);color:var(--er)}.ban.nt{background:var(--s2);color:var(--tx2)}
.bar{height:6px;border-radius:3px;background:var(--s3);overflow:hidden}.bar i{display:block;height:100%;background:var(--ac);border-radius:3px}
.th{position:relative;display:grid;place-items:center;overflow:hidden;color:rgba(255,255,255,.9);border-radius:10px;flex:none}.c1{background:#4a3d7a}.c2{background:#2e5c63}.c3{background:#7b3f55}.c4{background:#2c3048}.c5{background:#7a5a2a}.c6{background:#3a5f8c}
.tool{display:flex;align-items:center;gap:8px;width:100%;min-height:44px;padding:8px 10px;border:1px solid var(--ln);border-radius:10px;background:var(--s1);text-align:left;cursor:pointer;color:var(--tx3);font-size:13px}.tool code{color:var(--tx)}
.opt{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--ln);border-radius:12px;background:var(--s1);cursor:pointer}.opt.sel{border-color:var(--ac);box-shadow:inset 0 0 0 1px var(--ac)}.opt.off{opacity:.55;cursor:not-allowed}
.num{width:24px;height:24px;border-radius:50%;background:var(--acb);color:var(--act);display:grid;place-items:center;font-size:12px;font-weight:700;flex:none}.av{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:var(--s3);color:var(--tx);font-weight:700;font-size:13px;flex:none}
.kv{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:10px 0;border-bottom:1px solid var(--ln)}.kv dt{color:var(--tx3)}.kv dd{margin:0;font-weight:600;text-align:right}
.tbl{width:100%;border-collapse:collapse;font-size:13px}.tbl th{text-align:left;font-size:12px;font-weight:600;color:var(--tx3);padding:8px 12px;border-bottom:1px solid var(--ln);white-space:nowrap}.tbl td{padding:10px 12px;border-bottom:1px solid var(--ln);white-space:nowrap;vertical-align:middle}.tbl tr.sel td{background:var(--acb)}
.pl{position:relative;background:#09090f;display:grid;place-items:center;overflow:hidden;color:#fff}.ctl{position:absolute;left:0;right:0;bottom:0;display:flex;align-items:center;gap:2px;padding:4px 6px;background:linear-gradient(transparent,rgba(0,0,0,.7));color:#fff}.vb{display:inline-grid;place-items:center;width:44px;height:44px;border:0;border-radius:10px;background:none;color:#fff;cursor:pointer;flex:none}.scrub{flex:1;min-width:0;height:44px;margin:0;accent-color:var(--ac);cursor:pointer}
.sk{background:linear-gradient(90deg,var(--s2) 25%,var(--s3) 50%,var(--s2) 75%);background-size:200% 100%;animation:fxsk 1.4s ease-in-out infinite;border-radius:6px}.spin{animation:fxsp .9s linear infinite}.pulse{animation:fxpl 1.6s ease-in-out infinite}.caret{display:inline-block;width:7px;height:15px;background:var(--tx);vertical-align:-2px;margin-left:2px;animation:fxpl 1s steps(1) infinite}
.fx{--p1:rgba(124,102,255,.16);--p1t:#c0b6ff;--p2:rgba(94,214,180,.14);--p2t:#86e3c8;--p3:rgba(246,198,84,.14);--p3t:#f7d27f;--p4:rgba(254,107,120,.15);--p4t:#ffa0a8;--p5:rgba(96,150,255,.16);--p5t:#a6c6ff;--p6:rgba(255,150,90,.15);--p6t:#ffb98f;--r:18px;--sh1:0 1px 2px rgba(0,0,0,.3),0 10px 28px rgba(0,0,0,.28)}
.fx[data-theme=light]{--p1:#efebff;--p1t:#4d34d6;--p2:#e2f6ee;--p2t:#0a6e55;--p3:#fff4d9;--p3t:#835c00;--p4:#ffe9ec;--p4t:#bb2b45;--p5:#e6f0ff;--p5t:#2457b8;--p6:#ffebdd;--p6t:#a04a12;--sh1:0 1px 2px rgba(20,20,40,.04),0 10px 28px rgba(20,20,40,.06)}
.panel{background:var(--s1);border:1px solid var(--ln);border-radius:var(--r);box-shadow:var(--sh1)}
.stat{border-radius:var(--r);padding:16px 18px;display:flex;flex-direction:column;gap:4px;min-width:0}.stat .v{font-size:30px;font-weight:650;letter-spacing:-.02em;line-height:1.1;font-variant-numeric:tabular-nums}.stat .l{font-size:13px;font-weight:600;color:var(--tx2)}
.k1{background:var(--p1)}.k1 .v{color:var(--p1t)}.k2{background:var(--p2)}.k2 .v{color:var(--p2t)}.k3{background:var(--p3)}.k3 .v{color:var(--p3t)}.k4{background:var(--p4)}.k4 .v{color:var(--p4t)}.k5{background:var(--p5)}.k5 .v{color:var(--p5t)}.k6{background:var(--p6)}.k6 .v{color:var(--p6t)}
.mark{width:30px;height:30px;border-radius:9px;background:var(--tx);color:var(--bg);display:grid;place-items:center;flex:none}.mark svg{width:20px;height:12px;fill:none;stroke:currentColor;stroke-width:2.6;stroke-linecap:round}
.nv{display:flex;align-items:center;gap:10px;min-height:40px;padding:0 10px;border-radius:10px;color:var(--tx2);font-weight:600;text-decoration:none}.nv[aria-current=page]{background:var(--p1);color:var(--p1t)}
.ask{display:flex;align-items:center;gap:12px;min-height:58px;padding:6px 6px 6px 14px;border-radius:999px;background:var(--s1);border:1px solid var(--ln2);box-shadow:var(--sh1)}.ask:focus-within{outline:2px solid var(--act);outline-offset:2px}.ask input{flex:1;min-width:0;border:0;background:none;font-size:16px;color:var(--tx);outline:none}.ask input::placeholder{color:var(--tx3)}
.dial{display:inline-flex;padding:3px;gap:2px;border-radius:999px;background:var(--s2);border:1px solid var(--ln)}.dial button{min-height:34px;padding:0 14px;border:0;border-radius:999px;background:none;color:var(--tx2);font-weight:600;font-size:13px;cursor:pointer;white-space:nowrap}.dial button[aria-pressed=true]{background:var(--tx);color:var(--bg)}
.chipl{display:inline-flex;align-items:center;gap:6px;min-height:28px;padding:0 10px;border-radius:999px;background:var(--s2);font-size:12px;font-weight:600;color:var(--tx2);text-decoration:none;white-space:nowrap}.chipl img{width:16px;height:16px;border-radius:4px}
.up{color:var(--ok)}.dn{color:var(--er)}.flat{color:var(--tx3)}
@keyframes fxsk{to{background-position:-200% 0}}@keyframes fxsp{to{transform:rotate(360deg)}}@keyframes fxpl{50%{opacity:.3}}@media (prefers-reduced-motion:reduce){.sk,.spin,.pulse,.caret{animation:none}}
