/* LogicalLabs site shell: catalog + lab player chrome */
:root{--bg:#f4f6f9;--card:#fff;--ink:#0e1a2b;--muted:#566173;--line:#dfe4ea;--accent:#0f766e;--accent-ink:#fff;--navy:#12233d;--mint:#5eead4;--soft:#e8f5f3;--shadow:0 1px 2px #0e1a2b14,0 6px 20px #0e1a2b0d}
@media (prefers-color-scheme:dark){:root{--bg:#0b1320;--card:#131e30;--ink:#e8eef7;--muted:#9aa8bb;--line:#24324a;--accent:#2dd4bf;--accent-ink:#06231f;--soft:#12303a;--shadow:0 1px 2px #0006,0 8px 24px #0005}}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.55 "Segoe UI Variable Text","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;-webkit-font-smoothing:antialiased}
a{color:inherit}
h1,h2,h3,p{margin:0}
.ico{display:inline-flex}
.site-head{display:flex;align-items:center;justify-content:space-between;padding:14px clamp(16px,4vw,48px);position:sticky;top:0;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(10px);z-index:10;border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:18px;text-decoration:none;letter-spacing:-.01em}
.site-head nav{display:flex;gap:22px;font-size:14px}
.site-head nav a{text-decoration:none;color:var(--muted)}
.site-head nav a:hover{color:var(--ink)}
.hero{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:clamp(20px,4vw,56px);align-items:center;padding:clamp(28px,6vw,72px) clamp(16px,4vw,48px);max-width:1280px;margin:0 auto}
.hero h1{font-size:clamp(30px,4.6vw,52px);line-height:1.06;letter-spacing:-.03em;font-weight:700;text-wrap:balance}
.hero p{margin-top:18px;color:var(--muted);font-size:17px;max-width:56ch}
.hero-cta{display:flex;gap:12px;flex-wrap:wrap;margin-top:26px}
.btn-main,.btn-ghost{display:inline-block;padding:11px 20px;border-radius:8px;font-weight:600;text-decoration:none;font-size:15px}
.btn-main{background:var(--accent);color:var(--accent-ink)}
.btn-main:hover{filter:brightness(1.08)}
.btn-ghost{border:1px solid var(--line);background:var(--card)}
.btn-ghost:hover{border-color:var(--accent)}
.stats{display:flex;gap:clamp(16px,3vw,36px);flex-wrap:wrap;margin:34px 0 0}
.stats dt{font-size:28px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.stats dd{margin:0;color:var(--muted);font-size:13px}
.hero-art{min-width:0}
.art-win{background:#012456;border-radius:10px;box-shadow:0 24px 60px #0e1a2b40,0 2px 6px #0003;overflow:hidden;transform:rotate(.6deg)}
.art-bar{background:#1f1f1f;color:#ddd;font-size:12px;height:34px;display:flex;align-items:center;gap:6px;padding:0 12px}
.art-bar i{width:10px;height:10px;border-radius:50%;background:#555}
.art-bar span{margin-left:8px}
.art-win pre{margin:0;padding:14px 16px 18px;color:#eeedf0;font:13px/1.45 "Cascadia Mono",Consolas,"DejaVu Sans Mono",Menlo,monospace;overflow:hidden;white-space:pre}
.art-win pre b{color:#f9f1a5;font-weight:400}
.art-win pre em{color:#5eead4;font-style:normal}
.art-win pre u{text-decoration:none;animation:blink 1s steps(1) infinite}
@keyframes blink{50%{opacity:0}}
.wrap{max-width:1280px;margin:0 auto;padding:clamp(20px,3vw,36px) clamp(16px,4vw,48px)}
.wrap h2{font-size:26px;letter-spacing:-.02em}
.wrap>.sub{color:var(--muted);margin-top:6px}
.tracks{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin-top:20px}
.track{all:unset;box-sizing:border-box;cursor:pointer;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:18px 20px;box-shadow:var(--shadow);border-top:4px solid var(--c);display:block}
.track:hover{border-color:var(--c)}
.track:focus-visible,.fchip:focus-visible,.card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.track-code{font-weight:700;font-size:20px;letter-spacing:-.01em}
.track-title{color:var(--muted);margin-top:2px}
.track-meta{font-size:13px;margin-top:12px}
.track-bar{height:6px;background:var(--line);border-radius:3px;margin-top:10px;overflow:hidden}
.track-bar span{display:block;height:100%;background:var(--c);border-radius:3px}
.track-done{font-size:12px;color:var(--muted);margin-top:6px}
.labs-head{display:flex;align-items:baseline;gap:12px}
.count{color:var(--muted);font-size:14px}
.filters{display:flex;flex-direction:column;gap:10px;margin:16px 0 20px}
.frow{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.flabel{width:84px;color:var(--muted);font-size:13px}
.fchips{display:flex;gap:6px;flex-wrap:wrap}
.fchip{all:unset;box-sizing:border-box;cursor:pointer;display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:999px;border:1px solid var(--line);background:var(--card);font-size:13.5px}
.fchip:hover{border-color:var(--accent)}
.fchip.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.search{height:40px;border-radius:8px;border:1px solid var(--line);background:var(--card);color:var(--ink);padding:0 14px;font:inherit;max-width:520px;width:100%}
.search:focus{outline:2px solid var(--accent);outline-offset:1px}
#grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:18px;text-decoration:none;display:flex;flex-direction:column;gap:8px;box-shadow:var(--shadow);transition:transform .12s,border-color .12s}
.card:hover{transform:translateY(-2px);border-color:var(--accent)}
.card-top{display:flex;align-items:center;gap:10px;min-height:34px}
.card-ico{width:44px;height:44px;border-radius:10px;background:var(--soft);display:flex;align-items:center;justify-content:center;flex:none}
.card-tags{display:flex;gap:5px;flex-wrap:wrap;flex:1}
.chip{display:inline-block;font-size:11.5px;font-weight:700;padding:2px 8px;border-radius:5px;color:#fff;background:var(--c,#555);letter-spacing:.01em;white-space:nowrap}
.chip.ghost{background:none;color:var(--muted);border:1px solid var(--line);font-weight:600}
.card-done{font-size:12px;font-weight:700;color:var(--accent);white-space:nowrap}
.card h3{font-size:17px;line-height:1.3;letter-spacing:-.01em}
.card p{color:var(--muted);font-size:14px;flex:1}
.card-foot{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:12.5px;color:var(--muted);border-top:1px solid var(--line);padding-top:10px;margin-top:4px}
.card-vm{margin-left:auto}
.empty{grid-column:1/-1;text-align:center;color:var(--muted);padding:40px}
.site-foot{max-width:1280px;margin:20px auto 0;padding:24px clamp(16px,4vw,48px) 48px;color:var(--muted);font-size:13px;border-top:1px solid var(--line)}
.site-foot p+p{margin-top:8px}
@media (max-width:860px){.hero{grid-template-columns:1fr}.hero-art{order:2}.site-head nav{display:none}.card-vm{margin-left:0}}

/* ---------- lab player ---------- */
body.labpage{background:#0b1320;color:#e8eef7;height:100vh;height:100dvh;overflow:hidden}
#labroot{display:flex;flex-direction:column;height:100%}
.lb-top{display:flex;align-items:center;gap:14px;padding:8px 14px;background:#12233d;border-bottom:1px solid #24324a;flex:none;min-height:52px}
.lb-back{display:flex;align-items:center;gap:4px;text-decoration:none;color:#b8c6da;font-size:13px;padding:6px 8px;border-radius:6px}
.lb-back:hover{background:#ffffff14;color:#fff}
.lb-title{flex:1;min-width:0}
.lb-title h1{font-size:15.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lb-meta{display:flex;gap:5px;margin-top:3px}
.lb-meta .chip.ghost{color:#b8c6da;border-color:#34455f}
.lb-stats{display:flex;gap:14px;align-items:center;font-size:13px;color:#dbe5f3;white-space:nowrap;font-variant-numeric:tabular-nums}
.lb-stats .dim{color:#8fa0b8}
.lb-prog{background:#0b1320;border:1px solid #34455f;border-radius:999px;padding:3px 10px;font-weight:600}
.lbtn{font:inherit;font-size:13px;font-weight:600;color:#e8eef7;background:#1c2f4d;border:1px solid #34455f;border-radius:6px;padding:6px 12px;cursor:pointer;text-decoration:none;white-space:nowrap}
.lbtn:hover{background:#26406a}
.lbtn.primary{background:#2dd4bf;border-color:#2dd4bf;color:#06231f}
.lb-main{flex:1;min-height:0;display:flex}
.vmwrap{flex:1;min-width:0;display:flex;flex-direction:column;background:#000}
.vmbar{height:26px;flex:none;background:#1b2536;color:#c9d5e6;font-size:12px;display:flex;align-items:center;gap:8px;padding:0 10px;border-bottom:1px solid #000}
.vmbar-dot{width:8px;height:8px;border-radius:50%;background:#34d399;box-shadow:0 0 6px #34d399}
.vmbar b{font-weight:600;color:#fff}
.vmbar-os{color:#8fa0b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vmbar-sp{flex:1}
.vmbar-conn{color:#34d399}
.vmbar-btn{all:unset;cursor:pointer;display:flex;padding:4px;border-radius:4px;color:#c9d5e6}
.vmbar-btn:hover{background:#ffffff1f}
.vmscreen{flex:1;min-height:0;position:relative;overflow:auto}
.vmscreen .vm{position:absolute;inset:0;min-width:760px;min-height:480px}
.lb-panel{width:370px;flex:none;background:#fff;color:#0e1a2b;overflow:auto;border-left:1px solid #24324a;display:flex;flex-direction:column}
body.nopanel .lb-panel{display:none}
.pn-head{padding:18px 20px 14px;border-bottom:1px solid #e3e7ec}
.pn-area{font-size:11.5px;font-weight:700;color:#0f766e;text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}
.pn-head h2{font-size:17px}
.pn-head p{color:#48556a;font-size:14px;margin-top:6px}
.lb-bar{height:6px;background:#e3e7ec;border-radius:3px;margin-top:14px;overflow:hidden}
.lb-bar span{display:block;height:100%;width:0;background:#0f766e;border-radius:3px;transition:width .4s}
.pn-sub{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:#48556a;padding:14px 20px 6px;font-weight:700}
.tasks{padding:0 12px}
.task{border:1px solid #e3e7ec;border-radius:10px;margin-bottom:8px;overflow:hidden}
.task.open{border-color:#0f766e;box-shadow:0 0 0 1px #0f766e}
.task-h{display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer}
.task-n{width:24px;height:24px;border-radius:50%;border:1.5px solid #9aa8bb;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex:none;color:#48556a}
.task.done .task-n{background:#0f766e;border-color:#0f766e;color:#fff}
.task.done .task-t{color:#48556a}
.task-t{flex:1;font-weight:600;font-size:14px;line-height:1.3}
.task-c{color:#9aa8bb;font-size:16px;width:14px;text-align:center}
.task-body{padding:0 14px 14px 46px;font-size:14px;line-height:1.5;color:#1e2b3f}
.task-body ul{margin:6px 0;padding-left:18px}
.task-body li{margin:3px 0}
.task-body code,.hint code{background:#eef2f6;border-radius:4px;padding:1px 5px;font:12.5px/1.4 "Cascadia Mono",Consolas,"DejaVu Sans Mono",Menlo,monospace;word-break:break-word;user-select:all}
.hintbtn{all:unset;cursor:pointer;color:#0f766e;font-weight:600;font-size:13px;margin-top:10px;display:inline-block}
.hintbtn:hover{text-decoration:underline}
.hint{margin-top:8px;background:#f1f8f7;border-left:3px solid #0f766e;border-radius:0 6px 6px 0;padding:8px 10px;font-size:13.5px}
.hint code{background:#dcefec;display:inline-block;margin:2px 0}
.hidden{display:none!important}
.pn-foot{margin-top:auto;padding:14px 20px 18px;color:#66748a;font-size:12.5px}
.lb-toasts{position:fixed;left:50%;top:64px;transform:translateX(-50%);display:flex;flex-direction:column;gap:8px;z-index:100000;pointer-events:none}
.lb-toast{display:flex;gap:10px;align-items:center;background:#06231f;color:#eafffb;border:1px solid #2dd4bf;border-radius:10px;padding:10px 16px;box-shadow:0 10px 30px #0008;font-size:13.5px;animation:tin .25s;transition:opacity .4s,transform .4s}
.lb-toast span{width:24px;height:24px;border-radius:50%;background:#2dd4bf;color:#06231f;display:flex;align-items:center;justify-content:center;font-weight:800;flex:none}
.lb-toast.out{opacity:0;transform:translateY(-8px)}
@keyframes tin{from{opacity:0;transform:translateY(-10px)}}
.lb-modal{position:fixed;inset:0;background:#050a12b8;display:flex;align-items:center;justify-content:center;z-index:100001;padding:20px}
.lb-card{background:#fff;color:#0e1a2b;border-radius:16px;padding:32px;max-width:520px;width:100%;text-align:center;box-shadow:0 30px 80px #000a}
.lb-badge{width:64px;height:64px;border-radius:50%;background:#0f766e;color:#fff;font-size:32px;display:flex;align-items:center;justify-content:center;margin:0 auto 14px}
.lb-card h2{font-size:26px;letter-spacing:-.02em}
.lb-card p{color:#48556a;margin-top:4px}
.lb-res{display:flex;justify-content:center;gap:28px;margin:22px 0}
.lb-res b{display:block;font-size:20px;font-variant-numeric:tabular-nums}
.lb-res span{font-size:12px;color:#66748a}
.lb-actions{display:flex;flex-direction:column;gap:8px}
.lb-card .lbtn{background:#fff;color:#0e1a2b;border-color:#cfd6df;padding:10px 14px;white-space:normal}
.lb-card .lbtn:hover{background:#f1f4f8}
.lb-card .lbtn.primary{background:#0f766e;border-color:#0f766e;color:#fff}
@media (max-width:1100px){.lb-panel{position:fixed;right:0;top:53px;bottom:0;z-index:9990;box-shadow:-10px 0 30px #0008;width:min(370px,92vw)}.lb-stats .lb-stat{display:none}}
@media (max-width:640px){.lb-meta,.vmbar-os{display:none}}
