:root{--navy-50: #EDF7FD;--navy-100: #E0E9EF;--navy-200: #C0D5E1;--navy-300: #91B7CE;--navy-400: #7095AB;--navy-500: #507489;--navy-600: #34576B;--navy-700: #1F4155;--navy-800: #062B3D;--navy-900: #001420;--blue-50: #E3F8FF;--blue-100: #D6EBFE;--blue-200: #A9D7FF;--blue-300: #5FB9FF;--blue-400: #3996DC;--blue-500: #0374B8;--blue-600: #0C77BB;--blue-700: #003F78;--blue-800: #002853;--blue-900: #001231;--sky-50: #E0FAFF;--sky-100: #D3ECFA;--sky-200: #A1DAF9;--sky-300: #44BFF6;--sky-400: #27AAE0;--sky-500: #007AAD;--sky-600: #005B86;--sky-700: #004467;--neutral-50: #F7F5F1;--neutral-100: #EAE7E3;--neutral-200: #D3D1CD;--neutral-300: #B5B0A9;--neutral-400: #938E87;--neutral-500: #726E67;--neutral-600: #56524B;--neutral-700: #403D36;--neutral-800: #282623;--neutral-900: #13110F;--success-50: #E8FAF0;--success-600: #066242;--warning-50: #FFF2DF;--warning-600: #7C4200;--danger-50: #FFECE9;--danger-600: #961D23;--color-surface: #FFFFFF;--color-surface-raised: var(--neutral-50);--color-surface-sunken: var(--neutral-100);--color-text-primary: var(--navy-800);--color-text-secondary: var(--neutral-700);--color-text-tertiary: var(--neutral-600);--color-text-link: var(--blue-700);--color-brand-surface: var(--blue-600);--color-focus-ring: var(--sky-400);--color-border: var(--neutral-200);--color-border-strong: var(--neutral-300);--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--space-20: 80px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-2xl: 24px;--radius-full: 9999px;--shadow-xs: 0 1px 2px rgba(6, 43, 61, .06);--shadow-sm: 0 1px 3px rgba(6, 43, 61, .08), 0 1px 2px rgba(6, 43, 61, .04);--shadow-md: 0 4px 8px rgba(6, 43, 61, .1), 0 2px 4px rgba(6, 43, 61, .06);--shadow-lg: 0 10px 24px rgba(6, 43, 61, .12), 0 4px 8px rgba(6, 43, 61, .06);--shadow-xl: 0 20px 40px rgba(6, 43, 61, .14), 0 8px 16px rgba(6, 43, 61, .08);--text-2xl: clamp(30px, .8vw + 26px, 36px);--text-xl: clamp(24px, .3vw + 22px, 26px);--text-lg: clamp(20px, .2vw + 19px, 22px);--text-body-lg: clamp(18px, .1vw + 17px, 19px);--text-base: clamp(16px, .1vw + 15px, 17px);--text-sm: clamp(14px, .1vw + 13px, 15px);--text-xs: clamp(12px, .1vw + 11px, 13px)}*{box-sizing:border-box}html,body,#root{margin:0;height:100%}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:var(--color-surface-raised);color:var(--color-text-primary);font-size:var(--text-base);line-height:1.5}a{color:var(--color-text-link);text-decoration:underline;text-underline-offset:2px}a:hover{color:var(--blue-600)}*:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px;border-radius:var(--radius-sm)}.layout{display:flex;flex-direction:column;min-height:100vh}.topbar{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-6);background:var(--navy-800);color:#fff;box-shadow:var(--shadow-sm)}.topbar a{color:#fff;text-decoration:none;font-weight:500;font-size:var(--text-sm)}.topbar a:hover{color:var(--sky-300)}.brand{font-weight:700;font-size:var(--text-lg)}.topbar-nav{display:flex;gap:var(--space-4);align-items:center}.topbar-nav .who{font-size:var(--text-sm);color:#ffffffb3}.brand{display:flex;align-items:center;gap:var(--space-3)}.topbar-logo{height:36px;width:auto;object-fit:contain}.brand-divider{opacity:.4}.brand-section{font-weight:500;opacity:.85;font-size:var(--text-sm)}.brand-mark{display:flex;align-items:center;justify-content:center;gap:var(--space-3);margin-bottom:var(--space-2)}.brand-mark-icon{width:48px;height:48px;object-fit:contain;flex-shrink:0}.brand-mark-text{text-align:left;line-height:1.05}.brand-mark-name{font-size:24px;font-weight:800;color:var(--navy-800);letter-spacing:-.01em}.brand-mark-name span{color:var(--sky-500);font-weight:800}.brand-mark-tagline{font-size:10px;letter-spacing:.22em;color:var(--color-text-tertiary);font-weight:700;margin-top:2px}.brand-mark-text.on-dark .brand-mark-name{color:#fff;font-size:20px}.brand-mark-text.on-dark .brand-mark-name span{color:var(--sky-300)}.brand-mark-text.on-dark .brand-mark-tagline{color:#ffffffa6;font-size:8px}.link-button{background:none;border:none;color:#fff;cursor:pointer;font:inherit;font-weight:500;font-size:var(--text-sm);padding:0;text-decoration:underline;text-underline-offset:2px}.link-button:hover{color:var(--sky-300)}.boot{padding:var(--space-8);text-align:center;color:var(--color-text-tertiary)}.login-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--navy-900) 0%,var(--navy-700) 100%);padding:var(--space-6)}.login-card{background:var(--color-surface);padding:var(--space-8);border-radius:var(--radius-2xl);width:100%;max-width:380px;display:flex;flex-direction:column;gap:var(--space-4);box-shadow:var(--shadow-xl)}.login-subtitle{margin:calc(var(--space-2) * -1) 0 var(--space-2);color:var(--color-text-secondary);font-size:var(--text-sm);text-align:center;letter-spacing:.04em}.login-card label{display:flex;flex-direction:column;gap:var(--space-1);font-size:var(--text-xs);font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.04em}.login-card input{min-height:48px;padding:var(--space-3) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);font:inherit;font-weight:400;text-transform:none;letter-spacing:normal;color:var(--color-text-primary);background:var(--color-surface)}.login-card input:hover{border-color:var(--color-border-strong)}.login-card .primary{margin-top:var(--space-2);width:100%}.hint{color:var(--color-text-secondary);font-size:var(--text-sm)}.hint code{background:var(--color-surface-sunken);padding:1px 6px;border-radius:var(--radius-sm);font-size:var(--text-xs);font-family:JetBrains Mono,SF Mono,Menlo,Consolas,monospace}.hint strong{color:var(--color-text-primary)}.user-form{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-5);margin:var(--space-4) 0 var(--space-6);box-shadow:var(--shadow-sm)}.user-form h2{margin:0 0 var(--space-3);font-size:var(--text-lg);font-weight:600;color:var(--color-text-primary)}.user-form-row{display:grid;grid-template-columns:1fr 1fr 1fr auto;gap:12px;align-items:end}.user-form-row label{display:flex;flex-direction:column;gap:var(--space-1);font-size:var(--text-xs);font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.04em}.user-form-row input,.user-form-row select{min-height:44px;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);font:inherit;font-weight:400;text-transform:none;letter-spacing:normal;color:var(--color-text-primary);background:var(--color-surface)}.user-form-row input:hover,.user-form-row select:hover{border-color:var(--color-border-strong)}.user-form-row .primary{align-self:end}.users-table .badge{display:inline-block;padding:var(--space-1) var(--space-3);border-radius:var(--radius-full);background:var(--neutral-100);color:var(--color-text-secondary);font-size:var(--text-xs);font-weight:600;letter-spacing:.02em}.users-table .badge-admin{background:var(--blue-50);color:var(--blue-700)}.users-table .badge-super{background:var(--warning-50);color:var(--warning-600)}.users-table .role-select{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);font:inherit;font-size:var(--text-sm);color:var(--color-text-primary);cursor:pointer}.users-table .role-select:hover{border-color:var(--color-border-strong)}.row-actions{display:flex;gap:var(--space-2);align-items:center}.row-actions button{padding:var(--space-2) var(--space-3);font-size:var(--text-xs);font-weight:600;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text-primary);cursor:pointer;border-radius:var(--radius-md)}.row-actions button:hover{background:var(--color-surface-raised);border-color:var(--color-border-strong)}.row-actions .danger{color:var(--danger-600);border-color:var(--danger-600);background:var(--color-surface)}.row-actions .danger:hover{background:var(--danger-50)}.row-actions .locked{font-size:var(--text-xs);color:var(--color-text-tertiary);font-style:italic}.inline-form{display:flex;gap:6px;align-items:center}.inline-form input{padding:4px 8px;font-size:12px;border:1px solid #d1d5db;border-radius:6px}.inline-form button{padding:4px 10px;font-size:12px;border:1px solid #d1d5db;background:#fff;cursor:pointer;border-radius:6px}.user-cell{display:flex;flex-direction:column;gap:2px}.user-cell strong{font-weight:600;color:var(--color-text-primary)}.user-cell span{font-size:var(--text-xs);color:var(--color-text-tertiary)}.chat-main{flex:1;max-width:820px;margin:0 auto;width:100%;padding:var(--space-6) var(--space-4);display:flex;flex-direction:column}.user-bar{display:flex;gap:var(--space-4);padding:var(--space-2) 0 var(--space-3);border-bottom:1px solid var(--color-border);margin-bottom:var(--space-4);flex-wrap:wrap}.user-bar label{display:flex;flex-direction:column;font-size:var(--text-xs);font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.04em;gap:var(--space-1)}.user-bar input{min-height:40px;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);font:inherit;font-weight:400;text-transform:none;letter-spacing:normal;color:var(--color-text-primary);background:var(--color-surface);min-width:220px}.messages{flex:1;overflow-y:auto;padding-bottom:var(--space-4);min-height:360px}.empty-state{text-align:center;color:var(--color-text-tertiary);padding:var(--space-16) var(--space-4);font-size:var(--text-base)}.msg{display:flex;margin-bottom:var(--space-3)}.msg-user{justify-content:flex-end}.msg-bubble{max-width:85%;padding:var(--space-3) var(--space-4);border-radius:var(--radius-lg);font-size:var(--text-body-lg);line-height:1.5;white-space:pre-wrap;word-wrap:break-word;box-shadow:var(--shadow-xs)}.msg-user .msg-bubble{background:var(--blue-600);color:#fff;border-bottom-right-radius:var(--radius-sm)}.msg-assistant .msg-bubble{background:var(--color-surface);color:var(--color-text-primary);border:1px solid var(--color-border);border-bottom-left-radius:var(--radius-sm)}.msg-bubble.typing{font-style:italic;color:var(--color-text-tertiary)}.markdown-text{white-space:normal}.markdown-text p{margin:0 0 var(--space-3)}.markdown-text p:last-child,.markdown-text ul:last-child,.markdown-text ol:last-child{margin-bottom:0}.markdown-text ul,.markdown-text ol{margin:0 0 var(--space-3);padding-left:var(--space-5)}.markdown-text li{margin:0 0 var(--space-2)}.markdown-text strong{font-weight:700}.sources{margin-top:var(--space-3);padding-top:var(--space-3);border-top:1px solid var(--color-border);font-size:var(--text-sm)}.sources-label{font-weight:600;color:var(--color-text-secondary);margin-bottom:var(--space-1);text-transform:uppercase;letter-spacing:.06em;font-size:var(--text-xs)}.sources ul{margin:0;padding-left:var(--space-5)}.sources li{margin-bottom:var(--space-1);word-break:break-word}.sources a{color:var(--color-text-link)}.msg-actions{margin-top:var(--space-3);display:flex;gap:var(--space-2)}.msg-actions button{padding:var(--space-1) var(--space-3);font-size:var(--text-xs);font-weight:600;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text-secondary);cursor:pointer;border-radius:var(--radius-md)}.msg-actions button:hover{background:var(--color-surface-raised);border-color:var(--color-border-strong);color:var(--color-text-primary)}.composer{display:flex;gap:var(--space-2);padding-top:var(--space-3);border-top:1px solid var(--color-border)}.composer input{flex:1;min-height:48px;padding:var(--space-3) var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-md);font:inherit;font-size:var(--text-base);color:var(--color-text-primary);background:var(--color-surface)}.composer input:hover{border-color:var(--color-border-strong)}.composer input:disabled{background:var(--color-surface-sunken);color:var(--color-text-tertiary)}.composer button{min-height:48px;padding:0 var(--space-5);background:var(--color-brand-surface);color:#fff;border:none;border-radius:var(--radius-md);cursor:pointer;font-weight:600;font-size:var(--text-sm);transition:background-color .12s ease}.composer button:hover:not(:disabled){background:var(--blue-700)}.composer button:active:not(:disabled){background:var(--blue-800)}.composer button:disabled{opacity:.55;cursor:not-allowed}.inline-error{padding:var(--space-2) var(--space-3);margin-bottom:var(--space-2);background:var(--danger-50);border:1px solid var(--danger-600);color:var(--danger-600);border-radius:var(--radius-md);font-size:var(--text-sm)}.drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000004d;z-index:10}.drawer{position:fixed;top:0;left:0;bottom:0;width:min(440px,92vw);background:#fff;z-index:20;display:flex;flex-direction:column;box-shadow:2px 0 20px #0000002e;animation:slideIn .18s ease-out}@keyframes slideIn{0%{transform:translate(-100%)}to{transform:translate(0)}}.drawer-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #e5e7eb}.drawer-header h2{margin:0;font-size:18px}.drawer-header button{background:transparent;border:none;font-size:24px;cursor:pointer;color:#6b7280;line-height:1}.drawer-body{padding:16px 20px;overflow-y:auto;display:flex;flex-direction:column;gap:14px}.preview{background:#f9fafb;border:1px solid #e5e7eb;padding:10px 12px;border-radius:8px;font-size:13px;max-height:240px;overflow-y:auto}.preview-label{font-weight:600;color:#6b7280;margin-top:6px;font-size:11px;text-transform:uppercase;letter-spacing:.04em}.preview-label:first-child{margin-top:0}.preview-text{color:#1a1a1a;margin:2px 0 6px;white-space:pre-wrap}.drawer-body label{display:flex;flex-direction:column;gap:4px;font-size:12px;font-weight:600;color:#374151;text-transform:uppercase;letter-spacing:.03em}.drawer-body textarea,.drawer-body select,.drawer-body input{padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;font:inherit;font-weight:400;text-transform:none;letter-spacing:normal;color:#1a1a1a}.drawer-body textarea{resize:vertical;min-height:100px}.error{color:var(--danger-600);background:var(--danger-50);border:1px solid var(--danger-600);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);font-size:var(--text-sm)}.primary{min-height:48px;padding:var(--space-3) var(--space-5);background:var(--color-brand-surface);color:#fff;border:none;border-radius:var(--radius-md);cursor:pointer;font-weight:600;font-size:var(--text-sm);transition:background-color .12s ease,box-shadow .12s ease;box-shadow:var(--shadow-xs)}.primary:hover:not(:disabled){background:var(--blue-700);box-shadow:var(--shadow-sm)}.primary:active:not(:disabled){background:var(--blue-800)}.primary:disabled{opacity:.55;cursor:not-allowed;box-shadow:none}.admin-main{padding:var(--space-8) var(--space-6);max-width:1280px;margin:0 auto;width:100%}.admin-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-6)}.admin-header h1{margin:0;font-size:var(--text-2xl);font-weight:600;color:var(--color-text-primary)}.feedback-table{width:100%;border-collapse:separate;border-spacing:0;background:var(--color-surface);border:1px solid var(--color-border);box-shadow:var(--shadow-sm);border-radius:var(--radius-lg);overflow:hidden;font-size:var(--text-sm)}.feedback-table th,.feedback-table td{text-align:left;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border);vertical-align:top}.feedback-table tbody tr:last-child td{border-bottom:none}.feedback-table th{background:var(--color-surface-raised);font-weight:600;color:var(--color-text-secondary);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.06em}.feedback-table tr{cursor:pointer;transition:background-color .12s ease}.feedback-table tbody tr:hover{background:var(--neutral-50)}.feedback-table tr.row-open{background:var(--blue-50)}.feedback-table tr.row-open td{border-bottom-color:var(--blue-200)}.cell-long{max-width:280px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;white-space:pre-wrap}.cell-full{white-space:pre-wrap;max-width:480px}.search-bar{display:flex;gap:var(--space-3);align-items:end;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-4);margin:var(--space-4) 0 var(--space-5);box-shadow:var(--shadow-sm);flex-wrap:wrap}.search-bar-label{display:flex;flex-direction:column;gap:var(--space-1);font-size:var(--text-xs);font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.04em;flex:1;min-width:180px}.search-bar-label:first-of-type{flex:2}.search-bar input,.search-bar select{min-height:44px;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);font:inherit;font-weight:400;text-transform:none;letter-spacing:normal;color:var(--color-text-primary);background:var(--color-surface)}.search-bar input:hover,.search-bar select:hover{border-color:var(--color-border-strong)}.search-bar .primary{align-self:end}.search-meta{font-size:var(--text-sm);color:var(--color-text-secondary);margin-bottom:var(--space-4)}.search-meta em{font-style:italic;color:var(--color-text-primary)}.search-results{display:flex;flex-direction:column;gap:var(--space-3)}.search-hit{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-4);box-shadow:var(--shadow-xs);transition:box-shadow .12s ease,border-color .12s ease}.search-hit:hover{box-shadow:var(--shadow-sm);border-color:var(--color-border-strong)}.search-hit-head{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3);margin-bottom:var(--space-2)}.search-hit-head h3{margin:0;font-size:var(--text-base);font-weight:600;line-height:1.3}.search-hit-head h3 a{color:var(--color-text-link);text-decoration:none}.search-hit-head h3 a:hover{text-decoration:underline}.search-hit-tags{display:flex;gap:var(--space-1);flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.search-hit-tags .badge{display:inline-block;padding:var(--space-1) var(--space-2);border-radius:var(--radius-full);background:var(--neutral-100);color:var(--color-text-secondary);font-size:var(--text-xs);font-weight:600}.search-hit-tags .badge-sign{background:var(--warning-50);color:var(--warning-600)}.search-hit-tags .badge-board{background:var(--blue-50);color:var(--blue-700)}.search-hit-tags .badge-website{background:var(--sky-100);color:var(--sky-700)}.search-hit-tags .badge-document{background:var(--neutral-100);color:var(--color-text-secondary)}.search-hit-tags .badge-score{background:var(--success-50);color:var(--success-600);font-variant-numeric:tabular-nums}.search-hit-url{font-size:var(--text-xs);color:var(--color-text-tertiary);margin-bottom:var(--space-2);word-break:break-all}.search-hit-snippet{margin:0;color:var(--color-text-primary);font-size:var(--text-sm);line-height:1.5;white-space:pre-wrap}.search-hit-actions{margin-top:var(--space-3);padding-top:var(--space-3);border-top:1px solid var(--color-border);display:flex;gap:var(--space-2)}.search-hit-actions button{padding:var(--space-2) var(--space-3);font-size:var(--text-xs);font-weight:600;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text-secondary);cursor:pointer;border-radius:var(--radius-md)}.search-hit-actions button:hover:not(:disabled){background:var(--color-surface-raised);border-color:var(--color-border-strong);color:var(--color-text-primary)}.search-hit-actions button:disabled{color:var(--success-600);border-color:var(--success-50);background:var(--success-50);cursor:default}
