:root{--bg:#eef1f4;--panel:#fff;--panel-2:#f6f8fa;--ink:#1b2430;--ink-2:#4a5666;--ink-3:#7b8796;--line:#d9dee5;--line-2:#c4ccd6;--accent:#0f6fde;--accent-ink:#fff;--accent-soft:#e3effd;--warn:#c56a00;--warn-soft:#fff3e0;--bad:#c62828;--bad-soft:#fdecea;--good:#1f8a4c;--good-soft:#e5f5ec;--bar:#16202c;--bar-ink:#e9eef4;--canvas:#fbfcfd;--grid:#d6dde5;--wire:#1d6fd8;--sym:#1b2430;--mono:ui-monospace, "SF Mono", "Cascadia Code", "JetBrains Mono", Menlo, Consolas, monospace;--sans:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--radius:8px;--shadow:0 1px 2px #141e2d0f, 0 4px 16px #141e2d0f}*{box-sizing:border-box}html,body{background:var(--bg);height:100%;color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;padding:0;font-size:14px}a{color:var(--accent)}button,input,select,textarea{font:inherit;color:inherit}.btn{border:1px solid var(--line-2);background:var(--panel);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;border-radius:6px;align-items:center;gap:6px;padding:6px 10px;line-height:1.1;display:inline-flex}.btn:hover{background:var(--panel-2)}.btn:disabled{opacity:.45;cursor:default}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn.primary:hover{filter:brightness(1.08)}.btn.go{background:var(--good);border-color:var(--good);color:#fff}.btn.stop{background:var(--bad);border-color:var(--bad);color:#fff}.btn.ghost{background:0 0;border-color:#0000}.btn.ghost:hover{background:#7f7f7f1f}.btn.small{padding:3px 7px;font-size:12px}.btn.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.topbar{background:var(--bar);height:48px;color:var(--bar-ink);flex-shrink:0;align-items:center;gap:10px;padding:0 12px;display:flex}.topbar .brand{letter-spacing:.01em;color:var(--bar-ink);white-space:nowrap;align-items:center;gap:8px;font-weight:650;text-decoration:none;display:flex}.topbar .brand small{opacity:.6;font-weight:450}.topbar .tabs{gap:2px;margin-left:12px;display:flex}.topbar .tabs a{color:var(--bar-ink);opacity:.7;white-space:nowrap;border-radius:6px;padding:6px 10px;text-decoration:none}.topbar .tabs a:hover{opacity:1;background:#ffffff14}.topbar .tabs a.on{opacity:1;background:#ffffff24}.topbar .btn{color:var(--bar-ink);background:#ffffff14;border-color:#ffffff29}.topbar .btn:hover{background:#ffffff29}.topbar .btn.go{background:var(--good);border-color:var(--good)}.topbar .btn.stop{background:var(--bad);border-color:var(--bad)}.topbar select{color:var(--bar-ink);background:#ffffff14;border:1px solid #ffffff29;border-radius:6px;padding:5px 6px}.topbar select option{color:#111}.spacer{flex:1}.app{flex-direction:column;height:100dvh;display:flex;overflow:hidden}.workspace{flex:1;min-height:0;display:flex;position:relative}.panel{background:var(--panel);border-right:1px solid var(--line);flex-direction:column;min-height:0;display:flex}.panel.right{border-right:none;border-left:1px solid var(--line)}.panel h3{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3);margin:0;font-size:11px;font-weight:650}.scroll{min-height:0;overflow-y:auto}.palette{width:232px}.palette .search{border-bottom:1px solid var(--line);padding:10px}.palette .search input{border:1px solid var(--line-2);background:var(--panel-2);border-radius:6px;width:100%;padding:6px 8px}.palette .cat{padding:10px 10px 4px}.palette .cat h3{margin-bottom:6px}.palette .grid{grid-template-columns:1fr 1fr;gap:6px;display:grid}.palette .item{border:1px solid var(--line);background:var(--panel);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;text-align:center;color:var(--ink-2);border-radius:6px;flex-direction:column;align-items:center;gap:2px;padding:4px 4px 5px;font-size:11px;line-height:1.15;display:flex}.palette .item:hover{border-color:var(--accent);background:var(--accent-soft);color:var(--ink)}.palette .item svg{width:100%;height:40px}.canvas-wrap{background:var(--canvas);flex:1;min-width:0;position:relative;overflow:hidden}.canvas-wrap svg.board{touch-action:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;display:block}.hud{border:1px solid var(--line);box-shadow:var(--shadow);color:var(--ink-2);background:#ffffffeb;border-radius:8px;align-items:center;gap:6px;padding:4px 6px;font-size:12px;display:flex;position:absolute;bottom:10px;left:10px}.hud .mono{font-family:var(--mono)}.toast{background:var(--bar);color:var(--bar-ink);box-shadow:var(--shadow);pointer-events:none;text-align:center;border-radius:8px;max-width:80%;padding:7px 12px;font-size:13px;position:absolute;top:10px;left:50%;transform:translate(-50%)}.empty-hint{pointer-events:none;color:var(--ink-3);text-align:center;justify-content:center;align-items:center;font-size:15px;line-height:1.6;display:flex;position:absolute;inset:0}.inspector{width:300px}.inspector .head{border-bottom:1px solid var(--line);padding:12px}.inspector .head .title{font-size:15px;font-weight:650}.inspector .head .sub{color:var(--ink-3);margin-top:2px;font-size:12px}.inspector section{border-bottom:1px solid var(--line);padding:12px}.inspector section h3{margin-bottom:8px}.field{flex-direction:column;gap:3px;margin-bottom:9px;display:flex}.field label{color:var(--ink-2);font-size:12px}.field .row{align-items:center;gap:6px;display:flex}.field input[type=text],.field input[type=number],.field select{border:1px solid var(--line-2);background:var(--panel);border-radius:6px;flex:1;min-width:0;padding:5px 7px}.field input[type=range]{flex:1}.field .unit{color:var(--ink-3);min-width:18px;font-size:12px}.readings{grid-template-columns:1fr auto;gap:4px 10px;font-size:13px;display:grid}.readings .k{color:var(--ink-2)}.readings .v{font-family:var(--mono);text-align:right}.info p{color:var(--ink);margin:0 0 8px;line-height:1.5}.formula{font-family:var(--mono);background:var(--panel-2);border:1px solid var(--line);white-space:pre-wrap;border-radius:6px;padding:7px 8px;font-size:12px;line-height:1.55}.tip{color:var(--ink-2);margin-top:8px;font-size:12px}.alert{border-radius:6px;margin:0 0 8px;padding:8px 10px;font-size:13px;line-height:1.4}.alert.warn{background:var(--warn-soft);color:var(--warn);border:1px solid #f3cf9c}.alert.bad{background:var(--bad-soft);color:var(--bad);border:1px solid #f2b8b5}.alert.good{background:var(--good-soft);color:var(--good);border:1px solid #b4dfc5}.btnrow{flex-wrap:wrap;gap:6px;display:flex}.drawer{border-top:1px solid var(--line);background:var(--panel);flex-direction:column;min-height:0;display:flex}.drawer .tabs{border-bottom:1px solid var(--line);align-items:flex-end;gap:2px;padding:4px 8px 0;display:flex}.drawer .tabs button{cursor:pointer;color:var(--ink-2);background:0 0;border:none;border-bottom:2px solid #0000;padding:6px 10px}.drawer .tabs button.on{border-bottom-color:var(--accent);color:var(--ink);font-weight:600}.code-area{font-family:var(--mono);resize:none;color:#dbe7f3;tab-size:2;background:#0f1720;border:none;outline:none;width:100%;height:100%;padding:10px 12px;font-size:13px;line-height:1.5}.serial{font-family:var(--mono);color:#9ef0a6;white-space:pre-wrap;background:#0f1720;height:100%;padding:8px 12px;font-size:12.5px;overflow:auto}.modal-back{z-index:50;background:#0a101873;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal{background:var(--panel);border-radius:12px;width:100%;max-width:760px;max-height:85vh;padding:20px 22px;overflow:auto;box-shadow:0 20px 60px #0000004d}.modal h2{margin:0 0 6px}.ex-grid{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px;margin-top:14px;display:grid}.ex-card{border:1px solid var(--line);cursor:pointer;background:var(--panel);text-align:left;border-radius:8px;padding:10px 12px}.ex-card:hover{border-color:var(--accent);background:var(--accent-soft)}.ex-card b{margin-bottom:3px;display:block}.ex-card span{color:var(--ink-2);font-size:12px;line-height:1.4}.ex-card .tag{text-transform:uppercase;letter-spacing:.06em;color:var(--accent);margin-bottom:4px;font-size:10.5px;display:inline-block}.home{background:var(--bg);min-height:100vh}.hero{background:var(--bar);color:var(--bar-ink);padding:56px 24px 64px}.hero .inner,.home .inner{max-width:1080px;margin:0 auto}.hero h1{letter-spacing:-.01em;margin:0 0 12px;font-size:clamp(28px,4vw,44px);line-height:1.1}.hero p{opacity:.8;max-width:640px;margin:0;font-size:17px;line-height:1.55}.labs{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:16px;margin-top:-36px;padding:0 24px;display:grid}.lab{background:var(--panel);box-shadow:var(--shadow);color:var(--ink);border:1px solid var(--line);border-radius:12px;flex-direction:column;gap:10px;padding:20px;text-decoration:none;transition:transform .12s,border-color .12s;display:flex}.lab:hover{border-color:var(--accent);transform:translateY(-2px)}.lab h2{margin:0;font-size:20px}.lab .unit{text-transform:uppercase;letter-spacing:.08em;color:var(--accent);font-size:11px;font-weight:650}.lab p{color:var(--ink-2);margin:0;line-height:1.5}.lab ul{color:var(--ink-2);margin:0;padding-left:18px;font-size:13px;line-height:1.6}.lab .go{color:var(--accent);margin-top:auto;font-weight:600}.home section.block{padding:40px 24px 0}.home section.block h2{margin:0 0 12px}.coverage{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;display:grid}.coverage .card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px 18px}.coverage .card h3{margin:0 0 8px;font-size:15px}.coverage .chips{flex-wrap:wrap;gap:5px;display:flex}.chip{background:var(--panel-2);border:1px solid var(--line);color:var(--ink-2);border-radius:999px;padding:2px 9px;font-size:12px}.home footer{color:var(--ink-3);padding:40px 24px 48px;font-size:12px}.machines{flex:1;min-height:0;display:flex}.machines .side{width:220px}.machines .side button{text-align:left;cursor:pointer;width:100%;color:var(--ink-2);background:0 0;border:none;border-left:3px solid #0000;padding:8px 14px;display:block}.machines .side button:hover{background:var(--panel-2)}.machines .side button.on{border-left-color:var(--accent);background:var(--accent-soft);color:var(--ink);font-weight:600}.machines .side .grp{padding:12px 14px 4px}.stage{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.stage .view{background:var(--canvas);flex:1;min-height:0;position:relative}.stage .view svg{touch-action:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;display:block}.calc{width:320px}.calc table{border-collapse:collapse;width:100%;font-size:13px}.calc td{border-bottom:1px dashed var(--line);padding:4px 0}.calc td:last-child{text-align:right;font-family:var(--mono)}.work{font-family:var(--mono);background:var(--panel-2);border:1px solid var(--line);white-space:pre-wrap;border-radius:6px;padding:8px 10px;font-size:12.5px;line-height:1.7}.kbd{font-family:var(--mono);border:1px solid var(--line-2);background:var(--panel);border-bottom-width:2px;border-radius:4px;padding:0 4px;font-size:11px}@media (max-width:1100px){.inspector,.calc{width:260px}.palette{width:196px}.topbar .brand small{display:none}}@media (max-width:820px){.workspace,.machines{flex-direction:column}.palette,.inspector,.calc,.machines .side{border:none;border-bottom:1px solid var(--line);width:100%;max-height:34vh}.canvas-wrap,.stage{min-height:50vh}.topbar{overflow-x:auto}}.speed{color:var(--bar-ink);opacity:.9;white-space:nowrap;background:#ffffff0f;border:1px solid #ffffff24;border-radius:6px;align-items:center;gap:6px;padding:3px 8px;font-size:12px;display:flex}.speed input{accent-color:#4ea1ff;width:110px}.speed .mono{font-family:var(--mono)}.seg{border:1px solid #ffffff2e;border-radius:7px;display:inline-flex;overflow:hidden}.seg button{color:var(--bar-ink);cursor:pointer;opacity:.75;background:0 0;border:none;padding:6px 12px}.seg button.on{opacity:1;background:#ffffff29}.seg.light{border-color:var(--line-2)}.seg.light button{color:var(--ink-2)}.seg.light button.on{background:var(--accent-soft);color:var(--accent)}.inp{border:1px solid var(--line-2);background:var(--panel);width:100%;font:inherit;border-radius:6px;padding:6px 8px}textarea.inp{resize:vertical;line-height:1.45}.inp.mono{font-family:var(--mono);font-size:12.5px}.qitem{border-bottom:1px solid var(--line);cursor:pointer;align-items:flex-start;gap:10px;padding:9px 12px;display:flex}.qitem:hover{background:var(--panel-2)}.qitem.on{background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent)}.qitem .qnum{font-family:var(--mono);color:var(--accent);min-width:26px;font-size:12px;font-weight:700}.qitem .qt{font-size:13px;font-weight:600}.qitem .qs{color:var(--ink-2);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.qitem .qm{color:var(--ink-3);font-size:12px;font-family:var(--mono)}.qedit{max-width:860px;margin:0 auto;padding:18px}.card{background:var(--panel);border:1px solid var(--line);border-radius:10px;margin-bottom:12px;padding:14px 16px}.card h3{margin:0 0 8px;font-size:13px}.pill{border:1px solid var(--line-2);background:var(--panel);color:var(--ink-2);border-radius:999px;align-items:center;padding:3px 10px;font-size:12px;display:inline-flex}.practice{max-width:860px;margin:0 auto;padding:16px}.practice .sec{margin:22px 0 10px;font-size:16px}.qhead{justify-content:space-between;margin-bottom:6px;display:flex}.qhead span,.mk{color:var(--ink-3);white-space:nowrap;font-size:12px}.stem{white-space:pre-wrap;margin-bottom:6px;line-height:1.55}.opts{flex-direction:column;gap:6px;margin:8px 0 12px;display:flex}.opt{border:1px solid var(--line);cursor:pointer;border-radius:8px;align-items:center;gap:8px;padding:8px 10px;display:flex}.opt.picked{border-color:var(--accent);background:var(--accent-soft)}.opt.right{border-color:var(--good);background:var(--good-soft)}.opt.wrong{border-color:var(--bad);background:var(--bad-soft)}.ppart{border-top:1px dashed var(--line);padding:10px 0}.sol{font-family:var(--mono);white-space:pre-wrap;background:var(--panel-2);border:1px solid var(--line);border-radius:6px;margin:8px 0 0 18px;padding:8px 10px;font-size:12.5px}.score{font-size:22px;font-weight:700;font-family:var(--mono);text-align:right;line-height:1}.score small{color:var(--ink-3);font-size:11px;font-weight:400;font-family:var(--sans);display:block}.paper{color:#111;background:#fff;max-width:820px;margin:20px auto 60px;padding:48px 56px;font-family:Arial,Helvetica,sans-serif;font-size:14px;box-shadow:0 4px 24px #0000001f}.paper h1{margin:6px 0;font-size:30px}.paper h2{border-bottom:2px solid #111;margin-top:28px;padding-bottom:4px;font-size:16px}.cover .cv-top{letter-spacing:.12em;font-size:12px;font-weight:700}.cv-sub{margin-bottom:18px;font-size:16px}.cv-box{border:1.5px solid #111;margin:14px 0;padding:12px}.cv-table{border-collapse:collapse;width:100%;margin:12px 0}.cv-table td{border:1px solid #999;padding:6px 8px}.cv-ins{border-top:1px solid #999;margin-top:10px;padding-top:10px;line-height:1.5}.note{color:#333;font-size:12.5px}.pq{break-inside:avoid;page-break-inside:avoid;margin:18px 0 26px}.pq-h{margin-bottom:4px;font-weight:700}.pq-h span{color:#444;font-weight:400}.popts div{margin:4px 0 4px 10px}.popts .ans{font-weight:700}.pp{break-inside:avoid;margin:10px 0 0}.pp-h{justify-content:space-between;gap:12px;display:flex}.line{border-bottom:1px solid #bbb;height:28px;margin-left:18px}.psol{white-space:pre-wrap;background:#f4f6f8;border-left:3px solid #0f6fde;margin:6px 0 0 18px;padding:6px 10px;font-family:Courier New,monospace;font-size:12.5px}.endmark{text-align:center;letter-spacing:.08em;margin-top:40px;font-size:12px;font-weight:700}@media print{@page{size:A4;margin:16mm}html,body{background:#fff!important}.topbar,.no-print,.toast{display:none!important}.app{height:auto!important;display:block!important;overflow:visible!important}.app>div{background:#fff!important;overflow:visible!important}.paper{box-shadow:none;max-width:none;margin:0;padding:0}.pg-break{break-before:page;page-break-before:always}}.menu{position:relative}.menu-pop{background:var(--panel);min-width:210px;color:var(--ink);border:1px solid var(--line);z-index:70;border-radius:8px;padding:4px;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 10px 30px #0000002e}.menu-pop button{text-align:left;cursor:pointer;width:100%;color:var(--ink);background:0 0;border:none;border-radius:6px;justify-content:space-between;gap:16px;padding:7px 10px;display:flex}.menu-pop button:hover{background:var(--accent-soft)}.menu-pop .hint{color:var(--ink-3);font-size:12px;font-family:var(--mono)}.menu-sep{background:var(--line);height:1px;margin:4px 0}
