:root{--bg:#fafafa;--panel:#fff;--paper:#fff;--well:#eee;--fg:#1a1a1a;--ink:#111;--ink-filter:none;--muted:#777;--border:#ddd;--accent:#2563eb;--on-accent:#fff;--selected:color-mix(in srgb, var(--accent) 10%, var(--panel));--shadow:#0000001f;--ok:#16a34a;--ok-bg:#dcfce7;--ok-fg:#166534;--warn:#b45309;--warn-border:#d97706;--warn-bg:#fef3c7;--warn-tint:#fffbeb;--warn-fg:#92400e;--bad:#dc2626;--bad-bg:#fee2e2;--bad-fg:#991b1b;--note:#7c3aed;--note-bg:#f3e8ff;--tag-bg:#e5e7eb;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--fg);background:var(--bg);font-family:system-ui,-apple-system,sans-serif;font-size:14px}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#161616;--panel:#1f1f1f;--paper:#1a1a1a;--well:#262626;--fg:#e6e6e6;--ink:#e5e5e5;--ink-filter:invert(.9);--muted:#9a9a9a;--border:#3a3a3a;--accent:#5b93ff;--on-accent:#fff;--selected:color-mix(in srgb, var(--accent) 22%, var(--panel));--shadow:#00000080;--ok:#4ade80;--ok-bg:#14532d;--ok-fg:#bbf7d0;--warn:#fbbf24;--warn-border:#f59e0b;--warn-bg:#3f2a0a;--warn-tint:#2a2210;--warn-fg:#fde68a;--bad:#f87171;--bad-bg:#4a1414;--bad-fg:#fecaca;--note:#a78bfa;--note-bg:#2e1065;--tag-bg:#333;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#161616;--panel:#1f1f1f;--paper:#1a1a1a;--well:#262626;--fg:#e6e6e6;--ink:#e5e5e5;--ink-filter:invert(.9);--muted:#9a9a9a;--border:#3a3a3a;--accent:#5b93ff;--on-accent:#fff;--selected:color-mix(in srgb, var(--accent) 22%, var(--panel));--shadow:#00000080;--ok:#4ade80;--ok-bg:#14532d;--ok-fg:#bbf7d0;--warn:#fbbf24;--warn-border:#f59e0b;--warn-bg:#3f2a0a;--warn-tint:#2a2210;--warn-fg:#fde68a;--bad:#f87171;--bad-bg:#4a1414;--bad-fg:#fecaca;--note:#a78bfa;--note-bg:#2e1065;--tag-bg:#333;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}canvas.ink{filter:var(--ink-filter)}*{box-sizing:border-box}body{margin:0}.app{grid-template-rows:auto auto 1fr;height:100vh;display:grid}.topbar,.stages{border-bottom:1px solid var(--border);background:var(--panel);align-items:center;gap:8px;padding:8px 12px;display:flex}.spacer{flex:1}.project-name{font:inherit;background:0 0;border:1px solid #0000;border-radius:4px;padding:4px 6px}.project-name:hover,.project-name:focus{border-color:var(--border)}button,.button{font:inherit;border:1px solid var(--border);background:var(--panel);cursor:pointer;border-radius:4px;padding:4px 10px}button.theme .icon{text-align:center;vertical-align:-.2em;width:1.2em;height:1.15em;margin-right:.2em;line-height:1.15em;display:inline-block;overflow:hidden}button:hover,.button:hover{border-color:var(--accent)}.stages button.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}button.link{text-align:left;color:inherit;background:0 0;border:none;padding:0}button.x{color:var(--muted);background:0 0;border:none;padding:0 4px}.panel{padding:12px;overflow:auto}.busy{color:var(--accent)}.error{background:var(--bad-bg);color:var(--bad-fg);white-space:pre-wrap;border-radius:4px;margin-bottom:8px;padding:8px}.muted{color:var(--muted)}.stage-layout{grid-template-columns:220px 1fr;gap:12px;height:100%;min-height:0;display:grid}.step{grid-template-columns:1fr 300px;gap:12px;min-width:0;min-height:0;display:grid}.step .view{flex-direction:column;min-width:0;min-height:0;display:flex}.step .params{overflow:auto}.sources ul{margin:8px 0;padding:0;list-style:none}.sources li{border-radius:4px;align-items:baseline;gap:6px;padding:4px 6px;display:flex}.sources li.active{background:var(--selected)}.sources li .link{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.preview canvas{border:1px solid var(--border);background:var(--paper);max-width:100%;height:auto}.params{border-left:1px solid var(--border);padding-left:12px}.param-list{flex-direction:column;gap:8px;display:flex}.param-list h4{margin:8px 0 0}.param-list label{flex-direction:column;gap:2px;display:flex}.param-list label.row{flex-direction:row;align-items:center;gap:6px}.param-list code{color:var(--muted);font-size:12px}.tabs{align-items:center;gap:6px;margin-bottom:8px;display:flex}.tabs button.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}.error-inline{color:var(--bad-fg)}.stack{max-width:100%;display:inline-block;position:relative}.stack canvas{max-width:100%;height:auto;display:block}.stack svg{touch-action:none;width:100%;height:100%;position:absolute;inset:0}.quad{fill:color-mix(in srgb, var(--accent) 8%, transparent);stroke:var(--accent);stroke-width:.3%;vector-effect:non-scaling-stroke;stroke-dasharray:6 4}.quad.corrected{stroke:var(--warn-border);stroke-dasharray:none}.handle{fill:var(--paper);stroke:var(--accent);stroke-width:3px;vector-effect:non-scaling-stroke;cursor:grab}.handle:hover{fill:var(--accent)}.preview.scroll{border:1px solid var(--border);background:var(--well);flex:1;min-height:0;overflow:auto}.preview.scroll .stack canvas{border:none;max-width:none}.tabs label.inline{color:var(--muted);align-items:center;gap:4px;font-size:12px;display:inline-flex}.tabs input[type=number]{width:3em}.overlay{font-family:system-ui,sans-serif}.overlay.tool-split{cursor:crosshair}.overlay .word{fill:none;opacity:.25;stroke-dasharray:4 4}.overlay .glyph rect{fill:#0000;cursor:pointer}.overlay .glyph:hover rect{fill:color-mix(in srgb, var(--accent) 15%, transparent)}.overlay .glyph.selected rect{fill:color-mix(in srgb, var(--accent) 25%, transparent);stroke:var(--fg)}.overlay .glyph text{pointer-events:none;font-weight:600}.overlay .glyph.unassigned rect{stroke:var(--muted);stroke-dasharray:3 3}.overlay .glyph.unassigned text{fill:var(--muted)}.overlay .ignored{fill:color-mix(in srgb, var(--bad) 15%, transparent);stroke:var(--bad);stroke-dasharray:3 3}.overlay .cut{stroke:var(--bad)}.transcript .detected{color:var(--ok)}.overlay .cut.auto{fill:none;stroke:var(--warn);stroke-dasharray:4 3;pointer-events:none}.param-list textarea{resize:vertical;width:100%;font:13px/1.4 ui-monospace,monospace}.param-list input[type=text]{font:inherit;border:1px solid var(--border);border-radius:4px;padding:3px 6px}.issues,.corrections{margin:0;padding-left:16px;font-size:12px}.issues li{color:var(--warn)}.corrections li{align-items:center;gap:4px;display:flex}.vectorize{grid-template-columns:220px 1fr 300px;gap:12px;height:100%;min-height:0;display:grid}.vectorize .view{flex-direction:column;min-width:0;min-height:0;display:flex}.glyph-grid{flex-wrap:wrap;align-content:flex-start;gap:8px;display:flex;overflow:auto}.glyph-grid .cell{flex-direction:column;align-items:center;gap:2px;width:84px;padding:6px;display:flex}.glyph-grid .cell.warn{border-color:var(--warn-border)}.glyph-grid .cell small.bad{color:var(--bad)}.diff-layer{pointer-events:none;opacity:.75;image-rendering:pixelated;position:absolute;inset:0;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.diff-layer.missed{background:var(--bad)}.diff-layer.extra{background:var(--warn)}.glyph-grid .cell-canvas{justify-content:center;align-items:center;height:64px;display:flex}.glyph-preview{max-width:64px;max-height:64px}.cell-label{font-weight:600}.glyph-detail>.tabs{flex-wrap:wrap;row-gap:4px}.glyph-detail{flex-direction:column;flex:1;min-height:0;display:flex}.glyph-detail .preview.scroll{background:var(--paper)}.glyph-detail .stack canvas{image-rendering:pixelated}.glyph-detail .draw-controls{margin-top:-4px}.glyph-detail .draw-controls input[type=range]{min-width:120px}.stroke-strip{flex-wrap:wrap;align-items:center;gap:4px 14px;margin-bottom:6px;font-size:12px;display:flex}.stroke-strip>span{white-space:nowrap;align-items:center;gap:4px;display:inline-flex}.swatch{border-radius:50%;flex:none;width:10px;height:10px;display:inline-block}.stroke-list .swatch{margin-right:2px}.param-list .issue{color:var(--warn)}.normalize{grid-template-columns:220px 1fr 300px;gap:12px;height:100%;min-height:0;display:grid}.normalize .view{flex-direction:column;min-width:0;min-height:0;display:flex}.glyph-grid .cell.norm{width:auto;min-width:84px}.glyph-grid .cell.norm svg{display:block}.glyph-grid .cell.selected{border-color:var(--accent);background:var(--selected)}.param-list select{font:inherit;padding:3px 6px}.space{grid-template-columns:1fr 300px;gap:12px;height:100%;min-height:0;display:grid}.space .view{flex-direction:column;min-width:0;min-height:0;display:flex;overflow:auto}.specimen-input{resize:vertical;width:100%;margin-bottom:8px;font:13px/1.4 ui-monospace,monospace}.preview.specimen{background:var(--paper);flex:none;max-height:50%;padding:8px}.specimen-line{display:block}.space-tables{grid-template-columns:1fr 1fr;gap:16px;margin-top:12px;display:grid}.space-tables h4{margin:4px 0}table.metrics{border-collapse:collapse;width:100%;font-size:12px}table.metrics th,table.metrics td{text-align:left;border-bottom:1px solid var(--border);white-space:nowrap;padding:2px 6px}table.metrics td.ch{font-size:14px;font-weight:600}table.metrics input[type=number]{width:4.5em;font:inherit;border:1px solid var(--border);border-radius:3px;padding:1px 4px}table.metrics input.overridden{border-color:var(--warn-border);background:var(--warn-tint)}.pairs{font-size:12px;line-height:1.6}.select{grid-template-columns:1fr 300px;gap:12px;height:100%;min-height:0;display:grid}.select .view{flex-direction:column;min-width:0;min-height:0;display:flex}.select-list{flex:1;overflow:auto}.char-row{border-bottom:1px solid var(--border);padding:8px 0}.char-head{align-items:baseline;gap:10px;margin-bottom:4px;display:flex}.char-big{min-width:1.2em;font-size:22px;font-weight:700}.char-instances{flex-wrap:wrap;gap:8px;display:flex}.instance{border:1px solid var(--border);background:var(--paper);border-radius:6px;flex-direction:column;align-items:center;gap:4px;padding:6px;display:flex}.instance.default{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 20%, transparent)}.instance.excluded{opacity:.45}.instance.excluded svg{filter:grayscale()}.instance.unused{border-style:dashed}.instance-tag{color:var(--muted);font-size:11px}.instance.default .instance-tag{color:var(--accent);font-weight:600}.instance-actions{gap:4px;display:flex}button.small,.link.small{padding:2px 6px;font-size:11px}.output{grid-template-columns:1fr 300px;gap:12px;height:100%;min-height:0;display:grid}.output .view{flex-direction:column;min-width:0;min-height:0;display:flex;overflow:auto}.font-preview{background:var(--paper);border:1px solid var(--border);white-space:pre-wrap;word-break:break-word;margin-bottom:8px;padding:16px 20px;line-height:1.5}.font-preview.small{font-size:28px}.demo-stage{border:1px solid var(--border);background:var(--paper);background-image:linear-gradient(45deg, var(--border) 25%, transparent 25%, transparent 75%, var(--border) 75%), linear-gradient(45deg, var(--border) 25%, transparent 25%, transparent 75%, var(--border) 75%);background-position:0 0,8px 8px;background-size:16px 16px;flex:1;min-height:0;overflow:auto}.demo-frame{line-height:0;display:inline-block}.demo-frame svg{display:block}.demo .param-list input[type=color]{border:1px solid var(--border);background:0 0;width:32px;height:24px;padding:0}.demo .param-list select{font:inherit}.ok{color:var(--ok)}.workspaces{border-bottom:1px solid var(--border);background:var(--panel);align-items:center;gap:8px;padding:6px 12px;display:flex}.workspaces>button.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}.status-strip{color:var(--muted);gap:14px;font-size:12px;display:flex}.status-strip .ok{color:var(--ok)}.status-strip .warn{color:var(--warn)}.pipeline-menu{position:relative}.pipeline-menu .menu{z-index:10;background:var(--panel);border:1px solid var(--border);min-width:160px;box-shadow:0 6px 20px var(--shadow);border-radius:6px;flex-direction:column;gap:2px;padding:4px;display:flex;position:absolute;top:100%;right:0}.pipeline-menu .menu button{text-align:left;border:none}.pipeline-menu .menu button.active{background:var(--selected)}.sources-ws{grid-template-columns:250px 1fr;gap:12px;height:100%;min-height:0;display:grid}.image-list{flex-direction:column;gap:8px;padding-right:4px;display:flex;overflow:auto}.image-list .add{text-align:center}.text-entry{text-align:left;flex-direction:column;align-items:flex-start;gap:2px;display:flex}.text-entry.active{border-color:var(--accent);background:var(--selected)}.image-card{border:1px solid var(--border);background:var(--panel);cursor:pointer;border-radius:6px;gap:8px;padding:6px;display:flex}.image-card.active{border-color:var(--accent);background:var(--selected)}.image-card .thumb{background:var(--well);border-radius:4px;flex:none;justify-content:center;align-items:center;width:72px;height:54px;display:flex;overflow:hidden}.image-card .thumb img{object-fit:cover;width:100%;height:100%}.image-card .meta{flex-direction:column;gap:2px;min-width:0;font-size:12px;display:flex}.image-card .name{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.image-card .status.ok{color:var(--ok)}.image-card .status.warn{color:var(--warn)}.image-card label.inline{color:var(--muted);align-items:center;gap:4px;display:flex}.ws-main{flex-direction:column;min-width:0;min-height:0;display:flex}.ws-main>.step{flex:1;min-height:0}.tabs.steps{margin-bottom:8px}.text-view{grid-template-columns:1fr 320px;gap:16px;display:grid;overflow:auto}.text-view h3{margin:0 0 4px}.text-page{margin:10px 0}.text-page-head{align-items:baseline;gap:8px;margin-bottom:4px;display:flex}.text-page pre.suggested{border:1px solid var(--border);background:var(--panel);white-space:pre-wrap;-webkit-user-select:all;user-select:all;border-radius:6px;margin:0;padding:8px 10px;font:14px/1.5 ui-monospace,monospace}.image-card .kind{background:var(--tag-bg);border-radius:3px;padding:0 5px;font-size:11px}.image-card .kind.transcribed{background:var(--ok-bg);color:var(--ok-fg)}.image-card .kind.free{background:var(--warn-bg);color:var(--warn-fg)}.coverage-grid{flex-wrap:wrap;gap:4px;margin:6px 0;display:flex}.cov{border-radius:4px;flex-direction:column;align-items:center;width:26px;padding:2px 0;font-size:13px;font-weight:600;line-height:1.1;display:inline-flex}.cov small{color:var(--muted);font-size:9px;font-weight:400}.cov.ok{background:var(--ok-bg)}.cov.low{background:var(--warn-bg)}.cov.none{background:var(--bad-bg)}.glyphs-ws{grid-template-columns:150px 1fr 300px;gap:12px;height:100%;min-height:0;display:grid}.char-nav{flex-direction:column;min-height:0;display:flex}.char-list{grid-template-columns:1fr 1fr;align-content:start;gap:4px;display:grid;overflow:auto}.char-item{justify-content:space-between;align-items:baseline;padding:4px 8px;display:flex}.char-item.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}.char-item.active small{color:color-mix(in srgb, var(--on-accent) 80%, transparent)}.char-item.missing{color:var(--muted);border-style:dashed}.char-item .char-big{font-size:18px}.instance-strip{flex:none;gap:8px;padding:4px 0 8px;display:flex;overflow-x:auto}.instance-strip .instance{cursor:pointer}.instance-strip .instance.selected{outline:2px solid var(--accent)}.compare{flex-wrap:wrap;align-content:flex-start;gap:12px;display:flex;overflow:auto}.compare-cell{border:1px solid var(--border);background:var(--paper);cursor:pointer;border-radius:6px;flex-direction:column;align-items:center;padding:8px;display:flex}.compare-cell.selected{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 20%, transparent)}.compare-cell.excluded{opacity:.45}.glyph-grid.overview{overflow:auto}.param-list label.overridden>span{color:var(--warn)}.param-list label>span{align-items:center;gap:4px;display:flex}.param-list label>span .inline{color:var(--muted);align-items:center;gap:3px;font-size:11px;font-weight:400;display:inline-flex}.glyphs-ws .ws-main .glyph-detail{flex:1;min-height:0}.pair-editor{border:1px solid var(--border);background:var(--panel);border-radius:6px;margin:8px 0;padding:6px 8px}.pair-preview{max-width:700px}.overlay .glyph.status-auto text{font-weight:500}.label-editor{flex-direction:column;gap:6px;display:flex}.label-editor input[type=text]{width:4em;font-size:18px}.suggestions{flex-wrap:wrap;gap:4px;display:flex}.suggestions button.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}.char-item.unknown{border-color:var(--bad);color:var(--bad)}.badge{border-radius:3px;margin-left:4px;padding:0 4px;font-size:10px;display:inline-block}.badge.auto{background:var(--warn-bg);color:var(--warn)}.badge.confirmed{background:var(--ok-bg);color:var(--ok)}.status-strip button.link{padding:0;font-size:12px}.review{flex-direction:column;flex:1;min-height:0;display:flex}.review-body{grid-template-columns:1fr 1fr;gap:16px;display:grid;overflow:auto}.review-glyph{border:1px solid var(--border);background:var(--paper);border-radius:8px;flex-direction:column;align-items:center;gap:8px;padding:12px;display:flex}.review-guess{font-size:18px}.review-examples{flex-direction:column;gap:6px;display:flex}.overlay.rules rect{fill:color-mix(in srgb, var(--accent) 18%, transparent);stroke:color-mix(in srgb, var(--accent) 60%, transparent);stroke-width:1px;vector-effect:non-scaling-stroke}.step.transcribe .view{flex-direction:column;min-height:0;display:flex}.step.transcribe .view>.preview.scroll{flex:50%;min-height:120px}.transcript{border-top:1px solid var(--border);flex-direction:column;flex:0 45%;min-height:140px;margin-top:6px;padding-top:6px;display:flex}.transcript>.tabs{flex-wrap:wrap;row-gap:4px}.transcript-lines{flex-direction:column;gap:6px;min-height:0;padding:4px 2px;display:flex;overflow:auto}.transcript-line{border:1px solid var(--border);background:var(--panel);border-radius:6px;grid-template-columns:90px 1fr;align-items:start;gap:8px;padding:4px 6px;display:grid}.transcript-line.warn{border-color:var(--warn-border)}.transcript-line .line-head{flex-direction:column;gap:2px;padding-top:4px;font-size:11px;display:flex}.transcript-line .count.ok{color:var(--ok)}.transcript-line .count.warn{color:var(--warn);font-weight:600}.transcript-line .line-body{flex-direction:column;gap:4px;min-width:0;display:flex}.ribbon{flex-wrap:wrap;align-items:flex-end;gap:2px 10px;min-height:44px;display:flex}.ribbon-word{align-items:flex-end;gap:2px;display:inline-flex}.ribbon .cell{border:1px solid #0000;border-bottom:3px solid var(--border);background:var(--paper);font:inherit;cursor:pointer;border-radius:4px;flex-direction:column;align-items:center;gap:1px;padding:2px 3px;line-height:1;display:inline-flex}.ribbon .cell canvas{image-rendering:auto}.ribbon .cell .cell-char{font:600 12px/1 ui-monospace,monospace}.ribbon .cell.status-auto{border-bottom-color:var(--warn-border);border-bottom-style:dashed}.ribbon .cell.status-auto .cell-char{color:var(--warn)}.ribbon .cell.status-confirmed{border-bottom-color:var(--ok)}.ribbon .cell.status-unknown{border-bottom-color:var(--bad)}.ribbon .cell.status-unknown .cell-char{color:var(--bad)}.ribbon .cell.suspicious{border-color:var(--note);background:var(--note-bg)}.ribbon .cell.suspicious .cell-char{color:var(--note)}.ribbon .cell.selected{border-color:var(--accent);background:var(--selected);box-shadow:0 0 0 1px var(--accent)}.ribbon .cell.missing{cursor:default;border-bottom-color:var(--bad);opacity:.7;border-bottom-style:dotted}.ribbon .cell-ghost{background:repeating-linear-gradient(45deg, var(--bad-bg), var(--bad-bg) 3px, var(--paper) 3px, var(--paper) 6px);width:14px;height:28px;display:block}.transcript-line textarea{resize:none;field-sizing:content;width:100%;min-height:1.6em;font:15px/1.4 ui-monospace,monospace}.transcript-line textarea.draft{color:var(--warn-fg);background:var(--warn-tint);border-style:dashed}.status-strip button.link.suspicious,.label-editor .suspicious{color:var(--note)}.badge.suspicious{background:var(--note-bg);color:var(--note)}.swatch{vertical-align:-.1em;border:1px solid var(--border);border-radius:50%;width:.9em;height:.9em;display:inline-block}
