:root{--bg:#f4f6f1;--panel:#fff;--panel-2:#fafbf7;--line:#dde1d6;--line2:#c6ccbc;--ink:#1f2620;--muted:#6a7568;--blue:#2f6fb0;--blue-strong:#245a91;--teal:#0f7d84;--ok:#2f6fb0;--warn:#b07d1a;--danger:#c0392b;--mono:"SF Mono", ui-monospace, "JetBrains Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}html{background:var(--bg)}body{background:var(--bg);color:var(--ink);font-family:var(--mono);letter-spacing:.01em;margin:0;font-size:16px;line-height:1.55}::selection{color:var(--ink);background:#cfe0f2}.wrap{max-width:1040px;margin:0 auto;padding:1.5rem 1.2rem 4.5rem}.topbar{border:1px solid var(--line2);background:var(--panel);border-radius:4px;align-items:center;gap:.9rem;margin-bottom:1.2rem;padding:.7rem 1rem;display:flex}.topbar h1{color:var(--teal);letter-spacing:.03em;margin:0;font-size:1.2rem;font-weight:600}.topbar h1:before{content:"▎";color:var(--blue);margin-right:.4rem}.topbar .badge{color:var(--blue);border:1px solid var(--line2);border-radius:3px;padding:.15rem .6rem;font-size:.82rem}.topbar .badge:before{content:"[";color:var(--muted)}.topbar .badge:after{content:"]";color:var(--muted)}.topbar .auto{margin-left:auto}section{margin-top:1.2rem}.charts h3,.logs h3{color:var(--muted);text-transform:uppercase;letter-spacing:.12em;margin:0 0 .6rem;font-size:.92rem;font-weight:600}.charts h3:before,.logs h3:before{content:"> ";color:var(--blue)}.muted{color:var(--muted)}.hidden{display:none!important}.cubes{grid-template-columns:repeat(3,1fr);gap:.75rem;display:grid}.cubes .cube{background:var(--panel);border:1px solid var(--line2);border-radius:4px;padding:.9rem 1rem;position:relative}.cubes .cube:before{content:"";border-top:2px solid var(--blue);border-left:2px solid var(--blue);width:11px;height:11px;position:absolute;top:-1px;left:-1px}.cubes .cube h2{color:var(--teal);letter-spacing:.04em;align-items:center;gap:.55rem;margin:0 0 .65rem;font-size:1.05rem;display:flex}.cubes .cube h2 .stale{color:#fff;background:var(--warn);text-transform:uppercase;border-radius:3px;padding:.08rem .4rem;font-size:.68rem}.gauge{margin:.55rem 0}.gauge .row{justify-content:space-between;align-items:baseline;display:flex}.gauge .k{color:var(--muted);text-transform:uppercase;letter-spacing:.07em;font-size:.88rem}.gauge .v{font-variant-numeric:tabular-nums;font-size:1.1rem;font-weight:600}.gauge .v.green{color:var(--ok)}.gauge .v.amber{color:var(--warn)}.gauge .v.red{color:var(--danger)}.gauge .bar{border:1px solid var(--line);background:#eceee7;border-radius:2px;height:10px;margin-top:1.3rem;position:relative;overflow:visible}.gauge .zone-band{background:color-mix(in srgb, var(--ok) 12%, transparent);border-left:1px solid color-mix(in srgb, var(--ok) 30%, transparent);border-right:1px solid color-mix(in srgb, var(--ok) 30%, transparent);pointer-events:none;position:absolute;top:0;bottom:0}.gauge .zone-tick{border-left:1px dashed color-mix(in srgb, var(--ok) 50%, transparent);pointer-events:none;width:0;position:absolute;top:-3px;bottom:-3px}.gauge .zone-label{color:var(--ok);font-variant-numeric:tabular-nums;pointer-events:none;font-size:.6rem;line-height:1;position:absolute;top:-15px;transform:translate(-50%)}.gauge .fill{background-image:repeating-linear-gradient(90deg,currentColor 0 3px,transparent 3px 5px);border-radius:2px;height:100%;transition:width .5s steps(20,end);position:absolute;top:0;left:0}.gauge .fill.green{color:var(--ok)}.gauge .fill.amber{color:var(--warn)}.gauge .fill.red{color:var(--danger)}.chip{color:var(--muted);border:1px solid var(--line2);letter-spacing:.03em;border-radius:3px;align-items:center;padding:.18rem .6rem;font-size:.85rem;display:inline-flex}.chip:before{content:"●";color:var(--line2);margin-right:.4rem}.chip.on{color:#fff;background:var(--blue);border-color:var(--blue)}.chip.on:before{color:#cfe0f2}.chip.run{color:#fff;background:var(--warn);border-color:var(--warn)}.chip.run:before{content:"▶";color:#fff;margin-right:.35rem}.chip.toggle{cursor:pointer;-webkit-user-select:none;user-select:none;transition:all .12s}.chip.toggle:hover{border-color:var(--blue)}.summary{background:var(--panel);border:1px solid var(--line2);border-radius:4px;flex-wrap:wrap;align-items:center;gap:1rem;padding:.75rem 1rem;font-size:1rem;display:flex}.summary .k{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-right:.5rem;font-size:.85rem}.summary .v{font-variant-numeric:tabular-nums;color:var(--teal);font-weight:600}.summary .spacer{flex:1}.controls{flex-wrap:wrap;gap:.6rem;display:flex}.controls .btn{font-family:var(--mono);letter-spacing:.02em;color:var(--blue-strong);background:var(--panel);border:1px solid var(--line2);cursor:pointer;border-radius:3px;padding:.6rem 1rem;font-size:.95rem;transition:all .12s}.controls .btn:before{content:"$ ";color:var(--muted)}.controls .btn:hover{color:#fff;background:var(--blue);border-color:var(--blue)}.controls .btn:hover:before{color:#cfe0f2}.controls .btn.alt{color:var(--teal)}.controls .btn.alt:hover{color:#fff;background:var(--teal);border-color:var(--teal)}.controls .btn.ghost{color:var(--muted)}.controls .btn.ghost:before{content:"! "}.controls .btn.ghost:hover{color:#fff;background:var(--danger);border-color:var(--danger)}.charts{flex-direction:column;gap:.75rem;display:flex}.charts .chart{background:var(--panel);border:1px solid var(--line2);border-radius:4px;padding:.9rem}.charts .chart .placeholder{color:var(--muted);text-align:center;border:1px dashed var(--line2);border-radius:3px;padding:2.4rem 0;font-size:.92rem}.charts .chart .placeholder:before{content:"[ "}.charts .chart .placeholder:after{content:" ]"}.charts .chart .chart-canvas{width:100%;height:220px;position:relative}.gpiobench h3{color:var(--muted);text-transform:uppercase;letter-spacing:.12em;margin:0 0 .6rem;font-size:.92rem;font-weight:600}.gpiobench h3:before{content:"> ";color:var(--blue)}.gpiobench .pin-grid{grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:.5rem;display:grid}.gpiobench .pin-tile{background:var(--panel);border:1px solid var(--line2);box-sizing:border-box;border-radius:4px;flex-direction:column;align-items:center;gap:.35rem;height:128px;padding:.6rem .65rem;display:flex}.gpiobench .pin-led{background:var(--line2);border:2px solid var(--line2);border-radius:50%;width:14px;height:14px;transition:all .15s}.gpiobench .pin-led.on{background:var(--blue);border-color:var(--blue);box-shadow:0 0 6px color-mix(in srgb, var(--blue) 50%, transparent)}.gpiobench .pin-num{color:var(--ink);font-variant-numeric:tabular-nums;font-size:.82rem;font-weight:600}.gpiobench .pin-tag{color:#fff;background:var(--teal);text-transform:uppercase;letter-spacing:.05em;border-radius:3px;min-height:1.2em;padding:.05rem .35rem;font-size:.66rem;line-height:1.2}.gpiobench .pin-tag-slot{align-items:center;height:1.2em;display:flex}.gpiobench .pin-btn{font-family:var(--mono);letter-spacing:.02em;color:var(--blue-strong);background:var(--bg);border:1px solid var(--line2);cursor:pointer;border-radius:3px;width:100%;margin-top:auto;padding:.3rem .6rem;font-size:.74rem;transition:all .12s}.gpiobench .pin-btn:before{content:"$ ";color:var(--muted)}.gpiobench .pin-btn:hover{color:#fff;background:var(--blue);border-color:var(--blue)}.gpiobench .pin-btn:hover:before{color:#cfe0f2}.logs .logbox{font-family:var(--mono);background:var(--panel-2);color:var(--ink);border:1px solid var(--line2);white-space:pre-wrap;border-radius:4px;flex-direction:column;height:300px;margin:0;padding:.75rem .9rem;font-size:.9rem;line-height:1.6;display:flex;overflow-y:auto}.logs .logbox::-webkit-scrollbar{width:12px}.logs .logbox::-webkit-scrollbar-track{background:var(--panel-2)}.logs .logbox::-webkit-scrollbar-thumb{background:var(--line2);border-radius:2px}.logs .logbox .li{display:block}.logs .logbox .li:before{content:"│ ";color:var(--line2)}.logs .logbox .li .t{color:var(--blue)}.logs .logbox .li .mod{color:var(--teal);font-size:.78rem;font-weight:600}.logs .logbox .li .mod:before{content:"[";color:var(--muted);font-weight:400}.logs .logbox .li .mod:after{content:"]";color:var(--muted);font-weight:400}.logs .logbox .li.info .m{color:var(--ink)}.logs .logbox .li.warn .m{color:var(--warn)}.logs .logbox .li.err .m{color:var(--danger)}@media (width<=640px){.cubes,.charts{grid-template-columns:1fr}}