:root{--bg: #0f1b2d;--surface: #17253c;--surface-raised: #1e2f4a;--border: #2a3e5c;--text: #f2f6fc;--text-muted: #9fb2cc;--text-faint: #6e829e;--primary: #3b87f5;--primary-pressed: #2c6fd1;--on-primary: #ffffff;--success: #3dd68c;--warning: #f5b93b;--danger: #f2685c;--info: #7ca9e8;--bubble-mine: #2c6fd1;--bubble-theirs: #1e2f4a;--bubble-human: #1d4438;--sp-xs: 4px;--sp-sm: 8px;--sp-md: 12px;--sp-lg: 16px;--sp-xl: 24px;--sp-2xl: 32px;--r-sm: 8px;--r-md: 12px;--r-lg: 18px;--r-pill: 999px;--sidebar-w: 232px;--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:var(--font);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3{margin:0 0 var(--sp-sm);line-height:1.25}h1{font-size:26px;letter-spacing:-.4px}h2{font-size:19px}h3{font-size:16px}p{margin:0 0 var(--sp-md)}:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:4px}.shell{display:grid;grid-template-columns:var(--sidebar-w) 1fr;height:100%}.sidebar{background:var(--surface);border-right:1px solid var(--border);padding:var(--sp-lg);display:flex;flex-direction:column;gap:var(--sp-xs);overflow-y:auto}.brand{font-weight:700;font-size:17px;letter-spacing:-.3px;margin-bottom:var(--sp-lg);display:flex;align-items:center;gap:var(--sp-sm)}.nav-link{display:flex;align-items:center;gap:var(--sp-md);padding:10px var(--sp-md);border-radius:var(--r-sm);color:var(--text-muted);font-size:14px;font-weight:500}.nav-link:hover{background:var(--surface-raised);color:var(--text);text-decoration:none}.nav-link.active{background:var(--primary);color:var(--on-primary)}.nav-spacer{flex:1}.main{overflow-y:auto;padding:var(--sp-xl)}.main-narrow{max-width:860px;margin:0 auto}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-lg);margin-bottom:var(--sp-xl)}.centered{min-height:100%;display:grid;place-items:center;padding:var(--sp-xl)}.auth-card{width:100%;max-width:420px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:var(--sp-lg);margin-bottom:var(--sp-md)}.card-tight{padding:var(--sp-md)}.card-clickable{cursor:pointer;transition:border-color .12s ease}.card-clickable:hover{border-color:var(--primary)}.muted{color:var(--text-muted)}.faint{color:var(--text-faint)}.small{font-size:13px}.tiny{font-size:11px;font-weight:600;letter-spacing:.4px}.strong{font-weight:600}.mono{font-family:var(--mono)}.right{text-align:right}.row{display:flex;align-items:center;gap:var(--sp-sm)}.row-between{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-md)}.col{display:flex;flex-direction:column;gap:var(--sp-sm)}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-md)}button{font-family:inherit;font-size:15px;font-weight:600;border:none;border-radius:var(--r-md);padding:11px var(--sp-lg);background:var(--primary);color:var(--on-primary);cursor:pointer;transition:background .12s ease,opacity .12s ease}button:hover:not(:disabled){background:var(--primary-pressed)}button:disabled{opacity:.45;cursor:not-allowed}button.secondary{background:transparent;border:1px solid var(--primary);color:var(--primary)}button.secondary:hover:not(:disabled){background:#3b87f51f}button.ghost{background:transparent;color:var(--primary);padding:8px var(--sp-md)}button.ghost:hover:not(:disabled){background:#3b87f51a}button.danger{background:var(--danger)}button.block{width:100%}label{display:block;font-size:13px;color:var(--text-muted);margin-bottom:var(--sp-xs)}input,textarea,select{width:100%;font-family:inherit;font-size:15px;color:var(--text);background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--r-sm);padding:10px var(--sp-md)}input:focus,textarea:focus,select:focus{border-color:var(--primary);outline:none}input.invalid{border-color:var(--danger)}textarea{resize:vertical;min-height:96px}.field{margin-bottom:var(--sp-lg)}.field .hint{font-size:12px;color:var(--text-faint);margin-top:var(--sp-xs)}.field .error{font-size:12px;color:var(--danger);margin-top:var(--sp-xs)}.badge{display:inline-block;border:1px solid var(--text-muted);color:var(--text-muted);border-radius:var(--r-pill);padding:1px 9px;font-size:11px;font-weight:600;letter-spacing:.4px;text-transform:uppercase;white-space:nowrap}.badge.success{border-color:var(--success);color:var(--success)}.badge.warning{border-color:var(--warning);color:var(--warning)}.badge.danger{border-color:var(--danger);color:var(--danger)}.badge.info{border-color:var(--info);color:var(--info)}.banner{border-radius:var(--r-sm);padding:var(--sp-md);margin-bottom:var(--sp-lg);font-size:13px}.banner.error{background:#f2685c24;border:1px solid var(--danger);color:var(--danger)}.banner.warn{background:#f5b93b1f;border:1px solid var(--warning);color:var(--warning)}table{width:100%;border-collapse:collapse;font-size:14px}th{text-align:left;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;color:var(--text-faint);padding:var(--sp-sm) var(--sp-md);border-bottom:1px solid var(--border)}td{padding:var(--sp-md);border-bottom:1px solid var(--border);vertical-align:middle}tr:last-child td{border-bottom:none}.progress-track{height:8px;border-radius:var(--r-pill);background:var(--surface-raised);overflow:hidden}.progress-fill{height:100%;background:var(--success);border-radius:var(--r-pill)}.empty{text-align:center;padding:var(--sp-2xl);color:var(--text-muted)}.spinner{width:20px;height:20px;border:2px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .7s linear infinite;margin:var(--sp-2xl) auto}@keyframes spin{to{transform:rotate(360deg)}}.chat{display:flex;flex-direction:column;height:calc(100vh - 2 * var(--sp-xl));max-width:820px;margin:0 auto}.chat-head{border-bottom:1px solid var(--border);padding-bottom:var(--sp-md);margin-bottom:var(--sp-md)}.chat-log{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--sp-sm);padding-right:var(--sp-sm)}.bubble{max-width:76%;padding:10px var(--sp-md);border-radius:var(--r-lg);background:var(--bubble-theirs);align-self:flex-start;border-bottom-left-radius:var(--r-sm)}.bubble.mine{background:var(--bubble-mine);align-self:flex-end;border-bottom-left-radius:var(--r-lg);border-bottom-right-radius:var(--r-sm)}.bubble.human{background:var(--bubble-human)}.bubble .who{font-size:11px;font-weight:600;color:var(--success);margin-bottom:3px}.bubble .when{font-size:11px;color:var(--text-faint);margin-top:5px;text-align:right}.composer{display:flex;gap:var(--sp-sm);align-items:flex-end;border-top:1px solid var(--border);padding-top:var(--sp-md);margin-top:var(--sp-md)}.composer textarea{min-height:44px;max-height:160px}.suggestions{display:flex;flex-wrap:wrap;gap:var(--sp-sm);margin-top:var(--sp-lg)}.suggestion{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-pill);padding:8px var(--sp-lg);font-size:14px;font-weight:400;color:var(--text)}.suggestion:hover{border-color:var(--primary);background:var(--surface-raised)}.summary-panel{background:#3b87f51a;border-left:3px solid var(--primary);border-radius:var(--r-sm);padding:var(--sp-md);margin-bottom:var(--sp-md)}.thumb-strip{display:flex;gap:var(--sp-sm);overflow-x:auto;margin-top:var(--sp-md);padding-bottom:var(--sp-xs)}.thumb{width:150px;height:112px;object-fit:cover;border-radius:var(--r-sm);background:var(--surface-raised);cursor:pointer;flex-shrink:0}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000f0;display:grid;place-items:center;z-index:50;padding:var(--sp-xl)}.lightbox img{max-width:92vw;max-height:86vh;object-fit:contain}@media (max-width: 860px){.shell{grid-template-columns:1fr;grid-template-rows:auto 1fr}.sidebar{flex-direction:row;overflow-x:auto;border-right:none;border-bottom:1px solid var(--border);padding:var(--sp-sm) var(--sp-md);align-items:center}.brand,.nav-spacer{display:none}.nav-link{white-space:nowrap}.main{padding:var(--sp-lg)}.grid-2{grid-template-columns:1fr}}
