:root{--bg:#f4f5f7;--surface:#fff;--border:#e3e6eb;--text:#1b2330;--muted:#6b7385;--sidebar:#151b26;--sidebar-text:#c9cfda;--sidebar-active:#2b3445;--primary:#2f6feb;--primary-hover:#245ccb;--success:#1e8e4e;--danger:#c8372d;--select:#e8f0fe;--g-text:#3b3b3b;--g-dim:#717171;--g-hover:#f2f2f2;--g-selected:#e4e6f1}*{box-sizing:border-box}body,html{margin:0;height:100%}body{font-family:Segoe UI,system-ui,sans-serif;font-size:13.3px;color:var(--text);background:var(--bg)}button,input,select{font:inherit;color:inherit}.app{display:flex;flex-direction:column;height:100vh}.topbar{display:flex;align-items:center;gap:10px;background:var(--sidebar);color:var(--sidebar-text);padding:10px 20px;flex:none}.brand{color:#fff;font-size:17px;font-weight:600;margin-right:14px}.crumb{display:flex;align-items:center;gap:4px}.crumb-sep{color:#6f798c;font-size:16px;padding:0 4px}.crumb select{background:var(--sidebar-active);color:#fff;border:1px solid #2b3445;border-radius:7px;padding:6px 9px;max-width:280px;cursor:pointer}.crumb select:focus{outline:none;border-color:var(--primary)}.crumb .add{background:transparent;color:var(--sidebar-text);border:1px solid #2b3445;border-radius:7px;width:30px;height:30px;cursor:pointer}.crumb .add:hover{background:#1f2735;color:#fff}.branch-name{margin-left:auto;color:#7d8699;font-family:Consolas,monospace;font-size:12px}.main{display:flex;flex:1 1;min-height:0;gap:16px;padding:18px 20px}.side{width:300px;flex:none;gap:8px}.section,.side{display:flex;flex-direction:column;min-height:0}.section.open{flex:1 1}.section-head{border:none;background:transparent;color:var(--g-text);font-weight:700;font-size:11.3px;padding:4px 2px;text-align:left;cursor:pointer;letter-spacing:.3px}.section-body{background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:auto;flex:1 1;min-height:0}.file-row,.graph-row{display:flex;align-items:center;gap:8px;height:26px;padding:0 10px;cursor:pointer;color:var(--g-text);white-space:nowrap}.file-row:hover,.graph-row:hover{background:var(--g-hover)}.file-row.selected,.graph-row.selected{background:var(--g-selected)}.file-name{flex:1 1}.file-name,.file-where{overflow:hidden;text-overflow:ellipsis}.file-where{color:var(--g-dim)}.status-letter{font-weight:700;width:14px;text-align:right}.st-A{color:#587c0c}.st-D{color:#ad0707}.st-M{color:#895503}.st-C{color:#0078d4}.graph-row{gap:0;padding:0 6px}.graph-row svg{flex:none}.graph-msg{flex:1 1;min-width:40px;padding-left:4px}.graph-msg,.pill{overflow:hidden;text-overflow:ellipsis}.pill{color:#fff;border-radius:9px;padding:1px 8px;font-size:10.7px;margin-left:4px;max-width:130px}.card{background:var(--surface);border:1px solid var(--border);border-radius:10px;flex:1 1;min-width:0;display:flex;flex-direction:column;padding:18px 20px;gap:12px}.detail-title{font-size:18.7px;font-weight:600;margin:0}.muted{color:var(--muted)}.row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.spacer{flex:1 1}.chip{border-radius:9px;padding:2px 9px;font-size:11.3px;font-weight:600;white-space:nowrap}.chip-pending{background:#fff4d6;color:#8a5a00}.chip-approved{background:#dff5e7;color:#17683a}.chip-rejected{background:#fde3e1;color:#9c2a21}.chip-sent{background:#e3ecfd;color:#1e4fb5}.chip-neutral{background:#eef0f3;color:#4a5263}.chip-add{background:#dff5e7;color:#17683a}.chip-del{background:#fde3e1;color:#9c2a21}.segmented{display:inline-flex;background:#e7eaee;border-radius:8px;padding:3px;gap:2px}.segment{border:none;border-radius:6px;padding:5px 14px;background:transparent;color:var(--muted);cursor:pointer}.segment.on{background:var(--surface);color:var(--text);font-weight:600}.segment:disabled{color:#a8aebb;cursor:default}.doc{flex:1 1;overflow:auto;min-height:0}.doc iframe{width:100%;height:100%;border:none;background:var(--bg)}.lines{width:100%;border-collapse:collapse;font-size:14px}.lines td{vertical-align:top;padding:2px 0}.gutter{width:34px;text-align:right;padding-right:10px!important;color:#9aa1b0;font-family:Consolas,monospace;font-size:12px;white-space:pre}.gutter.two{width:68px}.line{white-space:pre-wrap}.line.add{background:#dff5e7;color:#17683a}.line.del{background:#fde3e1;color:#9c2a21;text-decoration:line-through}.field{background:#fff4d6;color:#8a5a00;border-radius:4px;padding:0 2px}.origin{font-size:12.5px}.origin b{color:#0078d4;font-family:Consolas,monospace;font-weight:600}.qa{margin:0 0 14px}.qa-cat{color:var(--muted);font-size:11.3px;letter-spacing:1px;margin:16px 0 6px}.qa-cat,.qa-q{font-weight:600}.qa-q{margin-bottom:2px}.qa-a{white-space:pre-wrap}.qa-a.empty{color:var(--muted);font-style:italic}.qa.add{background:#dff5e7}.qa.del{background:#fde3e1}.queue{width:290px;flex:none;display:flex;flex-direction:column;min-height:0}.queue-list{overflow:auto;flex:1 1;gap:6px}.list-card,.queue-list{display:flex;flex-direction:column}.list-card{background:var(--surface);border:1px solid var(--border);border-radius:9px;padding:10px 12px;cursor:pointer;gap:4px}.list-card:hover{border-color:#c9d3e6}.list-card.selected{border:2px solid var(--primary);background:#fafcff;padding:9px 11px}.card-title{font-weight:600}.btn{background:var(--surface);border:1px solid var(--border);border-radius:7px;padding:7px 14px;cursor:pointer}.btn:hover{background:#f0f2f5}.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:600}.btn-primary:hover{background:var(--primary-hover)}.modal-back{position:fixed;inset:0;background:rgba(21,27,38,.45);display:flex;align-items:center;justify-content:center;z-index:10}.modal{background:var(--surface);border-radius:10px;padding:22px 24px;width:380px;display:flex;flex-direction:column;gap:14px}.empty-state{color:var(--muted);padding:12px}.banner-error{background:#fde3e1;color:#9c2a21;border-radius:8px;padding:8px 14px}.login{max-width:360px;margin:12vh auto;border:1px solid var(--border);border-radius:10px;padding:24px;display:flex;flex-direction:column;gap:12px}.login,.login input{background:var(--surface)}.login input{border:1px solid var(--border);border-radius:7px;padding:7px 9px}.login input:focus{outline:none;border-color:var(--primary)}