:root{--bg: #eaf0f8;--bg-elev: #ffffff;--surface: #ffffff;--surface-2: #f5f8fd;--border: #dbe4f1;--border-strong: #c8d4e6;--text: #162338;--text-dim: #4f617e;--muted: #7a8aa5;--brand: #1f3a8a;--brand-2: #1d4ed8;--brand-3: #60a5fa;--brand-soft: #ebf1ff;--brand-soft-strong: #d8e5ff;--success: #16a34a;--success-soft: #e8f7ee;--warn: #d97706;--warn-soft: #fef3c7;--danger: #dc2626;--danger-soft: #fee2e2;--radius: 12px;--radius-lg: 16px;--shadow-sm: 0 1px 2px rgba(15, 23, 42, .05);--shadow: 0 1px 3px rgba(15, 23, 42, .06), 0 1px 2px rgba(15, 23, 42, .04);--shadow-lg: 0 10px 30px rgba(15, 23, 42, .08), 0 4px 12px rgba(15, 23, 42, .05)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased}body{background:var(--bg);color:var(--text);line-height:1.45}a{color:var(--brand);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3{letter-spacing:-.01em;color:var(--text)}h2{font-size:22px;font-weight:600;margin:0 0 18px}h3{font-size:15px;font-weight:600}.app{display:grid;grid-template-columns:248px 1fr;min-height:100vh;background:var(--bg)}.sidebar{position:sticky;top:0;align-self:start;height:100vh;padding:22px 16px;display:flex;flex-direction:column;gap:18px;background:#1f2f60;border-right:0}.brand{display:flex;align-items:center;gap:10px;padding:6px 6px 10px}.sidebar .brand{justify-content:center;background:#fffffff5;border-radius:14px;padding:10px 12px;margin-bottom:4px}.brand-logo{display:block;height:34px;width:auto;max-width:100%;object-fit:contain}.brand .logo{width:32px;height:32px;border-radius:9px;background:#fff;display:grid;place-items:center;box-shadow:0 6px 16px #11182733;color:#1f2f60;font-weight:800;font-size:15px}.brand .name{font-weight:700;font-size:17px;letter-spacing:.01em;color:#fff}.brand .name span{color:#d8e5ff}.nav{display:flex;flex-direction:column;gap:2px;flex:1}.nav a{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:10px;color:#c8d6fb;font-size:14px;font-weight:500;transition:background .16s ease,color .16s ease}.nav a:hover{color:#fff;background:#ffffff14;text-decoration:none}.nav a.active{color:#fff;background:#ffffff24;box-shadow:inset 0 0 0 1px #ffffff1f}.nav a .ic{width:18px;height:18px;flex-shrink:0;opacity:.95}.nav .section{padding:14px 12px 6px;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:#9db0df}.me{border-top:1px solid rgba(255,255,255,.14);padding-top:14px;display:flex;align-items:center;gap:10px}.me .avatar{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-weight:700;color:#fff;background:linear-gradient(135deg,var(--brand),var(--brand-2));font-size:13px}.me .who{flex:1;min-width:0}.me .who .email{font-size:13px;font-weight:600;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.me .who .role{font-size:11px;color:#a8bae9}.me .logout{background:transparent;border:1px solid rgba(255,255,255,.25);color:#e4ebff;padding:6px 10px;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;box-shadow:none}.me .logout:hover{color:#fff;background:#ffffff1a}.main{display:flex;flex-direction:column;min-width:0}.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:12px;padding:12px 28px;background:#f6f9ff;border-bottom:1px solid #d9e3f2}.topbar .title{font-size:18px;font-weight:600;color:var(--text)}.topbar .spacer{flex:1}.chip{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:999px;background:#fff;color:#54627a;border:1px solid #d3dded;font-size:12px;font-weight:600;letter-spacing:.03em}.content{padding:26px 28px;display:flex;flex-direction:column;align-items:stretch}.content>*{width:100%}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:22px;margin-bottom:18px;box-shadow:var(--shadow)}.card h3{margin-top:0}.card>:first-child{margin-top:0}.card>:last-child{margin-bottom:0}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#0f172a73;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:grid;place-items:center;padding:24px;animation:overlayIn .16s ease}@keyframes overlayIn{0%{opacity:0}to{opacity:1}}.modal-card{position:relative;width:100%;max-width:820px;background:var(--surface);border:1px solid var(--border);border-radius:18px;box-shadow:var(--shadow-lg);padding:30px 32px 24px;animation:modalIn .18s ease}@keyframes modalIn{0%{transform:translateY(8px) scale(.98);opacity:0}to{transform:none;opacity:1}}.modal-close{position:absolute;top:-14px;right:-14px;width:36px;height:36px;border-radius:10px;background:#ef4444;color:#fff;font-size:22px;line-height:1;font-weight:400;padding:0;box-shadow:0 10px 24px #ef444459}.modal-close:hover{filter:brightness(1.05)}.upload-modal .kicker{font-size:11px;font-weight:700;letter-spacing:.18em;color:var(--brand);text-transform:uppercase}.upload-modal-header{margin-bottom:16px}.upload-modal-title{font-size:22px;font-weight:800;letter-spacing:.08em;margin:4px 0 0;color:var(--text);text-transform:uppercase}.upload-modal-extra{margin-bottom:16px}.upload-modal-extra label{margin-bottom:0}.upload-modal-grid{display:grid;grid-template-columns:1fr 1.1fr;gap:22px;align-items:stretch}.upload-dropzone-lg{border:1.5px dashed #c8d3ff;border-radius:16px;background:#f7faff;min-height:280px;padding:22px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;cursor:pointer;transition:background .16s ease,border-color .16s ease}.upload-dropzone-lg:hover,.upload-dropzone-lg.drag{background:#eef3ff;border-color:var(--brand)}.upload-illustration{position:relative;width:150px;height:110px}.upload-illustration .illu-card{position:absolute;width:60px;height:76px;border-radius:10px;background:#e2e8ff;box-shadow:0 8px 20px #6366f11f}.upload-illustration .c1{left:4px;top:20px;transform:rotate(-14deg);background:#fde7f3}.upload-illustration .c2{left:44px;top:10px;background:#e3eaff}.upload-illustration .c3{left:86px;top:22px;transform:rotate(12deg);background:#e9fbf6}.upload-illustration .illu-cloud{position:absolute;left:50%;top:-10px;transform:translate(-50%);width:72px;height:72px;border-radius:50%;background:#fff;box-shadow:0 10px 24px #6366f12e;display:grid;place-items:center}.upload-drop-text{text-align:center;color:var(--text);font-size:14px;font-weight:500}.upload-drop-sub{color:var(--muted);font-size:13px;margin-top:4px;font-weight:400}.upload-drop-sub .link{color:var(--brand);font-weight:600}.upload-queue{display:flex;flex-direction:column;gap:10px;max-height:320px;overflow-y:auto;padding-right:4px}.upload-queue-empty{padding:18px;text-align:center;border:1px dashed var(--border);border-radius:12px;background:var(--surface-2)}.queue-row{display:grid;grid-template-columns:40px 1fr auto;gap:12px;align-items:center;padding:10px 12px;background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-sm);transition:box-shadow .16s ease}.queue-row.uploading{box-shadow:0 2px 10px #6366f126}.queue-row.error{border-color:#fecaca}.queue-row.done{border-color:#bbf7d0}.queue-icon{width:40px;height:48px;border-radius:8px;display:grid;place-items:center;color:#fff;font-size:10px;font-weight:800;letter-spacing:.06em;box-shadow:0 4px 10px #00000014;position:relative}.queue-icon:before{content:"";position:absolute;top:0;right:0;width:10px;height:10px;background:#ffffff59;border-bottom-left-radius:4px}.queue-main{min-width:0}.queue-name{font-size:13px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.queue-meta{font-size:11px;color:var(--muted);margin:2px 0 6px}.queue-err{color:var(--danger)}.queue-bar{height:4px;width:100%;background:#eef0f7;border-radius:999px;overflow:hidden}.queue-bar-fill{height:100%;transition:width .12s linear,background .12s ease}.queue-status{display:flex;align-items:center;justify-content:flex-end;min-width:52px}.queue-status .dot{width:26px;height:26px;border-radius:50%;display:inline-grid;place-items:center;font-size:12px;font-weight:700;color:#fff}.queue-status .dot.ok{background:#16a34a}.queue-status .dot.err{background:#dc2626}.queue-status .dot.up{background:transparent;color:var(--brand);border:1.5px solid var(--brand-soft-strong);font-size:10px;width:auto;height:auto;padding:3px 8px;border-radius:999px}button.tiny{padding:4px 9px;font-size:11px}.upload-modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}input,textarea,select{width:100%;background:var(--surface);color:var(--text);border:1px solid var(--border-strong);border-radius:10px;padding:10px 12px;min-height:40px;font:inherit;transition:border-color .16s ease,box-shadow .16s ease}input:focus,textarea:focus,select:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px #6366f126}input::placeholder,textarea::placeholder{color:var(--muted)}label{display:block;margin-bottom:12px;font-size:13px;color:var(--text-dim)}label>span{display:block;margin-bottom:6px;font-size:12px;color:var(--muted);letter-spacing:.02em}button,.btn{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;border:0;padding:9px 16px;min-height:40px;border-radius:10px;font:inherit;font-weight:600;color:#fff;background:linear-gradient(135deg,var(--brand) 0%,var(--brand-2) 100%);box-shadow:0 2px 6px #6366f140;transition:transform .12s ease,box-shadow .16s ease,filter .16s ease}button:hover,.btn:hover{filter:brightness(1.04);box-shadow:0 4px 10px #6366f14d}button:active{transform:translateY(1px)}button:disabled{opacity:.55;cursor:not-allowed;filter:grayscale(.2);box-shadow:none}button.ghost{background:var(--surface);color:var(--text);border:1px solid var(--border-strong);box-shadow:none}button.ghost:hover{background:var(--surface-2)}button.danger{background:linear-gradient(135deg,#ef4444,#b91c1c);box-shadow:0 2px 6px #ef444440}.table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow)}table{width:100%;border-collapse:collapse}th,td{text-align:left;vertical-align:middle;padding:12px 14px;border-bottom:1px solid var(--border);font-size:14px;color:var(--text)}thead th{background:var(--surface-2);color:var(--muted);font-weight:600;font-size:11px;letter-spacing:.08em;text-transform:uppercase;border-bottom:1px solid var(--border)}tbody tr{transition:background .12s ease}tbody tr:hover{background:var(--surface-2)}tbody tr:last-child td{border-bottom:0}.badge{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:11px;font-weight:600;letter-spacing:.03em;border:1px solid transparent}.badge:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.badge.PENDING,.badge.PROCESSING{background:var(--warn-soft);color:var(--warn);border-color:#fde68a}.badge.READY{background:var(--success-soft);color:var(--success);border-color:#bbf7d0}.badge.FAILED{background:var(--danger-soft);color:var(--danger);border-color:#fecaca}.badge.SOP,.badge.VIDEO{background:var(--brand-soft);color:var(--brand);border-color:var(--brand-soft-strong)}.flex{display:flex;gap:12px;align-items:center}.flex.wrap{flex-wrap:wrap}.spacer{flex:1}.page-toolbar{margin-bottom:18px}.page-heading{margin-bottom:12px}.page-heading h3{margin:0}.toolbar-search{max-width:380px}.muted{color:var(--muted)}.text-dim{color:var(--text-dim)}.empty-state{padding:24px;text-align:center}.search-form{gap:10px}.search-input{flex:1}.search-type{width:140px}.search-summary{margin:4px 0 14px;font-size:13px}.search-result-card{padding-top:16px;padding-bottom:16px}.error{display:block;margin-bottom:12px;padding:10px 12px;border-radius:10px;border:1px solid #fecaca;background:#fff1f2;color:#b91c1c;font-size:13px;font-weight:500}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;color:var(--text-dim)}mark{background:#fef08a;color:inherit;padding:1px 3px;border-radius:4px}.sop-keywords{display:inline-block;max-width:100%;white-space:normal;word-break:break-word;overflow-wrap:anywhere}.sop-content{margin:0;max-width:100%;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}.segments{display:flex;flex-direction:column;gap:4px;margin-top:12px}.seg{padding:8px 12px;border-radius:8px;cursor:pointer;transition:background .12s ease}.seg:hover{background:var(--surface-2)}.seg .t{font-size:11px;color:var(--muted);margin-right:10px;font-family:ui-monospace,monospace}.chat-body{overflow-y:auto;scrollbar-gutter:stable}.chat-body::-webkit-scrollbar{width:10px}.chat-body::-webkit-scrollbar-thumb{background:#bfcbe0;border-radius:10px}.chat-body::-webkit-scrollbar-thumb:hover{background:#9fb1cf}.chat-body::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#d5d9e5;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:#b8bdcf}::-webkit-scrollbar-track{background:transparent}@keyframes login-spin{to{transform:rotate(360deg)}}.login-page{position:relative;min-height:100vh;padding:16px;background-color:#0b1220}.login-page--ready{background-image:url(/login_page.gif);background-size:cover;background-position:center;background-repeat:no-repeat}.login-page__overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background:linear-gradient(to bottom right,#00000040,#00000040);-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}.login-page__content{position:relative;z-index:1;display:flex;min-height:calc(100vh - 32px);width:100%;align-items:center;justify-content:flex-end;padding-right:32px}.login-page__card-wrap{width:100%;max-width:28rem}.login-page__card{border:0;border-radius:4rem;background:#f3f1f7;box-shadow:0 25px 50px -12px #00000040;padding:24px 24px calc(2.5rem + 20px)}.login-page__header{text-align:center;margin-bottom:32px}.login-page__logo{display:block;height:40px;width:auto;object-fit:contain;margin:0 auto 24px}.login-page__title{margin:0 0 8px;font-size:clamp(1.875rem,4vw,2.25rem);font-weight:700;line-height:1.15;color:#1f2937}.login-page__subtitle{margin:8px 0 0;font-size:16px;line-height:1.5;color:#374151}.login-page__form{display:grid;gap:20px}.login-page__field-group{display:grid;gap:8px}.login-page__field{position:relative;display:block}.login-page__field-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:20px;height:20px;color:#6b7280;pointer-events:none}.login-page__field-icon svg{width:100%;height:100%}.login-page__field input{width:100%;height:58px;padding:0 44px 0 40px;border:1px solid #d6dbe3;border-radius:2rem;background:#f0f1f4;color:#4f617e;font-size:16px;box-shadow:none}.login-page__field input::placeholder{color:#6b7f9a}.login-page__field input:focus{outline:none;border-color:#c084fc;background:#f0f1f4;box-shadow:0 0 0 1px #c084fc}.login-page__field input:disabled{opacity:.7;cursor:not-allowed}.login-page__field-toggle{position:absolute;right:12px;top:50%;transform:translateY(-50%);width:28px;height:28px;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;color:#6b7280;display:grid;place-items:center}.login-page__field-toggle svg{width:20px;height:20px}.login-page__field-toggle:hover{color:#374151;background:transparent}.login-page__error{margin-bottom:24px;padding:12px 16px;border:1px solid #fca5a5;border-radius:.5rem;background:#fef2f2;color:#b91c1c;font-size:14px}.login-page__submit{width:100%;height:58px;border:0;border-radius:2rem;background:#e1e5eb;color:#a0a8b5;font-size:16px;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;cursor:not-allowed;transition:transform .16s ease,background-color .16s ease}.login-page__submit--ready:not(:disabled){background:#273355;color:#fff;cursor:pointer}.login-page__submit--ready:not(:disabled):hover{background:#1f2a46}.login-page__submit--ready:not(:disabled):active{transform:scale(.98);background:#1a2237}.login-page__submit-loading{display:inline-flex;align-items:center;justify-content:center;gap:8px}.login-page__spinner{width:16px;height:16px;border:2px solid #ffffff;border-top-color:transparent;border-radius:50%;animation:login-spin .8s linear infinite}@media (min-width: 640px){.login-page__card{padding:32px 32px calc(2.5rem + 20px)}}@media (min-width: 768px){.login-page__card{padding:40px 40px calc(2.5rem + 20px)}.login-page__content{padding-right:64px}}@media (max-width: 640px){.login-page__content{justify-content:center;padding-right:0}}@media (max-width: 860px){.app{grid-template-columns:1fr}.sidebar{position:static;height:auto;flex-direction:row;align-items:center;overflow-x:auto}.sidebar .nav{flex-direction:row}.me{border-top:0;padding-top:0}.upload-modal-grid{grid-template-columns:1fr}}
