:root{--bg: #0a0a0f;--surface: #12121a;--surface2: #1a1a2e;--border: #2a2a3e;--text: #e8e8f0;--text-dim: #8b8ba0;--accent: #f59e0b;--accent-glow: rgba(245,158,11,.15);--success: #22c55e;--warn: #f59e0b;--danger: #ef4444;--info: #3b82f6;--radius: 14px;--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-top: env(safe-area-inset-top, 0px)}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}body{overflow:hidden}#root{height:100%}.app-shell{display:flex;flex-direction:column;height:100%;overflow:hidden}.header{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;padding-top:max(10px,var(--safe-top))}.header-left{display:flex;align-items:center;gap:10px}.header-right{display:flex;align-items:center;gap:8px}.menu-btn{background:none;border:none;color:var(--text);font-size:22px;cursor:pointer;padding:4px}.logo-text{font-size:16px;font-weight:700;color:var(--accent)}.user-name{font-size:13px;color:var(--text-dim)}.role-badge{font-size:10px;padding:2px 8px;border-radius:10px;font-weight:600;text-transform:uppercase;background:var(--surface2);color:var(--text-dim)}.role-teacher{background:#3b82f620;color:#3b82f6}.role-student{background:#10b98120;color:#10b981}.role-admin{background:#f59e0b20;color:#f59e0b}.role-school_admin{background:#a855f720;color:#a855f7}.main-content{flex:1;overflow-y:auto;padding-bottom:calc(70px + var(--safe-bottom))}.bottom-tabs{position:fixed;bottom:0;left:0;right:0;z-index:50;display:flex;justify-content:space-around;align-items:center;background:var(--surface);border-top:1px solid var(--border);padding:6px 0;padding-bottom:max(6px,var(--safe-bottom))}.tab-item{display:flex;flex-direction:column;align-items:center;gap:2px;text-decoration:none;color:var(--text-dim);font-size:10px;padding:4px 12px;border-radius:8px;transition:color .2s}.tab-item.active{color:var(--accent)}.tab-icon{font-size:20px}.tab-label{font-weight:500}.sidebar{position:fixed;top:0;left:-300px;width:300px;height:100%;z-index:100;background:var(--surface);border-right:1px solid var(--border);transition:left .3s ease;display:flex;flex-direction:column;padding-top:max(12px,var(--safe-top))}.sidebar.open{left:0}.menu-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99;background:#0009}.sidebar-header{padding:16px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border)}.sidebar-header h2{font-size:15px}.close-btn{background:none;border:none;color:var(--text-dim);font-size:20px;cursor:pointer}.nav-list{flex:1;overflow-y:auto;padding:8px}.nav-item{display:flex;align-items:center;gap:12px;padding:12px;border-radius:10px;text-decoration:none;color:var(--text);margin-bottom:4px}.nav-item.active{background:var(--accent-glow);color:var(--accent)}.nav-icon{font-size:18px}.nav-label{font-size:14px;font-weight:500}.sidebar-footer{padding:16px;border-top:1px solid var(--border)}.signout-btn{width:100%;padding:10px;background:var(--surface2);border:1px solid var(--border);color:var(--text-dim);border-radius:10px;cursor:pointer}.page{padding:20px 16px}.page-title{font-size:22px;font-weight:700;margin-bottom:4px}.page-subtitle{font-size:13px;color:var(--text-dim);margin-bottom:20px}.section-title{font-size:16px;font-weight:600;color:var(--text-dim);margin-bottom:12px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin-bottom:12px}.card h4{font-size:14px;font-weight:600;margin-bottom:10px;color:var(--accent)}.stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:20px}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px;text-align:center}.stat-value{display:block;font-size:24px;font-weight:700;color:var(--accent)}.stat-label{display:block;font-size:11px;color:var(--text-dim);margin-top:4px;text-transform:uppercase}.quick-actions h3{font-size:15px;margin-bottom:12px}.action-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:20px}.action-card{display:flex;flex-direction:column;align-items:center;gap:6px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px 10px;text-decoration:none;color:var(--text);font-size:12px;font-weight:500;text-align:center}.action-card:active{background:var(--surface2)}.action-icon{font-size:28px}.action-card.ai-card{border-color:var(--accent);background:var(--accent-glow)}.field{margin-bottom:14px}.field label{display:block;font-size:12px;color:var(--text-dim);margin-bottom:5px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.field input,.field select,.field textarea{width:100%;padding:12px;background:var(--surface2);border:1px solid var(--border);border-radius:10px;color:var(--text);font-size:15px;outline:none}.field input:focus,.field select:focus{border-color:var(--accent)}.field select{-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn-primary{width:100%;padding:14px;background:var(--accent);color:#000;border:none;border-radius:12px;font-size:16px;font-weight:700;cursor:pointer;text-transform:uppercase;letter-spacing:.5px}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-primary:active:not(:disabled){transform:scale(.98)}.alert{padding:10px 14px;border-radius:10px;font-size:13px;margin-bottom:12px}.alert-danger{background:#ef444420;border:1px solid #ef4444;color:#fca5a5}.alert-warn{background:#f59e0b20;border:1px solid #f59e0b;color:#fde68a}.alert-success{background:#22c55e20;border:1px solid #22c55e;color:#86efac}.photo-card{cursor:pointer;min-height:200px;display:flex;align-items:center;justify-content:center}.photo-placeholder{display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--text-dim)}.photo-icon{font-size:48px}.weld-preview{width:100%;max-height:300px;object-fit:contain;border-radius:10px}.param-grid{margin-bottom:20px}.btn-evaluate{margin-top:12px}.grade-hero{text-align:center;padding:24px;border:3px solid;border-radius:var(--radius);margin-bottom:16px;background:var(--surface)}.grade-letter{font-size:72px;font-weight:900}.grade-score{font-size:18px;color:var(--text-dim);margin-top:4px}.pass-badge{display:inline-block;padding:4px 16px;border-radius:20px;font-size:13px;font-weight:700;margin-top:8px}.pass-badge.pass{background:#22c55e20;color:#22c55e}.pass-badge.fail{background:#ef444420;color:#ef4444}.code-banner{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.code-label{font-size:12px;color:var(--text-dim)}.code-name{font-size:13px;font-weight:600}.verified-badge{font-size:11px;color:var(--success);background:#22c55e15;padding:2px 8px;border-radius:8px}.tri-model-card .model-scores{display:flex;justify-content:space-around;margin-bottom:12px}.model-score{text-align:center}.model-label{display:block;font-size:11px;color:var(--text-dim)}.model-val{display:block;font-size:20px;font-weight:700}.confidence-bar span{font-size:12px;color:var(--text-dim)}.confidence-bar .bar{height:4px;background:var(--surface2);border-radius:2px;margin-top:4px}.confidence-bar .fill{height:100%;background:var(--accent);border-radius:2px;transition:width .5s}.disc-item{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--border)}.disc-item:last-child{border-bottom:none}.disc-type{font-size:13px;font-weight:500}.disc-severity{font-size:11px;padding:2px 8px;border-radius:8px;text-transform:uppercase;font-weight:600}.severity-critical .disc-severity{background:#ef444420;color:#ef4444}.severity-major .disc-severity{background:#f59e0b20;color:#f59e0b}.severity-minor .disc-severity{background:#3b82f620;color:#3b82f6}.severity-acceptable .disc-severity{background:#22c55e20;color:#22c55e}.teaching-point,.corrective-action{font-size:13px;line-height:1.5;margin-bottom:10px;padding-left:12px;border-left:2px solid var(--accent)}.corrective-action{border-left-color:var(--info)}.next-practice{border-left:3px solid var(--success);padding-left:12px}.next-practice p{font-size:14px;line-height:1.5}.safety-card{background:#ef444410;border-color:#ef444440}.safety-card h4{color:#ef4444}.safety-card p{font-size:12px;margin-bottom:6px}.eval-loading{text-align:center;padding:60px 20px}.eval-loading h3{margin:16px 0}.eval-steps{text-align:left;max-width:300px;margin:0 auto}.eval-steps .step{font-size:13px;color:var(--text-dim);padding:6px 0;opacity:.5}.eval-steps .step.active{opacity:1;color:var(--accent)}.spinner{width:24px;height:24px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;margin:0 auto}.spinner.large{width:48px;height:48px;border-width:4px}@keyframes spin{to{transform:rotate(360deg)}}.lesson-grid{display:flex;flex-direction:column;gap:8px}.lesson-card h4{font-size:14px;color:var(--text);margin-bottom:4px}.teks-badge{font-size:11px;color:var(--info);background:#3b82f615;padding:2px 8px;border-radius:6px}.login-page{height:100%;display:flex;align-items:center;justify-content:center;padding:20px}.login-container{width:100%;max-width:380px}.login-logo{text-align:center;margin-bottom:32px}.login-logo h1{font-size:36px;font-weight:900;color:var(--accent);letter-spacing:3px}.login-logo h2{font-size:20px;font-weight:300;color:var(--text-dim)}.login-tagline{font-size:12px;color:var(--text-dim);margin-top:8px}.login-form{margin-bottom:16px}.toggle-mode{background:none;border:none;color:var(--accent);font-size:13px;cursor:pointer;display:block;margin:0 auto}.empty-state{font-size:14px;color:var(--text-dim);text-align:center;padding:20px}.loading-screen{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px}.error-screen{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:20px;text-align:center}.error-screen button{padding:10px 24px;background:var(--accent);color:#000;border:none;border-radius:10px;font-weight:600;cursor:pointer}.weld-case-page .case-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap;gap:8px}.lock-state-badge{font-size:11px;padding:4px 10px;border-radius:8px;font-weight:600;background:var(--surface2);color:var(--text-dim)}.lock-state-badge[class*=block]{background:#ef444420;color:#ef4444}.lock-state-badge[class*=hold]{background:#f59e0b20;color:#f59e0b}.lock-state-badge[class*=ready]{background:#22c55e20;color:#22c55e}.tab-bar{display:flex;gap:4px;overflow-x:auto;margin-bottom:16px;padding-bottom:4px;-webkit-overflow-scrolling:touch}.tab-btn{display:flex;align-items:center;gap:4px;padding:8px 12px;background:var(--surface);border:1px solid var(--border);border-radius:10px;color:var(--text-dim);font-size:12px;font-weight:500;cursor:pointer;white-space:nowrap;flex-shrink:0}.tab-btn.active{background:var(--accent-glow);border-color:var(--accent);color:var(--accent)}.tab-btn .tab-icon{font-size:14px}.authority-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}.auth-item{padding:10px;background:var(--surface2);border-radius:8px}.auth-item.primary-code{grid-column:1 / -1}.auth-label{display:block;font-size:10px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px}.auth-value{font-size:14px;font-weight:600}.auth-value.reason{font-size:12px;font-weight:400;color:var(--text-dim)}.lock-state-panel{display:flex;align-items:center;gap:12px;padding:14px;border-radius:10px;margin-bottom:16px}.lock-state-panel.lock-ready{background:#22c55e10;border:1px solid #22c55e40}.lock-state-panel.lock-hold{background:#f59e0b10;border:1px solid #f59e0b40}.lock-state-panel.lock-block{background:#ef444410;border:1px solid #ef444440}.lock-icon{font-size:24px}.lock-info{display:flex;flex-direction:column;gap:2px}.lock-state-name{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.5px}.lock-state-desc{font-size:12px;color:var(--text-dim)}.conflicts-section,.missing-section,.allowed-section,.rules-section{margin-top:16px}.conflicts-section h4,.missing-section h4,.allowed-section h4,.rules-section h4{font-size:13px;margin-bottom:8px}.conflict-item{display:flex;flex-direction:column;gap:2px;padding:8px;border-radius:8px;margin-bottom:6px;font-size:12px}.conflict-item.severity-critical{background:#ef444415;border-left:3px solid #ef4444}.conflict-item.severity-major{background:#f59e0b15;border-left:3px solid #f59e0b}.conflict-item.severity-minor{background:#3b82f615;border-left:3px solid #3b82f6}.conflict-type,.conflict-var{font-weight:600}.conflict-detail{color:var(--text-dim)}.missing-list,.allowed-list{display:flex;flex-wrap:wrap;gap:6px}.missing-tag{font-size:11px;padding:3px 8px;border-radius:6px;background:#f59e0b15;color:#f59e0b}.allowed-tag{font-size:11px;padding:3px 8px;border-radius:6px;background:#22c55e15;color:#22c55e}.rule-applied{font-size:12px;color:var(--text-dim);padding:4px 0;border-bottom:1px solid var(--border)}.zone-section{margin-bottom:20px;padding-top:12px;border-top:1px solid var(--border)}.zone-section h4{font-size:14px;color:var(--info);margin-bottom:10px}.zone-result{padding:12px;border-radius:10px;margin-bottom:8px;border:1px solid var(--border)}.zone-result.zone-pass{border-color:#22c55e40;background:#22c55e08}.zone-result.zone-fail{border-color:#ef444440;background:#ef444408}.zone-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}.zone-num{font-size:11px;font-weight:700;color:var(--accent)}.zone-name{font-size:13px;font-weight:500;flex:1}.zone-badge{font-size:14px}.zone-item{font-size:12px;padding:3px 0;color:var(--text-dim)}.zone-item.fail{color:#ef4444}.required-flag{font-size:9px;background:#ef4444;color:#fff;padding:1px 4px;border-radius:3px;margin-left:6px}.checkbox-field label{display:flex;align-items:center;gap:8px;font-size:13px;text-transform:none;letter-spacing:0}.checkbox-field input[type=checkbox]{width:18px;height:18px;accent-color:var(--accent)}.wps-mode-toggle{display:flex;gap:8px;margin-bottom:16px}.mode-btn{flex:1;padding:10px;background:var(--surface2);border:1px solid var(--border);border-radius:10px;color:var(--text-dim);font-size:13px;cursor:pointer}.mode-btn.active{border-color:var(--accent);color:var(--accent);background:var(--accent-glow)}.wps-upload-area{text-align:center;padding:24px;border:2px dashed var(--border);border-radius:12px;margin-bottom:16px}.btn-row{display:flex;gap:10px;flex-wrap:wrap}.btn-secondary{padding:12px 20px;background:var(--surface2);border:1px solid var(--border);color:var(--text);border-radius:10px;font-size:14px;font-weight:600;cursor:pointer}.btn-secondary:disabled{opacity:.5;cursor:not-allowed}.wps-status{border-left:4px solid var(--info)}.wps-status.wps-verified{border-left-color:var(--success)}.wps-status.wps-conflict{border-left-color:var(--danger)}.wps-summary p{font-size:13px;margin-bottom:4px;color:var(--text-dim)}.wps-conflicts{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.gate-status{margin-bottom:16px}.gate-list{display:flex;flex-direction:column;gap:8px}.gate-item{display:flex;align-items:center;gap:8px;font-size:13px}.gate-item.pass{color:var(--success)}.gate-item.fail{color:var(--danger)}.gate-icon{font-size:16px}.blocked-card{text-align:center;padding:32px 16px}.blocked-card h3{color:var(--danger);margin-bottom:8px}.finding-item{padding:10px;border-radius:8px;margin-bottom:8px;border:1px solid var(--border)}.finding-item.severity-critical{border-color:#ef444440;background:#ef444408}.finding-item.severity-major{border-color:#f59e0b40;background:#f59e0b08}.finding-item.severity-minor{border-color:#3b82f640;background:#3b82f608}.finding-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.finding-type{font-size:13px;font-weight:600;text-transform:capitalize}.finding-severity{font-size:10px;padding:2px 6px;border-radius:4px;font-weight:700;text-transform:uppercase}.sev-critical{background:#ef4444;color:#fff}.sev-major{background:#f59e0b;color:#000}.sev-minor{background:#3b82f6;color:#fff}.finding-detail{display:flex;flex-direction:column;gap:2px;font-size:11px;color:var(--text-dim)}.code-ref{color:var(--info)}.disposition{font-weight:600;padding:1px 6px;border-radius:4px}.disp-acceptable{background:#22c55e20;color:#22c55e}.disp-rejectable{background:#ef444420;color:#ef4444}.disp-repair{background:#f59e0b20;color:#f59e0b}.no-findings{font-size:13px;color:var(--success);text-align:center;padding:20px}.audit-list{max-height:400px;overflow-y:auto}.audit-entry{padding:10px;border-bottom:1px solid var(--border)}.audit-entry:last-child{border-bottom:none}.audit-time{font-size:10px;color:var(--text-dim)}.audit-actor{font-size:11px;font-weight:600;text-transform:uppercase;color:var(--accent)}.audit-action{font-size:13px;margin:2px 0}.audit-data pre{font-size:10px;color:var(--text-dim);white-space:pre-wrap;word-break:break-all;max-height:60px;overflow:hidden}.actor-ai .audit-actor{color:var(--info)}.actor-instructor .audit-actor{color:#a855f7}.hint{font-size:12px;color:var(--text-dim);margin-top:4px}@media (min-width: 768px){.stat-grid{grid-template-columns:repeat(4,1fr)}.action-grid{grid-template-columns:repeat(3,1fr)}.param-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}.bottom-tabs{display:none}.main-content{padding-bottom:20px}.authority-grid{grid-template-columns:1fr 1fr 1fr}.tab-bar{gap:8px}.tab-btn{padding:10px 16px;font-size:13px}.doc-type-grid{grid-template-columns:repeat(3,1fr)}.params-grid{grid-template-columns:1fr 1fr}}.doc-generator .page-header{margin-bottom:20px}.doc-generator .page-subtitle{color:var(--text-dim);font-size:14px;margin-top:4px}.doc-type-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-bottom:20px}.doc-type-card{background:var(--surface);border:2px solid var(--border);border-radius:var(--radius);padding:16px;cursor:pointer;display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;transition:all .2s}.doc-type-card:hover{border-color:var(--accent)}.doc-type-card.selected{border-color:var(--accent);background:var(--accent-glow)}.doc-type-icon{font-size:28px}.doc-type-label{font-weight:600;font-size:14px;color:var(--text)}.doc-type-desc{font-size:11px;color:var(--text-dim);line-height:1.3}.doc-params{margin-bottom:20px}.doc-params h3{margin-bottom:12px;font-size:16px}.topic-input{width:100%;min-height:80px;resize:vertical;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:12px;color:var(--text);font-size:14px}.topic-input::placeholder{color:var(--text-dim)}.params-grid{display:grid;grid-template-columns:1fr;gap:12px;margin-top:16px}.generate-btn{width:100%;margin-top:16px;padding:14px;font-size:16px;font-weight:600}.doc-result{margin-top:20px}.result-header{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;margin-bottom:16px}.result-header h3{font-size:18px}.export-controls{display:flex;gap:8px;align-items:center}.export-select{width:auto;padding:8px 12px;font-size:13px}.doc-preview{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:16px;max-height:500px;overflow-y:auto;font-size:13px;line-height:1.6}.doc-preview h4{color:var(--accent);margin:12px 0 6px;font-size:15px}.doc-preview ul{padding-left:20px;margin:4px 0}.doc-preview li{margin:2px 0}.preview-meta{color:var(--text-dim);font-style:italic;margin-bottom:12px}.preview-more{color:var(--accent);font-style:italic;margin-top:8px}.preview-question{margin:8px 0;padding:8px;background:#ffffff05;border-radius:6px}.preview-day{margin-bottom:16px}.preview-block{display:flex;gap:8px;align-items:center;padding:4px 0;border-bottom:1px solid var(--border)}.block-time{font-size:12px;color:var(--text-dim);min-width:80px}.block-type{font-size:11px;font-weight:600;text-transform:uppercase;padding:2px 6px;border-radius:4px;background:var(--surface2)}.type-safety{color:var(--danger)}.type-lecture{color:var(--info)}.type-demo{color:var(--accent)}.type-lab{color:var(--success)}.type-assessment{color:#a855f7}.block-activity{flex:1}.preview-block-detail{padding:8px 0;border-bottom:1px solid var(--border)}.preview-block-detail .block-header{display:flex;gap:8px;align-items:center}.preview-block-detail .block-details{font-size:13px;color:var(--text-dim);margin:4px 0 0 88px;line-height:1.5}.preview-block-detail .block-notes{font-size:12px;color:var(--accent);margin:2px 0 0 88px}.day-focus{font-weight:400;color:var(--text-dim);font-size:14px}.machine-settings{background:#3b82f614;border-radius:8px;padding:12px;margin-bottom:16px}.settings-grid{display:flex;flex-wrap:wrap;gap:12px 24px;margin-top:8px}.settings-grid span{font-size:13px}.defect-item{padding:6px 0;border-bottom:1px solid rgba(255,255,255,.05);font-size:13px;line-height:1.5}.code-ref{font-size:11px;color:var(--accent)}.activity-detail{padding:8px 0;border-bottom:1px solid rgba(255,255,255,.05)}.activity-desc{font-size:13px;color:var(--text-dim);margin:2px 0 0;line-height:1.5}.activity-settings{font-size:12px;color:var(--info);margin:2px 0}.activity-criteria{font-size:12px;color:var(--success);margin:2px 0}.unit-overview{font-size:13px;color:var(--text-dim);margin-bottom:8px;line-height:1.5}.unit-aws{font-size:12px;color:var(--accent)}.unit-questions{margin:8px 0}.unit-mistakes{margin:8px 0;color:var(--warning)}.preview-cert{color:var(--success);margin-bottom:12px}.preview-raw{white-space:pre-wrap;font-size:11px;color:var(--text-dim)}.spinner-sm{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite;margin-right:8px}.btn-success{background:var(--success);color:#fff;border:none;padding:10px 16px;border-radius:8px;font-weight:600;cursor:pointer}.btn-success:hover{opacity:.9}
