:root{--ink: #111827;--ink-soft: #6b7280;--panel: #ffffff;--page: #f3f4f6;--line: #e5e7eb;--line-strong: #d1d5db;--accent: #0f766e;--accent-deep: #115e59;--accent-soft: #ecfdf5;--warn: #b45309;--danger: #b91c1c;--ok: #047857;--font-body: "IBM Plex Sans", "PingFang SC", "Hiragino Sans GB", sans-serif}*{box-sizing:border-box}html,body,#root{height:100%;min-height:100%}body{margin:0;color:var(--ink);font-family:var(--font-body);font-size:14px;background:var(--page)}button,input,textarea,a{font:inherit}button{cursor:pointer}.shell{min-height:100%;display:flex;flex-direction:column}.shell:has(.compare-page){height:100%;overflow:hidden}.app-header{position:sticky;top:0;z-index:40;background:#fffffff0;border-bottom:1px solid var(--line);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.app-header-inner{max-width:1400px;margin:0 auto;padding:0 16px;height:56px;display:flex;align-items:center;gap:16px}.brand-link{color:inherit;text-decoration:none;flex-shrink:0}.brand{margin:0;font-size:1.05rem;font-weight:700;letter-spacing:-.02em;white-space:nowrap}.brand span{color:var(--accent)}.header-nav{display:flex;align-items:center;gap:2px;flex:1;min-width:0;overflow-x:auto}.header-nav a{text-decoration:none;color:var(--ink-soft);padding:7px 12px;border-radius:8px;font-size:13px;font-weight:550;white-space:nowrap}.header-nav a:hover{color:var(--ink);background:#f9fafb}.header-nav a.active{color:var(--accent-deep);background:var(--accent-soft)}.header-user{display:flex;align-items:center;gap:10px;flex-shrink:0;margin-left:auto;position:relative}.avatar-btn{width:32px;height:32px;border-radius:999px;border:1px solid var(--line-strong);background:var(--accent-soft);color:var(--accent-deep);font-weight:700;font-size:13px;padding:0}.avatar-btn:hover{border-color:var(--accent)}.user-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:180px;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px #11182714;padding:6px;z-index:50}.user-menu-meta{padding:8px 10px 10px;border-bottom:1px solid var(--line);margin-bottom:4px}.user-menu button{display:block;width:100%;text-align:left;border:none;background:transparent;padding:8px 10px;border-radius:8px;color:var(--ink);font-size:13px}.user-menu button:hover{background:#f3f4f6}.chunk-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.chunk-tab{border:1px solid var(--line);background:#fff;border-radius:8px;padding:4px 8px;font-size:12px;color:var(--ink-soft)}.chunk-tab.active{border-color:#9ca3af;background:#f3f4f6;color:var(--ink);font-weight:650}.book-frame{width:100%;min-height:min(70vh,720px);border:1px solid var(--line);border-radius:8px;background:#fafafa}.status.chunking,.status.parsing,.status.uploading{background:#ffedd5;color:var(--warn)}.status.partial{background:#ffedd5;color:var(--warn)}.status.ready{background:var(--accent-soft);color:var(--accent-deep)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;background:#1118276b;display:grid;place-items:center;padding:16px}.modal-panel{width:min(720px,100%);max-height:min(88vh,900px);overflow:auto;background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px;box-shadow:0 16px 48px #11182729}.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}.modal-head h2{margin:0 0 4px;font-size:1.05rem}.upload-progress-track{height:6px;border-radius:999px;background:#f3f4f6;overflow:hidden;margin-bottom:12px}.upload-progress-fill{height:100%;background:var(--accent);transition:width .35s ease}.upload-progress-track.rollback{background:#fee2e2}.upload-progress-fill.rollback{background:var(--danger, #dc2626);transition:width .38s ease-in}.pipeline-step.reverting{border-color:color-mix(in srgb,var(--danger, #dc2626) 45%,white);background:#fef2f2}.pipeline-step.reverted{border-color:#fecaca;background:#fff;opacity:.72}.pipeline-step.reverting .pipeline-dot,.pipeline-step.reverted .pipeline-dot{background:var(--danger, #dc2626);color:#fff}.pipeline-timer-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.pipeline-timer{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-soft)}.pipeline-timer strong{color:var(--ink);font-variant-numeric:tabular-nums}.pipeline-live{margin-top:4px;font-size:12px;color:var(--accent);font-variant-numeric:tabular-nums}.pipeline-live-detail{display:flex;align-items:flex-start;gap:8px;line-height:1.45}.modal-panel-wide{max-width:min(720px,96vw)}.spin{width:14px;height:14px;border:2px solid color-mix(in srgb,var(--accent) 25%,transparent);border-top-color:var(--accent);border-radius:999px;display:inline-block;animation:spin .7s linear infinite;flex-shrink:0}.spin-sm{width:12px;height:12px;border-width:2px}.spin-inline{width:11px;height:11px;margin-right:4px;vertical-align:-1px}@keyframes spin{to{transform:rotate(360deg)}}.pipeline-steps{list-style:none;margin:0;padding:0;display:grid;gap:8px}.pipeline-step{display:flex;gap:10px;align-items:flex-start;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fafafa}.pipeline-step.done{border-color:color-mix(in srgb,var(--accent) 35%,white);background:var(--accent-soft)}.pipeline-step.active{border-color:var(--accent);background:#fff}.pipeline-step.failed{border-color:#fecaca;background:#fef2f2}.pipeline-dot{width:22px;height:22px;border-radius:999px;display:grid;place-items:center;font-size:11px;font-weight:700;background:#e5e7eb;color:var(--ink-soft);flex-shrink:0}.pipeline-step.done .pipeline-dot,.pipeline-step.active .pipeline-dot{background:var(--accent);color:#fff!important}.pipeline-step.active .pipeline-dot .spin,.pipeline-step.active .pipeline-dot .spin-sm,.pipeline-step.reverting .pipeline-dot .spin,.pipeline-step.reverting .pipeline-dot .spin-sm{border-color:#fff6;border-top-color:#fff}.pipeline-step.done .pipeline-dot{color:#fff;font-weight:700}.pipeline-step.failed .pipeline-dot{background:var(--danger);color:#fff}.pipeline-label{font-size:13px;font-weight:650}.data-table tr.row-active td{background:color-mix(in srgb,var(--accent-soft) 70%,white)}.cobuild-banner{border-color:color-mix(in srgb,var(--accent) 40%,var(--line));background:linear-gradient(180deg,var(--accent-soft),#fff)}.incomplete-books{border-color:color-mix(in srgb,#d97706 40%,var(--line));background:#fffbeb}.btn .spin,.btn .spin-inline{margin-right:6px}.status.uploaded,.status.idle,.status.queued{background:#f3f4f6;color:var(--ink-soft)}.status.running,.status.parsing{background:#ffedd5;color:var(--warn)}.status.done{background:var(--accent-soft);color:var(--accent-deep)}.header-user-meta{text-align:right;line-height:1.25}.header-user-name{font-size:13px;font-weight:600}.header-user-account{font-size:11px;color:var(--ink-soft)}.main{max-width:1400px;width:100%;margin:0 auto;padding:16px;flex:1}.main:has(.compare-page){min-height:0;display:flex;flex-direction:column;overflow:hidden;padding-top:12px;padding-bottom:12px}.page-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:12px}.page-head h1{margin:0;font-size:1.15rem;font-weight:700;letter-spacing:-.01em}.page-head .hint{margin:0;color:var(--ink-soft);font-size:12px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px}.panel h2{margin:0 0 8px;font-size:.95rem;font-weight:650}.panel .hint{margin:0 0 10px;color:var(--ink-soft);font-size:12px}.grid{display:grid;grid-template-columns:1.1fr .9fr;gap:12px}@media(max-width:960px){.grid,.split-2{grid-template-columns:1fr}.header-user-meta{display:none}}.split-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.label{display:block;margin-bottom:4px;font-size:12px;color:var(--ink-soft)}.field{width:100%;border:1px solid var(--line-strong);border-radius:8px;padding:8px 10px;background:#fff;color:var(--ink)}.field:focus{outline:2px solid color-mix(in srgb,var(--accent) 28%,white);border-color:var(--accent)}textarea.field{min-height:140px;resize:vertical;line-height:1.5}.row{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.btn{border:none;border-radius:8px;padding:7px 12px;background:var(--accent);color:#fff;font-weight:600;font-size:13px}.btn:hover{background:var(--accent-deep)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.ghost{background:#fff;color:var(--ink);border:1px solid var(--line-strong)}.btn.ghost:hover{background:#f9fafb}.btn.danger{background:var(--danger)}.btn.sm{padding:4px 8px;font-size:12px}.btn.icon-btn{width:32px;height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;font-size:20px;font-weight:500;line-height:1;border-radius:8px}.data-table{width:100%;border-collapse:collapse;font-size:13px}.data-table th,.data-table td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:middle}.data-table th{color:var(--ink-soft);font-weight:600;font-size:12px;background:#fafafa}.data-table tr:hover td{background:#fafafa}.data-table a{color:var(--accent-deep);text-decoration:none;font-weight:600}.data-table a:hover{text-decoration:underline}.list{list-style:none;margin:0;padding:0;display:grid;gap:6px}.list button.item,.list .item{width:100%;text-align:left;border:1px solid var(--line);background:#fff;border-radius:8px;padding:9px 10px}.list button.item.active{border-color:var(--accent);background:var(--accent-soft)}.item-title{font-weight:600;font-size:13px}.item-meta{margin-top:2px;color:var(--ink-soft);font-size:12px}.status{display:inline-block;padding:1px 7px;border-radius:999px;font-size:11px;background:var(--accent-soft);color:var(--accent-deep)}.status.failed{background:#fee2e2;color:var(--danger)}.status.awaiting_review{background:#ffedd5;color:var(--warn)}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:24px;background:var(--page)}.login-card{width:min(400px,100%);padding:22px;border-radius:12px;background:#fff;border:1px solid var(--line)}.login-card h1{margin:0 0 4px;font-size:1.25rem}.login-card p{margin:0 0 14px;color:var(--ink-soft);font-size:13px}.stack{display:grid;gap:10px}.error{color:var(--danger);font-size:13px}.ok{color:var(--ok);font-size:13px}.ko-grid{display:grid;gap:6px;max-height:260px;overflow:auto}.ko-card{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fff}.ko-card strong{display:block;font-size:13px}.ko-card small{color:var(--ink-soft);font-size:12px}.answer{white-space:pre-wrap;line-height:1.55;background:#fafafa;border:1px solid var(--line);border-radius:8px;padding:10px;font-size:13px}.empty{color:var(--ink-soft);font-size:13px;padding:16px 4px}.landing-hero h1{margin:0 0 8px;font-size:1.35rem;font-weight:700;letter-spacing:-.02em}.landing-kicker{margin:0 0 6px;font-size:11px;font-weight:650;letter-spacing:.06em;text-transform:uppercase;color:var(--accent)}.landing-lead{margin:0;max-width:52rem;color:var(--ink-soft);font-size:13px;line-height:1.55}.theory-showcase{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}.theory-card{display:block;border:1px solid var(--line);border-radius:8px;padding:12px;background:#fafafa;text-decoration:none;color:inherit}.theory-card:hover{border-color:var(--accent);background:var(--accent-soft)}.theory-card.placeholder{opacity:.72;border-style:dashed}.theory-card-title{font-weight:650;font-size:14px}.theory-card-blurb{margin:8px 0 0;color:var(--ink-soft);font-size:12px;line-height:1.45}.book-preview{max-width:42rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.book-detail-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:12px}@media(max-width:960px){.book-detail-grid{grid-template-columns:1fr}}.book-body{margin:0;max-height:min(70vh,720px);overflow:auto;white-space:pre-wrap;word-break:break-word;font-family:var(--font-body);font-size:13px;line-height:1.6;background:#fafafa;border:1px solid var(--line);border-radius:8px;padding:12px}.page-locus-list{display:grid;gap:12px;max-height:min(70vh,720px);overflow:auto}.block-list{max-height:min(48vh,480px);overflow:auto}.block-text{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;white-space:pre-wrap}.danger-text{color:var(--danger)!important;border-color:#fecaca!important}.book-pdf-panel{min-height:480px}.pdf-viewer{height:min(70vh,760px);overflow:auto;background:#f3f4f6;border:1px solid var(--line);border-radius:8px}.pdf-viewer.compare-pdf{height:100%}.pdf-doc{display:flex;flex-direction:column;align-items:center;gap:12px;padding:12px 0}.pdf-page-wrap{position:relative;background:#fff;box-shadow:0 1px 4px #11182714}.pdf-page-relative{position:relative;display:inline-block}.pdf-page-placeholder{display:grid;place-items:center;color:var(--ink-soft);font-size:13px;background:#fff}.pdf-bbox{position:absolute;box-sizing:border-box;border:1px solid rgba(59,130,246,.45);background:#60a5fa2e;cursor:pointer;z-index:10;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}.pdf-bbox:hover{background:#60a5fa47;border-color:#2563eba6}.pdf-bbox.selected{background:#facc154d;border-color:#a16207d9;box-shadow:0 0 8px #eab30873;z-index:30}.pdf-bbox.highlighted{background:#f472b638;border-color:#db2777a6;z-index:20}.btn.icon-action{display:inline-grid;place-items:center;width:34px;height:34px;padding:0;border-radius:8px;color:var(--ink-soft);text-decoration:none}.btn.icon-action:hover{color:var(--ink);background:#f3f4f6;border-color:var(--line-strong)}.compare-page{flex:1;min-height:0;display:flex;flex-direction:column;gap:8px;overflow:hidden}.compare-toolbar,.compare-pager,.compare-page>.error,.compare-page>.empty,.compare-page>.hint{flex-shrink:0}.compare-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap;padding-bottom:4px;border-bottom:1px solid var(--line)}.compare-toolbar-left{display:flex;align-items:flex-start;gap:12px;min-width:0}.compare-back{flex-shrink:0;margin-top:4px;color:var(--ink-soft);text-decoration:none;font-size:13px}.compare-back:hover{color:var(--ink)}.compare-title{margin:0;font-size:18px;font-weight:650;letter-spacing:-.02em}.compare-title-block{min-width:0}.compare-pager{display:flex;align-items:center;justify-content:center;gap:8px;padding:2px 0;flex-shrink:0}.compare-pager-mid{display:inline-flex;align-items:center;gap:10px;min-width:0}.compare-pager-range{font-size:13px;font-weight:650;font-variant-numeric:tabular-nums}.compare-jump{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-soft)}.compare-jump-input{width:64px;padding:4px 6px;font-size:12px}.compare-shell{display:grid;grid-template-columns:1fr 1fr;gap:0;flex:1;min-height:0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}@media(max-width:720px){.compare-shell{grid-template-columns:1fr;grid-template-rows:minmax(240px,1fr) minmax(240px,1fr)}.compare-pane-pdf{border-right:none;border-bottom:1px solid var(--line)}}.compare-pane{display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}.compare-pane-pdf{background:#eef0f3;border-right:1px solid var(--line)}.compare-pane-items{background:#fff}.compare-pane-head{flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;font-size:12px;font-weight:650;letter-spacing:.02em;text-transform:uppercase;color:var(--ink-soft);background:#f8f9fa;border-bottom:1px solid var(--line)}.compare-pane-head-actions{display:inline-flex;align-items:center;gap:10px;min-width:0}.compare-fit-toggle{display:inline-flex;align-items:center;gap:0;border:1px solid var(--line);border-radius:6px;overflow:hidden;background:#fff}.compare-fit-toggle button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;margin:0;padding:3px 8px;font:inherit;font-size:11px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--ink-soft);background:transparent;line-height:1.3}.compare-fit-toggle button+button{border-left:1px solid var(--line)}.compare-fit-toggle button.active{color:var(--accent-deep);background:var(--accent-soft)}.compare-fit-toggle button:hover:not(.active){color:var(--ink);background:#f9fafb}.compare-toast{position:fixed;top:72px;left:50%;transform:translate(-50%);z-index:80;max-width:min(90vw,420px);padding:10px 16px;border-radius:10px;border:1px solid var(--line);background:#111827eb;color:#fff;font-size:13px;font-weight:550;box-shadow:0 8px 24px #1118272e;pointer-events:none}.compare-pane-body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.compare-pane-pdf .pdf-viewer{flex:1 1 0;min-height:0;height:auto;max-height:none;overflow:auto;border:none;border-radius:0;background:transparent}.compare-item-scroll{flex:1;min-height:0;overflow:auto;padding:8px;display:flex;flex-direction:column;gap:6px}.compare-item{display:block;width:100%;text-align:left;border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 10px;cursor:pointer;color:inherit}.compare-item:hover{background:#f9fafb;border-color:var(--line-strong)}.compare-item.active{background:#f3f4f6;border-color:#9ca3af;box-shadow:inset 0 0 0 1px #9ca3af}.compare-item-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px;font-size:11px;color:var(--ink-soft)}.compare-type{display:inline-block;padding:1px 6px;border-radius:4px;background:#f3f4f6;color:var(--ink);font-weight:600;font-size:11px}.compare-item-text{font-size:13px;line-height:1.45;white-space:pre-wrap;word-break:break-word}.compare-item.has-image .compare-item-text{margin-top:6px}.compare-item-image{margin-top:6px;display:flex;justify-content:center;max-height:160px;overflow:hidden;border-radius:6px;background:#f3f4f6;border:1px solid var(--line)}.compare-item-image-el{display:block;max-width:100%;max-height:160px;width:auto;height:auto;object-fit:contain}.compare-item-image-empty,.auth-image-loading{min-height:48px;width:100%;display:grid;place-items:center;font-size:12px;color:var(--ink-soft)}.auth-image-loading{background:linear-gradient(90deg,#f3f4f6,#e5e7eb,#f3f4f6);background-size:200% 100%;animation:auth-image-shimmer 1.2s ease-in-out infinite}@keyframes auth-image-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.compare-item-text .math-block{margin:4px 0;overflow-x:auto;max-width:100%}.compare-item-text .math-inline{display:inline}.compare-item-text .math-para-gap{display:block;margin-top:8px}.compare-item-text .katex{font-size:1.05em}.compare-item-text .katex-display{margin:.35em 0;overflow-x:auto;overflow-y:hidden}.compare-ko-hint{flex-shrink:0;margin:0;padding:8px 12px 12px;border-top:1px solid var(--line)}.compare-ko-strip{flex-shrink:0;border-top:1px solid var(--line)}.compare-ko-list{list-style:none;margin:0;padding:8px 12px 12px;max-height:120px;overflow:auto;font-size:12px;color:var(--ink-soft)}.compare-ko-list li{margin-bottom:4px}.quote-snip{margin-top:6px;color:var(--ink-soft);font-size:12px;font-style:italic;line-height:1.4}.list-plain{list-style:none;margin:0;padding:0}.list-plain li{padding:8px 0;border-bottom:1px solid var(--line, #ddd)}
