:root{color-scheme:light;--brand: #1a5dad;--brand-2: #4489da;--brand-deep: #154c8e;--brand-darker: #10396a;--brand-hover: #2175d9;--brand-shadow: #0b294b;--brand-shadow-hover: #0e325d;--brand-light: #c4daf3;--brand-wash: #eaf1fb;--brand-fg: #1a5dad;--slate: #455a64;--slate-deep: #263238;--cta: #ff9b00;--cta-deep: #e08600;--cta-ink: #222222;--spark: #fdf500;--bg: #ffffff;--bg-2: #f5f5f5;--bg-3: #eaeaea;--ink: #222222;--ink-strong: #111111;--ink-soft: #5a6b7b;--ink-faint: #8a97a3;--line: #e2e6ea;--line-strong: #cfd6dd;--topbar-bg: rgba(255, 255, 255, .9);--paper: var(--bg);--paper-2: #eef2f7;--surface: var(--bg);--accent: #1a5dad;--accent-deep: #154c8e;--accent-wash: #eaf1fb;--ok: #1f7a44;--ok-wash: #e3f0e6;--ok-line: #a9d4b8;--warn: #9a6708;--warn-wash: #f5ead2;--warn-line: #e3c48f;--err: #c12f23;--err-wash: #f8e1de;--err-line: #e7b0aa;--err-deep: #7a201a;--info-line: #b9d2f0;--del-fg: #a8362b;--del-bg: #f6ddd7;--del-ring: rgba(168, 54, 43, .12);--ins-fg: #1c7340;--ins-bg: #dcefe1;--ins-ring: rgba(28, 115, 64, .12);--zone-mark: var(--brand);--zone-mark-halo: rgba(255, 255, 255, .95);--zone-mark-edge: rgba(16, 28, 40, .55);--zone-veil: rgba(16, 28, 40, .5);--radius: 3px;--radius-card: 5px;--radius-pill: 30px;--sans: "Source Sans Pro", system-ui, -apple-system, sans-serif;--body: "Open Sans", system-ui, -apple-system, sans-serif;--mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--shadow: 0 1px 2px rgba(16, 57, 106, .05), 0 4px 16px rgba(16, 57, 106, .08);--shadow-lg: 0 10px 40px rgba(16, 57, 106, .14);--shadow-card: 0 0 0 1px rgba(16, 57, 106, .04), 0 6px 20px rgba(16, 57, 106, .08);--shadow-btn: 0 2px 0 0 var(--brand-shadow);--shadow-btn-hover: 0 2px 5px 0 var(--brand-shadow-hover)}html[data-theme=dark]{color-scheme:dark;--brand-fg: #6aa5e8;--brand-light: #2a4a74;--brand-wash: #142740;--bg: #0e1622;--bg-2: #141f2e;--bg-3: #1b2939;--ink: #dbe5f0;--ink-strong: #f3f7fc;--ink-soft: #98aabf;--ink-faint: #67798e;--line: #223247;--line-strong: #31465f;--topbar-bg: rgba(13, 21, 33, .92);--paper-2: #17273a;--surface: #121d2b;--accent: #6aa5e8;--accent-deep: #8db9ee;--accent-wash: #142740;--ok: #4db878;--ok-wash: #0f2a1c;--ok-line: #23543a;--warn: #d9a13a;--warn-wash: #2f2410;--warn-line: #6a5220;--err: #e2635a;--err-wash: #351613;--err-line: #6b2d28;--info-line: #2d4d75;--del-fg: #f08b7f;--del-bg: #3d1b16;--del-ring: rgba(240, 139, 127, .28);--ins-fg: #5ec98d;--ins-bg: #123122;--ins-ring: rgba(94, 201, 141, .28);--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 4px 16px rgba(0, 0, 0, .35);--shadow-lg: 0 10px 40px rgba(0, 0, 0, .5);--shadow-card: 0 0 0 1px rgba(255, 255, 255, .03), 0 6px 20px rgba(0, 0, 0, .35)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--body);background:var(--bg);color:var(--ink);font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}#root{position:relative;z-index:1}a{color:inherit;text-decoration:none}h1,h2,h3{margin:0;font-family:var(--sans);font-weight:600;letter-spacing:0;line-height:1.2;color:var(--ink)}.eyebrow{display:inline-block;font-family:var(--sans);font-size:12px;font-weight:600;letter-spacing:.02em;color:var(--brand-fg)}.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}.btn{display:inline-flex;align-items:center;gap:8px;font-family:var(--sans);font-size:14px;font-weight:600;letter-spacing:0;padding:10px 20px;border-radius:var(--radius);border:2px solid var(--brand);background:var(--brand);color:#fff;cursor:pointer;box-shadow:var(--shadow-btn);transition:background .15s ease,color .15s ease,border-color .15s ease,box-shadow .15s ease,transform .05s ease}.btn:hover{background:var(--brand-hover);border-color:var(--brand-hover);box-shadow:var(--shadow-btn-hover)}.btn:active{transform:translateY(1px);box-shadow:0 1px 0 0 var(--brand-shadow)}.btn:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}.btn-accent{background:var(--brand);border-color:var(--brand-fg)}.btn-accent:hover{background:var(--brand-hover);border-color:var(--brand-hover)}.btn-cta{background:var(--cta);border-color:var(--cta);color:var(--cta-ink);box-shadow:0 2px 0 0 var(--cta-deep)}.btn-cta:hover{background:#ffac26;border-color:#ffac26;box-shadow:0 2px 6px #e0860080}.btn-ghost{background:transparent;color:var(--brand-fg);border-color:var(--brand-fg);box-shadow:none}.btn-ghost:hover{background:var(--brand);color:#fff;border-color:var(--brand-fg);box-shadow:none}.field{display:flex;flex-direction:column;gap:6px}.field>label{font-family:var(--sans);font-size:13px;font-weight:600;letter-spacing:0;color:var(--ink-soft)}.input,.select{font-family:var(--body);font-size:14px;color:var(--ink);background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);padding:11px 13px;width:100%;transition:border-color .15s ease,box-shadow .15s ease}.input:focus,.select:focus{outline:none;border-color:var(--brand-fg);box-shadow:0 0 0 3px var(--accent-wash)}.input::placeholder{color:var(--ink-faint)}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-card);box-shadow:var(--shadow-card)}.card-pad{padding:24px}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;padding:14px 28px;background:var(--topbar-bg);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);box-shadow:0 1px 12px #10396a0f}.topbar:after{content:"";position:absolute;left:0;bottom:-1px;height:2px;width:120px;background:var(--brand)}.brand{display:flex;align-items:center;gap:11px}.brand-emblem{flex:none;display:block}.brand-name{font-family:var(--sans);font-weight:700;font-size:20px;letter-spacing:.06em;color:var(--brand-fg)}.brand-divider{width:1px;height:20px;background:var(--line-strong)}.brand-sub{font-family:var(--sans);font-size:12.5px;letter-spacing:.01em;color:var(--ink-soft)}.topbar-right{display:flex;align-items:center;gap:16px}.user-email{font-family:var(--mono);font-size:12px;color:var(--ink-soft)}.theme-toggle{display:inline-flex;align-items:center;gap:2px;padding:2px;border:1px solid var(--line);border-radius:var(--radius-pill);background:var(--bg-2)}.theme-btn{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border:none;border-radius:50%;background:transparent;color:var(--ink-faint);cursor:pointer;transition:color .15s ease,background .15s ease,box-shadow .15s ease}.theme-btn:hover{color:var(--brand-fg)}.theme-btn.on{background:var(--surface);color:var(--brand-fg);box-shadow:var(--shadow)}.main{max-width:1170px;margin:0 auto;padding:40px 28px 80px}.shell-ws{height:100vh;height:100dvh;display:flex;flex-direction:column;overflow:hidden;overflow:clip}.shell-ws .topbar{flex:none;padding:8px 20px}.main-ws{flex:1;min-height:0;display:flex;flex-direction:column;width:100%}.ws-head{flex:none;display:flex;align-items:center;gap:14px;min-height:46px;padding:0 16px;border-bottom:1px solid var(--line);background:var(--bg)}.ws-head>*{flex:none}.ws-back{white-space:nowrap}.ws-title{font-size:17px;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ws-title-btn{font:inherit;color:inherit;background:none;border:none;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:2px 6px;margin:-2px 0;border-radius:var(--radius);cursor:text}.ws-title-btn:hover{background:var(--brand-wash)}.ws-title-input{font-family:var(--sans);font-size:17px;font-weight:600;color:var(--ink);background:var(--surface);border:1px solid var(--brand-fg);border-radius:var(--radius);padding:3px 8px;min-width:200px;flex:0 1 460px}.ws-title-input:focus{outline:none;box-shadow:0 0 0 3px var(--accent-wash)}.ws-title-err{color:var(--err);font-size:12.5px;white-space:nowrap}.ws-owner{font-size:12.5px;white-space:nowrap}.ws-head-side{margin-left:auto;display:flex;align-items:center;align-self:stretch;gap:14px;min-width:0}.ws-head-side .tabs{border-bottom:none;align-self:stretch;overflow-x:visible}.ws-head-side .tab{display:inline-flex;align-items:center;height:100%;padding-top:0;padding-bottom:0;margin-bottom:0}.ws-head-side .report-actions{flex-wrap:nowrap}.ws-scroll{flex:1;min-height:0;overflow-y:auto;padding:24px 28px 60px}.ws-inner{width:100%;max-width:1170px;margin:0 auto}.ws-inner.section,.ws-inner>.section:first-child{margin-top:0}.ws-report{flex:1;min-height:0;display:flex;flex-direction:column}.ws-report .tab-panel{flex:1;min-height:0;overflow-y:auto;padding:24px 28px 60px}.ws-report .tab-panel--fill{overflow:hidden;padding:10px 12px 12px}.tab-panel--fill .zones-wrap,.tab-panel--fill .txt-wrap{height:100%}.ws-export-error{flex:none;margin:8px 12px 0}@media (max-width: 860px){.ws-head{gap:10px;flex-wrap:wrap;padding:6px 12px}.ws-owner{display:none}.ws-head-side{margin-left:0;flex:1 1 100%;align-self:auto;justify-content:flex-end;flex-wrap:wrap}.ws-head-side .tab{padding:8px 12px}.ws-scroll,.ws-report .tab-panel{padding:16px 14px 40px}}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:28px;padding-bottom:18px;border-bottom:1px solid var(--line)}.page-head h1{font-size:32px;font-weight:300;margin-top:6px}.badge{display:inline-flex;align-items:center;gap:7px;font-family:var(--sans);font-size:12px;font-weight:600;letter-spacing:0;padding:4px 11px;border-radius:var(--radius-pill);border:1px solid transparent}.badge-queued{background:var(--paper-2);color:var(--ink-soft);border-color:var(--line-strong)}.badge-running{background:var(--brand-wash);color:var(--brand-fg);border-color:var(--info-line)}.badge-done{background:var(--ok-wash);color:var(--ok);border-color:var(--ok-line)}.badge-error{background:var(--err-wash);color:var(--err);border-color:var(--err-line)}.pulse{width:7px;height:7px;border-radius:50%;background:currentColor;animation:pulse 1.1s ease-in-out infinite}@keyframes pulse{0%,to{opacity:.3;transform:scale(.8)}50%{opacity:1;transform:scale(1.15)}}.dropzones{display:grid;grid-template-columns:1fr 1fr;gap:16px}.dropzone{position:relative;border:1.5px dashed var(--line-strong);border-radius:var(--radius-card);background:var(--paper-2);padding:26px 18px;text-align:center;cursor:pointer;transition:border-color .15s ease,background .15s ease}.dropzone:hover,.dropzone.drag{border-color:var(--brand-fg);background:var(--brand-wash)}.dropzone.filled{border-style:solid;border-color:var(--ok);background:var(--ok-wash)}.dropzone input[type=file]{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer}.dz-tag{font-family:var(--sans);font-size:12.5px;font-weight:600;letter-spacing:0;color:var(--ink-soft);margin-bottom:8px}.dz-name{font-family:var(--mono);font-size:12.5px;word-break:break-all;color:var(--ink)}.dz-hint{font-size:13px;color:var(--ink-faint)}.upload-grid{display:grid;grid-template-columns:220px minmax(0,1fr) auto;gap:16px;align-items:end;margin-top:18px}@media (max-width: 720px){.upload-grid{grid-template-columns:1fr;align-items:stretch}}.rows{display:flex;flex-direction:column}.row-item{position:relative;display:grid;grid-template-columns:1fr auto auto auto;align-items:center;gap:18px;padding:16px 18px;border:1px solid var(--line);border-top:none;background:var(--surface);transition:background .12s ease}.row-item:first-child{border-top:1px solid var(--line);border-radius:var(--radius) var(--radius) 0 0}.row-item:last-child{border-radius:0 0 var(--radius) var(--radius)}.row-item:hover{background:var(--paper-2)}.row-name{font-family:var(--sans);font-weight:600;font-size:15px}.row-meta{font-family:var(--mono);font-size:11.5px;color:var(--ink-soft);letter-spacing:.02em}.row-date{font-family:var(--mono);font-size:12px;color:var(--ink-faint)}.row-link{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;border-radius:inherit}.row-link:focus-visible{outline:2px solid var(--brand-2);outline-offset:-3px}.row-end{position:relative;z-index:2;display:flex;align-items:center;gap:12px}.row-go{color:var(--ink-faint)}.row-del,.row-del-slot{width:24px;height:24px;flex:none}.row-del{display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid transparent;border-radius:var(--radius);background:none;color:var(--ink-faint);cursor:pointer;transition:background .12s ease,color .12s ease,border-color .12s ease}.row-del:hover:not(:disabled){background:var(--err-wash);border-color:var(--err-line);color:var(--err)}.row-del:focus-visible{outline:2px solid var(--brand-2);outline-offset:1px}.row-del:disabled{cursor:not-allowed;opacity:.45}.pager{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:18px}.pager-state{font-size:12px;color:var(--ink-soft)}.txt-wrap{display:grid;grid-template-columns:300px minmax(0,1fr);gap:12px;height:min(72vh,720px);align-items:stretch}.txt-list{display:flex;flex-direction:column;min-height:0;border:1px solid var(--line);border-radius:var(--radius-card);background:var(--surface);overflow:hidden}.txt-list-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;min-height:38px;font-family:var(--sans);font-size:12.5px;font-weight:600;color:var(--ink-soft);padding:6px 10px 6px 8px;background:var(--paper-2);border-bottom:1px solid var(--line)}.txt-list-count{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.txt-filters{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;padding:6px 8px;background:var(--paper-2);border-bottom:1px solid var(--line)}.fsel{min-width:0;max-width:100%;font-family:var(--sans);font-size:11.5px;font-weight:600;color:var(--ink);background:var(--bg);border:1px solid var(--line-strong);border-radius:var(--radius);padding:3px 6px;cursor:pointer;transition:border-color .12s ease,box-shadow .12s ease}.fsel:hover{border-color:var(--brand-fg)}.fsel:focus-visible{outline:none;border-color:var(--brand-fg);box-shadow:0 0 0 3px var(--accent-wash)}.txt-list-body{flex:1;min-height:0;overflow:auto;position:relative}.txt-empty{padding:16px 14px;color:var(--ink-soft);font-size:13px}.txt-row{display:flex;flex-direction:column;gap:3px;width:100%;padding:8px 10px 8px 8px;border-left:3px solid transparent;border-bottom:1px solid var(--line);cursor:pointer;transition:background .1s ease,border-color .1s ease,opacity .15s ease}.txt-row:focus-visible{outline:2px solid var(--brand-2);outline-offset:-2px}.txt-row-main{display:flex;align-items:center;gap:8px;min-width:0}.txt-row:last-child{border-bottom:none}.txt-row:hover{background:var(--brand-wash)}.txt-row.active{background:var(--brand-wash);border-left-color:var(--brand-fg)}.txt-row.treated{opacity:.5}.txt-row.treated:hover,.txt-row.treated:focus-within,.txt-row.treated.active{opacity:1}.txt-row .txt-idx{color:var(--brand-deep);font-weight:600;min-width:20px;font-size:12px}.txt-row .chg-badge{flex:none}.txt-row-flag{flex:none;font-size:12px;display:inline-flex;align-items:center;color:var(--ink-soft)}.txt-row-badge{margin-left:auto;display:inline-flex}.txt-row .chg-acts+.txt-row-badge{margin-left:0}.txt-row-note{font-family:var(--sans);font-size:11.5px;color:var(--ink-soft);padding-left:28px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chg-sel{width:13px;height:13px;flex:none;margin-top:2px;accent-color:var(--brand-fg);cursor:pointer;opacity:0;transition:opacity .1s ease}.txt-row:hover .chg-sel,.txt-row:focus-within .chg-sel,.chg-sel:checked,.txt-list.selecting .chg-sel{opacity:1}.chg-sel-all{opacity:1;margin-top:0}.chg-acts{display:inline-flex;gap:3px;flex:none}.txt-row .chg-acts{margin-left:auto;opacity:0;transition:opacity .1s ease}.txt-row:hover .chg-acts,.txt-row:focus-within .chg-acts,.txt-row.active .chg-acts,.txt-row .chg-acts.has-on{opacity:1}.chg-act{display:inline-flex;align-items:center;justify-content:center;gap:4px;width:20px;height:20px;padding:0;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--bg);color:var(--ink-soft);font-family:var(--sans);font-size:11.5px;font-weight:600;line-height:1;cursor:pointer;transition:background .1s ease,color .1s ease,border-color .1s ease}.chg-act:disabled{cursor:not-allowed;opacity:.55}.chg-act:focus-visible{outline:2px solid var(--brand-2);outline-offset:1px}.chg-act:hover:not(:disabled){background:var(--bg-2);color:var(--ink)}.chg-act-ok:hover:not(:disabled){background:var(--ok-wash);border-color:var(--ok-line);color:var(--ok)}.chg-act-flag:hover:not(:disabled){background:var(--err-wash);border-color:var(--err-line);color:var(--err)}.chg-act.on{color:#fff}.chg-act-ok.on{background:var(--ok);border-color:var(--ok)}.chg-act-flag.on{background:var(--err);border-color:var(--err)}.chg-bulk{display:inline-flex;gap:4px;align-items:center;margin-left:auto}.chg-bulk .chg-act{width:auto;padding:0 7px}.chg-editor{padding:8px 10px;border-bottom:1px solid var(--line);background:var(--paper-2)}.chg-editor textarea{width:100%;font-family:var(--sans);font-size:13px;padding:6px 8px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--bg);color:var(--ink);resize:vertical}.chg-editor textarea:focus{outline:2px solid var(--brand-2);outline-offset:0}.chg-editor-actions{display:flex;gap:6px;justify-content:flex-end;align-items:center;flex-wrap:wrap;margin-top:6px}.chg-editor-unflag{margin-right:auto}.flag-pop{position:fixed;z-index:80;width:300px;max-width:calc(100vw - 16px);background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius-card);box-shadow:0 10px 30px #0000002e}.flag-pop .chg-editor{border-bottom:none;background:transparent;padding:10px}.txt-list-err{padding:6px 14px;border-bottom:1px solid var(--line);font-family:var(--sans);font-size:12px;color:var(--err);background:var(--err-wash)}.txt-main{display:flex;flex-direction:column;min-width:0;min-height:0;border:1px solid var(--line);border-radius:var(--radius-card);background:var(--surface);overflow:hidden}.txt-cols{flex:1;min-height:0;display:grid;grid-template-columns:1fr 1fr}.txt-col{display:flex;flex-direction:column;min-width:0;min-height:0}.txt-col+.txt-col{border-left:1px solid var(--line)}.txt-col-head{font-family:var(--sans);font-size:12.5px;font-weight:600;color:var(--ink-soft);padding:8px 14px;background:var(--paper-2);border-bottom:1px solid var(--line)}.txt-col-body{flex:1;min-height:0;overflow:auto;font-family:var(--mono);font-size:12.5px;line-height:1.7;padding:16px;white-space:pre-wrap;word-break:break-word}.txt-blk{border-radius:2px}.txt-blk.clickable{cursor:pointer}.txt-blk.clickable:not(.on):hover{background:var(--paper-2)}.txt-blk.on{background:var(--brand-wash);box-shadow:0 0 0 3px var(--brand-light)}.txt-blk.treated .c-del,.txt-blk.treated .c-ins{opacity:.4;box-shadow:none}.txt-blk.tech{opacity:.65}.txt-mask{display:block;margin:6px 0;padding:3px 8px;border:1px dashed var(--line-strong);border-radius:var(--radius);background:var(--paper-2);color:var(--ink-soft);font-family:var(--sans);font-size:11px;font-weight:600;text-align:left;cursor:pointer;transition:background .1s ease,color .1s ease}.txt-mask:hover{background:var(--bg-2);color:var(--ink)}.txt-mask svg{vertical-align:-1px;margin-right:4px}.blk-acts{display:inline-flex;margin-left:6px;vertical-align:baseline;visibility:hidden}.txt-blk:hover .blk-acts,.blk-acts.show{visibility:visible}.blk-acts .ddot{margin-left:0}@media (max-width: 860px){.txt-wrap{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) auto;height:auto}.txt-main{order:1;height:60vh}.tab-panel--fill .txt-main{height:auto}.txt-list{order:2;max-height:220px}.txt-cols{grid-template-columns:1fr;grid-template-rows:1fr 1fr}.txt-col+.txt-col{border-left:none;border-top:1px solid var(--line)}}.c-del{background:var(--del-bg);color:var(--del-fg);border-radius:2px;box-shadow:0 0 0 1px var(--del-ring)}.c-ins{background:var(--ins-bg);color:var(--ins-fg);border-radius:2px;box-shadow:0 0 0 1px var(--ins-ring)}.report-img{width:100%;display:block;border:1px solid var(--line);border-radius:var(--radius-card);background:var(--paper-2)}.img-skeleton{display:flex;align-items:center;justify-content:center;min-height:180px;border:1px dashed var(--line-strong);border-radius:var(--radius-card);font-family:var(--mono);font-size:12px;color:var(--ink-faint);background:var(--paper-2)}.tbl{width:100%;border-collapse:collapse;font-family:var(--body);font-size:13px}.tbl th{font-family:var(--sans);font-size:12px;font-weight:600;letter-spacing:0;color:var(--ink-soft);text-align:left;padding:9px 12px;background:var(--paper-2);border:1px solid var(--line)}.tbl td{padding:9px 12px;border:1px solid var(--line);font-variant-numeric:tabular-nums}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);overflow-x:auto}.tab{flex:0 0 auto;font-family:var(--sans);font-size:14px;font-weight:600;color:var(--ink-soft);background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;padding:11px 18px;cursor:pointer;white-space:nowrap;transition:color .15s ease,border-color .15s ease}.tab:hover{color:var(--brand-fg)}.tab.active{color:var(--brand-fg);border-bottom-color:var(--brand-fg)}.tab:focus-visible{outline:2px solid var(--brand-fg);outline-offset:-2px;border-radius:var(--radius) var(--radius) 0 0}.tab-panel{padding-top:24px}.tab-panel>.section:first-child{margin-top:0}.section{margin-top:40px}.section-head{display:flex;align-items:baseline;gap:12px;margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid var(--line)}.section-head h2{font-size:18px;font-weight:600;letter-spacing:0}.section-head .idx{font-family:var(--mono);font-size:12px;color:var(--brand-fg);font-weight:600}.loader{display:inline-flex;align-items:center;gap:12px;font-family:var(--body);font-size:13px;color:var(--ink-soft)}.loader-spin{width:16px;height:16px;border:2px solid var(--line-strong);border-top-color:var(--brand-fg);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.note{background:var(--brand-wash);border-left:3px solid var(--brand-fg);padding:12px 16px;border-radius:0 var(--radius) var(--radius) 0;font-size:13px;color:var(--brand-darker)}.banner-error{background:var(--err-wash);border-left:3px solid var(--err);padding:12px 16px;border-radius:0 var(--radius) var(--radius) 0;font-size:13.5px;color:#7a201a;font-family:var(--body)}.banner-ok{background:var(--ok-wash);border-left:3px solid var(--ok);padding:12px 16px;border-radius:0 var(--radius) var(--radius) 0;font-size:13.5px;color:var(--ok);font-family:var(--body)}@keyframes fadeUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.reveal{animation:fadeUp .5s cubic-bezier(.2,.7,.2,1) both}.login{min-height:100vh;display:grid;grid-template-columns:1.1fr 1fr}.login-poster{position:relative;background:linear-gradient(158deg,var(--brand-2) 0%,var(--brand) 52%,var(--brand-darker) 100%);color:#fff;padding:56px;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden}.login-poster:after{content:"";position:absolute;right:-120px;bottom:-120px;width:380px;height:380px;border:1px solid rgba(255,255,255,.16);border-radius:50%;box-shadow:0 0 0 40px #ffffff0d}.login-poster h1{font-size:clamp(40px,6vw,72px);font-weight:300;letter-spacing:-.01em;color:#fff;line-height:1.1}.login-poster .lede{font-family:var(--body);font-size:16px;max-width:32ch;color:#ffffffd1;line-height:1.6}.login-poster .foot{font-family:var(--sans);font-size:12.5px;letter-spacing:.04em;color:#ffffffb3}.login-form-wrap{display:flex;align-items:center;justify-content:center;padding:40px}.login-form{width:100%;max-width:360px;display:flex;flex-direction:column;gap:18px}.login-form h2{font-size:26px;font-weight:600}.auth-toggle{font-family:var(--body);font-size:13px;color:var(--ink-soft)}.auth-toggle button{background:none;border:none;color:var(--brand-fg);font:inherit;font-weight:600;cursor:pointer;text-decoration:underline;padding:0}.muted{color:var(--ink-soft)}.stack{display:flex;flex-direction:column;gap:16px}.empty{text-align:center;padding:60px 20px;color:var(--ink-faint);font-family:var(--body);font-size:13px;border:1px dashed var(--line-strong);border-radius:var(--radius-card)}@media (max-width: 860px){.login{grid-template-columns:1fr}.login-poster{display:none}.dropzones,.upload-grid{grid-template-columns:1fr}}.img-btn{display:block;position:relative;width:100%;padding:0;margin:0;border:none;background:none;line-height:0}.img-btn.zoomable{cursor:zoom-in}.img-zoom-hint{position:absolute;top:10px;right:10px;font-family:var(--sans);font-size:11px;font-weight:600;letter-spacing:0;color:#fff;background:#101c28c7;padding:4px 10px;border-radius:var(--radius-pill);border:none;cursor:pointer;opacity:0;transition:opacity .15s ease}.img-btn.zoomable:hover .img-zoom-hint{opacity:1}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#101c28ed;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;flex-direction:column;animation:fadeUp .18s ease both}.lightbox-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 20px;color:#fff;border-bottom:1px solid rgba(255,255,255,.12)}.lightbox-bar .mono{font-size:12px;color:#ffffffb8}.lightbox-actions{display:flex;gap:8px}.lightbox .btn-ghost{color:#fff;border-color:#fff6}.lightbox .btn-ghost:hover{background:#fff;color:var(--ink);border-color:#fff}.lightbox-stage{flex:1;overflow:hidden;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}.lightbox-stage img{max-width:96%;max-height:100%;transition:transform .05s linear;transform-origin:center center;will-change:transform}.zones-wrap{display:grid;grid-template-columns:300px minmax(0,1fr);gap:12px;height:min(72vh,720px);align-items:stretch}.zones-list{display:flex;flex-direction:column;min-height:0;border:1px solid var(--line);border-radius:var(--radius-card);background:var(--surface);overflow:hidden}.zones-list-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-family:var(--sans);font-size:12.5px;font-weight:600;color:var(--ink-soft);padding:10px 14px;background:var(--paper-2);border-bottom:1px solid var(--line)}.zones-list-body{flex:1;min-height:0;overflow:auto;position:relative}.zones-empty{padding:16px 14px;color:var(--ink-soft);font-size:13px}.zone-row{display:flex;align-items:center;gap:10px;width:100%;padding:7px 10px 7px 8px;border:none;border-left:3px solid transparent;border-bottom:1px solid var(--line);background:none;font:inherit;text-align:left;cursor:pointer;transition:background .1s ease,border-color .1s ease}.zone-thumb{position:relative;overflow:hidden;width:44px;height:44px;flex:none;border:1px solid var(--line);border-radius:var(--radius);background-color:var(--paper-2);background-repeat:no-repeat}.zone-thumb-mark{position:absolute;transform:translate(-50%,-50%);border-radius:2px;box-shadow:0 0 0 1px var(--zone-mark-halo),0 0 0 2px var(--zone-mark);pointer-events:none}.zone-row-txt{display:flex;flex-direction:column;gap:2px;min-width:0}.zone-row-badge{margin-left:auto;display:inline-flex;align-items:center;gap:6px}.zone-row:last-child{border-bottom:none}.zone-row.hover{background:var(--brand-wash)}.zone-row.active{background:var(--brand-wash);border-left-color:var(--brand-fg)}.zone-row.treated{opacity:.5}.zone-row.treated:hover,.zone-row.treated:focus-within,.zone-row.treated.active{opacity:1}.zone-row .zone-idx{color:var(--brand-deep);font-weight:600;min-width:22px}.zone-row .mono{font-size:12px}.zone-row .zone-desc{font-family:var(--sans);font-size:12px;line-height:1.35;color:var(--ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.zone-row .chg-sel{margin-top:0}.zone-row:hover .chg-sel,.zone-row:focus-within .chg-sel,.zones-list.selecting .chg-sel{opacity:1}.zone-row .chg-acts{opacity:0;transition:opacity .1s ease}.zone-row:hover .chg-acts,.zone-row:focus-within .chg-acts,.zone-row.active .chg-acts,.zone-row .chg-acts.has-on{opacity:1}.zones-list-count{white-space:nowrap}.zone-hover-acts{position:absolute;z-index:5;display:inline-flex;gap:3px;padding:2px;transform:translate(calc(-100% - 3px),3px);background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:0 2px 8px #0000002e}.zones-view{display:flex;flex-direction:column;min-width:0;min-height:0;border:1px solid var(--line);border-radius:var(--radius-card);overflow:hidden}.zones-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:8px 12px;background:var(--paper-2);border-bottom:1px solid var(--line)}.zones-seg{display:inline-flex;border:1px solid var(--line);border-radius:var(--radius-pill);overflow:hidden;background:var(--surface)}.zones-seg-btn{padding:4px 12px;border:none;background:none;font:inherit;font-size:12px;color:var(--ink-soft);cursor:pointer}.zones-seg-btn+.zones-seg-btn{border-left:1px solid var(--line)}.zones-seg-btn.on{background:var(--brand);color:#fff;font-weight:600}.zones-zoomctl{display:inline-flex;align-items:center;gap:6px}.zones-zoomctl button{min-width:28px;height:26px;padding:0 8px;border:1px solid var(--line);border-radius:6px;background:var(--surface);font:inherit;font-size:13px;color:var(--ink);cursor:pointer}.zones-zoomctl button:hover{background:var(--brand-wash)}.zones-zoom-lvl{min-width:54px;text-align:center;font-family:var(--mono);font-size:12px;color:var(--ink-soft)}.zones-bbox-info{margin-left:auto;font-size:12px;color:var(--ink-soft)}.zones-showall{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-soft);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.zones-showall input{margin:0;cursor:pointer;accent-color:var(--brand-fg)}.zones-scroll{flex:1;min-height:0;overflow:auto;display:grid;background:var(--paper-2);cursor:grab;-webkit-user-select:none;user-select:none}.zones-scroll:active{cursor:grabbing}.zones-stage{position:relative;line-height:0;margin:auto}.zones-img{display:block;position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;-webkit-user-select:none;user-select:none}.zones-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:1}.zone-halos{pointer-events:none}.zone-rect-halo{fill:none;stroke:var(--zone-mark-halo);stroke-width:4;vector-effect:non-scaling-stroke}.zone-rect{fill:color-mix(in srgb,var(--zone-mark) 6%,transparent);stroke:var(--zone-mark);stroke-width:2;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill .1s ease}.zone-rect.hover{fill:color-mix(in srgb,var(--zone-mark) 20%,transparent);stroke-width:3}.zone-rect.active{fill:color-mix(in srgb,var(--zone-mark) 12%,transparent);stroke:var(--brand-deep);stroke-width:3.5;animation:zone-pulse 1.4s ease-in-out infinite}@keyframes zone-pulse{0%,to{stroke-opacity:1}50%{stroke-opacity:.4}}.zone-spot-layer{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;pointer-events:none;z-index:2}.zone-veil{position:absolute;background:var(--zone-veil)}.zone-veil-t{left:0;right:0;top:0;height:calc(var(--sy) - var(--sh) / 2)}.zone-veil-b{left:0;right:0;bottom:0;height:calc(100% - var(--sy) - var(--sh) / 2)}.zone-veil-l{left:0;top:calc(var(--sy) - var(--sh) / 2);height:var(--sh);width:calc(var(--sx) - var(--sw) / 2)}.zone-veil-r{right:0;top:calc(var(--sy) - var(--sh) / 2);height:var(--sh);width:calc(100% - var(--sx) - var(--sw) / 2)}.zone-spot{position:absolute;left:var(--sx);top:var(--sy);width:var(--sw);height:var(--sh);transform:translate(-50%,-50%);border-radius:2px;box-shadow:0 0 0 2px var(--zone-mark-halo),0 0 0 4px var(--zone-mark),0 0 0 5px var(--zone-mark-edge)}.zone-spot:after{content:"";position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px;border:3px solid var(--zone-mark);border-radius:6px;animation:zone-ping .75s cubic-bezier(.2,.7,.3,1) 1 both}@keyframes zone-ping{0%{transform:scale(5);opacity:0}30%{opacity:.95}to{transform:scale(1);opacity:0}}.zone-spot-tag{position:absolute;left:50%;bottom:100%;transform:translate(-50%,-7px);padding:1px 7px;border-radius:var(--radius-pill);background:var(--brand);color:#fff;font-size:11.5px;font-weight:600;line-height:1.5;white-space:nowrap;box-shadow:0 1px 4px #10396a73}.zone-spot-tag.below{bottom:auto;top:100%;transform:translate(-50%,7px)}.zones-svg-top{z-index:3;pointer-events:none}.zone-rect-exact{fill:none;stroke:var(--zone-mark);stroke-width:2;vector-effect:non-scaling-stroke}.zones-stage.spot .zone-rect.active,.sxs-pane.spot .zone-rect.active{animation:none}@media (prefers-reduced-motion: reduce){.zone-spot:after{animation:none}.zone-rect.active{animation:none}}.zones-sxs{display:flex;flex-direction:column;gap:16px;padding:12px;cursor:default}.sxs-pane{display:block}.sxs-cap{font-size:12px;font-weight:600;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.4px;margin-bottom:5px;line-height:1}.sxs-stage{position:relative;line-height:0;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--paper)}.sxs-img{display:block;width:100%;height:auto;-webkit-user-select:none;user-select:none}.zone-thumb-pair{flex:none;display:flex;flex-direction:column;gap:2px}.zone-thumb-half{width:44px;height:21px;flex:none;border:1px solid var(--line);border-radius:3px;background-color:var(--paper-2);background-repeat:no-repeat}@media (max-width: 860px){.zones-wrap{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) auto;height:auto}.zones-view{order:1;height:60vh}.tab-panel--fill .zones-view{height:auto}.zones-list{order:2;max-height:220px}}.route-loading{min-height:60vh;display:flex;align-items:center;justify-content:center}.nav-link{font-family:var(--sans);font-size:14px;font-weight:600;color:var(--ink-soft);padding:6px 2px;border-bottom:2px solid transparent;transition:color .15s ease,border-color .15s ease}.nav-link:hover{color:var(--brand-fg)}.nav-link.active{color:var(--brand-fg);border-bottom-color:var(--brand-fg)}.btn-sm{padding:6px 12px;font-size:13px}.btn-danger{background:var(--err);border-color:var(--err);color:#fff;box-shadow:0 2px 0 0 var(--err-deep)}.btn-danger:hover{background:var(--del-fg);border-color:var(--del-fg);box-shadow:0 2px 5px #7a201a80}.admin-tbl{font-size:14px}.admin-tbl td{vertical-align:middle}.admin-tbl .col-actions{text-align:right;white-space:nowrap}.row-actions{display:inline-flex;gap:8px;justify-content:flex-end}.check{display:inline-flex;align-items:center;gap:9px;font-family:var(--body);font-size:14px;color:var(--ink);cursor:pointer}.check input{width:16px;height:16px;accent-color:var(--brand-fg);cursor:pointer}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;background:#101c288c;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;padding:24px;animation:fadeUp .16s ease both}.modal{width:100%;max-width:440px;box-shadow:var(--shadow-lg)}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 22px;border-bottom:1px solid var(--line)}.modal-head h2{font-size:18px;font-weight:600}.modal-close{background:none;border:none;font-size:15px;color:var(--ink-soft);cursor:pointer;line-height:1;padding:4px}.modal-close:hover{color:var(--ink-strong)}.modal-body{padding:22px}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:4px}.confirm-text{font-size:14px;color:var(--ink-soft)}.confirm-text p{margin:0}.confirm-text strong{color:var(--ink-strong);font-weight:600}.badge-awaiting_page_selection{background:var(--warn-wash);color:var(--warn);border-color:var(--warn-line)}.thumb-cols{display:grid;grid-template-columns:1fr 1fr;gap:24px}.thumb-col-title{font-family:var(--sans);font-size:16px;font-weight:600;margin:0 0 10px;color:var(--ink)}.thumb-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:12px}.thumb{display:flex;flex-direction:column;align-items:center;gap:6px;padding:8px;border:2px solid var(--line);border-radius:var(--radius-card);cursor:pointer;transition:border-color .15s}.thumb.selected{border-color:var(--brand-fg);box-shadow:0 0 0 1px var(--brand-fg)}.thumb input{accent-color:var(--brand-fg)}.thumb-num{font-family:var(--mono);font-size:12px;color:var(--ink-soft)}@media (max-width: 720px){.thumb-cols{grid-template-columns:1fr}}.chg-badge{display:inline-block;padding:2px 10px;border-radius:var(--radius-pill);font-size:11px;font-weight:600;white-space:nowrap}.chg-badge.chg-added{background:var(--ok-wash);color:var(--ok)}.chg-badge.chg-removed{background:var(--err-wash);color:var(--err)}.chg-badge.chg-modified{background:var(--warn-wash);color:var(--warn)}.chg-badge.chg-moved{background:var(--accent-wash);color:var(--accent-deep)}.dwrap{display:flex;flex-direction:column;gap:6px;min-width:0}.dbar{display:inline-flex;border:1px solid var(--line-strong);border-radius:var(--radius);overflow:hidden;width:fit-content;background:var(--bg)}.dbtn{font-family:var(--sans);font-size:12px;font-weight:600;padding:4px 9px;border:none;background:none;color:var(--ink-soft);cursor:pointer;white-space:nowrap;transition:background .1s ease,color .1s ease}.dbtn+.dbtn{border-left:1px solid var(--line)}.dbtn:hover:not(:disabled){background:var(--bg-2);color:var(--ink)}.dbtn:disabled{cursor:not-allowed;opacity:.55}.dbtn.on{color:#fff}.dbtn-ignored.on{background:var(--ok)}.dbtn-later.on{background:var(--warn)}.dbtn-flagged.on{background:var(--err)}.dcomment{font-family:var(--sans);font-size:12.5px;text-align:left;color:var(--ink);background:var(--brand-wash);border:none;border-left:2px solid var(--brand-fg);border-radius:0 var(--radius) var(--radius) 0;padding:4px 8px;cursor:pointer;max-width:420px;overflow-wrap:anywhere}.dcomment-empty{color:var(--ink-faint);background:var(--bg-2);border-left-color:var(--line-strong)}.dcomment-editor textarea{width:100%;min-width:200px;font-family:var(--sans);font-size:13px;padding:6px 8px;border:1px solid var(--line-strong);border-radius:var(--radius);resize:vertical}.dcomment-editor textarea:focus{outline:2px solid var(--brand-2);outline-offset:0}.dcomment-actions{display:flex;gap:6px;justify-content:flex-end;margin-top:4px}.ddot{width:9px;height:9px;border-radius:50%;flex:none;margin-left:auto}.ddot-ignored{background:var(--ok)}.ddot-later{background:var(--warn)}.ddot-flagged{background:var(--err)}.lane-bar{display:flex;align-items:center;gap:14px;padding:8px 12px;border-bottom:1px solid var(--line);background:var(--bg);min-height:46px;flex-wrap:wrap}.lane-info{font-size:12.5px;color:var(--ink-soft)}.lane-desc{flex:1 1 200px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--sans);font-size:12.5px;color:var(--ink)}.lane-actions{margin-left:auto;display:flex;align-items:flex-start}.lane-hint{font-family:var(--sans);font-size:12.5px;color:var(--ink-faint)}.zones-roi{display:inline-flex;gap:6px;align-items:center}.zones-roi-btn,.zones-roi-clear{font-family:var(--sans);font-size:12.5px;font-weight:600;padding:5px 10px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--bg);color:var(--ink-soft);cursor:pointer;white-space:nowrap}.zones-roi-btn:hover,.zones-roi-clear:hover{border-color:var(--brand-fg);color:var(--brand-fg)}.zones-roi-btn.on{background:var(--brand);border-color:var(--brand-fg);color:#fff}.zones-scroll.roi-drawing,.zones-scroll.roi-drawing:active{cursor:crosshair}.roi-rect{fill:#1a5dad0d;stroke:var(--brand);stroke-width:2;stroke-dasharray:7 5;vector-effect:non-scaling-stroke;pointer-events:none}.roi-rect.roi-draft{stroke:var(--brand-2);fill:#4489da1a}.report-actions{display:flex;align-items:center;gap:10px;justify-content:flex-end;flex-wrap:wrap}.history-head{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.seg-toggle{display:inline-flex;border:1px solid var(--line-strong);border-radius:var(--radius);overflow:hidden;background:var(--bg)}.seg-toggle-btn{font-family:var(--sans);font-size:13px;font-weight:600;padding:6px 14px;border:none;background:none;color:var(--ink-soft);cursor:pointer;transition:background .1s ease,color .1s ease}.seg-toggle-btn+.seg-toggle-btn{border-left:1px solid var(--line)}.seg-toggle-btn:hover{color:var(--brand-fg)}.seg-toggle-btn.on{background:var(--brand);color:#fff}.owner-chip{font-family:var(--mono);font-size:11.5px;background:var(--brand-wash);color:var(--brand-deep);border-radius:var(--radius-pill);padding:1px 8px}.dbar-error{font-family:var(--sans);font-size:12px;color:var(--err)}.panel-band{fill:transparent;stroke:none;pointer-events:none}.panel-band.panel-identique{fill:color-mix(in srgb,var(--ok, #2e7d32) 8%,transparent)}.panel-band.panel-texte{fill:color-mix(in srgb,var(--muted, #6b7785) 9%,transparent)}.panel-band.panel-indetermine{fill:color-mix(in srgb,var(--warn, #b26a00) 9%,transparent)}.panel-legend{display:flex;gap:14px;align-items:center;flex-wrap:wrap;font-size:12px;color:var(--muted, #6b7785)}.panel-legend .swatch{display:inline-block;width:11px;height:11px;border-radius:2px;margin-right:5px;vertical-align:-1px}.panel-legend .swatch.identique{background:color-mix(in srgb,var(--ok, #2e7d32) 22%,transparent)}.panel-legend .swatch.texte{background:color-mix(in srgb,var(--muted, #6b7785) 24%,transparent)}.panel-legend .swatch.indetermine{background:color-mix(in srgb,var(--warn, #b26a00) 24%,transparent)}
