:root{--bg:#fbfaf9;--panel:#f4f2ee;--panel-2:#f4f6f4;--edge:#e3e6e4;--ink:#0f2440;--ink-soft:#5b6b7c;--ink-dim:#93a0ac;--accent:#4a9c3c;--accent-dim:#14315a;--accent-glow:rgba(74,156,60,.12);--on-accent:#fff;--accent-soft:#edf4e9;--accent-soft-edge:rgba(74,156,60,.3);--accent-ink:#1b3b22;--gold:#8a6206;--gold-bg:rgba(242,175,29,.12);--gold-edge:rgba(242,175,29,.5);--kh:"Noto Sans Khmer";--disp:"Manrope"}*{box-sizing:border-box}body,html{height:100%;margin:0;padding:0;background:var(--bg);color:var(--ink);font-family:var(--disp),var(--kh),"Segoe UI Emoji","Noto Color Emoji","Apple Color Emoji",sans-serif}button{cursor:pointer;border:none;background:none;color:inherit}button,textarea{font-family:inherit}a{color:var(--accent);text-decoration:none}a:hover{color:#3c8531}.shell{display:flex;flex-direction:column;height:100vh;max-width:640px;margin:0 auto;border-left:1px solid var(--edge);border-right:1px solid var(--edge);overflow-x:hidden}.account-shell{height:auto;min-height:100dvh;padding:28px 20px 40px;gap:16px;overflow-wrap:anywhere}.account-shell h1{font-size:clamp(24px,6vw,32px);line-height:1.6;margin:0}.account-shell h2{font-size:20px;line-height:1.7;margin:0 0 12px}.account-shell p{margin:0;line-height:1.85}.account-shell form,.account-shell section{display:flex;flex-direction:column;gap:16px;min-width:0}.account-shell label{display:flex;flex-direction:column;gap:8px;line-height:1.8;min-width:0}.account-shell .field-input{display:block;width:100%;max-width:100%;min-width:0;min-height:48px;font-size:16px}.account-shell .btn{max-width:100%;min-height:48px;white-space:normal;line-height:1.7;padding:12px 16px}.account-shell .card{padding:20px 16px}.account-shell [role=alert],.account-shell [role=status]{padding:12px;border-radius:12px;background:var(--panel)}.top{padding:14px 16px;border-bottom:1px solid var(--edge);background:var(--panel);display:flex;align-items:center;gap:10px}.mark{width:26px;height:26px;object-fit:cover;box-shadow:0 1px 3px rgba(15,36,64,.18)}.avatar-badge,.mark{border-radius:7px;flex-shrink:0}.avatar-badge{background:var(--accent-dim);display:grid;place-items:center;font-weight:800;color:var(--on-accent)}.avatar-badge,.brand{font-family:var(--disp)}.brand{font-weight:700;font-size:15px}.brand span{color:var(--accent)}.pill{margin-left:auto;font-size:10.5px;padding:4px 9px;border-radius:20px}.new-chat-btn,.pill{border:1px solid var(--edge);color:var(--ink-soft);font-family:var(--kh)}.new-chat-btn{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;border-radius:20px;padding:5px 10px 5px 8px}.new-chat-btn:hover{color:var(--accent);border-color:var(--accent-soft-edge)}.hamburger-btn{width:32px;height:32px;flex-shrink:0;border-radius:8px;display:grid;place-items:center;color:var(--ink-soft)}.hamburger-btn:hover{background:var(--edge-soft,var(--panel));color:var(--ink)}.history-backdrop{position:fixed;inset:0;background:rgba(15,36,64,.45);z-index:60;display:flex}.history-drawer{width:82%;max-width:320px;height:100%;background:var(--bg);display:flex;flex-direction:column;box-shadow:4px 0 24px rgba(15,36,64,.2)}.history-header{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid var(--edge);font-family:var(--kh);font-weight:700;font-size:14px;color:var(--ink)}.history-close{width:26px;height:26px;border-radius:8px;color:var(--ink-soft)}.history-close:hover{background:var(--panel)}.history-new-btn{display:flex;align-items:center;gap:8px;margin:12px 16px;padding:9px 12px;border:1px solid var(--edge);border-radius:10px;font-family:var(--kh);font-size:13px;color:var(--accent-dim)}.history-new-btn:hover{border-color:var(--accent-soft-edge);color:var(--accent)}.history-list{flex:1 1;overflow-y:auto;padding:4px 8px 16px}.history-empty{padding:20px 12px;text-align:center;color:var(--ink-dim);font-family:var(--kh);font-size:12.5px}.history-item{display:flex;align-items:center;gap:4px;border-radius:8px}.history-item:hover{background:var(--panel)}.history-item.on{background:var(--accent-glow)}.history-item-title{flex:1 1;text-align:left;padding:10px 8px;font-family:var(--kh);font-size:13px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.history-item-delete{width:28px;height:28px;flex-shrink:0;border-radius:6px;color:var(--ink-dim);display:grid;place-items:center;margin-right:6px}.history-item-delete:hover{background:var(--red-bg,rgba(181,67,45,.1));color:#b5432d}.tabs{gap:2px;background:rgba(20,49,90,.06);border-radius:10px;padding:3px;margin:12px 16px}.tab,.tabs{display:flex}.tab{flex:1 1;padding:9px 0;border-radius:8px;font-size:13px;text-align:center;color:var(--ink-soft);align-items:center;justify-content:center;gap:6px;font-family:var(--kh)}.tab.on{background:#fff;color:var(--ink);font-weight:600;box-shadow:0 1px 2px rgba(15,36,64,.07)}.price{margin:0 16px 12px;padding:9px 12px;border-radius:9px;background:var(--gold-bg);border:1px solid var(--gold-edge);font-size:11.5px;color:var(--gold);font-family:var(--kh);display:flex;justify-content:space-between;gap:8px}.dropzone{flex:1 1;display:flex;flex-direction:column;min-height:0;position:relative}.dropzone.dragging .inputwrap,.dropzone.dragging .stream{opacity:.35}.dropzone-overlay{position:absolute;inset:8px;z-index:5;border:2px dashed var(--accent);border-radius:14px;background:var(--accent-glow);display:flex;align-items:center;justify-content:center;font-family:var(--kh);font-size:14px;color:#3c8531;font-weight:600;pointer-events:none}.stream{flex:1 1;overflow-y:auto;padding:4px 16px 16px;display:flex;flex-direction:column;gap:12px}.msg{display:flex;gap:10px;max-width:90%}.msg.me{margin-left:auto;flex-direction:row-reverse}.av{width:26px;height:26px;border-radius:8px;flex-shrink:0;display:grid;place-items:center;font-size:12px;font-family:var(--disp);font-weight:800}.msg.ai .av{background:var(--accent-dim);color:var(--on-accent)}.msg.me .av{background:var(--accent-soft);color:var(--accent-ink);border:1px solid var(--accent-soft-edge)}.bubble{padding:10px 13px;border-radius:12px;font-size:14px;line-height:1.75;font-family:var(--kh);white-space:pre-wrap}.msg.ai .bubble{background:none;border:none;padding:8px 0}.msg.me .bubble{background:var(--accent-soft);border:1px solid var(--accent-soft-edge);color:var(--accent-ink);border-top-right-radius:4px}.bubble-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.save-btn{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-family:var(--kh);color:var(--ink-dim);border:1px solid var(--edge);border-radius:8px;padding:5px 10px}.save-btn:disabled,.save-btn:not(:disabled):hover{color:#3c8531;border-color:var(--accent-soft-edge)}.save-btn:disabled{background:var(--accent-glow)}.run-preview-btn{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;font-family:var(--kh);color:var(--gold);border:1px solid var(--gold-edge);background:var(--gold-bg);border-radius:8px;padding:5px 10px}.run-preview-btn:hover{background:rgba(242,175,29,.2)}.workspace{display:flex;flex-direction:column;background:var(--bg);overflow:hidden;min-width:0}.workspace-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 8px 8px 12px;border-bottom:1px solid var(--edge);background:var(--panel);flex-shrink:0}.workspace-title{display:flex;align-items:center;gap:6px;font-family:var(--kh);font-weight:700;font-size:12.5px;color:var(--ink);min-width:0;flex-shrink:1;overflow:hidden}.workspace-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.workspace-caret{color:var(--ink-dim);font-size:10px}.workspace-versions{display:flex;align-items:center;gap:2px;background:var(--bg);border-radius:9px;padding:2px;border:1px solid var(--edge);flex-shrink:0}.workspace-step{width:24px;height:24px;border-radius:7px;color:var(--ink-soft);font-size:9px;line-height:1}.workspace-step:hover:not(:disabled){background:var(--panel);color:var(--ink)}.workspace-step:disabled{color:var(--edge);cursor:default}.workspace-version-label{font-family:var(--disp);font-weight:700;font-size:11.5px;color:var(--ink);padding:0 3px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;white-space:nowrap}.workspace-version-total{color:var(--ink-dim);font-weight:600}.workspace-tabs{display:flex;gap:4px;background:var(--bg);border-radius:10px;padding:3px}.workspace-tab{font-family:var(--kh);font-weight:600;font-size:12.5px;color:var(--ink-dim);padding:6px 12px;border-radius:8px;white-space:nowrap}.workspace-tab.on{background:var(--panel);color:var(--ink);box-shadow:0 1px 3px rgba(15,36,64,.12)}.workspace-close{width:28px;height:28px;flex-shrink:0;border-radius:8px;background:var(--bg);color:var(--ink-soft);font-size:14px;line-height:1}.workspace-close:hover{background:var(--edge)}.workspace-body{flex:1 1;display:flex;min-height:0}.workspace-frame{flex:1 1;width:100%;border:none;background:#fff}.workspace-code{flex:1 1;width:100%;margin:0;padding:14px 20px;overflow:auto;background:#0f172a;color:#e2e8f0;font-family:ui-monospace,Courier New,monospace;font-size:12px;line-height:1.6;white-space:pre-wrap;word-break:break-word}.workspace.collapsed .workspace-body,.workspace.collapsed .workspace-tabs{display:none}.workspace-close,.workspace-tabs,.workspace-versions{flex-shrink:0}@media (max-width:560px){.workspace-name-en,.workspace-tab-en{display:none}.workspace-bar{padding-left:10px;gap:6px}.workspace-tab{padding:6px 9px}}.intro-card-backdrop{position:fixed;inset:0;background:rgba(15,36,64,.55);z-index:50;display:flex;align-items:center;justify-content:center;padding:20px}.intro-card{width:100%;max-width:420px;max-height:90vh;background:var(--bg);border-radius:20px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 20px 60px rgba(15,36,64,.35)}.intro-card-image{height:160px;flex-shrink:0;background:linear-gradient(135deg,var(--accent-dim),var(--accent));background-size:cover;background-position:50%;display:flex;align-items:center;justify-content:center}.intro-card-image-num{font-family:var(--disp);font-weight:800;font-size:48px;color:hsla(0,0%,100%,.85)}.intro-card-body{padding:20px 22px 22px;overflow-y:auto}.intro-card-eyebrow{font-family:var(--kh);font-size:11px;color:var(--ink-dim);margin-bottom:6px}.intro-card-title{font-family:var(--kh);font-weight:700;font-size:19px;color:var(--ink);margin:0 0 10px;line-height:1.35}.intro-card-text{font-family:var(--kh);font-size:13.5px;color:var(--ink-soft);line-height:1.65;margin:0 0 20px}.intro-card-start{width:100%;padding:13px;border-radius:12px;background:var(--accent);color:var(--on-accent);font-family:var(--kh);font-weight:700;font-size:14.5px;border:none}.intro-card-start:hover{opacity:.92}.submit-eval-btn{width:100%;margin-bottom:8px;padding:11px;border-radius:12px;background:var(--accent);color:var(--on-accent);font-family:var(--kh);font-weight:700;font-size:13.5px;border:none}.submit-eval-btn:disabled{opacity:.45}.submit-eval-btn:not(:disabled):hover{opacity:.92}.eval-card{background:var(--panel);border:1px solid var(--edge);border-radius:14px;padding:16px 18px;max-width:340px}.eval-card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.eval-card-label{font-family:var(--kh);font-weight:700;font-size:12.5px;color:var(--ink-soft)}.eval-card-score{font-family:var(--disp);font-weight:800;font-size:18px;padding:2px 10px;border-radius:20px}.eval-card-score.good{color:var(--accent);background:var(--accent-glow)}.eval-card-score.mid{color:var(--gold);background:var(--gold-bg)}.eval-card-score.low{color:#b5432d;background:rgba(181,67,45,.1)}.eval-card-section{margin-bottom:10px}.eval-card-section-title{font-family:var(--kh);font-weight:700;font-size:12px;color:var(--ink);margin-bottom:4px}.eval-card-section ul{margin:0;padding-left:18px}.eval-card-section li{line-height:1.55}.eval-card-feedback,.eval-card-section li{font-family:var(--kh);font-size:12.5px;color:var(--ink-soft)}.eval-card-feedback{line-height:1.65;margin:10px 0 0}.empty{font-size:13px;text-align:center;margin-top:40px;line-height:1.8}.empty,.loading-phase{color:var(--ink-dim);font-family:var(--kh)}.loading-phase{font-size:12px;margin-bottom:6px}.dots{display:flex;gap:4px;padding:2px}.dots i{width:6px;height:6px;border-radius:50%;background:var(--accent);animation:blink 1.4s infinite both;display:block}.dots i:nth-child(2){animation-delay:.2s}.dots i:nth-child(3){animation-delay:.4s}@keyframes blink{0%,80%,to{opacity:.3}40%{opacity:1}}.inputwrap{padding:10px 16px 16px;flex-shrink:0}.inbox{display:flex;gap:6px;align-items:center;background:#fff;border:1px solid var(--edge);border-radius:26px;padding:6px 6px 6px 8px;min-height:48px;transition:border-color .15s ease;box-shadow:0 2px 8px rgba(15,36,64,.05);max-width:100%;overflow:hidden}.inbox.is-recording{border-color:var(--accent)}.inbox textarea{flex:1 1;background:none;border:none;resize:none;color:var(--ink);font-family:var(--kh);font-size:14px;line-height:1.5;max-height:80px;outline:none;padding:8px 4px}.inbox textarea::placeholder{color:var(--ink-dim)}.inbox textarea:disabled{color:var(--ink-dim)}.plus-btn{width:36px;height:36px;flex-shrink:0;border-radius:50%;display:grid;place-items:center;color:var(--ink-soft);background:var(--panel)}.plus-btn:hover{color:var(--accent-dim);background:var(--panel-2)}.action-btn{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;flex-shrink:0;background:var(--accent);color:var(--on-accent);touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.action-btn:disabled{background:var(--edge);color:var(--ink-dim)}.action-btn.recording{background:var(--accent);color:var(--on-accent);box-shadow:0 0 0 6px var(--accent-glow)}.record-row{flex:1 1;display:flex;align-items:center;gap:8px;padding:0 6px;min-width:0;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.record-dot{width:9px;height:9px;border-radius:50%;background:var(--accent);flex-shrink:0;animation:record-pulse 1.1s ease-in-out infinite}@keyframes record-pulse{0%,to{opacity:1}50%{opacity:.25}}.record-timer{font-family:var(--disp);font-size:13px;font-weight:700;color:#3c8531;flex-shrink:0;min-width:32px}.record-cancel-hint{flex:1 1;min-width:0;display:flex;align-items:center;justify-content:flex-end;gap:4px;font-family:var(--kh);font-size:12px;color:var(--ink-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.record-cancel-hint.near{color:#3c8531;font-weight:600}.record-spacer{flex:1 1}.record-action{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;flex-shrink:0}.record-action.cancel{color:var(--ink-soft);background:var(--panel)}.record-action.cancel:hover{color:var(--accent-dim)}.record-action.finish{color:var(--on-accent);background:var(--accent)}.attach-preview{justify-content:space-between;background:var(--accent-glow);border:1px solid var(--accent-soft-edge);border-radius:9px;padding:6px 10px;margin-bottom:7px;font-family:var(--kh);font-size:12px;color:var(--ink)}.attach-preview,.attach-preview-img{display:flex;align-items:center;gap:8px}.attach-preview-img img{width:28px;height:28px;border-radius:6px;object-fit:cover;flex-shrink:0}.msg-image{display:block;max-width:220px;max-height:220px;border-radius:10px;margin-bottom:6px;object-fit:cover}.attach-preview button{color:var(--ink-dim);font-size:13px;padding:2px}.attach-error{font-family:var(--kh);font-size:11px;color:var(--gold);margin-bottom:6px}.attach-chip{display:inline-block;font-family:var(--kh);font-size:11.5px;color:var(--ink-soft);background:#fff;border:1px solid var(--edge);border-radius:7px;padding:3px 8px;margin-bottom:5px}.md{white-space:normal}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md ol,.md p,.md ul{margin:0 0 10px}.md ol,.md ul{padding-left:22px}.md li{margin:2px 0}.md li>p{margin:0}.md h1,.md h2,.md h3,.md h4{font-family:var(--disp);font-weight:800;color:var(--ink);margin:14px 0 8px;line-height:1.3}.md h1{font-size:19px}.md h2{font-size:17px}.md h3{font-size:15px}.md h4{font-size:14px}.md strong{font-weight:700}.md a{text-decoration:underline}.md blockquote{margin:0 0 10px;padding:2px 12px;border-left:3px solid var(--accent-soft-edge);color:var(--ink-soft)}.md hr{border:none;border-top:1px solid var(--edge);margin:12px 0}.md :not(pre)>code{background:var(--panel);border:1px solid var(--edge);border-radius:5px;padding:1px 5px;font-family:Courier New,monospace;font-size:12.5px;white-space:pre-wrap}.md pre{background:var(--accent-dim);color:#eaf0e8;border-radius:10px;padding:12px 14px;overflow-x:auto;margin:0 0 4px;font-size:12.5px;line-height:1.55}.md pre code{background:none;border:none;padding:0;color:inherit;font-family:Courier New,monospace}.md table{border-collapse:collapse;width:100%;margin:0 0 10px;font-size:13px;display:block;overflow-x:auto}.md td,.md th{border:1px solid var(--edge);padding:6px 9px;text-align:left}.md th{background:var(--panel);font-family:var(--disp);font-weight:700}.md .katex{font-size:1.02em;line-height:1.75}.md .katex-display{margin:6px 0 10px;overflow-x:auto;overflow-y:hidden;padding-bottom:2px}.code-runner{margin:0 0 12px}.code-run-btn{font-family:var(--disp);font-size:12px;font-weight:700;color:var(--accent-dim);background:var(--accent-soft);border:1px solid var(--accent-soft-edge);border-radius:8px;padding:6px 12px}.code-run-btn:hover:not(:disabled){background:var(--accent-glow)}.code-run-btn:disabled{opacity:.6}.code-run-btn.locked{display:inline-flex;color:var(--ink-dim);background:var(--panel);border-color:var(--edge)}.code-run-btn.locked:hover{color:var(--accent-dim)}.code-output{margin-top:6px;background:#12222e;color:#d7e4dc;border-radius:8px;padding:9px 12px;font-family:Courier New,monospace;font-size:12px;line-height:1.6;overflow-x:auto}.code-output-empty{color:#7c8b96}.code-output-line.warn{color:#f2c744}.code-output-line.error{color:#f27979}.sources-footer{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px}.sources-label{font-family:var(--kh);font-size:11px;color:var(--ink-dim)}.source-chip{font-family:var(--disp);font-size:11px;color:var(--accent-dim);background:var(--panel);border:1px solid var(--edge);border-radius:7px;padding:3px 8px;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.source-chip:hover{color:#3c8531;border-color:var(--accent-soft-edge)}.hero{flex:1 1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:32px 24px;gap:16px}.hero .mark-lg{width:64px;height:64px;border-radius:18px;object-fit:cover;box-shadow:0 10px 28px rgba(20,49,90,.18)}.hero h1{font-family:var(--disp);font-size:22px;font-weight:700;margin:4px 0 0}.hero h1 span{color:var(--accent)}.hero p{font-size:13.5px;color:var(--ink-soft);line-height:1.85;max-width:420px}.disclosure,.hero p{font-family:var(--kh)}.disclosure{font-size:10.5px;color:var(--ink-dim);line-height:1.7;max-width:340px;margin-top:4px}.disclosure a{text-decoration:underline}.field-col{gap:12px;width:100%;max-width:320px;margin-top:6px}.field,.field-col{display:flex;flex-direction:column}.field{gap:6px;text-align:left}.field label{font-family:var(--kh);font-size:12px;color:var(--ink-soft)}.field-input{font-family:var(--disp);font-size:14px;color:var(--ink);background:#fff;border:1px solid var(--edge);border-radius:10px;padding:11px 13px;outline:none}.field-input:focus{border-color:var(--accent-soft-edge)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:13px 22px;border-radius:11px;font-family:var(--kh);font-size:14px;font-weight:600;width:100%;max-width:320px}.btn-primary{background:var(--accent-dim)}.btn-go,.btn-primary{color:var(--on-accent)}.btn-go{background:var(--accent)}.btn-ghost{background:none;color:var(--ink-soft);border:1px solid var(--edge)}.btn:disabled,.btn[aria-disabled=true]{background:var(--edge);color:var(--ink-dim);pointer-events:none}.btn-col{display:flex;flex-direction:column;gap:10px;align-items:center;margin-top:8px}.page{flex:1 1;overflow-y:auto}.card,.page{padding:16px}.card{background:#fff;border:1px solid var(--edge);border-radius:14px;margin-bottom:14px}.card h2{font-family:var(--disp);font-size:16px;font-weight:700;margin:0 0 6px}.card .price-tag{color:var(--gold);font-size:13px;font-family:var(--kh)}.consent{display:flex;flex-direction:column;gap:10px;max-width:340px;text-align:left;margin-top:4px}.consent-row{display:flex;align-items:flex-start;gap:10px;font-family:var(--kh);font-size:12px;line-height:1.65;color:var(--ink-soft)}.consent-box{width:20px;height:20px;flex-shrink:0;border-radius:5px;border:1.5px solid var(--edge);background:#fff;display:grid;place-items:center;margin-top:1px;color:transparent}.consent-row.on .consent-box{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.consent-note{color:var(--ink-dim)}.purpose{border:1px solid rgba(20,49,90,.14);background:var(--panel-2);border-radius:12px;padding:15px 16px;margin-bottom:14px;display:flex;flex-direction:column;gap:9px}.purpose-kicker{font-family:var(--disp);font-size:10.5px;font-weight:700;letter-spacing:.08em;color:#3c8531}.purpose p{margin:0;font-family:var(--kh);font-size:12.5px;line-height:1.8;color:var(--ink-soft);text-wrap:pretty}.purpose-tags{display:flex;flex-wrap:wrap;gap:6px}.purpose-tags span{padding:5px 10px;border-radius:999px;background:#fff;border:1px solid rgba(20,49,90,.12);font-family:var(--kh);font-size:11px;color:var(--ink-soft)}.purpose-tags span.arc{background:var(--accent-glow);border-color:var(--accent-soft-edge);color:#3c8531;font-weight:600}.modules{display:flex;flex-direction:column;gap:9px}.module{flex:none;border:1px solid var(--edge);background:#fff;border-radius:12px;overflow:hidden}.module.capstone{border-color:var(--gold-edge);background:var(--gold-bg)}.module-head{width:100%;display:flex;align-items:center;gap:13px;padding:14px 15px;text-align:left}.module-num{width:32px;height:32px;flex-shrink:0;border-radius:9px;display:grid;place-items:center;font-family:var(--disp);font-weight:800;font-size:13px;background:rgba(20,49,90,.08);color:var(--accent-dim)}.module.capstone .module-num{background:#f2af1d;color:var(--accent-dim)}.module-titles{flex:1 1;min-width:0;display:flex;flex-direction:column;gap:3px}.module-title{font-family:var(--disp);font-weight:700;font-size:13.5px;color:var(--ink)}.module-title-kh{font-family:var(--kh);font-size:12px;color:var(--ink-soft);line-height:1.5}.module-meta{display:flex;align-items:center;gap:8px;font-family:var(--kh);font-size:11px}.module-chev,.module-meta{flex-shrink:0;color:var(--ink-dim)}.module-chev{transition:transform .18s ease}.module.open .module-chev{transform:rotate(180deg)}.module-body{border-top:1px solid var(--edge);padding:6px 10px 10px;display:flex;flex-direction:column;gap:1px}.module-lesson{display:flex;align-items:flex-start;gap:10px;padding:9px 8px;border-radius:8px;font-family:var(--kh);font-size:12.5px;color:var(--ink-soft)}.module-lesson .module-dot{margin-top:2px}.module-lesson-text{flex:1 1;min-width:0;display:flex;flex-direction:column;gap:2px}.module-lesson .label{font-weight:inherit}.module-lesson-desc{font-size:11px;line-height:1.5;color:var(--ink-dim);font-weight:400}.module-lesson .state{flex-shrink:0;font-size:10.5px;color:var(--ink-dim);white-space:nowrap;margin-top:1px}.module-lesson.done{color:var(--ink-soft)}.module-lesson.current{background:#fff;border:1px solid var(--accent-soft-edge);font-weight:600;color:var(--ink)}.module-lesson.current .state{color:#3c8531;font-weight:700}.module-dot{width:15px;height:15px;flex-shrink:0;border-radius:50%;border:2px solid var(--edge);box-sizing:border-box}.module-lesson.current .module-dot{border:2.5px solid var(--accent)}.module-lesson.done .module-dot{border-color:var(--accent);background:var(--accent)}.portfolio-item{background:#fff;border:1px solid var(--edge);border-radius:10px;padding:12px 13px}.portfolio-meta{display:flex;justify-content:space-between;font-size:10.5px;color:var(--ink-dim);font-family:var(--kh);margin-bottom:6px}.portfolio-content{font-family:var(--kh);font-size:13px;color:var(--ink);white-space:pre-wrap;margin:0 0 8px}.portfolio-remove{font-size:11px;color:var(--ink-dim);font-family:var(--kh)}.portfolio-remove:hover{color:var(--accent-dim)}.lesson-list{display:flex;flex-direction:column;gap:8px}.progresswrap{padding:0 16px 12px;flex-shrink:0}.progressmeta{display:flex;justify-content:space-between;font-size:11px;color:var(--ink-soft);font-family:var(--kh);margin-bottom:5px}.progressbar{height:6px;border-radius:4px;background:rgba(20,49,90,.1);border:none;overflow:hidden}.progressbar-fill{height:100%;background:var(--accent);border-radius:4px;transition:width .4s ease}.stagebar{display:flex;padding:0 16px 10px;gap:4px;flex-shrink:0}.stagebar-step{flex:1 1;display:flex;flex-direction:column;align-items:center;gap:4px;min-width:0}.stagebar-dot{width:100%;height:3px;border-radius:3px;background:rgba(20,49,90,.14);transition:background .3s ease}.stagebar-step.done .stagebar-dot{background:var(--accent);opacity:.55}.stagebar-step.on .stagebar-dot{background:var(--accent)}.stagebar-label{font-size:9.5px;font-family:var(--kh);color:var(--ink-dim,#9aa3ae);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.stagebar-step.on .stagebar-label{color:var(--accent);font-weight:600}.bottomnav{display:flex;border-top:1px solid var(--edge);background:#fff;flex-shrink:0}.navitem{flex:1 1;display:flex;flex-direction:column;align-items:center;gap:3px;padding:11px 0 12px;font-size:10.5px;color:var(--ink-dim);font-family:var(--kh);min-height:56px}.navitem .ic{font-size:16px;line-height:1}.navitem.on{color:var(--accent-dim);font-weight:600}.cert{width:100%;max-width:340px;border-radius:16px;padding:26px 20px;margin:8px 0;background:var(--accent-dim);border:1px solid hsla(0,0%,100%,.12);color:#fff;text-align:center;display:flex;flex-direction:column;gap:6px}.cert .cert-badge{font-size:34px}.cert .cert-course{font-family:var(--disp);font-weight:700;font-size:15px}.cert .cert-name{font-family:var(--kh);color:#f2af1d;font-size:13px}.cert .cert-date{font-family:var(--kh);color:hsla(0,0%,100%,.6);font-size:11px;margin-top:4px}.app-frame{display:flex;height:100vh}.app-frame .shell{border-left:none}.sidebar{display:none}@media (max-width:899px){.app-frame.has-workspace{flex-direction:column}.app-frame.has-workspace .workspace{order:-1;flex-shrink:0;height:min(42vh,300px);min-height:170px;border-bottom:1px solid var(--edge)}.app-frame.has-workspace .workspace.collapsed{height:auto;min-height:0}.app-frame.has-workspace .shell{height:auto;flex:1 1;min-height:0;max-width:none;width:100%;margin:0}}@media (min-width:768px){.sidebar{display:flex;flex-direction:column;gap:4px;width:220px;flex-shrink:0;border-right:1px solid var(--edge);background:var(--panel);padding:16px 12px}.sidebar-brand{display:flex;align-items:center;gap:10px;padding:6px 8px 18px}.sidebar-nav{display:flex;flex-direction:column;gap:2px}.sideitem{display:flex;align-items:center;gap:10px;padding:10px;border-radius:9px;font-family:var(--kh);font-size:13.5px;color:var(--ink-soft)}.sideitem .ic{font-size:16px}.sideitem.on{background:#fff;border:1px solid var(--edge);color:var(--ink);font-weight:600}.app-frame .bottomnav{display:none}.app-frame .shell{flex:1 1;margin:0 auto;border-right:none;max-width:900px}.shell{max-width:760px}}@media (min-width:900px){.app-frame.has-workspace .workspace{width:clamp(340px,42%,620px);flex-shrink:0;border-left:1px solid var(--edge)}.app-frame.has-workspace .shell{max-width:none;margin:0}}@media (min-width:768px) and (max-width:1023px){.sidebar{width:72px;align-items:center;padding:16px 0}.sidebar .sideitem{width:44px;height:44px;justify-content:center;padding:0}.sidebar .sideitem span:not(.ic){display:none}.sidebar-brand{padding:6px 0 18px}.sidebar-brand .brand{display:none}}@media (min-width:1400px){.shell{max-width:840px}.app-frame .shell{max-width:1040px}}.portfolio-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:8px}.ios-install-banner{position:fixed;top:0;left:0;right:0;z-index:70;display:flex;align-items:flex-start;gap:10px;padding:calc(env(safe-area-inset-top) + 10px) 14px 10px;background:var(--accent-dim);color:#fff;box-shadow:0 2px 10px rgba(15,36,64,.25)}.ios-install-icon{font-size:20px;line-height:1;flex-shrink:0;margin-top:1px}.ios-install-text{flex:1 1;min-width:0}.ios-install-title{margin:0 0 2px;font-family:var(--kh);font-weight:700;font-size:13.5px;color:#fff}.ios-install-sub{margin:0;font-family:var(--kh);font-size:11.5px;line-height:1.5;color:hsla(0,0%,100%,.82)}.ios-install-en{font-family:var(--disp);font-weight:500}.ios-install-close{flex-shrink:0;width:26px;height:26px;border-radius:8px;color:hsla(0,0%,100%,.85);font-size:13px;line-height:1;margin-top:1px}.ios-install-close:hover{background:hsla(0,0%,100%,.16)}.complete-band{display:flex;align-items:center;gap:12px;padding:16px 22px;flex-shrink:0;background:linear-gradient(135deg,var(--accent),#2f7a2b);color:#fff}.complete-tick{width:34px;height:34px;border-radius:50%;background:hsla(0,0%,100%,.22);display:grid;place-items:center;font-weight:800;font-size:18px;flex-shrink:0}.complete-lesson{font-family:var(--kh);font-size:12.5px;font-weight:600;opacity:.95}.complete-en{font-family:var(--disp);font-size:13px;color:var(--ink-dim);margin:-4px 0 16px;line-height:1.5}.complete-result{border:1px solid var(--edge);background:var(--panel);border-radius:12px;padding:12px 14px;margin-bottom:10px}.complete-result-label{font-family:var(--kh);font-size:11px;color:var(--ink-dim);margin-bottom:4px}.complete-result-text{font-family:var(--kh);font-size:13px;color:var(--ink);line-height:1.65;margin:0;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;white-space:pre-wrap}.complete-saved{font-family:var(--kh);font-size:11.5px;color:var(--accent);margin:0 0 16px;font-weight:600}.complete-mywork{display:block;text-align:center;margin-top:12px;font-family:var(--kh);font-size:12.5px;color:var(--ink-soft)}.auto-badge,.complete-mywork:hover{color:var(--accent)}.auto-badge{display:inline-block;font-family:var(--kh);font-size:10.5px;font-weight:600;background:var(--accent-soft);border:1px solid var(--accent-soft-edge);border-radius:6px;padding:1px 7px;margin-left:8px}.mission-strip{margin:0 16px 10px;padding:11px 13px;border-radius:12px;background:var(--gold-bg);border:1px solid var(--gold-edge)}.mission-strip.done{background:var(--accent-soft);border-color:var(--accent-soft-edge)}.mission-label{font-family:var(--kh);font-size:11px;font-weight:700;color:var(--gold);margin-bottom:5px}.mission-text{font-family:var(--kh);font-size:13px;color:var(--ink);line-height:1.6;margin:0}.mission-text-en{font-family:var(--disp);font-size:12px;color:var(--ink-dim);line-height:1.5;margin:3px 0 9px}.mission-actions{display:flex;gap:8px;flex-wrap:wrap}.mission-done{padding:7px 13px;background:var(--accent);color:var(--on-accent);font-weight:700}.mission-done,.mission-later{border-radius:9px;font-family:var(--kh);font-size:12px}.mission-later{padding:7px 12px;border:1px solid var(--edge);color:var(--ink-soft)}.mission-later:hover{border-color:var(--gold-edge)}.mission-cheer{font-family:var(--kh);font-size:13px;font-weight:600;color:var(--accent-ink)}.complete-mission{border:1px dashed var(--gold-edge);background:var(--gold-bg);border-radius:12px;padding:11px 13px;margin-bottom:14px}.complete-mission-label{font-family:var(--kh);font-size:11px;font-weight:700;color:var(--gold);margin-bottom:4px}.complete-mission-kh{font-family:var(--kh);font-size:12.5px;color:var(--ink);line-height:1.6;margin:0}.complete-mission-en{font-family:var(--disp);font-size:11.5px;color:var(--ink-dim);line-height:1.5;margin:3px 0 0}.mission-row{display:flex;gap:10px;align-items:flex-start;padding:10px 0;border-top:1px solid var(--edge)}.mission-row:first-of-type{border-top:none}.mission-row-body{flex:1 1;min-width:0}.mission-row-lesson{font-family:var(--kh);font-size:11px;color:var(--ink-dim);margin-bottom:2px}.lesson-learning{margin:16px 0;padding:20px;border:1px solid #cbd5e1;border-radius:16px;background:#fff;color:#172b3a;line-height:1.85}.lesson-learning h2{font-size:1.15rem}.lesson-learning textarea{display:block;box-sizing:border-box;width:100%;min-height:120px;margin:8px 0 16px;padding:12px;font:inherit;color:#172b3a;background:#f8fafc;border:1px solid #94a3b8;border-radius:8px}.learning-steps{display:flex;gap:10px;flex-wrap:wrap;padding:0;list-style:none;font-size:.85rem}.learning-steps [aria-current]{font-weight:700;color:#046b58;border-bottom:3px solid #046b58}.learning-actions{display:flex;flex-wrap:wrap;gap:10px;margin:16px 0}.lesson-learning button:disabled{opacity:.5;cursor:not-allowed}.learning-dashboard{max-width:1250px;margin:auto;padding:24px;color:#172b3a;background:#f8fafc;min-height:100vh;line-height:1.8}.learning-dashboard h1{font-size:1.7rem}.institution-brand{display:flex;gap:24px;align-items:center;flex-wrap:wrap;padding:24px;border-top:6px solid #ffbc00;background:#343a40;color:#fff;margin:16px 0;border-radius:12px}.institution-brand img{width:min(430px,100%);height:auto;max-height:90px;object-fit:contain}.institution-brand p{margin:4px 0;color:#e2e8f0;font-size:14px}.institution-brand strong{font-size:20px}.institution-controls{border:0;padding:0;min-width:0}.institution-setup{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));grid-gap:12px;gap:12px;margin:16px 0}.institution-controls>details,.institution-edit,.institution-setup details,.invitation-results{background:#fff;border:1px solid #dbe4eb;border-radius:12px;padding:16px;margin-bottom:12px}.institution-dashboard label{display:block;margin:10px 0}.institution-dashboard input:not([type=checkbox]),.institution-dashboard select,.institution-dashboard textarea{display:block;width:100%;min-height:42px;padding:8px;border:1px solid #b8c8d5;border-radius:6px;background:#fff;color:#172b3a}.institution-dashboard .learning-actions label{min-width:160px}.institution-dashboard details summary{cursor:pointer;font-weight:600}.institution-dashboard small{font-size:11px;overflow-wrap:anywhere}.institution-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));grid-gap:12px;gap:12px;margin:16px 0}.institution-metrics p{background:#fff;border:1px solid #dbe4eb;border-radius:10px;padding:14px;margin:0}.institution-metrics strong{font-size:28px}.institution-context{border:1px solid #dbe4eb;border-radius:8px;padding:12px;margin:12px 0;font-size:13px}.institution-context select{max-width:100%}@media print{.institution-brand{padding:8px;margin:0 0 12px;page-break-inside:avoid;break-inside:avoid}.institution-brand img{width:300px}.institution-metrics{grid-template-columns:repeat(5,1fr);page-break-inside:avoid;break-inside:avoid}.institution-metrics strong{font-size:20px}}.learning-dashboard label{display:inline-block;margin:12px}.learning-table{overflow-x:auto}.learning-table table{width:100%;border-collapse:collapse;background:#fff}.learning-table td,.learning-table th{padding:12px;text-align:left;border-bottom:1px solid #cbd5e1;min-width:100px}.learning-table th{background:#e0f2ed}.demo-banner{padding:12px;border:2px solid #b45309;background:#fef3c7;font-weight:700}.report-heading{padding:14px 18px;background:#fff;border-left:4px solid #046b58;margin:18px 0}.report-heading h2{font-size:1.2rem}@media print{@page{size:A4 landscape;margin:12mm}body,html{height:auto!important;overflow:visible!important;background:#fff!important}.learning-dashboard{max-width:none;margin:0;padding:0;min-height:0;background:#fff;font-size:10pt}.learning-dashboard .report-controls{display:none!important}.learning-dashboard .learning-table{overflow:visible}.learning-dashboard table{table-layout:fixed;width:100%}.learning-dashboard td,.learning-dashboard th{min-width:0;padding:7px;overflow-wrap:anywhere}.learning-dashboard thead{display:table-header-group}.demo-banner,.learning-dashboard tr,.report-heading{page-break-inside:avoid;break-inside:avoid}.learning-dashboard{print-color-adjust:exact;-webkit-print-color-adjust:exact}}.example-context{padding:16px;margin:16px 0;border:1px solid #dbe4eb;border-radius:12px;background:#f8fafc;line-height:1.8}.example-context label{display:block;font-weight:600;margin-bottom:8px}.example-context select{max-width:100%;min-height:44px}.learner-bank-logo{display:block;max-width:280px;width:100%;height:auto;padding:12px;border-radius:8px;background:#343a40;margin-bottom:12px}.institution-context{line-height:1.8;overflow-wrap:anywhere}.certificate-page{max-width:1200px;margin:0 auto;padding:28px 20px 80px;color:#183345}.certificate-controls{max-width:600px;margin:0 auto 28px;line-height:1.9}.certificate-controls label{display:block;margin:16px 0}.certificate-controls .field-input{width:100%}.certificate-sheet{background:#fffdf8;border:1px solid #c5aa64;padding:38px 48px;text-align:center;line-height:1.8;overflow-wrap:anywhere}.certificate-top{display:flex;justify-content:space-between;align-items:center;gap:20px}.certificate-top strong{display:flex;align-items:center;font-size:28px;gap:12px}.certificate-top strong img{width:52px}.certificate-org-logo{max-width:250px;width:35%;background:#343a40;padding:12px;border-radius:6px}.certificate-eyebrow{letter-spacing:3px;color:#877139;font-size:12px;margin-top:28px}.certificate-sheet h2{font-size:32px;margin:12px 0}.certificate-subtitle{font-family:Georgia,serif;letter-spacing:3px;color:#877139}.certificate-sheet h3{font-size:30px;border-bottom:1px solid #c5aa64;width:-moz-fit-content;width:fit-content;max-width:100%;margin:24px auto;padding:0 30px 14px}.certificate-sheet h4{font-size:23px;margin:12px 0}.certificate-english{color:#64717b;font-size:14px}.certificate-meta{display:flex;justify-content:center;flex-wrap:wrap;gap:28px;border-block:1px solid #dfd9c8;margin:24px 0;padding:18px}.certificate-sheet small{display:block;font-size:11px;color:#64717b}.certificate-sheet footer{display:flex;justify-content:space-between;gap:20px;text-align:left;font-size:13px}.certificate-sheet footer>div:last-child{text-align:right}.certificate-number{font-size:10px;display:block}@media(max-width:600px){.certificate-sheet{padding:22px 16px}.certificate-top strong{font-size:20px}.certificate-top strong img{width:32px}.certificate-sheet h2{font-size:24px}.certificate-sheet h3{font-size:26px}.certificate-meta{gap:16px}.certificate-sheet footer{flex-direction:column}.certificate-sheet footer>div:last-child{text-align:left}}@page camaiCertificate{size:A4 landscape;margin:10mm}@media print{body:has(.certificate-page){background:#fff}body:has(.certificate-page) *{visibility:hidden}.certificate-page{page:camaiCertificate;padding:0!important;margin:0!important}.certificate-controls{display:none!important}.certificate-sheet,.certificate-sheet *{visibility:visible!important}.certificate-sheet{position:absolute;left:0;top:0;width:275mm;min-height:185mm;padding:8mm 12mm;box-shadow:none;print-color-adjust:exact;-webkit-print-color-adjust:exact;page-break-inside:avoid;break-inside:avoid}.certificate-sheet h2{font-size:28px}.certificate-sheet h3{font-size:28px;margin:14px auto}.certificate-meta{margin:14px 0;padding:12px}.certificate-sheet footer{flex-direction:row}.certificate-sheet footer>div:last-child{text-align:right}}@media print{body:has(.certificate-page){margin:0!important;padding:0!important}body:has(.certificate-page) .bottom-nav,body:has(.certificate-page) .sidebar{display:none!important}.certificate-page{height:185mm!important;min-height:0!important;overflow:hidden!important}.certificate-sheet{min-height:0;height:182mm;font-size:12px;line-height:1.5;padding:7mm 12mm;overflow:hidden}.certificate-top strong{font-size:24px}.certificate-top strong img{width:42px}.certificate-org-logo{max-width:220px;padding:8px}.certificate-eyebrow{margin-top:16px;margin-bottom:8px}.certificate-sheet h2{font-size:26px;margin:8px 0}.certificate-subtitle{margin:8px 0 16px}.certificate-sheet h3{font-size:26px;margin:12px auto;padding-bottom:10px}.certificate-sheet h4{font-size:21px;margin:8px 0}.certificate-sheet p{margin-top:8px;margin-bottom:8px}.certificate-meta{margin:14px 0;padding:12px}.certificate-sheet footer{font-size:11px}.certificate-sheet small{font-size:10px}}@media print{body:has(.certificate-page),html:has(.certificate-page){height:185mm!important;min-height:0!important;max-height:185mm!important;overflow:hidden!important}}.certificate-progress{width:100%;height:14px;accent-color:#4b9c36}.certificate-preview-label{padding:12px;margin-bottom:20px;border:2px dashed #aa7621;background:#fff1cc;color:#65440d;font-weight:700;letter-spacing:1px}.certificate-preview{border-style:dashed}.institution-dashboard .dashboard-primary{background:#397c2a;color:#fff;border:1px solid #306a23;border-radius:10px;min-height:48px;padding:12px 20px;box-shadow:0 2px 4px #1633251a;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:10px}.institution-dashboard .dashboard-primary:hover:not(:disabled){background:#2c6421}.institution-dashboard .dashboard-secondary{background:#fff;border:1px solid #9eafbb;border-radius:10px;min-height:48px;padding:12px 20px;cursor:pointer}.institution-dashboard .dashboard-primary:focus-visible,.institution-dashboard .dashboard-secondary:focus-visible{outline:3px solid #eab933;outline-offset:3px}.institution-dashboard .dashboard-primary:disabled,.institution-dashboard .dashboard-secondary:disabled{opacity:.5;cursor:not-allowed}.dashboard-empty{border:1px solid #dbe4eb;background:#fff;border-radius:12px;padding:20px;line-height:1.8;margin:20px 0}.report-print-button{white-space:normal}@media print{.certificate-preview-label{display:block!important;visibility:visible!important;font-size:13px;padding:6px;margin-bottom:8px}.certificate-preview h2{font-size:24px}.certificate-preview .certificate-eyebrow{margin-top:8px}}.institution-dashboard .report-print-button{align-self:flex-end;flex:0 0 auto;width:-moz-fit-content;width:fit-content;max-width:100%;height:42px;min-height:42px;padding:8px 12px;border-radius:8px;font-size:13px;line-height:1.4;gap:6px}.institution-dashboard .report-filters{align-items:flex-end;gap:16px}.institution-dashboard .report-filters>label{margin:0}.institution-dashboard .report-filters>.btn{width:-moz-fit-content;width:fit-content;height:42px;min-height:42px;padding:8px 12px;margin:0}