:root{--ui-font-px: 12px;--bg: #f4f7fb;--panel-bg: #ffffff;--ink: #1f2a36;--muted: #8a98a8;--line: #d7e0ea;--accent: #2b7cff;--accent-ink: #ffffff;--radius: 8px;--shadow: 0 1px 3px rgba(20, 40, 70, .08);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--ink)}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--bg)}#app{height:100vh}.grid{--col-left: 340px;--row-top: auto;--row-bottom: 210px;--gutter: 10px;display:grid;grid-template-columns:var(--col-left) var(--gutter) 1fr;grid-template-rows:var(--row-top) var(--gutter) 1fr var(--gutter) var(--row-bottom);grid-template-areas:"left  vsplit  top" "left  vsplit  hsplit-t" "left  vsplit  center" "left  vsplit  hsplit-b" "left  vsplit  loss";padding:10px}.left-col{grid-area:left;display:flex;flex-direction:column;gap:10px;min-height:0;min-width:0}.run-panel{flex:0 0 auto;display:grid;grid-template-columns:1fr 1fr;gap:10px;overflow:auto}.left-splitter{flex:0 0 auto;height:8px;cursor:row-resize;position:relative}.left-splitter:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:40px;height:3px;border-radius:2px;background:var(--line);transition:background .12s}.left-splitter:hover:after,.left-splitter.dragging:after{background:var(--accent)}.run-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.run-title-row .speed-slider{flex:1;min-width:110px}.run-title-row .speed-slider .slider-value{min-width:40px}.speed-slider.disabled{opacity:.45}.slider.disabled{opacity:.45;pointer-events:none}.btn.btn-go{background:#2fbf71;border-color:#2fbf71;color:#fff}.btn.btn-stop{background:#e0413a;border-color:#e0413a;color:#fff}.run-title{font-size:16px;font-weight:700;color:var(--ink)}.run-left .dropdown.full-width{width:100%}.run-left,.run-right{display:flex;flex-direction:column;gap:6px;min-width:0}.run-right{border-left:1px solid var(--line);padding-left:10px}.sl-error{color:#a13a2a}.modal-overlay{position:fixed;inset:0;background:#141e2d59;z-index:100;display:flex;align-items:center;justify-content:center}.modal-box{background:var(--panel-bg);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 6px 24px #14284640;padding:14px 16px;display:flex;flex-direction:column;gap:10px;min-width:280px}.modal-filename{border:1px solid var(--line);border-radius:6px;padding:6px 8px;font-size:calc(var(--ui-font-px) + 1px)}.btn-secondary{background:#fff;color:var(--ink);border-color:var(--line)}.dataset-controls .sub-box{min-width:0}.examples-count-row{display:flex;align-items:center;gap:8px}.examples-count-row .slider{flex:1;min-width:0}.counts-label{font-size:calc(var(--ui-font-px) - 1px);color:var(--ink);white-space:nowrap}.counts-total{color:var(--accent);font-weight:700}.regen-row{display:flex;align-items:center;gap:8px}.btn-compact{padding:4px 10px}.num-input{border:1px solid var(--line);border-radius:6px;padding:4px 6px;width:86px;font-size:var(--ui-font-px);font-variant-numeric:tabular-nums}.num-input:disabled{opacity:.5}.range-track{position:relative;height:14px;margin:2px 7px 0}.range-track:before{content:"";position:absolute;left:-7px;right:-7px;top:5px;height:4px;border-radius:2px;background:var(--line)}.range-fill{position:absolute;top:5px;height:4px;background:var(--accent);border-radius:2px}.range-thumb{position:absolute;top:0;width:14px;height:14px;margin-left:-7px;border-radius:50%;background:#fff;border:2px solid var(--accent);cursor:ew-resize;touch-action:none}.range-thumb:hover{background:#eef4ff}.splitter{position:relative;z-index:5}.splitter.vertical{grid-area:vsplit;cursor:col-resize}.splitter.horizontal{cursor:row-resize}.splitter:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:var(--line);border-radius:2px;transition:background .12s}.splitter.vertical:after{width:3px;height:40px}.splitter.horizontal:after{height:3px;width:40px}.splitter:hover:after,.splitter.dragging:after{background:var(--accent)}body.resizing{user-select:none}.panel{background:var(--panel-bg);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:10px 12px;min-height:0;min-width:0}.top-panel{grid-area:top;overflow:auto}.title-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}.title-row .app-title{margin:0}.top-panel.collapsed{padding:5px 12px}.top-panel.collapsed .title-row{margin-bottom:0}.top-panel.collapsed .app-title{font-size:14px}.collapse-btn{border:1px solid var(--line);background:#fff;color:var(--muted);border-radius:6px;padding:2px 8px;font-size:calc(var(--ui-font-px) - 1px);cursor:pointer;white-space:nowrap}.collapse-btn:hover{border-color:var(--accent);color:var(--accent)}.app-title{font-size:18px;margin:0 0 8px}.control-row{display:flex;flex-wrap:nowrap;gap:12px;align-items:flex-start}.fieldset{border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;display:flex;flex-direction:column;gap:8px;min-width:150px}.fieldset-title{font-size:calc(var(--ui-font-px) - 1px);text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:600}.labeled{display:flex;flex-direction:column;gap:4px}.fieldset-row{display:flex;flex-direction:row;flex-wrap:wrap;gap:14px;align-items:flex-start}.fieldset-row .slider{width:150px}.fieldset-row .slider-short{width:105px}.checkbox{display:flex;align-items:center;gap:6px;font-size:var(--ui-font-px);cursor:pointer}.checkbox input{cursor:pointer}.caption,.hint{font-size:calc(var(--ui-font-px) - 1px);color:var(--muted)}.control-note{font-size:var(--ui-font-px);color:var(--ink)}.radio-group{display:inline-flex;flex-wrap:wrap;gap:4px}.radio-btn{border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:6px;padding:4px 9px;font-size:var(--ui-font-px);cursor:pointer}.radio-btn:hover:not(:disabled){border-color:var(--accent)}.radio-btn.selected{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.radio-btn:disabled{opacity:.45;cursor:not-allowed}.radio-cards{display:grid;grid-template-columns:repeat(2,minmax(130px,1fr));gap:6px}.radio-card{text-align:left;border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:7px;padding:6px 9px;cursor:pointer;display:flex;flex-direction:column;gap:2px}.radio-card:hover{border-color:var(--accent)}.radio-card.selected{border-color:var(--accent);background:#eef4ff;box-shadow:inset 0 0 0 1px var(--accent)}.radio-card-title{font-weight:600;font-size:13px}.radio-card-desc{font-size:11px;color:var(--muted);line-height:1.25}.slider{display:flex;flex-direction:column;gap:3px;font-size:var(--ui-font-px)}.slider-head{display:flex;justify-content:space-between;gap:8px}.slider-value{color:var(--accent);font-variant-numeric:tabular-nums}.slider input[type=range]{width:100%}.slider.inline{flex-direction:row;align-items:center;gap:8px}.slider.inline>span:first-child{white-space:nowrap}.slider.inline input[type=range]{flex:1;width:auto;min-width:50px}.slider.inline .slider-value{min-width:52px;text-align:right;white-space:nowrap}.btn{border:1px solid var(--accent);background:var(--accent);color:var(--accent-ink);border-radius:6px;padding:6px 12px;font-size:calc(var(--ui-font-px) + 1px);cursor:pointer}.btn:hover{filter:brightness(1.05)}.dropdown{border:1px solid var(--line);border-radius:6px;padding:5px 8px;font-size:calc(var(--ui-font-px) + 1px);background:#fff}.dataset-panel{flex:0 0 auto;display:flex;flex-direction:column;gap:8px;overflow:auto}.test-set-panel{flex:1;min-height:0;display:flex;flex-direction:column;gap:6px;overflow:hidden}.panel-header{font-weight:600;font-size:14px}.panel-header-row{display:flex;align-items:center;gap:12px;margin-bottom:6px}.dataset-controls{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0}.sort-row{display:flex;align-items:center;gap:6px}.sort-btn{padding:2px 8px;font-size:calc(var(--ui-font-px) - 1px);background:#fff;color:var(--ink);border-color:var(--line)}.sort-btn.active{background:#eef4ff;border-color:var(--accent);color:var(--accent)}.sort-btn:disabled{opacity:.45;cursor:not-allowed}.out-btn{margin-left:auto}.test-title-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.refresh-btn{padding:0 6px;font-size:var(--ui-font-px);line-height:1.3;background:#fff;color:var(--muted);border-color:var(--line)}.refresh-btn:disabled{opacity:.35;cursor:default}.refresh-btn.stale{color:var(--accent-ink);background:var(--accent);border-color:var(--accent)}.control-pair{display:grid;grid-template-columns:2fr 3fr;gap:12px;align-items:start}.control-pair>:nth-child(2){border-left:1px solid var(--line);padding-left:12px}.control-pair>.checkbox{align-self:center}.view-row{display:flex;align-items:center;gap:8px;font-size:var(--ui-font-px);color:var(--ink)}.view-row .dropdown{flex:1}.vocab-tokens{display:flex;flex-wrap:wrap;gap:3px;align-items:center;min-height:16px}.tok.copyable{cursor:pointer}.tok.copyable:hover{outline:1px solid var(--accent);outline-offset:1px}.tok.copied{outline:2px solid #2fbf71;outline-offset:1px}.task-options{border-style:dashed}.slider.inline.narrow{max-width:220px}.grok-row{display:flex;gap:6px;align-items:center}.text-input{flex:1;min-width:0;border:1px solid var(--line);border-radius:6px;padding:4px 7px;font-family:ui-monospace,monospace;font-size:calc(var(--ui-font-px) - 1px)}.grok-rand-btn,.grok-clear-btn{padding:4px 8px}.grok-clear-btn{background:#fff;color:var(--muted);border-color:var(--line)}.grok-status.error{color:#c0392b}.examples{overflow-y:auto;flex:1;font-size:calc(var(--ui-font-px) + 1px)}.examples-header{display:flex;align-items:center;gap:6px;padding:2px 0 3px;font-size:calc(var(--ui-font-px) - 1px);font-weight:600;color:var(--muted);border-bottom:1px solid var(--line);margin-bottom:2px;position:sticky;top:0;background:var(--panel-bg)}.examples-header .head-right{margin-left:auto}.example-row{display:flex;align-items:center;gap:6px;padding:2px 0}.seq{display:inline-flex;gap:2px}.tok.char{font-family:ui-monospace,monospace;min-width:12px;text-align:center}.tok.square{width:14px;height:14px;border-radius:3px;display:inline-block}.tok.wrong{outline:2px solid #e0413a;outline-offset:-1px;border-radius:2px}.tok.char.wrong{color:#e0413a;font-weight:700}.arrow{color:var(--muted)}.ex-index{color:var(--muted);font-family:ui-monospace,monospace;font-size:calc(var(--ui-font-px) - 1px);min-width:34px;text-align:right}.ex-index.all-right{color:#1f7a4d}.ex-index.has-wrong{color:#e0413a}.class-tag{margin-left:auto;font-size:calc(var(--ui-font-px) - 2px);font-weight:600;padding:1px 6px;border-radius:999px}.class-tag.balanced{color:#1f7a4d;background:#e3f6ec}.class-tag.unbalanced{color:#a13a2a;background:#fbe7e3}.class-tag.ok{outline:1.5px solid #1f7a4d}.class-tag.bad{outline:1.5px solid #e0413a}.demo-controls{display:flex;flex-direction:column;gap:6px}.demo-select-row{display:flex;align-items:center;gap:6px}.demo-select{flex:1;min-width:0}.demo-cycle{padding:4px 8px;background:#fff;color:var(--ink);border-color:var(--line)}.demo-name{font-weight:600;font-size:calc(var(--ui-font-px) + 1px)}.demo-desc{font-size:calc(var(--ui-font-px) - 1px);color:var(--muted);line-height:1.45}.demo-hint{font-size:calc(var(--ui-font-px) - 1px);color:#a13a2a}.demo-actions{display:flex;align-items:center;gap:10px;margin-top:2px}.apply-setup-btn{white-space:nowrap}.train-demo-btn{margin-top:2px;background:#2fbf71;border-color:#2fbf71;color:#fff;font-weight:600}.train-demo-btn.training{background:#e0413a;border-color:#e0413a}.demo-row{cursor:pointer;border-left:3px solid transparent;padding-left:4px}.demo-row:hover{background:#f4f7fb}.demo-row.selected{background:#eef4ff;border-left-color:var(--accent)}.demo-row.invalid{opacity:.5}.demo-invalid-tag{margin-left:auto;font-size:calc(var(--ui-font-px) - 2px);font-style:italic;color:var(--muted)}.network-view{grid-area:center;padding:0;position:relative}.network-canvas{width:100%;height:100%;display:block}.run-row{display:flex;gap:6px;align-items:center}.bottom-row{display:flex;gap:10px;min-height:0;min-width:0}.bottom-splitter{flex:0 0 auto;width:8px;align-self:stretch;cursor:col-resize;position:relative}.bottom-splitter:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:3px;height:40px;border-radius:2px;background:var(--line);transition:background .12s}.bottom-splitter:hover:after,.bottom-splitter.dragging:after{background:var(--accent)}.status-panel{flex:none;width:260px;display:flex;flex-direction:column;gap:4px;overflow:auto}.status-section{margin-top:4px}.status-section-title{font-size:calc(var(--ui-font-px) - 2px);text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:600;border-bottom:1px solid var(--line);margin-bottom:3px;width:100%}.status-items{display:grid;grid-template-columns:1fr;gap:1px 12px;font-size:calc(var(--ui-font-px) - 1px);color:var(--ink);line-height:1.45}.status-items.two-col{grid-template-columns:1fr 1fr}.status-big{font-size:calc(var(--ui-font-px) + 3px);font-weight:700;font-variant-numeric:tabular-nums}.status-dim{color:var(--muted)}.status-line{font-size:calc(var(--ui-font-px) - 1px);color:var(--ink);line-height:1.3}.status-phase{font-weight:600}.status-phase.forward{color:#2b7cff}.status-phase.backward{color:#ff6b35}.status-phase.complete{color:#2fbf71}.status-phase.idle{color:var(--muted);font-weight:400}.history-panel{flex:none;aspect-ratio:1;height:100%;display:flex;flex-direction:column;gap:4px;padding:8px 10px}.history-head{display:flex;align-items:center;justify-content:space-between;gap:6px}.history-canvas{flex:1;min-height:0;width:100%;display:block}.loss-host{flex:1;min-width:0;display:flex}.loss-panel{flex:1;min-width:0;display:flex;flex-direction:column;overflow:hidden;position:relative}.loss-panel.collapsed{padding:6px 12px}.loss-panel.collapsed .panel-header-row{margin-bottom:0}.loss-panel.collapsed .collapse-btn{margin-left:auto}.reset-zoom-btn{padding:3px 9px;font-size:calc(var(--ui-font-px) - 1px);margin-left:8px}.plot-hint{position:absolute;top:32px;left:50%;transform:translate(-50%);background:#1f2a36eb;color:#fff;font-size:11px;padding:5px 10px;border-radius:6px;pointer-events:none;opacity:0;transition:opacity .15s;z-index:6;white-space:nowrap}.plot-hint.visible{opacity:1}.loss-canvas{width:100%;flex:1;min-height:0;display:block}.legend{font-size:calc(var(--ui-font-px) - 1px);color:var(--muted);margin-left:auto}.legend .dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin:0 3px 0 8px;vertical-align:middle}
