:root{--ink:#1e2228;--ink-soft:#5b636e;--fog:#e7e9ec;--panel:#fff;--line:#c8cdd4;--line-soft:#dde1e6;--focus:#2747a8;--pass:#1f7a4d;--large:#8a5a00;--fail:#b42318;--sans:"Schibsted Grotesk", system-ui, sans-serif;--mono:"IBM Plex Mono", ui-monospace, monospace;--r-sm:4px;--r-md:8px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:var(--sans);color:var(--ink);background:var(--fog);-webkit-font-smoothing:antialiased;font-size:15px;line-height:1.5}@media (prefers-color-scheme:dark){:root{--ink:#e6e8eb;--ink-soft:#9aa3ae;--fog:#14171b;--panel:#1c2026;--line:#3a414b;--line-soft:#2b3138;--focus:#8fa8ff;--pass:#5cc98f;--large:#e3b04b;--fail:#ff8a7a;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}body{background:var(--fog);margin:0}button,input{font:inherit;color:inherit}button{cursor:pointer}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}code,kbd,pre,.hex{font-family:var(--mono)}.app{gap:20px;max-width:1320px;margin:0 auto;padding:28px 24px 40px;display:grid}.top{flex-wrap:wrap;justify-content:space-between;align-items:end;gap:16px;display:flex}.brand h1{letter-spacing:-.035em;margin:0;font-size:2.6rem;font-weight:800;line-height:1}.brand p{color:var(--ink-soft);margin:6px 0 0}.top-actions{gap:8px;display:flex}.top-actions button,.code-head button{border:1px solid var(--line);background:var(--panel);border-radius:var(--r-md);padding:8px 14px;font-weight:600}.top-actions button:hover,.code-head button:hover{border-color:var(--ink-soft)}kbd{border:1px solid var(--line);border-radius:var(--r-sm);color:var(--ink-soft);border-bottom-width:2px;margin-left:6px;padding:1px 6px;font-size:.72rem}.stage{background:var(--panel);border:1px solid var(--line-soft);border-radius:var(--r-md);grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);align-items:start;gap:28px;padding:24px;display:grid}.layers{margin:0}.layers svg{width:100%;height:auto;display:block}.layer{stroke:var(--panel);stroke-width:3px;stroke-linejoin:round;cursor:pointer;transform-origin:50% 0;transition:transform .16s}.layer:hover{filter:brightness(1.06)}.layer.is-selected{stroke:var(--ink);stroke-width:2.5px}.layer:focus-visible{stroke:var(--focus);stroke-width:4px;outline:none}.layers figcaption{flex-wrap:wrap;gap:6px 14px;margin-top:14px;display:flex}.legend{color:var(--ink-soft);background:0 0;border:0;align-items:center;gap:7px;padding:2px 0;font-size:.88rem;display:inline-flex}.legend span{border-radius:50%;width:14px;height:14px;box-shadow:inset 0 0 0 1px #00000026}.legend.is-selected{color:var(--ink);font-weight:700}.controls{gap:20px;display:grid}.primary-field{align-items:center;gap:12px;font-weight:700;display:flex}.primary-field>span{min-width:64px}.primary-field code{font-size:1.05rem;font-weight:500}input[type=color]{border:1px solid var(--line);border-radius:var(--r-md);cursor:pointer;background:0 0;width:44px;height:44px;padding:0}input[type=color]::-webkit-color-swatch-wrapper{padding:3px}input[type=color]::-webkit-color-swatch{border:0;border-radius:5px}.harmony{border:0;gap:8px;margin:0;padding:0;display:grid}.harmony legend{margin-bottom:8px;padding:0;font-weight:700}.harmony small{color:var(--ink-soft)}.segmented{border:1px solid var(--line);border-radius:var(--r-md);background:var(--panel);flex-wrap:wrap;width:fit-content;max-width:100%;display:inline-flex;overflow:hidden}.segmented button{color:var(--ink-soft);background:0 0;border:0;padding:7px 12px;font-size:.88rem}.segmented button+button{border-left:1px solid var(--line)}.segmented button[aria-checked=true]{background:var(--ink);color:var(--panel);font-weight:600}.image-import{border:1.5px dashed var(--line);border-radius:var(--r-md);flex-wrap:wrap;align-items:center;gap:14px;padding:14px;display:flex}.image-import.is-dragging{border-color:var(--focus);background:color-mix(in srgb, var(--focus) 8%, transparent)}.image-import img{object-fit:cover;border-radius:var(--r-sm);width:64px;height:64px}.drop{text-align:left;background:0 0;border:0;gap:2px;width:100%;padding:0;display:grid}.drop span{color:var(--ink-soft);font-size:.88rem}.extracted{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.extracted span{color:var(--ink-soft);margin-right:2px;font-size:.85rem}.extracted button{border:2px solid var(--panel);width:26px;height:26px;box-shadow:0 0 0 1px var(--line);border-radius:50%}.link{color:var(--focus);text-underline-offset:3px;background:0 0;border:0;padding:0;font-size:.85rem;text-decoration:underline}.work{grid-template-columns:minmax(0,1fr) 300px;align-items:start;gap:20px;display:grid}.scales{background:var(--panel);border:1px solid var(--line-soft);border-radius:var(--r-md);--cols:168px repeat(11, minmax(52px, 1fr));padding:16px;overflow-x:auto}.scales-head,.scale-row{grid-template-columns:var(--cols);min-width:760px;display:grid}.scales-head{font-family:var(--mono);color:var(--ink-soft);padding-bottom:6px;font-size:.75rem}.scales-head span{padding-left:4px}.scale-row+.scale-row{margin-top:8px}.role-cell{align-content:center;gap:4px;padding-right:12px;display:grid}.role-name{font-weight:700}.role-pin{gap:2px;display:grid}.derived{color:var(--ink-soft);font-size:.78rem}.base-input{align-items:center;gap:6px;display:flex}.base-input input[type=color]{border-radius:var(--r-sm);width:26px;height:26px}.base-input input[type=color]::-webkit-color-swatch{border-radius:2px}.base-input .hex{border-radius:var(--r-sm);background:0 0;border:1px solid #0000;width:84px;padding:2px 4px;font-size:.82rem}.base-input .hex:hover,.base-input .hex:focus{border-color:var(--line);background:var(--fog)}.swatch{text-align:left;border:0;align-items:flex-end;height:68px;padding:0 0 6px 6px;display:flex;position:relative}.scale-row .swatch:nth-child(2){border-radius:var(--r-md) 0 0 var(--r-md)}.scale-row .swatch:last-child{border-radius:0 var(--r-md) var(--r-md) 0}.swatch-hex{font-family:var(--mono);opacity:.85;font-size:.68rem}.swatch.is-selected{z-index:1;box-shadow:0 0 0 3px var(--panel), 0 0 0 5px var(--ink);border-radius:var(--r-sm)!important}.anchor{background:currentColor;border-radius:50%;width:8px;height:8px;position:absolute;top:7px;right:7px}.inspector{background:var(--panel);border:1px solid var(--line-soft);border-radius:var(--r-md);padding:16px;position:sticky;top:16px}.chip{border-radius:var(--r-md);flex-direction:column;justify-content:flex-end;height:120px;padding:12px 14px;font-size:1.15rem;font-weight:700;display:flex}.chip small{opacity:.85;font-size:.8rem;font-weight:500}.formats{gap:2px;margin:14px 0 0;display:grid}.formats div{grid-template-columns:52px 1fr;align-items:center;display:grid}.formats dt{color:var(--ink-soft);font-size:.75rem;font-weight:600}.formats dd{margin:0}.formats button{text-align:left;border-radius:var(--r-sm);width:100%;font-family:var(--mono);background:0 0;border:0;padding:5px 6px;font-size:.82rem}.formats button:hover{background:var(--fog)}.inspector h3,.contrast h3{margin:18px 0 8px;font-size:.95rem}.against{gap:6px;margin:0;padding:0;list-style:none;display:grid}.against li{grid-template-columns:34px 1fr auto 72px;align-items:center;gap:8px;font-size:.88rem;display:grid}.sample{border-radius:var(--r-sm);height:28px;box-shadow:inset 0 0 0 1px var(--line-soft);place-items:center;font-weight:800;display:grid}.ratio{font-family:var(--mono);font-size:.82rem}.rating{text-align:right;font-size:.75rem;font-weight:700}.rating-pass{color:var(--pass)}.rating-large{color:var(--large)}.rating-fail{color:var(--fail)}.panels{background:var(--panel);border:1px solid var(--line-soft);border-radius:var(--r-md)}.tabs{border-bottom:1px solid var(--line-soft);gap:4px;padding:0 12px;display:flex;overflow-x:auto}.tabs button{color:var(--ink-soft);white-space:nowrap;background:0 0;border:0;border-bottom:2px solid #0000;margin-bottom:-1px;padding:14px 12px 12px;font-weight:600}.tabs button[aria-selected=true]{color:var(--ink);border-bottom-color:var(--ink)}.panel{padding:20px}.hint{color:var(--ink-soft);max-width:70ch;margin:0 0 14px}.table-wrap{overflow-x:auto}.contrast table{border-collapse:collapse;width:100%;min-width:620px;font-size:.85rem}.contrast th,.contrast td{text-align:left;border-bottom:1px solid var(--line-soft);padding:6px 8px}.contrast thead th{color:var(--ink-soft);white-space:nowrap;font-weight:600}.contrast td{font-family:var(--mono)}.contrast td small{font-family:var(--sans);margin-left:8px;font-size:.72rem;font-weight:700}.cell-pass small{color:var(--pass)}.cell-large small{color:var(--large)}.cell-fail{color:var(--ink-soft)}.cell-fail small{color:var(--fail)}.th-chip{vertical-align:-1px;border-radius:2px;width:12px;height:12px;margin-right:6px;display:inline-block;box-shadow:inset 0 0 0 1px #00000026}.pairs{flex-wrap:wrap;gap:6px;margin:0;display:flex}.pair{border-radius:var(--r-sm);padding:6px 10px;font-size:.85rem;font-weight:700}.preview-wrap{gap:14px;display:grid}.preview{background:var(--p-bg);color:var(--p-text);border-radius:var(--r-md);border:1px solid var(--p-border);transition:background .2s;overflow:hidden}.pv-bar{background:var(--p-surface);border-bottom:1px solid var(--p-border);align-items:center;gap:24px;padding:12px 20px;display:flex}.pv-bar nav{color:var(--p-muted);flex:1;gap:16px;font-size:.9rem;display:flex}.pv-active{color:var(--p-primary-ink);font-weight:700}.pv-avatar{background:var(--p-accent);width:30px;height:30px;color:var(--p-on-accent);border-radius:50%;place-items:center;font-size:.72rem;font-weight:700;display:grid}.pv-body{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:16px;padding:20px;display:grid}.pv-card{background:var(--p-surface);border:1px solid var(--p-border);border-radius:10px;gap:14px;padding:18px;display:grid}.pv-card-head{justify-content:space-between;gap:12px;display:flex}.pv-card h4{margin:0;font-size:1.05rem}.pv-card p{color:var(--p-muted);margin:2px 0 0;font-size:.88rem}.pv-badge{background:var(--p-primary-soft);color:var(--p-primary-ink);border-radius:999px;align-self:start;padding:3px 10px;font-size:.75rem;font-weight:700}.pv-card .pv-amount{color:var(--p-text);letter-spacing:-.02em;margin:0;font-size:1.9rem;font-weight:800}.pv-field{gap:6px;font-size:.85rem;font-weight:600;display:grid}.pv-field input{background:var(--p-bg);border:1px solid var(--p-border);color:var(--p-text);border-radius:6px;padding:8px 10px;font-weight:400}.pv-actions{flex-wrap:wrap;gap:8px;display:flex}.pv-btn{border:1px solid #0000;border-radius:6px;padding:8px 14px;font-size:.88rem;font-weight:600}.pv-btn-primary{background:var(--p-primary);color:var(--p-on-primary)}.pv-btn-accent{background:var(--p-accent);color:var(--p-on-accent)}.pv-btn-ghost{border-color:var(--p-border);color:var(--p-text);background:0 0}.pv-alerts{align-content:start;gap:10px;display:grid}.pv-alert{border:1px solid;border-radius:8px;margin:0;padding:12px 14px;font-size:.88rem;font-weight:500}.pv-success{background:var(--p-success-bg);border-color:var(--p-success-border);color:var(--p-success-ink)}.pv-warning{background:var(--p-warning-bg);border-color:var(--p-warning-border);color:var(--p-warning-ink)}.pv-danger{background:var(--p-danger-bg);border-color:var(--p-danger-border);color:var(--p-danger-ink)}.export{gap:14px;display:grid}.export-controls{flex-wrap:wrap;align-items:center;gap:12px 20px;display:flex}.check{align-items:center;gap:8px;font-size:.9rem;display:inline-flex}.code{border:1px solid var(--line-soft);border-radius:var(--r-md);overflow:hidden}.code-head{background:var(--fog);font-family:var(--mono);justify-content:space-between;align-items:center;padding:8px 10px 8px 14px;font-size:.82rem;display:flex}.code-head div{gap:6px;display:flex}.code-head button{font-family:var(--sans);padding:4px 10px;font-size:.82rem}.code pre{max-height:360px;margin:0;padding:14px;font-size:.8rem;line-height:1.55;overflow:auto}.foot{color:var(--ink-soft);font-size:.85rem}.foot p{max-width:80ch;margin:0}.foot a{color:inherit}.toast{background:var(--ink);color:var(--fog);border-radius:var(--r-md);pointer-events:none;padding:9px 16px;font-size:.88rem;font-weight:600;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}.toast:empty{display:none}@media (width<=1000px){.stage,.work{grid-template-columns:1fr}.inspector{position:static}.pv-body{grid-template-columns:1fr}}@media (width<=600px){.app{gap:16px;padding:20px 16px 32px}.stage,.panel{padding:16px}.scales{padding:12px}.brand h1{font-size:2.1rem}.pv-bar nav{display:none}.pv-bar{justify-content:space-between}}@media (prefers-reduced-motion:reduce){*{transition:none!important}}
