:root{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;line-height:1.5;font-weight:400;color:#0f172a;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;min-width:320px;background:#f8fafc}#root{min-height:100vh}.login-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#f4f6f8;padding:24px}.login-card{width:100%;max-width:440px;background:#fff;border-radius:12px;box-shadow:0 12px 32px #0f172a14;padding:28px}.login-card h1{margin:0 0 10px;color:#0f172a;font-size:1.5rem}.login-card p{margin:0 0 18px;color:#334155}.hint{margin-top:12px;font-size:.9rem;color:#64748b}.portal-shell{min-height:100vh;display:grid;grid-template-columns:260px 1fr;background:#f8fafc}.portal-menu{background:#0f172a;color:#e2e8f0;padding:24px 16px;display:flex;flex-direction:column;gap:16px}.portal-menu h1{margin:0;font-size:1.3rem}.user-name{margin:0;color:#93c5fd;font-size:.92rem}.user-chip{border:1px solid #334155;background:#1e293b;color:#e2e8f0;border-radius:999px;display:inline-flex;align-items:center;gap:8px;padding:6px 10px;cursor:pointer;width:fit-content}.user-chip:hover{background:#334155}.user-chip-text{font-size:.9rem;color:#bfdbfe}.provider-icon{width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center}.provider-svg{width:100%;height:100%;display:block}.provider-fallback{width:100%;height:100%;border-radius:999px;background:#cbd5e1;color:#0f172a;font-size:.74rem;font-weight:700;display:inline-flex;align-items:center;justify-content:center}.user-avatar{width:22px;height:22px;border-radius:999px;border:1px solid #475569;object-fit:cover;display:block}.menu-list{display:flex;flex-direction:column;gap:8px}.menu-divider{width:100%;border:0;border-top:1px solid #334155;margin:4px 0}.menu-item{border:none;width:100%;text-align:left;border-radius:8px;padding:10px 12px;background:transparent;color:#cbd5e1;font-size:.95rem}.menu-item:hover{background:#1e293b}.menu-item.active{background:#1d4ed8;color:#eff6ff}.portal-panel{padding:28px}.portal-panel h2{margin-top:0;color:#0f172a}.portal-panel p{color:#334155}.schedule-section h2{margin-bottom:8px}.schedule-section p{margin-top:0;margin-bottom:18px}.schedule-table{border:1px solid #cbd5e1;border-radius:10px;overflow:hidden;background:#fff}.schedule-table-element{width:100%;border-collapse:collapse;table-layout:fixed}.schedule-table-element th,.schedule-table-element td{padding:10px 12px;border-top:1px solid #e2e8f0;vertical-align:middle;text-align:left}.schedule-table-element thead th{border-top:none;background:#eff6ff;color:#1e3a8a;font-weight:600}.schedule-table-element th:nth-child(1),.schedule-table-element td:nth-child(1){width:98px;text-align:center}.schedule-table-element th:nth-child(2),.schedule-table-element td:nth-child(2){width:90px}.schedule-table-element th:nth-child(7),.schedule-table-element td:nth-child(7){width:90px}.schedule-table-element th:nth-child(8),.schedule-table-element td:nth-child(8){width:120px}.schedule-table-input-row{background:#f8fafc}.schedule-table-input-row select,.schedule-table-input-row input,.schedule-table-input-row .schedule-field-wrapper input{width:100%;border:1px solid #cbd5e1;border-radius:6px;padding:7px 8px;font-size:.9rem;box-sizing:border-box}.schedule-type-slider{display:inline-flex;align-items:center;justify-content:center;gap:8px;color:#334155;cursor:pointer;white-space:nowrap}.schedule-type-slider input{position:absolute;opacity:0;pointer-events:none}.schedule-type-track{position:relative;width:46px;height:24px;border-radius:999px;background:#cbd5e1;transition:background-color .2s ease}.schedule-type-thumb{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:999px;background:#fff;box-shadow:0 1px 2px #0f172a40;transition:transform .2s ease}.schedule-type-slider input:checked+.schedule-type-track{background:#2563eb}.schedule-type-slider input:checked+.schedule-type-track .schedule-type-thumb{transform:translate(22px)}.schedule-type-slider input:focus-visible+.schedule-type-track{outline:2px solid #93c5fd;outline-offset:2px}.schedule-type-option-label{font-size:.62rem;font-weight:400;letter-spacing:.08em;text-transform:uppercase;color:#64748b;white-space:nowrap}.schedule-table-state-cell{text-align:center;color:#64748b}.schedule-table-body-expanded tr{animation:schedule-row-expand .25s ease-out}@keyframes schedule-row-expand{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.schedule-link-anchor{color:#2563eb;text-decoration:underline;text-underline-offset:2px;word-break:break-word}.schedule-link-anchor:hover{color:#1d4ed8}.schedule-row{display:grid;grid-template-columns:110px 1.3fr 1.3fr 1fr 1fr 120px 100px;gap:10px;align-items:center;padding:10px 12px;border-top:1px solid #e2e8f0}.schedule-items-row{grid-template-columns:120px 110px 1.3fr 1.3fr 1fr 1fr 120px 120px}.schedule-row:first-child{border-top:none}.schedule-header{background:#eff6ff;color:#1e3a8a;font-weight:600}.schedule-input-row{background:#f8fafc}.schedule-input-row-invalid{background:#ffe4e6}.schedule-input-row select,.schedule-input-row input,.schedule-field-wrapper input{border:1px solid #cbd5e1;border-radius:6px;padding:7px 8px;font-size:.9rem}.schedule-field-wrapper{display:flex;flex-direction:column;gap:4px}.field-error{margin:0;color:#dc2626;font-size:.78rem;font-weight:600}.upload-snackbar{position:fixed;right:24px;bottom:24px;z-index:1200;background:#166534;color:#fff;padding:10px 14px;border-radius:8px;box-shadow:0 10px 24px #0000002e;font-size:.9rem;font-weight:600}.schedule-empty{padding:16px 12px;color:#64748b}.table-state-row{background:#fff}.table-state-cell{grid-column:1 / -1;display:inline-flex;align-items:center;justify-content:center;width:100%;padding:10px 0;color:#64748b}.table-body-expand-enter{overflow:hidden;animation:table-body-expand .28s ease-out}@keyframes table-body-expand{0%{max-height:0;opacity:0}to{max-height:6000px;opacity:1}}.table-pagination-controls{display:inline-flex;align-items:center;gap:8px}.table-pagination-button{min-width:60px;padding:6px 10px}.schedule-status-cell{display:inline-flex;align-items:center;justify-content:center}.schedule-status-icon-button{border:none;background:transparent;padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:0;vertical-align:middle}.schedule-status-icon{width:30px;height:30px;display:block}.loading-indicator{display:inline-flex;align-items:center;gap:10px;color:#334155;font-weight:600;margin-bottom:0}.loading-spinner{width:16px;height:16px;border:2px solid #cbd5e1;border-top-color:#2563eb;border-radius:999px;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.channel-row{display:grid;grid-template-columns:220px 1fr 140px 1fr 100px 120px;gap:10px;align-items:center;padding:10px 12px;border-top:1px solid #e2e8f0}.channel-row:first-child{border-top:none}.channel-input-row{background:#f8fafc}.channel-input-row input,.channel-input-row select{border:1px solid #cbd5e1;border-radius:6px;padding:7px 8px;font-size:.9rem}.admin-role-form{border:1px solid #cbd5e1;border-radius:10px;background:#fff;padding:14px;display:flex;align-items:flex-end;gap:10px}.admin-role-form label{display:flex;flex-direction:column;gap:6px;color:#334155;font-weight:600;flex:1}.admin-role-form input,.admin-role-form select{border:1px solid #cbd5e1;border-radius:6px;padding:8px 9px;font-size:.92rem}.admin-role-table{border:1px solid #cbd5e1;border-radius:10px;overflow:hidden;background:#fff}.admin-role-row{display:grid;grid-template-columns:220px 1fr 160px 100px;gap:10px;align-items:center;padding:10px 12px;border-top:1px solid #e2e8f0}.admin-role-row:first-child{border-top:none}.admin-role-header{background:#eff6ff;color:#1e3a8a;font-weight:600}.admin-role-row span{word-break:break-word}.topic-sets-section{display:flex;flex-direction:column;gap:14px}.topic-sets-header,.topic-sets-actions,.topic-list-header,.topic-set-actions{display:flex;align-items:center;justify-content:space-between;gap:10px}.topic-sets-header h2,.topic-list-header h3{margin:0}.topic-set-table{border:1px solid #cbd5e1;border-radius:10px;overflow:hidden;background:#fff}.datasets-section{display:flex;flex-direction:column;gap:14px}.dataset-table{border:1px solid #cbd5e1;border-radius:10px;overflow:hidden;background:#fff}.dataset-row{display:grid;grid-template-columns:220px 260px 1fr 1.3fr 120px 100px;gap:10px;align-items:center;text-align:left;padding:10px 12px;border-top:1px solid #e2e8f0}.dataset-row:first-child{border-top:none}.dataset-input-row{background:#f8fafc}.dataset-input-row input[type=text]{border:1px solid #cbd5e1;border-radius:6px;padding:8px 9px;font-size:.92rem;width:100%}.dataset-asset-row{display:grid;grid-template-columns:220px 1fr 1fr 1.5fr 140px;gap:10px;align-items:center;padding:10px 12px;border-top:1px solid #e2e8f0}.dataset-asset-row:first-child{border-top:none}.dataset-asset-actions{display:inline-flex;align-items:center;gap:10px}.topic-set-row{display:grid;grid-template-columns:64px 260px 1fr 120px 120px 100px;gap:10px;align-items:center;text-align:left;padding:10px 12px;border-top:1px solid #e2e8f0}.topic-set-row:first-child{border-top:none}.topic-set-header{background:#eff6ff;color:#1e3a8a;font-weight:600}.topic-set-select-row{background:#fff;color:#0f172a}.topic-set-select-row .link-button{font-size:1rem}.info-id-button{border:none;background:transparent;padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:0;vertical-align:middle}.info-id-icon{width:30px;height:30px;display:block}.jobs-row{grid-template-columns:72px 72px 1fr 2.4fr 1.2fr 1.2fr 110px}.job-stepper{display:grid;grid-template-columns:repeat(6,minmax(74px,1fr));gap:0;width:100%}.job-step{position:relative;display:flex;flex-direction:column;align-items:center;gap:5px;min-width:0}.job-step-line{position:absolute;top:8px;right:-50%;width:100%;height:2px;background:#cbd5e1}.job-step-dot{width:16px;height:16px;border-radius:999px;border:2px solid #94a3b8;background:#f8fafc;z-index:1}.job-step-label{font-size:.72rem;line-height:1.1;color:#64748b;text-align:center;white-space:nowrap}.job-step.done .job-step-dot{border-color:#16a34a;background:#16a34a}.job-step.done .job-step-line{background:#16a34a}.job-step.done .job-step-label{color:#166534}.job-step.active .job-step-dot{border-color:#2563eb;background:#bfdbfe}.job-step.active .job-step-label{color:#1d4ed8;font-weight:600}.topic-set-select-row:hover,.topic-set-input-row{background:#f8fafc}.topic-set-input-row input[type=text]{border:1px solid #cbd5e1;border-radius:6px;padding:8px 9px;font-size:.92rem;width:100%}.new-topic-set-form,.topic-set-detail-card{border:1px solid #cbd5e1;border-radius:10px;background:#fff;padding:14px}.new-topic-set-form{display:flex;align-items:flex-end;gap:10px}.new-topic-set-form label,.topic-detail-label{display:flex;flex-direction:column;gap:6px;color:#334155;font-weight:600;flex:1}.topic-shared-toggle{display:inline-flex;align-items:center;gap:8px;color:#334155;font-weight:600;white-space:nowrap}.topic-shared-toggle input{margin:0}.topic-detail-label{margin-bottom:14px}.new-topic-set-form input,.topic-detail-label input,.topic-row input{border:1px solid #cbd5e1;border-radius:6px;padding:8px 9px;font-size:.92rem}.topic-set-detail-card h2{margin-top:0;margin-bottom:14px}.dataset-question-card h3{margin-top:0;margin-bottom:12px}.dataset-question-card .topic-detail-label{margin-bottom:10px}.dataset-question-card textarea{border:1px solid #cbd5e1;border-radius:6px;padding:8px 9px;font-size:.92rem;resize:vertical;min-height:88px}.dataset-question-answer{margin-top:12px;border-top:1px solid #e2e8f0;padding-top:10px}.dataset-question-answer strong{color:#0f172a}.dataset-question-answer p{margin:8px 0 0;color:#334155;white-space:pre-wrap}.topic-list{display:flex;flex-direction:column;gap:8px}.topic-row{display:grid;grid-template-columns:28px 1fr 36px;gap:8px;align-items:center}.topic-row span{font-weight:600;color:#64748b}.topic-empty{margin:0;color:#64748b}.topic-delete-button{border:1px solid #dbe3ee;background:#f8fafc;color:#64748b;cursor:pointer;width:34px;height:34px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;transition:all .15s ease-in-out}.topic-delete-button:hover{color:#dc2626;border-color:#fca5a5;background:#fee2e2}.topic-delete-button svg{width:17px;height:17px}.primary-inline-button,.secondary-inline-button,.danger-inline-button{border:none;border-radius:8px;padding:8px 12px;font-weight:600;cursor:pointer}.primary-inline-button{background:#2563eb;color:#fff}.primary-inline-button:hover{background:#1d4ed8}.secondary-inline-button{background:#e2e8f0;color:#334155}.secondary-inline-button:hover{background:#cbd5e1}.danger-inline-button{background:#dc2626;color:#fff}.danger-inline-button:hover{background:#b91c1c}.link-button{border:none;background:transparent;color:#2563eb;font-weight:600;padding:0;cursor:pointer;text-decoration:underline;text-underline-offset:2px}.link-button:hover{color:#1d4ed8}.link-button:disabled{color:#9ca3af;cursor:not-allowed;text-decoration:none}.primary-button,.secondary-button{border:none;border-radius:8px;padding:10px 14px;font-weight:600;cursor:pointer}.primary-button{background:#2563eb;color:#fff}.primary-button:hover{background:#1d4ed8}.primary-button:disabled{background:#94a3b8;cursor:not-allowed}.secondary-button{margin-top:auto;background:#334155;color:#f8fafc}.secondary-button:hover{background:#475569}.modal-backdrop{position:fixed;inset:0;background:#020617a6;display:flex;align-items:center;justify-content:center;padding:20px;z-index:20}.modal-card{width:min(920px,100%);max-height:min(80vh,760px);background:#fff;border-radius:12px;border:1px solid #cbd5e1;display:flex;flex-direction:column}.modal-header{display:flex;justify-content:space-between;align-items:center;gap:12px;border-bottom:1px solid #e2e8f0;padding:14px 16px}.modal-header h2{margin:0;font-size:1.05rem;color:#0f172a}.modal-body{padding:12px 16px 16px;overflow:auto}.modal-body pre{margin:0;white-space:pre-wrap;word-break:break-word;color:#0f172a;font-size:.85rem;line-height:1.35}.topic-id-modal{width:min(520px,100%)}.topic-id-popup-value{margin:0;color:#0f172a;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;word-break:break-all}.topic-id-popup-actions{display:inline-flex;align-items:center;gap:8px}.topic-id-copy-message{margin:10px 0 0;color:#2563eb;font-size:.9rem}@media(max-width:800px){.portal-shell{grid-template-columns:1fr}.secondary-button{margin-top:0}.schedule-row,.topic-set-row,.dataset-row,.dataset-asset-row,.channel-row{grid-template-columns:1fr}.new-topic-set-form,.admin-role-form{flex-direction:column;align-items:stretch}.topic-set-actions{justify-content:flex-start}}
