:root{--ink:#1f1f1e;--ink2:#6f6c67;--bg:#f7f6f3;--card:#fff;--line:#e4e2de;--accent:#2160c4;--accent-soft:#e8f0fb;--ok:#2f8a5b;--warn:#b8660f;--warn-soft:#fbefe1;--bad:#c4473b;--bad-soft:#fbe9e7;color:var(--ink);background:var(--bg);font:15px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}body{margin:0}button{font:inherit;color:inherit}.muted{color:var(--ink2)}.small{font-size:13px}.row{align-items:center;gap:8px;display:flex}.between{justify-content:space-between}.app{max-width:1120px;margin:0 auto;padding:0 24px 40px}.top{border-bottom:1px solid var(--line);justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:24px;padding:20px 0;display:flex}.brand{letter-spacing:-.01em;font-size:18px;font-weight:700}.layout{grid-template-columns:minmax(0,1fr) 380px;align-items:start;gap:24px;display:grid}.left{flex-direction:column;gap:12px;min-width:0;display:flex}.right{flex-direction:column;gap:12px;display:flex;position:sticky;top:16px}.tabs{background:#ecebe7;border-radius:8px;align-self:flex-start;padding:3px;display:inline-flex}.tab{cursor:pointer;min-height:40px;color:var(--ink2);background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:8px 16px;font-weight:500;display:inline-flex}.tab.on{background:var(--card);color:var(--ink);box-shadow:0 1px 2px #00000014}.tab:focus-visible,.btn:focus-visible,.drop:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.dot{background:#cfccc6;border-radius:50%;width:7px;height:7px}.dot.ready{background:var(--ok)}.dot.loading{background:var(--accent)}.dot.error{background:var(--bad)}.drop{aspect-ratio:4/3;background:var(--card);cursor:pointer;border:1.5px dashed #c9c6c0;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:4px;width:100%;display:flex}.drop:hover,.drop.over{border-color:var(--accent);background:var(--accent-soft)}.stage{border:1px solid var(--line);background:#ecebe7;border-radius:12px;justify-content:center;display:flex;position:relative;overflow:hidden}.frame{max-width:100%;position:relative}.frame img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;width:100%;height:100%;display:block}.frame svg{touch-action:none;width:100%;height:100%;position:absolute;inset:0;overflow:visible}.pt{cursor:grab}.pt .hit{fill:#0000}.pt .key{fill:#fff;stroke:#000000a6}.pt.active .key{fill:#ffd400;stroke:#000}.pt.active{cursor:grabbing}.pt-label{color:#fff;pointer-events:none;background:#000000b8;border-radius:6px;padding:3px 8px;font-size:12px;line-height:1.4;position:absolute;top:10px;left:10px}.veil{color:var(--ink);background:#ffffffb3;place-items:center;font-weight:500;line-height:1.5;display:grid;position:absolute;inset:0}.toolbar{flex-wrap:wrap;gap:8px;display:flex}.btn{border:1px solid var(--line);background:var(--card);cursor:pointer;border-radius:8px;min-height:40px;padding:8px 14px;font-weight:500}.btn:hover:not(:disabled){background:#f1f0ed}.btn:disabled{opacity:.45;cursor:default}.btn.primary{background:var(--ink);border-color:var(--ink);color:#fff}.btn.primary:hover:not(:disabled){background:#3a3a38}.btn.ghost{color:var(--bad);background:0 0;border-color:#0000}.card{background:var(--card);border:1px solid var(--line);border-radius:12px;flex-direction:column;gap:10px;padding:16px;display:flex}.label{text-transform:uppercase;letter-spacing:.04em;color:var(--ink2);font-size:13px;font-weight:600}.tag{color:var(--ink2);background:#f0efec;border-radius:6px;padding:2px 8px;font-size:12px}.tag.ok{color:var(--ok);background:#e6f2eb}.score{align-items:baseline;gap:4px;display:flex}.score b{letter-spacing:-.03em;font-variant-numeric:tabular-nums;font-size:56px;line-height:1}.score span{color:var(--ink2);font-size:18px}.tier{font-weight:600}.parts{border-top:1px solid var(--line);grid-template-columns:1fr 1fr;padding-top:10px;display:grid}.parts div{flex-direction:column;display:flex}.parts b{font-variant-numeric:tabular-nums;font-size:20px}.parts div+div{border-left:1px solid var(--line);padding-left:12px}.notice{font-size:14px}.notice p{margin:0}.notice.error{background:var(--bad-soft);border-color:#f0c9c4}.issue{background:var(--warn-soft);color:#7a4510;border-radius:8px;padding:8px 10px;font-size:13px}.issue.block{background:var(--bad-soft);color:#8f2f26}.metrics{border-collapse:collapse;width:100%;font-size:13px}.metrics th{text-align:left;color:var(--ink2);border-bottom:1px solid var(--line);padding:0 0 6px;font-weight:500}.metrics td{vertical-align:top;border-bottom:1px solid #f0efec;padding:8px 0}.metrics tr:last-child td{border-bottom:0}.metrics th:not(:first-child),.num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums;padding-left:8px}.meter{background:#eeede9;border-radius:2px;max-width:160px;height:3px;margin-top:5px}.meter i{border-radius:2px;height:100%;display:block}.meter .good{background:var(--ok)}.meter .mid{background:#c9a227}.meter .low{background:var(--bad)}.foot{border-top:1px solid var(--line);max-width:760px;margin-top:32px;padding-top:16px}@media (width<=860px){.app{padding:0 16px 32px}.top{flex-direction:column;gap:2px;margin-bottom:16px;padding:14px 0}.layout{grid-template-columns:1fr}.right{position:static}.tabs{align-self:stretch}.tab{flex:1;justify-content:center}}@media (prefers-reduced-motion:no-preference){.btn,.tab,.drop{transition:background .15s,border-color .15s}}
