:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--ds-canvas:#f7f5ff;--ds-canvas-student:#f2f0ff;--ds-surface:#fff;--ds-surface-subtle:#f0edf9;--ds-surface-strong:#e4e2ff;--ds-ink:#18172a;--ds-ink-soft:#4a4763;--ds-text-secondary:#4a4763;--ds-text-tertiary:#625e7c;--ds-line:#cbc5e1;--ds-line-strong:#978eb8;--ds-action:#4f46e5;--ds-action-hover:#3730a3;--ds-action-soft:#e4e2ff;--ds-focus:#4f46e5;--ds-role:#7c3aed;--ds-role-strong:#5b21b6;--ds-role-soft:#eadfff;--ds-energy:#e11d68;--ds-energy-soft:#ffe0ec;--ds-starlight:#9a4b00;--ds-starlight-soft:#ffe8b5;--ds-success:#087f6d;--ds-success-soft:#cff5e9;--ds-info-soft:#d9eeff;--ds-warning:#8a4700;--ds-warning-soft:#ffe8b5;--ds-danger:#c52233;--ds-danger-soft:#ffe1e4;--ds-radius-control:12px;--ds-radius-compact:12px;--ds-radius-surface:16px;--ds-radius-prominent:20px;--ds-motion-fast:.12s;--ds-motion-normal:.18s;--ds-motion-slow:.26s;--ds-ease-out:cubic-bezier(.16, 1, .3, 1);--z-sticky:20;--z-dropdown:30;--z-backdrop:40;--z-dialog:50;--z-toast:60;--z-tooltip:70;--background:var(--ds-canvas);--foreground:var(--ds-ink);--text:var(--ds-ink);--muted:var(--ds-text-tertiary);--panel:var(--ds-surface);--line:var(--ds-line);--line-strong:var(--ds-line-strong);--accent:var(--ds-focus);--accent-strong:var(--ds-action);--accent-soft:var(--ds-action-soft);--electric:#2563eb;--gold:var(--ds-starlight);--gold-soft:var(--ds-starlight-soft);--success:var(--ds-success);--success-soft:var(--ds-success-soft);--danger:var(--ds-danger);--danger-soft:var(--ds-danger-soft);--warning:var(--ds-warning);--warning-soft:var(--ds-warning-soft);--rejected:#8b4d57;--rejected-soft:#f7eef0;--shadow:0 6px 0 #d7d1eb, inset 0 1px 0 #ffffffdb;--shadow-soft:0 3px 0 #ddd8ee, inset 0 1px 0 #ffffffd1;--focus-ring:0 0 0 3px var(--ds-focus)}html{background:var(--ds-canvas);min-width:320px}body{background:var(--ds-canvas);min-width:320px;min-height:100vh;color:var(--foreground);font-family:Nunito,DM Sans,PingFang SC,Microsoft YaHei,system-ui,sans-serif;line-height:1.55;overflow-x:hidden}.portal-shell{background:var(--ds-canvas);min-height:100vh}.portal-student{--ds-canvas-student:#f3f7ff;--ds-surface:#fbfdff;--ds-ink:#142b59;--ds-ink-soft:#526b91;--ds-text-secondary:#526b91;--ds-text-tertiary:#61779a;--ds-line:#c8d7ee;--ds-line-strong:#91a9d0;--ds-action:#3156c8;--ds-action-hover:#183a9b;--ds-action-soft:#e7efff;--ds-focus:#3156c8;--ds-role:#7054b8;--ds-role-strong:#553d95;--ds-role-soft:#eee9ff;--ds-energy:#7054b8;--ds-energy-soft:#eee9ff;--ds-starlight:#7a5814;--ds-starlight-soft:#fff2c8;--ds-info-soft:#e0f1ff;background:var(--ds-canvas-student)}.portal-teacher{--ds-canvas:#f4f7ff;--ds-action-soft:#e3e8ff;--ds-role-soft:#dcf7ef}.portal-admin{--ds-canvas:#eef0f8;--ds-surface-subtle:#e7e9f2;--ds-action:#3730a3;--ds-action-hover:#25206f}.portal-teacher .brand:before{background:var(--ds-success)}.portal-admin .topbar{color:#fff;background:var(--ds-ink);box-shadow:0 4px #4f46e5}.portal-admin .brand,.portal-admin .admin-session{color:#fff}.portal-admin .brand:before{background:#fb7185}.portal-admin .nav-links a{color:#f7f5ff;background:#29263f;border-color:#625e7c;box-shadow:0 2px #080711}.portal-admin .nav-links a:hover{color:#fff;background:#3b3756;border-color:#aaa4da}a,button,input,select,textarea,summary{-webkit-tap-highlight-color:transparent}.app-shell{width:100%;min-width:0;margin:0;padding:18px clamp(12px,1.5vw,24px) 52px}.skip-link{z-index:100;color:#fff;background:#0b3267;border-radius:7px;padding:10px 14px;font-weight:800;text-decoration:none;position:fixed;top:8px;left:12px;transform:translateY(calc(-100% - 16px))}.skip-link:focus-visible{outline-offset:2px;outline:3px solid #fff;transform:translateY(0)}.topbar{z-index:var(--z-sticky);border:2px solid var(--ds-ink);border-radius:var(--ds-radius-surface);background:var(--ds-surface);min-width:0;box-shadow:0 4px 0 var(--ds-ink);justify-content:space-between;align-items:center;gap:18px;margin-bottom:22px;padding:10px 12px 10px 16px;display:flex;position:sticky;top:12px}.brand{overflow-wrap:anywhere;min-width:0;min-height:44px;color:var(--ds-ink);letter-spacing:0;align-items:center;font-size:18px;font-weight:900;line-height:1.35;text-decoration:none;display:inline-flex}.brand:before{content:"";background:var(--ds-energy);border-radius:4px;width:10px;height:20px;margin-right:10px;display:inline-block}.nav-links{flex-wrap:wrap;justify-content:flex-end;gap:6px;min-width:0;display:flex}.nav-more{position:relative}.nav-more>summary{border:1px solid var(--line);color:#29415f;cursor:pointer;background:#ffffffdb;border-radius:7px;justify-content:center;align-items:center;min-height:38px;padding:8px 12px;font-weight:800;line-height:1.25;list-style:none;display:inline-flex}.nav-more>summary::-webkit-details-marker{display:none}.nav-more>summary:after{content:"⌄";margin-left:7px}.nav-more>summary:hover,.nav-more>summary.active{border-color:var(--line-strong);background:var(--accent-soft);color:var(--accent-strong)}.nav-more>summary:focus-visible{outline-offset:2px;outline:3px solid #0969c7}.nav-more-menu{z-index:60;border:1px solid var(--line-strong);background:#fff;border-radius:10px;gap:4px;min-width:190px;padding:8px;display:grid;position:absolute;top:calc(100% + 8px);right:0}.nav-more-menu a{box-shadow:none;border-color:#0000;justify-content:flex-start}.nav-links a,.button{border:2px solid var(--ds-line-strong);border-radius:var(--ds-radius-control);overflow-wrap:anywhere;background:var(--ds-surface);max-width:100%;min-height:44px;box-shadow:0 2px 0 var(--ds-line-strong);color:var(--ds-ink);font:inherit;text-align:center;cursor:pointer;touch-action:manipulation;transition:border-color var(--ds-motion-normal) var(--ds-ease-out), background-color var(--ds-motion-normal) var(--ds-ease-out), color var(--ds-motion-normal) var(--ds-ease-out), transform var(--ds-motion-fast) var(--ds-ease-out);justify-content:center;align-items:center;padding:8px 12px;font-weight:800;line-height:1.25;text-decoration:none;display:inline-flex}.nav-links a:hover,.button:hover:not(:disabled){border-color:var(--ds-action);background:var(--ds-action-soft);color:var(--ds-action)}.nav-links a:active,.button:active:not(:disabled){transform:translateY(2px);box-shadow:0 0 #0000}.nav-links a.active,.nav-links a[aria-current=page]{border-color:var(--ds-action-hover);background:var(--ds-action);box-shadow:0 2px 0 var(--ds-action-hover), inset 0 1px 0 #ffffff47;color:#fff}.button.primary{border-color:var(--ds-action-hover);background:var(--ds-action);box-shadow:0 3px 0 var(--ds-action-hover), inset 0 1px 0 #ffffff4d;color:#fff}.button.primary:hover{border-color:var(--ds-action-hover);background:var(--ds-action-hover);color:#fff}.button.danger{background:var(--danger-soft);color:var(--danger);border-color:#b4232c75}.button.danger:hover{border-color:var(--danger);color:#8d1821;background:#ffe4e7}button:disabled,.button[aria-disabled=true]{cursor:not-allowed;opacity:.55;transform:none}:where(a,button,input,select,textarea,summary):focus-visible{box-shadow:var(--focus-ring);outline:2px solid #0000}.button.primary:focus-visible,.nav-links a.active:focus-visible,.nav-links a[aria-current=page]:focus-visible{outline-offset:2px;outline:3px solid #0969c7}.panel,.page-title{border:2px solid var(--ds-line);border-radius:var(--ds-radius-surface);background:var(--ds-surface);min-width:0;box-shadow:var(--shadow-soft)}.panel{overflow-wrap:anywhere}.page-title{position:relative;overflow:hidden}.simple-page-summary{min-width:0}.simple-page-summary>div,.simple-home-summary,.status-grid>div,.metric-card{overflow-wrap:anywhere;border-radius:var(--ds-radius-surface);background:var(--ds-info-soft);border:2px solid #b8b2d0;min-width:0;box-shadow:0 3px #b8b2d0,inset 0 1px #fffc}.simple-page-summary>div:nth-child(3n+2){background:var(--ds-success-soft);border-color:#94cdbd;box-shadow:0 3px #94cdbd,inset 0 1px #fffc}.simple-page-summary>div:nth-child(3n){background:var(--ds-starlight-soft);border-color:#d8b66a;box-shadow:0 3px #d8b66a,inset 0 1px #fffc}form,fieldset,.form-grid,.inline-form,.filter-bar,.stacked-form{min-width:0}fieldset{border-color:var(--line);max-width:100%;margin:0}input,select,textarea{border:2px solid var(--ds-line);border-radius:var(--ds-radius-control);background:var(--ds-surface);min-width:0;max-width:100%;color:var(--foreground);transition:border-color .16s,background-color .16s,box-shadow .16s;box-shadow:inset 0 1px 2px #0d36600d}input,select{min-height:44px}input:hover,select:hover,textarea:hover{border-color:#087ee880}input:focus-visible,select:focus-visible,textarea:focus-visible{border-color:var(--accent);box-shadow:var(--focus-ring);background:#fff;outline:none}input::placeholder,textarea::placeholder{color:#566a84}label,.field-label{color:#526680}.badge{overflow-wrap:anywhere;background:var(--accent-soft);max-width:100%;color:var(--accent-strong);border-color:#087ee84d}.warning-badge,.badge.pending{background:var(--warning-soft);color:var(--warning);border-color:#b8790861}.badge.approved{background:var(--success-soft);color:var(--success);border-color:#087f7357}.muted-badge,.badge.rejected{background:var(--rejected-soft);color:var(--rejected);border-color:#8b4d5740}.alert,.notice{overflow-wrap:anywhere;min-width:0;box-shadow:var(--shadow-soft);border-radius:8px}.notice,.notice.warning{background:linear-gradient(135deg, var(--gold-soft), #ffffffe6);color:#6f4b08;border-color:#b8790861}.alert.success{background:var(--success-soft);color:#07665d;border-color:#087f7357}.alert.error{background:var(--danger-soft);color:var(--danger);border-color:#b4232c61}:where(.list-item,.submission-stage-card).pending{background:linear-gradient(135deg, var(--warning-soft), #ffffffe6);border-color:#b879086b;box-shadow:inset 3px 0 #d79a1c}:where(.list-item,.submission-stage-card).approved{background:linear-gradient(135deg, var(--success-soft), #ffffffe6);border-color:#087f735c;box-shadow:inset 3px 0 #129b8d}:where(.list-item,.submission-stage-card).rejected{background:linear-gradient(135deg, var(--rejected-soft), #ffffffe6);border-color:#8b4d574d;box-shadow:inset 3px 0 #9b5964}.empty-state{overflow-wrap:anywhere;background:#fafdffc7;border-color:#4885be52;min-width:0}.empty-state.compact{border-style:dashed;border-radius:8px}details{min-width:0}details>summary{overflow-wrap:anywhere;color:var(--accent-strong);cursor:pointer;border-radius:6px;transition:color .16s,background-color .16s,box-shadow .16s}details>summary:hover{color:var(--accent);background:#e6f4ffad}details[open]>summary{color:#0b657d}.table-wrap{scrollbar-color:#8ec9ee #edf7fd;background:#ffffffc2;border:1px solid #327fc833;border-radius:8px;max-width:100%;overflow-x:auto}.table-wrap table{margin:0}table{color:var(--foreground)}th,td{overflow-wrap:anywhere;border-bottom-color:#327fc82e;max-width:34rem}th{color:#405a78;background:#e5f3fdd1}tbody tr{transition:background-color .14s}tbody tr:hover{background:#e4f4ff94}@media (max-width:900px){.topbar{align-items:flex-start;position:static}.brand{flex:220px}.nav-links{flex:100%}}@media (max-width:720px){.app-shell{width:100%;margin:0;padding:12px 12px 36px}.topbar{-webkit-backdrop-filter:none;backdrop-filter:none;gap:10px;padding:12px;display:grid;overflow:hidden}.brand{white-space:nowrap;text-overflow:ellipsis;width:100%;overflow:hidden}.nav-links{overscroll-behavior-inline:contain;scrollbar-color:#2991cf8f #e1f0f8b3;scrollbar-width:thin;scroll-snap-type:x proximity;flex-wrap:nowrap;justify-content:flex-start;width:100%;max-width:100%;padding:1px 1px 5px;overflow-x:auto}.nav-links a{overflow-wrap:normal;white-space:nowrap;scroll-snap-align:start;flex:none;min-height:36px;padding:7px 11px}.nav-more{flex:none}.nav-more>summary{min-height:44px}.nav-more-menu{overscroll-behavior:contain;max-height:min(70vh,520px);padding-bottom:calc(8px + env(safe-area-inset-bottom));position:fixed;inset:auto 12px 12px;overflow-y:auto}.nav-more-menu a{min-height:44px}}@media (max-width:420px){.app-shell{width:100%;padding-bottom:28px}.topbar{margin-bottom:14px;padding:10px}.brand{font-size:16px}.brand:before{height:16px;margin-right:7px}.page-stack{gap:12px}.page-title,.panel{padding:16px}.lead{margin-top:12px;font-size:15px;line-height:1.65}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
