:root{
  --bg:#080d18;
  --surface:#111a2a;
  --surface-2:#172338;
  --surface-3:#1d2c46;
  --text:#f7f9fc;
  --muted:#9ba9c0;
  --line:rgba(255,255,255,.095);
  --python:#f1c75b;
  --ux:#a98cff;
  --security:#ff7f8f;
  --os:#67b7ff;
  --math:#6ed2a5;
  --page-glow-1:rgba(169,140,255,.17);
  --page-glow-2:rgba(103,183,255,.13);
  --nav-bg:rgba(17,26,42,.9);
  --control-bg:rgba(255,255,255,.06);
  --shadow:rgba(0,0,0,.2);
}

*{box-sizing:border-box}
html{scroll-behavior:smooth;background:var(--bg)}
html,body{margin:0;min-height:100%;color:var(--text)}
body{
  position:relative;
  isolation:isolate;
  font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  background:
    radial-gradient(circle at 12% -8%,var(--page-glow-1),transparent 30%),
    radial-gradient(circle at 96% 2%,var(--page-glow-2),transparent 27%),
    var(--bg);
  background-attachment:fixed;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
body::before{content:"";position:fixed;inset:0;z-index:-1;background-image:linear-gradient(rgba(243,246,251,.58),rgba(243,246,251,.72)),url("../images/bg-desktop.webp");background-position:center;background-size:cover;background-repeat:no-repeat;pointer-events:none}
button,a{font:inherit;-webkit-tap-highlight-color:transparent}
a{color:inherit}
.app{width:min(800px,calc(100% - 32px));margin:0 auto;padding:28px 0 46px}

.topbar{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:20px;padding:4px 2px}
.title-wrap h1{margin:0;font-size:34px;line-height:1;letter-spacing:-.045em;text-wrap:balance}
.subtitle{margin-top:8px;color:var(--muted);font-size:13px;letter-spacing:.015em}
.top-actions{display:flex;align-items:center;gap:8px}
.lang-trigger{
    min-height:38px;padding:8px 12px;border-radius:999px;background:var(--control-bg);
    border:1px solid var(--line);color:#dce3ef;font-size:12px;white-space:nowrap;
  }
.lang-wrap{position:relative}
.lang-trigger{cursor:pointer;display:flex;align-items:center;justify-content:center;gap:7px;width:auto;min-width:40px;padding:0 10px;transition:background-color .16s ease,border-color .16s ease,transform .12s ease}
.lang-trigger:hover{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.16)}
.lang-trigger:active{transform:scale(.96)}
.lang-trigger:focus-visible,.lang-option:focus-visible{outline:2px solid var(--os);outline-offset:2px}
.globe{display:block;flex:0 0 18px;width:18px;height:18px;overflow:visible;fill:none;stroke:#8fd0ff;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.semester-inline{color:#cbd4e3;font-weight:650;white-space:nowrap}.subtitle-separator{padding:0 2px;color:#59667c}
.lang-menu{
  position:absolute;right:0;top:44px;z-index:50;min-width:160px;padding:6px;
    background:rgba(17,26,42,.96);border:1px solid rgba(255,255,255,.13);border-radius:16px;
    backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);
  box-shadow:0 18px 50px rgba(0,0,0,.38);display:none;
}
.lang-menu.open{display:block;animation:pop .14s ease}
@keyframes pop{from{opacity:0;transform:translateY(-4px) scale(.98)}to{opacity:1;transform:none}}
.lang-option{width:100%;min-height:40px;border:0;background:transparent;color:#dce3ef;text-align:left;padding:9px 10px;border-radius:10px;cursor:pointer}
.lang-option:hover,.lang-option.active{background:#1b263b;color:#fff}

.tabs-wrap{position:sticky;top:0;z-index:10;padding:8px 0 14px;background:transparent}
.tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;background:var(--nav-bg);border:1px solid var(--line);border-radius:19px;padding:6px;overflow:hidden;box-shadow:0 14px 34px var(--shadow)}
.tab{
  appearance:none;-webkit-appearance:none;-webkit-tap-highlight-color:transparent;min-width:0;min-height:42px;border:0;
  border-radius:13px;background:transparent;color:var(--muted);padding:10px 6px;font-size:13px;line-height:1;font-weight:750;
  cursor:pointer;transition:background-color .16s ease,color .16s ease,box-shadow .16s ease,transform .08s ease;
}
.tab:hover{background:#182235;color:#fff}.tab:active{background:#1d2940;transform:scale(.98)}
.tab:focus-visible{outline:2px solid rgba(103,183,255,.75);outline-offset:2px}
.tab.active{background:linear-gradient(180deg,#fff,#eaf0f8);color:#111827;box-shadow:0 7px 22px rgba(0,0,0,.25)}
.tab.today:not(.active)::after{content:"";display:block;width:4px;height:4px;margin:5px auto 0;border-radius:50%;background:#fff;opacity:.7}

.day-panel{display:none;animation:fade .18s ease}.day-panel.active{display:block}
@keyframes fade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.day-head{display:flex;align-items:end;justify-content:space-between;gap:16px;margin:15px 3px 15px}
.day-head h2{margin:0;font-size:24px;letter-spacing:-.03em}.day-head span{color:var(--muted);font-size:13px}
.timeline{position:relative;display:flex;flex-direction:column;gap:12px}

.lesson{
  --accent:#fff;position:relative;display:grid;grid-template-columns:92px 1fr;gap:14px;align-items:stretch;padding:0;
  border-radius:21px;overflow:hidden;background:linear-gradient(135deg,rgba(255,255,255,.018),transparent 45%),var(--surface);border:1px solid var(--line);box-shadow:0 14px 36px rgba(0,0,0,.2);
  transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease,background .18s ease;
}
.lesson.current{
  transform:translateY(-1px);border-color:color-mix(in srgb,var(--accent) 72%,white 6%);
  background:linear-gradient(115deg,color-mix(in srgb,var(--accent) 9%,var(--surface)),var(--surface) 58%);
  box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 28%,transparent),0 18px 44px rgba(0,0,0,.34),0 0 34px color-mix(in srgb,var(--accent) 13%,transparent);
}
.lesson.current::after{
  content:"";position:absolute;inset:0;border-radius:20px;pointer-events:none;
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 38%,transparent);animation:currentPulse 2.4s ease-in-out infinite;
}
@keyframes currentPulse{0%,100%{opacity:.45}50%{opacity:1}}
.lesson.special{opacity:.82;border-style:dashed}

.timebox{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:18px 10px;background:rgba(255,255,255,.032);border-right:1px solid var(--line)}
.timebox strong{font-size:18px;letter-spacing:-.03em;line-height:1.05}.timebox small{margin-top:5px;color:var(--muted);font-size:11px}
.content{position:relative;padding:15px 18px 15px 4px;min-width:0}
.content:before{content:"";position:absolute;left:-14px;top:16px;bottom:16px;width:4px;border-radius:99px;background:var(--accent)}
.lesson.current .content:before{box-shadow:0 0 16px var(--accent)}
.subject-line{display:flex;align-items:center;gap:10px;min-width:0;flex-wrap:wrap}
.subject{font-size:17px;font-weight:800;letter-spacing:-.02em;line-height:1.2}
.now-badge{display:none;padding:5px 8px;border-radius:999px;background:var(--accent);color:#0b1020;font-size:10px;font-weight:900;letter-spacing:.02em;text-transform:uppercase;box-shadow:0 5px 18px color-mix(in srgb,var(--accent) 25%,transparent)}
.lesson.current .now-badge{display:inline-flex}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:9px}
.tag{font-size:11px;padding:5px 8px;border-radius:999px;color:#dfe5f1;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.06)}
.tag.online{color:#c7f4df;background:rgba(110,210,165,.08);border-color:rgba(110,210,165,.14)}
.tag.special-tag{display:none;color:#ffdba0;background:rgba(241,199,91,.09);border-color:rgba(241,199,91,.18)}
.lesson.special .special-tag{display:inline-flex}

.actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:12px}
.join-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:38px;text-decoration:none;padding:8px 13px;border-radius:12px;
  background:color-mix(in srgb,var(--accent) 88%,white 12%);color:#0b1020;font-size:12px;font-weight:850;
  box-shadow:0 7px 20px color-mix(in srgb,var(--accent) 18%,transparent);transition:transform .12s ease,filter .12s ease;
}
.join-btn:hover{filter:brightness(1.06);transform:translateY(-1px)}.join-btn:active{transform:translateY(0)}
.site-link{font-size:11px;color:var(--muted);text-decoration:none;border-bottom:1px solid transparent}
.site-link:hover{color:#d9e1ee;border-color:rgba(255,255,255,.25)}
.uncertain{margin-top:8px;color:#aab4c5;font-size:10px;line-height:1.35}

.break{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:12px;padding:0 4px}.break:before,.break:after{content:"";height:1px;flex:1;background:var(--line)}
.empty{min-height:280px;display:grid;place-items:center;text-align:center;border-radius:22px;border:1px dashed rgba(255,255,255,.12);background:linear-gradient(145deg,rgba(255,255,255,.035),rgba(255,255,255,.015));padding:28px}
.empty h3{margin:0;font-size:24px}.empty p{margin:7px 0 0;color:var(--muted);font-size:13px}
.python{--accent:var(--python)}.ux{--accent:var(--ux)}.security{--accent:var(--security)}.os{--accent:var(--os)}.math{--accent:var(--math)}

.language-modal{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:20px;background:radial-gradient(circle at 50% 38%,rgba(103,183,255,.09),transparent 34%),rgba(3,7,14,.8);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);animation:modalFade .2s ease}
.language-modal[hidden]{display:none}
.language-dialog{position:relative;width:min(440px,100%);padding:30px;border:1px solid rgba(143,208,255,.14);border-radius:28px;background:linear-gradient(145deg,rgba(143,208,255,.055),transparent 42%),#101929;box-shadow:0 32px 90px rgba(0,0,0,.56),inset 0 1px 0 rgba(255,255,255,.055);animation:dialogIn .24s ease;overflow:hidden}
.language-dialog::before{content:"";position:absolute;top:-90px;right:-80px;width:220px;height:220px;border-radius:50%;background:rgba(103,183,255,.08);filter:blur(10px);pointer-events:none}
.language-dialog:focus{outline:none}
.language-icon{position:relative;display:grid;place-items:center;width:50px;height:50px;margin-bottom:20px;border-radius:16px;background:linear-gradient(145deg,rgba(103,183,255,.18),rgba(169,140,255,.1));border:1px solid rgba(143,208,255,.2);box-shadow:0 10px 28px rgba(0,0,0,.2)}
.language-icon svg{width:23px;height:23px;fill:none;stroke:#9bd7ff;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.language-dialog h2{position:relative;margin:0;font-size:26px;letter-spacing:-.04em}.language-dialog>p{position:relative;margin:7px 0 22px;color:var(--muted);font-size:13px}
.language-grid{position:relative;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.language-choice{display:flex;align-items:center;justify-content:center;min-height:56px;padding:12px 14px;border:1px solid var(--line);border-radius:15px;background:rgba(255,255,255,.035);color:var(--text);cursor:pointer;text-align:center;box-shadow:inset 0 1px 0 rgba(255,255,255,.025);transition:background-color .15s ease,border-color .15s ease,transform .12s ease,box-shadow .15s ease}
.language-choice:hover{background:rgba(103,183,255,.09);border-color:rgba(143,208,255,.24);box-shadow:0 8px 24px rgba(0,0,0,.16)}.language-choice:active{transform:scale(.98)}.language-choice:focus-visible{outline:2px solid var(--os);outline-offset:2px}
.language-choice strong{font-size:14px;letter-spacing:-.01em}
body.modal-open{overflow:hidden}
@keyframes modalFade{from{opacity:0}to{opacity:1}}@keyframes dialogIn{from{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}

@media (max-width:620px){
  html,body{min-height:100%;min-height:100dvh}
  body{background:radial-gradient(circle at 18% -5%,rgba(169,140,255,.15),transparent 29%),var(--bg)}
  .app{width:100%;max-width:780px;padding:calc(18px + env(safe-area-inset-top)) 12px calc(30px + env(safe-area-inset-bottom))}
  .topbar{gap:10px;margin-bottom:10px;padding:0 3px}.title-wrap{min-width:0}.title-wrap h1{font-size:28px}.subtitle{font-size:12px;margin-top:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .lang-trigger{width:auto;min-height:42px;min-width:42px;padding:0 11px}.lang-menu{top:48px;min-width:172px}.lang-option{min-height:44px}
  .tabs-wrap{top:0;margin:0 -12px;padding:7px 12px 12px}.tabs{gap:4px;padding:4px;border-radius:17px}.tab{min-height:46px;border-radius:13px;font-size:12px;padding:8px 2px}
  .day-head{margin:11px 3px 12px;gap:10px;align-items:baseline}.day-head h2{font-size:22px}.day-head span{font-size:12px;white-space:nowrap}
  .timeline{gap:10px}.lesson{grid-template-columns:78px minmax(0,1fr);gap:10px;border-radius:18px;box-shadow:0 10px 28px rgba(0,0,0,.18)}.lesson.current::after{border-radius:18px}
  .timebox{padding:15px 6px}.timebox strong{font-size:16px}.timebox small{font-size:10px;margin-top:4px}
  .content{padding:14px 12px 14px 3px}.content:before{left:-10px;top:14px;bottom:14px;width:3px}.subject{font-size:15px;line-height:1.25;overflow-wrap:anywhere}
  .row{gap:6px;margin-top:8px}.tag{font-size:10px;padding:5px 7px}.actions{gap:8px;margin-top:11px}.join-btn{min-height:42px;padding:9px 11px;font-size:11px}.site-link{display:inline-flex;align-items:center;min-height:42px;padding:6px 4px;font-size:10px}
  .uncertain{font-size:10px;line-height:1.45}.break{font-size:11px;padding:1px 2px}.empty{min-height:220px;border-radius:19px;padding:22px}.empty h3{font-size:21px}
  .language-modal{padding:14px}.language-dialog{padding:24px;border-radius:23px}.language-dialog h2{font-size:23px}.language-grid{grid-template-columns:1fr 1fr}.language-choice{min-height:54px}
}
@media (max-width:360px){.language-grid{grid-template-columns:1fr}.language-choice{min-height:48px}}
@media (max-width:420px){
  .lesson{grid-template-columns:72px minmax(0,1fr);gap:9px}.content{padding-right:10px}.actions{display:grid;grid-template-columns:minmax(0,1fr)}.join-btn{width:100%}.site-link{justify-content:center;width:100%;padding:4px 8px;border:1px solid rgba(255,255,255,.08);border-radius:10px;background:rgba(255,255,255,.025)}
}
@media (max-width:360px){.app{padding-left:9px;padding-right:9px}.tabs-wrap{margin-left:-9px;margin-right:-9px;padding-left:9px;padding-right:9px}.tabs{gap:3px}.tab{font-size:11px}.lesson{grid-template-columns:68px minmax(0,1fr);gap:8px}.timebox strong{font-size:15px}.subject{font-size:14px}.day-head h2{font-size:20px}}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}

[data-theme="light"]{
  color-scheme:light;
  --bg:#f3f6fb;
  --surface:#ffffff;
  --surface-2:#edf2f9;
  --surface-3:#e3ebf6;
  --text:#172033;
  --muted:#66738a;
  --line:rgba(31,48,75,.11);
  --page-glow-1:rgba(169,140,255,.18);
  --page-glow-2:rgba(103,183,255,.18);
  --nav-bg:rgba(255,255,255,.88);
  --control-bg:rgba(255,255,255,.72);
  --shadow:rgba(34,52,82,.12);
}
[data-theme="light"] body{background:transparent}
[data-theme="light"] .subtitle{color:#718097}[data-theme="light"] .semester-inline{color:#45546c}[data-theme="light"] .subtitle-separator{color:#a1adbd}
[data-theme="light"] .lang-trigger{color:#34435b;box-shadow:0 5px 18px rgba(42,61,91,.07)}
[data-theme="light"] .lang-trigger:hover{background:#fff;border-color:rgba(31,48,75,.17)}
[data-theme="light"] .lang-menu{background:rgba(255,255,255,.96);border-color:var(--line);box-shadow:0 18px 50px rgba(42,61,91,.18)}
[data-theme="light"] .lang-option{color:#445269}[data-theme="light"] .lang-option:hover,[data-theme="light"] .lang-option.active{background:#edf3fb;color:#172033}
[data-theme="light"] .tabs-wrap{background:transparent}
[data-theme="light"] .tabs{padding:4px;background:#e7edf5;border-color:rgba(31,48,75,.07);box-shadow:0 8px 24px rgba(42,61,91,.07)}
[data-theme="light"] .tab{color:#68758b;border-radius:15px}[data-theme="light"] .tab:hover{background:rgba(255,255,255,.62);color:#172033}[data-theme="light"] .tab.active{background:linear-gradient(180deg,#33445e,#243249);color:#fff;box-shadow:0 4px 12px rgba(29,44,67,.16)}
[data-theme="light"] .tab.today:not(.active)::after{background:#425673}
[data-theme="light"] .lesson{background:linear-gradient(135deg,rgba(255,255,255,.9),transparent 48%),var(--surface);box-shadow:0 12px 32px rgba(42,61,91,.09)}
[data-theme="light"] .lesson.current{background:linear-gradient(115deg,color-mix(in srgb,var(--accent) 12%,#fff),#fff 64%);box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 20%,transparent),0 16px 38px rgba(42,61,91,.13),0 0 28px color-mix(in srgb,var(--accent) 11%,transparent)}
[data-theme="light"] .timebox{background:#f6f8fc}[data-theme="light"] .tag{color:#4c5a70;background:#f1f4f8;border-color:rgba(31,48,75,.07)}[data-theme="light"] .tag.online{color:#247753;background:rgba(55,168,116,.1);border-color:rgba(55,168,116,.15)}
[data-theme="light"] .site-link{color:#66738a}[data-theme="light"] .site-link:hover{color:#26364d;border-color:rgba(31,48,75,.25)}[data-theme="light"] .uncertain{color:#77849a}
[data-theme="light"] .empty{background:linear-gradient(145deg,rgba(255,255,255,.9),rgba(237,242,249,.72));border-color:rgba(31,48,75,.13)}
[data-theme="light"] .language-modal{background:radial-gradient(circle at 50% 38%,rgba(103,183,255,.14),transparent 34%),rgba(232,238,247,.78)}
[data-theme="light"] .language-dialog{background:linear-gradient(145deg,rgba(103,183,255,.07),transparent 42%),#fff;border-color:rgba(57,91,132,.14);box-shadow:0 32px 90px rgba(42,61,91,.24),inset 0 1px 0 #fff}
[data-theme="light"] .language-choice{background:#f7f9fc;color:#172033;border-color:rgba(31,48,75,.1);box-shadow:inset 0 1px 0 #fff}[data-theme="light"] .language-choice:hover{background:#edf5ff;border-color:rgba(75,148,208,.28);box-shadow:0 8px 24px rgba(42,61,91,.1)}
@media (max-width:620px){body::before{background-image:linear-gradient(rgba(243,246,251,.62),rgba(243,246,251,.78)),url("../images/bg-mobile.webp");background-position:center top}}

/* Portal shell */
.portal-shell{display:grid;grid-template-columns:220px minmax(0,800px);justify-content:center;gap:30px;width:min(1080px,calc(100% - 36px));margin:0 auto;align-items:start;transition:grid-template-columns .22s ease,gap .22s ease}
.portal-shell.sidebar-collapsed{grid-template-columns:76px minmax(0,900px);gap:22px}
.portal-shell .app{width:100%;margin:0;padding-top:28px}
.portal-sidebar{position:sticky;top:24px;display:flex;flex-direction:column;min-height:calc(100dvh - 48px);margin-top:24px;padding:16px 12px;border:1px solid var(--line);border-radius:24px;background:rgba(255,255,255,.74);box-shadow:0 16px 45px rgba(42,61,91,.09);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.sidebar-toggle{position:absolute;top:21px;right:13px;z-index:2;display:grid;place-items:center;width:28px;height:28px;padding:0;border:1px solid var(--line);border-radius:9px;background:#f3f6fa;color:#68758b;cursor:pointer;transition:transform .2s ease,background-color .15s ease}.sidebar-toggle svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transform:rotate(90deg)}.sidebar-toggle:hover{background:#e7edf5;color:#26364d}.sidebar-toggle:focus-visible{outline:2px solid var(--os);outline-offset:2px}.sidebar-collapsed .sidebar-toggle{left:50%;right:auto;transform:translateX(-50%) rotate(180deg)}
.portal-brand{display:flex;align-items:center;gap:10px;padding:4px 38px 18px 6px;border-bottom:1px solid var(--line)}
.brand-mark{display:grid;place-items:center;flex:0 0 38px;width:38px;height:38px;border-radius:12px;overflow:hidden;background:#111820;box-shadow:0 8px 18px rgba(31,45,66,.18)}.brand-mark img{display:block;width:100%;height:100%;object-fit:cover}
.portal-brand>span:last-child{display:flex;flex-direction:column}.portal-brand strong{font-size:14px;letter-spacing:.04em}.portal-brand small{margin-top:2px;color:var(--muted);font-size:9px;text-transform:uppercase;letter-spacing:.08em}
.portal-nav{display:flex;flex:1;flex-direction:column;gap:5px;margin-top:14px}
.portal-nav-item{display:flex;align-items:center;gap:11px;width:100%;min-height:45px;padding:9px 11px;border:0;border-radius:13px;background:transparent;color:#68758b;font-size:12px;font-weight:700;cursor:pointer;text-align:left;text-decoration:none;transition:background-color .15s ease,color .15s ease,transform .1s ease}
.portal-nav-item svg{flex:0 0 19px;width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.portal-nav-item:hover{background:#edf2f8;color:#26364d}.portal-nav-item:active{transform:scale(.98)}.portal-nav-item:focus-visible{outline:2px solid var(--os);outline-offset:2px}.portal-nav-item.active{background:linear-gradient(145deg,#33445e,#243249);color:#fff;box-shadow:0 8px 18px rgba(29,44,67,.15)}
.sidebar-collapsed .portal-sidebar{padding-left:10px;padding-right:10px}.sidebar-collapsed .portal-brand{display:none}.sidebar-collapsed .portal-nav{margin-top:48px}.sidebar-collapsed .portal-nav-item span{display:none}.sidebar-collapsed .portal-nav-item{justify-content:center;padding-left:0;padding-right:0}.sidebar-collapsed .portal-nav-item svg{flex-basis:20px;width:20px;height:20px}
.portal-view{display:none;animation:fade .18s ease}.portal-view.active{display:block}
.section-header{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin:4px 2px 24px}.section-header h1{margin:5px 0 0;font-size:34px;line-height:1;letter-spacing:-.045em}.section-header p{margin:8px 0 0;color:var(--muted);font-size:13px}.eyebrow{color:#5884b2;font-size:10px;font-weight:850;letter-spacing:.1em;text-transform:uppercase}
.week-hero{position:relative;display:flex;align-items:center;justify-content:space-between;min-height:190px;padding:30px;border:1px solid rgba(75,148,208,.16);border-radius:26px;overflow:hidden;background:linear-gradient(135deg,#263a56,#47729d);color:#fff;box-shadow:0 18px 42px rgba(42,78,116,.18)}
.week-hero::after{content:"";position:absolute;right:-50px;top:-90px;width:280px;height:280px;border-radius:50%;background:rgba(255,255,255,.07)}.week-hero>div:first-child{position:relative;z-index:1}.week-hero span{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.09em;opacity:.7}.week-hero strong{display:block;margin-top:10px;font-size:42px;line-height:1;letter-spacing:-.05em}.week-hero p{margin:10px 0 0;font-size:13px;opacity:.72}
.week-orbit{position:relative;z-index:1;display:grid;place-items:center;width:100px;height:100px;border:1px solid rgba(255,255,255,.24);border-radius:50%}.week-orbit::before,.week-orbit::after{content:"";position:absolute;border:1px solid rgba(255,255,255,.13);border-radius:50%}.week-orbit::before{inset:13px}.week-orbit::after{inset:30px}.week-orbit span{width:11px;height:11px;border-radius:50%;background:#fff;box-shadow:0 0 22px rgba(255,255,255,.7);transform:translate(38px,-8px)}
.stats-grid{display:grid;grid-template-columns:1.5fr 1fr .7fr;gap:12px;margin-top:14px}.stat-card{padding:20px;border:1px solid var(--line);border-radius:20px;background:#fff;box-shadow:0 10px 28px rgba(42,61,91,.07)}.stat-card>span{display:block;color:var(--muted);font-size:10px;font-weight:750;text-transform:uppercase;letter-spacing:.07em}.stat-card strong{display:block;margin-top:9px;font-size:17px;letter-spacing:-.02em}.stat-card small{display:flex;align-items:center;flex-wrap:wrap;gap:4px;margin-top:5px;color:#8490a3;font-size:10px}.stat-card small i{font-style:normal;color:#b3bbc8}.stat-card small b{color:#536177;font-size:inherit}
.info-panel{display:flex;gap:14px;margin-top:14px;padding:20px;border:1px solid var(--line);border-radius:20px;background:rgba(255,255,255,.6)}.info-panel-icon{display:grid;place-items:center;flex:0 0 34px;width:34px;height:34px;border-radius:11px;background:#e8f2fc;color:#477eae;font-weight:900}.info-panel h2{margin:1px 0 5px;font-size:15px}.info-panel p{margin:0;color:var(--muted);font-size:12px;line-height:1.55}
.course-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.course-card{--accent:#718096;position:relative;display:flex;flex-direction:column;min-height:180px;padding:21px;border:1px solid var(--line);border-radius:22px;overflow:hidden;background:#fff;box-shadow:0 10px 30px rgba(42,61,91,.075)}.course-card::after{content:"";position:absolute;right:-30px;top:-38px;width:120px;height:120px;border-radius:50%;background:color-mix(in srgb,var(--accent) 11%,transparent)}.course-dot{position:relative;z-index:1;width:10px;height:10px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 5px color-mix(in srgb,var(--accent) 13%,transparent)}.course-card>div{position:relative;z-index:1;margin-top:19px}.course-code{color:var(--accent);font-size:9px;font-weight:900;letter-spacing:.1em}.course-card h2{max-width:260px;margin:6px 0 0;font-size:18px;line-height:1.25;letter-spacing:-.025em}.course-card>a{display:flex;align-items:center;justify-content:space-between;margin-top:auto;padding-top:18px;color:#617087;font-size:11px;font-weight:700;text-decoration:none}.course-card>a:hover{color:#172033}.course-card>a b{font-size:15px}
.primary-link{display:inline-flex;align-items:center;gap:12px;min-height:43px;padding:10px 14px;border-radius:13px;background:#26364d;color:#fff;font-size:11px;font-weight:800;text-decoration:none;box-shadow:0 8px 20px rgba(31,45,66,.17)}.primary-link:hover{background:#19263a}
.moodle-panel{display:flex;align-items:center;gap:18px;padding:24px;border:1px solid rgba(240,141,38,.18);border-radius:24px;background:linear-gradient(135deg,#fff9f2,#fff);box-shadow:0 12px 32px rgba(92,62,31,.07)}.moodle-mark{display:grid;place-items:center;flex:0 0 54px;width:54px;height:54px;border-radius:17px;background:#ed8b24;color:#fff;font-size:22px;font-weight:950;box-shadow:0 10px 22px rgba(237,139,36,.24)}.moodle-panel h2{margin:0;font-size:18px}.moodle-panel p{margin:6px 0 0;color:var(--muted);font-size:12px;line-height:1.5}
.moodle-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:14px}.moodle-list>div{display:flex;align-items:center;gap:11px;min-height:54px;padding:12px 15px;border:1px solid var(--line);border-radius:15px;background:#fff}.moodle-list strong{font-size:12px}.mini-dot{--accent:#718096;flex:0 0 8px;width:8px;height:8px;border-radius:50%;background:var(--accent)}.mini-dot.python{--accent:var(--python)}.mini-dot.ux{--accent:var(--ux)}.mini-dot.security{--accent:var(--security)}.mini-dot.os{--accent:var(--os)}.mini-dot.math{--accent:var(--math)}
.notice-modal{position:fixed;inset:0;z-index:110;display:grid;place-items:center;padding:18px;background:rgba(33,45,64,.28);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);animation:modalFade .18s ease}.notice-modal[hidden]{display:none}.notice-dialog{position:relative;width:min(390px,100%);padding:27px;border:1px solid rgba(31,48,75,.1);border-radius:24px;background:#fff;box-shadow:0 28px 80px rgba(42,61,91,.25);animation:dialogIn .2s ease}.notice-dialog:focus{outline:none}.notice-close{position:absolute;right:14px;top:14px;display:grid;place-items:center;width:34px;height:34px;border:0;border-radius:11px;background:#f0f3f7;color:#68758b;font-size:22px;line-height:1;cursor:pointer}.notice-close:hover{background:#e7ecf3;color:#172033}.notice-icon{display:grid;place-items:center;width:50px;height:50px;margin-bottom:18px;border-radius:16px;background:linear-gradient(145deg,#f49a3b,#e77c10);color:#fff;font-size:20px;font-weight:950;box-shadow:0 10px 22px rgba(237,139,36,.23)}.notice-dialog h2{margin:0;padding-right:30px;font-size:21px;letter-spacing:-.03em}.notice-dialog p{margin:8px 0 20px;color:var(--muted);font-size:12px;line-height:1.55}.notice-ok{width:100%;min-height:45px;border:0;border-radius:13px;background:#26364d;color:#fff;font-size:12px;font-weight:800;cursor:pointer}.notice-ok:hover{background:#19263a}.notice-close:focus-visible,.notice-ok:focus-visible{outline:2px solid var(--os);outline-offset:2px}
.subjects-panel{margin-top:14px;border:1px solid var(--line);border-radius:22px;background:#fff;box-shadow:0 12px 34px rgba(42,61,91,.075);overflow:hidden}.subjects-panel-head{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:20px;border-bottom:1px solid var(--line)}.subjects-panel-head h2{margin:5px 0 0;font-size:20px;letter-spacing:-.025em}.subjects-legend{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:10px}.subjects-legend i{width:7px;height:7px;border-radius:50%;background:#c7cfda}.subject-entry{--accent:#718096;display:grid;grid-template-columns:10px minmax(0,1fr) auto;align-items:center;gap:13px;min-height:74px;padding:13px 20px;border-bottom:1px solid rgba(31,48,75,.075)}.subject-entry:last-child{border-bottom:0}.subject-entry .course-dot{width:9px;height:9px}.subject-entry>div:nth-child(2){display:flex;flex-direction:column;gap:4px}.subject-entry strong{font-size:13px}.subject-links{display:flex;align-items:center;gap:7px}.subject-links a,.subject-links button{display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:7px 10px;border:1px solid var(--line);border-radius:10px;background:#f7f9fc;color:#536177;font-size:10px;font-weight:750;text-decoration:none;cursor:pointer}.subject-links a:hover{background:#edf4fb;color:#26364d}.subject-links .moodle-placeholder{color:#929bab;background:#fafbfc}.subject-links .moodle-placeholder:hover{background:#fff6ec;color:#c36b12;border-color:rgba(237,139,36,.2)}
.tasks-content{padding:18px}
.tasks-panel .subjects-panel-head{justify-content:space-between}
.tasks-context{display:inline-flex;align-items:center;gap:6px;padding:6px 9px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:11px;font-weight:700;white-space:nowrap}
.tasks-context svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.tasks-list{display:grid;gap:10px}
.task-card{border:1px solid var(--line);border-radius:16px;background:var(--surface);overflow:hidden;box-shadow:0 4px 14px rgba(42,61,91,.045)}
.task-card.python{--accent:#956800}.task-card.ux{--accent:#7050b7}.task-card.security{--accent:#b4485d}.task-card.os{--accent:#367bb5}.task-card.math{--accent:#267b55}
[data-theme="dark"] .task-card.python{--accent:var(--python)}[data-theme="dark"] .task-card.ux{--accent:var(--ux)}[data-theme="dark"] .task-card.security{--accent:var(--security)}[data-theme="dark"] .task-card.os{--accent:var(--os)}[data-theme="dark"] .task-card.math{--accent:var(--math)}
.task-card[open]{border-color:color-mix(in srgb,var(--accent) 32%,var(--line));box-shadow:0 9px 24px rgba(42,61,91,.08)}
.task-card-summary{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:92px;padding:16px 18px;cursor:pointer;list-style:none}
.task-card-summary::-webkit-details-marker{display:none}.task-card-summary::marker{content:''}
.task-card-summary:hover{background:color-mix(in srgb,var(--accent) 4%,var(--surface))}.task-card-summary:focus-visible{outline:2px solid var(--accent);outline-offset:-3px}
.task-card-main{display:flex;flex-direction:column;align-items:flex-start;min-width:0;gap:4px}.task-card-code{color:var(--accent);font-size:10px;font-weight:900;letter-spacing:.09em}.task-card-title{color:var(--text);font-size:16px;line-height:1.25;letter-spacing:-.015em}.task-card-preview{color:var(--muted);font-size:12px;line-height:1.45}
.task-card-edge{display:flex;align-items:center;justify-content:flex-end;gap:13px;flex-shrink:0}.task-card-status{max-width:150px;padding:7px 10px;border-radius:99px;background:color-mix(in srgb,var(--accent) 10%,var(--surface));color:var(--accent);font-size:11px;font-weight:800;text-align:center;line-height:1.3}.task-card-chevron{display:grid;place-items:center;width:25px;height:25px;border:1px solid var(--line);border-radius:8px;color:var(--muted);transition:transform .18s ease}.task-card-chevron .arrow-icon{width:16px;height:16px;stroke-width:2}.task-card[open] .task-card-chevron{transform:rotate(180deg)}
.task-card-body{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;padding:18px;border-top:1px solid var(--line);background:color-mix(in srgb,var(--accent) 2%,var(--surface))}
.task-card-section h3{margin:0 0 10px;color:var(--text);font-size:13px;letter-spacing:.01em}.task-points{display:grid;gap:12px;margin:0;padding:0;list-style:none}.task-points li{position:relative;padding-left:18px;color:var(--text);font-size:13px;line-height:1.6}.task-points li::before{content:'';position:absolute;left:1px;top:.55em;width:7px;height:7px;border:2px solid var(--accent);border-radius:50%}
.task-card-note{grid-column:1/-1;margin:0;padding:12px 14px;border-left:3px solid var(--accent);border-radius:0 10px 10px 0;background:color-mix(in srgb,var(--accent) 8%,var(--surface));color:var(--text);font-size:12px;line-height:1.6}
.task-card-sources{grid-column:1/-1;display:flex;align-items:center;flex-wrap:wrap;gap:7px 12px;padding-top:3px}.task-card-sources>span{color:var(--muted);font-size:11px;font-weight:750}.task-card-sources a{color:var(--accent);font-size:11px;font-weight:750;text-underline-offset:3px}.task-card-sources a:hover{color:var(--text)}.task-card-sources a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
@media (max-width:620px){.tasks-content{padding:13px}.task-card-summary{align-items:flex-start;min-height:0;padding:15px}.task-card-edge{gap:7px}.task-card-status{max-width:105px;padding:6px 8px}.task-card-body{grid-template-columns:1fr;gap:17px;padding:16px}.task-card-note,.task-card-sources{grid-column:1}}
@media (max-width:420px){.task-card-summary{flex-wrap:wrap}.task-card-main{flex:1 1 100%}.task-card-edge{width:100%;justify-content:space-between}.task-card-status{max-width:none}}

@media (max-width:900px){
  .portal-shell,.portal-shell.sidebar-collapsed{display:block;width:100%}.portal-shell .app{width:min(800px,calc(100% - 32px));margin:0 auto;padding-bottom:110px}.portal-sidebar{position:fixed;inset:auto 12px calc(10px + env(safe-area-inset-bottom));z-index:80;display:block;min-height:0;margin:0;padding:5px;border-radius:19px;background:rgba(255,255,255,.9);box-shadow:0 14px 42px rgba(42,61,91,.2)}.sidebar-toggle,.portal-brand,.sidebar-week{display:none}.portal-nav,.sidebar-collapsed .portal-nav{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:3px;margin:0}.portal-nav-item,.sidebar-collapsed .portal-nav-item{flex-direction:column;justify-content:center;gap:3px;min-height:57px;padding:5px 2px;border-radius:14px;font-size:9px;text-align:center}.portal-nav-item svg,.sidebar-collapsed .portal-nav-item svg{width:18px;height:18px}.sidebar-collapsed .portal-nav-item span{display:inline}.portal-nav-item.active{box-shadow:0 5px 13px rgba(29,44,67,.14)}
}
@media (max-width:620px){
  .portal-shell .app{width:100%;padding-bottom:105px}.section-header{align-items:flex-start;margin:2px 3px 18px}.section-header h1{font-size:28px}.section-header p{font-size:12px}.stats-grid{grid-template-columns:1fr 1fr}.stat-card:first-child{grid-column:1/-1}.stat-card{padding:17px;border-radius:17px}.subjects-panel{border-radius:19px}.subjects-panel-head{padding:17px}.subject-entry{grid-template-columns:9px minmax(0,1fr);gap:11px;padding:14px 17px}.subject-links{grid-column:2;justify-content:flex-start}.subject-links a,.subject-links button{min-height:32px}
}
@media (max-width:420px){.section-header{flex-direction:column}.primary-link{width:100%;justify-content:space-between}.week-orbit{display:none}}

/* Compact information list */
.section-header h1{margin-top:0}
.subjects-panel-head{justify-content:flex-start}.subjects-panel-head h2{margin:0}.subjects-legend,.subject-entry .course-dot{display:none}.subject-entry{grid-template-columns:minmax(0,1fr) auto}
.updates-empty{display:grid;place-items:center;min-height:330px;padding:34px;border:1px dashed rgba(31,48,75,.15);border-radius:24px;background:rgba(255,255,255,.64);text-align:center}.updates-icon{display:grid;place-items:center;width:54px;height:54px;border-radius:17px;background:#eaf2fb;color:#5381ad}.updates-icon svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.updates-empty h2{margin:16px 0 0;font-size:19px;letter-spacing:-.025em}.updates-empty p{max-width:390px;margin:7px 0 0;color:var(--muted);font-size:12px;line-height:1.5}
.updates-list{display:grid;gap:9px}.update-card{display:grid;grid-template-columns:48px minmax(0,1fr);gap:15px;padding:18px 20px;border:1px solid rgba(31,48,75,.09);border-radius:18px;background:rgba(255,255,255,.84);box-shadow:0 8px 25px rgba(42,61,91,.06);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transition:transform .16s ease,box-shadow .16s ease}.update-card:hover{transform:translateY(-1px);box-shadow:0 12px 30px rgba(42,61,91,.09)}.update-icon{display:grid;place-items:center;width:48px;height:48px;border-radius:15px;background:#fff1df;color:#ad651f}.update-icon svg{width:23px;height:23px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.update-icon-event{background:#eef0ff;color:#616dd1}.update-icon-calendar{background:#e9f4fc;color:#4a7da8}.update-copy{min-width:0}.update-meta{display:flex;align-items:center;gap:8px;margin-bottom:7px}.update-meta time{color:var(--muted);font-size:10px;font-weight:700;font-variant-numeric:tabular-nums}.update-badge{display:inline-flex;align-items:center;min-height:22px;padding:4px 8px;border-radius:999px;background:#fff0df;color:#a85d19;font-size:9px;font-weight:850}.update-badge-event{background:#edf0ff;color:#5d68c9}.update-badge-info{background:#e9f4fc;color:#397aa9}.update-copy h2{margin:0;font-size:17px;letter-spacing:-.025em}.update-copy p{max-width:760px;margin:6px 0 10px;color:var(--muted);font-size:11px;line-height:1.5}.update-copy a{display:inline-flex;align-items:center;gap:6px;color:#4e79a3;font-size:10px;font-weight:800;text-decoration:none}.update-copy a:hover{color:#26364d}.update-copy a b{font-size:13px}
@media (max-width:620px){.update-card{grid-template-columns:42px minmax(0,1fr);gap:12px;padding:15px;border-radius:17px}.update-icon{width:42px;height:42px;border-radius:13px}.update-icon svg{width:21px;height:21px}.update-copy h2{font-size:15px}.update-copy p{font-size:11px}.update-meta{flex-wrap:wrap}}
.portal-nav-settings{margin-top:auto}.settings-panel{padding:22px;border:1px solid var(--line);border-radius:22px;background:rgba(255,255,255,.78);box-shadow:0 12px 34px rgba(42,61,91,.075)}.settings-copy h2{margin:0;font-size:17px;letter-spacing:-.025em}.settings-copy p{margin:7px 0 0;color:var(--muted);font-size:12px}.settings-languages{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:20px}.settings-language{display:flex;align-items:center;justify-content:space-between;min-height:52px;padding:11px 14px;border:1px solid var(--line);border-radius:14px;background:#fff;color:#334158;cursor:pointer;text-align:left}.settings-language:hover{background:#f4f7fb}.settings-language.active{border-color:rgba(75,148,208,.35);background:#edf5fd;box-shadow:0 0 0 2px rgba(103,183,255,.1)}.settings-language span{font-size:12px;font-weight:750}.settings-language i{color:#8a96a8;font-size:9px;font-style:normal;font-weight:850;letter-spacing:.07em}.settings-language.active i{color:#477eae}
@media (max-width:620px){.subject-entry{grid-template-columns:minmax(0,1fr)}.subject-links{grid-column:1}}
@media (max-width:900px){.portal-nav,.sidebar-collapsed .portal-nav{grid-template-columns:repeat(4,minmax(0,1fr))}.portal-nav-settings{margin-top:0}}
@media (max-width:620px){.settings-panel{padding:18px;border-radius:19px}.settings-languages{grid-template-columns:1fr}}
.settings-language{justify-content:flex-start}
.portal-nav-contacts{margin-top:auto}.portal-nav-donate{margin-top:0;color:#bc5265}.portal-nav-donate:hover{background:#fff0f3;color:#a63f53}.portal-nav-settings{margin-top:0}
.contacts-panel{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.contact-card{display:flex;align-items:center;gap:13px;min-height:86px;padding:17px;border:1px solid var(--line);border-radius:19px;background:rgba(255,255,255,.8);color:#334158;text-decoration:none;box-shadow:0 10px 28px rgba(42,61,91,.07)}a.contact-card{transition:transform .15s ease,box-shadow .15s ease}a.contact-card:hover{transform:translateY(-2px);box-shadow:0 14px 32px rgba(42,61,91,.11)}.contact-icon{display:grid;place-items:center;flex:0 0 42px;width:42px;height:42px;border-radius:13px;background:#edf3fa;color:#4e7ca7}.contact-icon svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.contact-card>span:nth-child(2){display:flex;flex-direction:column;gap:3px;min-width:0}.contact-card small{color:var(--muted);font-size:10px}.contact-card strong{font-size:13px}.contact-card>b{margin-left:auto;font-size:15px}.contact-card.telegram .contact-icon{background:#e8f6fd;color:#229ed9}.contact-card.telegram .contact-icon svg{width:22px;height:22px;fill:currentColor;stroke:none}.contact-card.discord .contact-icon{background:#eef0ff;color:#5865f2}.contact-card.discord .contact-icon svg{width:23px;height:23px;fill:currentColor;stroke:none}
@media (max-width:900px){.portal-nav,.sidebar-collapsed .portal-nav{grid-template-columns:repeat(6,minmax(0,1fr))}.portal-nav-contacts,.portal-nav-donate{margin-top:0}}
@media (max-width:620px){.contacts-panel{grid-template-columns:1fr}}
@media (max-width:620px){.portal-nav-item,.sidebar-collapsed .portal-nav-item{min-height:50px;padding:7px 2px;touch-action:manipulation}.portal-nav-item span,.sidebar-collapsed .portal-nav-item span{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.portal-nav-item svg,.sidebar-collapsed .portal-nav-item svg{width:21px;height:21px}.subject-links a,.subject-links button,.join-btn,.site-link,.notice-ok,.secondary-button{min-height:44px;touch-action:manipulation}.notice-close{width:44px;height:44px}}
.donate-icon{background:linear-gradient(145deg,#df6c82,#bd4d63);box-shadow:0 10px 22px rgba(188,77,99,.22)}.donate-url{display:block;margin:-9px 0 20px;padding:11px 12px;border:1px solid var(--line);border-radius:11px;background:#f7f9fc;color:#52627a;font-size:11px;text-decoration:none;overflow-wrap:anywhere}.donate-actions{display:grid;grid-template-columns:1fr 1fr;gap:9px}.donate-actions .notice-ok{display:flex;align-items:center;justify-content:center;text-decoration:none}.secondary-button{min-height:45px;border:1px solid var(--line);border-radius:13px;background:#f4f6f9;color:#536177;font-size:12px;font-weight:800;cursor:pointer}.secondary-button:hover{background:#e9edf3}
.telegram-icon{background:linear-gradient(145deg,#45b8eb,#248dcc);box-shadow:0 10px 22px rgba(36,141,204,.22)}
.external-link-icon{background:linear-gradient(145deg,#5f8db8,#365f89);box-shadow:0 10px 22px rgba(54,95,137,.22)}.external-link-icon svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.icon-definitions{position:absolute;width:0;height:0;overflow:hidden}.arrow-icon{display:block;flex:none;width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.3;stroke-linecap:round;stroke-linejoin:round}.arrow-icon-external{transform:rotate(-45deg)}.join-btn>span:first-child{display:inline-grid;place-items:center}.join-btn .arrow-icon{width:14px;height:14px}.subject-links .arrow-icon{width:13px;height:13px;margin-left:5px}.contact-card>.arrow-icon{width:15px;height:15px;margin-left:auto}.update-copy .arrow-icon{width:14px;height:14px}

/* Appearance setting */
.settings-panel + .settings-panel{margin-top:14px}
.settings-themes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:20px}
.settings-theme{min-height:52px;padding:11px 14px;border:1px solid var(--line);border-radius:14px;background:#fff;color:#334158;font-size:12px;font-weight:750;text-align:left;cursor:pointer}
.settings-theme:hover{background:#f4f7fb}
.settings-theme.active{border-color:rgba(75,148,208,.35);background:#edf5fd;box-shadow:0 0 0 2px rgba(103,183,255,.1)}
.settings-theme:focus-visible{outline:2px solid var(--os);outline-offset:2px}
[data-theme="dark"]{color-scheme:dark}
[data-theme="dark"] .portal-sidebar,[data-theme="dark"] .settings-panel,[data-theme="dark"] .info-panel,[data-theme="dark"] .contact-card{background:rgba(17,26,42,.84);box-shadow:0 12px 34px rgba(0,0,0,.18)}
[data-theme="dark"] .stat-card,[data-theme="dark"] .course-card,[data-theme="dark"] .subjects-panel{background:var(--surface)}
[data-theme="dark"] .moodle-panel{background:linear-gradient(135deg,#29251f,#111a2a)}
[data-theme="dark"] .settings-language,[data-theme="dark"] .settings-theme,[data-theme="dark"] .subject-links a,[data-theme="dark"] .subject-links button{background:var(--surface-2);color:var(--text)}
[data-theme="dark"] .settings-language:hover,[data-theme="dark"] .settings-theme:hover,[data-theme="dark"] .subject-links a:hover{background:var(--surface-3)}
[data-theme="dark"] .settings-language.active,[data-theme="dark"] .settings-theme.active{background:#213a55;border-color:#548dbb}
[data-theme="dark"] .portal-nav-item{color:var(--muted)}
[data-theme="dark"] .portal-nav-item:hover,[data-theme="dark"] .sidebar-toggle:hover{background:var(--surface-3);color:var(--text)}
[data-theme="dark"] .portal-nav-item.active{color:#fff}
[data-theme="dark"] .sidebar-toggle,[data-theme="dark"] .contact-icon,[data-theme="dark"] .info-panel-icon{background:var(--surface-2);color:#8fcaff}
[data-theme="dark"] .contact-card,[data-theme="dark"] .course-card>a,[data-theme="dark"] .stat-card small b{color:var(--text)}
[data-theme="dark"] .notice-dialog{background:var(--surface);border-color:var(--line);box-shadow:0 28px 80px rgba(0,0,0,.5)}
[data-theme="dark"] .notice-close{background:var(--surface-2);color:var(--text)}
[data-theme="dark"] .notice-ok{background:#355475}
@media (max-width:620px){.settings-themes{grid-template-columns:1fr}}
.subject-links .moodle-link{background:#fff3cc;border-color:#e9c45d;color:#795300}
.subject-links .moodle-link:hover{background:#ffe8a3;color:#624200}
[data-theme="dark"] .subject-links .moodle-link{background:#554018;border-color:#a67e32;color:#ffe29a}
[data-theme="dark"] .subject-links .moodle-link:hover{background:#6a501d;color:#fff0c4}

/* Neutral dark palette and remaining light components */
[data-theme="dark"]{
  --bg:#151618;--surface:#24262a;--surface-2:#2c2e33;--surface-3:#363940;
  --text:#f1f2f4;--muted:#a8acb5;--line:rgba(255,255,255,.1);
  --page-glow-1:rgba(255,255,255,.025);--page-glow-2:rgba(255,255,255,.02);
  --nav-bg:rgba(32,34,38,.94);--control-bg:#2b2d32;--shadow:rgba(0,0,0,.28)
}
[data-theme="dark"] .portal-sidebar,[data-theme="dark"] .settings-panel,[data-theme="dark"] .info-panel,[data-theme="dark"] .contact-card{background:rgba(36,38,42,.9)}
[data-theme="dark"] .update-card{background:#24262a;border-color:var(--line);box-shadow:0 8px 25px rgba(0,0,0,.16)}
[data-theme="dark"] .update-card:hover{box-shadow:0 12px 30px rgba(0,0,0,.25)}
[data-theme="dark"] .update-copy h2{color:var(--text)}
[data-theme="dark"] .update-copy a{color:#d7bd91}
[data-theme="dark"] .update-copy a:hover{color:#ffe0ae}
[data-theme="dark"] .update-icon{background:#423528;color:#eac393}
[data-theme="dark"] .update-icon-event{background:#343343;color:#b6aef0}
[data-theme="dark"] .update-icon-calendar{background:#2d3940;color:#a5c9d6}
[data-theme="dark"] .update-badge{background:#453626;color:#efc890}
[data-theme="dark"] .update-badge-event{background:#343343;color:#c5bdfa}
[data-theme="dark"] .update-badge-info{background:#2d3940;color:#acd1df}
[data-theme="dark"] .subject-links a,[data-theme="dark"] .subject-links button{background:#2c2e33;border-color:#41444a;color:#e1e3e7}
[data-theme="dark"] .subject-links a:hover,[data-theme="dark"] .subject-links button:hover{background:#383b40;color:#fff}
[data-theme="dark"] .subject-links .moodle-link{background:#3e3528;border-color:#6b5738;color:#efc78b}
[data-theme="dark"] .subject-links .moodle-link:hover{background:#4d402e;border-color:#9d7844;color:#ffdda4}
[data-theme="dark"] .subject-links .moodle-placeholder{color:#a9acb2;background:#292b2f}
[data-theme="dark"] .settings-language.active,[data-theme="dark"] .settings-theme.active{background:#3a3d42;border-color:#878b94}
[data-theme="dark"] .course-card>a:hover{color:#fff}
[data-theme="dark"] .portal-nav-item.active{background:#3b3e43;box-shadow:0 8px 18px rgba(0,0,0,.18)}
[data-theme="dark"] .sidebar-toggle,[data-theme="dark"] .contact-icon,[data-theme="dark"] .info-panel-icon{color:#d3d5d9}
[data-theme="dark"] .moodle-panel{background:linear-gradient(135deg,#302a22,#24262a)}
[data-theme="dark"] .notice-ok{background:#494c52}

/* External link confirmation in dark mode */
[data-theme="dark"] #externalLinkNotice{background:rgba(6,7,9,.68)}
[data-theme="dark"] .external-link-dialog{width:min(440px,100%);padding:30px;border:1px solid #45474b;border-radius:24px;background:linear-gradient(155deg,#2a2b2e,#222326 75%);box-shadow:0 32px 90px rgba(0,0,0,.55)}
[data-theme="dark"] .external-link-dialog .external-link-icon{width:52px;height:52px;margin-bottom:22px;border:1px solid #69604f;background:#413a2f;color:#f3d49c;box-shadow:none}
[data-theme="dark"] .external-link-dialog h2{font-size:22px;line-height:1.2;color:#f5f5f6}
[data-theme="dark"] .external-link-dialog p{margin:9px 0 21px;color:#b8b9bd;font-size:12px}
[data-theme="dark"] .external-link-dialog .donate-url{margin:0 0 22px;padding:12px 14px;border:1px solid #44464a;border-radius:12px;background:#1c1d20;color:#c9cbd0;font-size:11px;line-height:1.5}
[data-theme="dark"] .external-link-dialog .donate-actions{gap:10px}
[data-theme="dark"] .external-link-dialog .secondary-button,[data-theme="dark"] .external-link-dialog .notice-ok{min-height:46px;border-radius:12px;font-size:12px}
[data-theme="dark"] .external-link-dialog .secondary-button{border:1px solid #4a4c51;background:#303237;color:#e0e1e4}
[data-theme="dark"] .external-link-dialog .secondary-button:hover{background:#3b3d42}
[data-theme="dark"] .external-link-dialog .notice-ok{border:1px solid #e3c18b;background:#e3c18b;color:#28221a}
[data-theme="dark"] .external-link-dialog .notice-ok:hover{background:#f0d3a4;border-color:#f0d3a4}
[data-theme="dark"] .external-link-dialog .notice-close{background:#313338;color:#cfd0d3}
[data-theme="dark"] .external-link-dialog .notice-close:hover{background:#414349;color:#fff}
@media (max-width:620px){[data-theme="dark"] .external-link-dialog{padding:25px 21px}}

[data-theme="dark"] .tab:not(.active):hover{background:#35373b;color:#f1f2f4}
[data-theme="dark"] .tab:not(.active):active{background:#414348}

.portal-sidebar,.lang-menu,.update-card,.language-modal,.notice-modal{backdrop-filter:none;-webkit-backdrop-filter:none}
.lesson.current::after{animation:none;opacity:.55}

/* Keep the phone layout readable and avoid costly blur over a fixed image. */
@media (max-width:620px){
  body{background-attachment:scroll}
  body::before,[data-theme="dark"] body::before{display:none}
  .portal-sidebar,[data-theme="dark"] .portal-sidebar{background:var(--surface);backdrop-filter:none;-webkit-backdrop-filter:none}
  .language-modal,.notice-modal,.lang-menu,.update-card{backdrop-filter:none;-webkit-backdrop-filter:none}
  .subjects-panel,.task-card,.task-card[open],.stat-card{box-shadow:none}
  .portal-shell .app{padding-bottom:calc(105px + env(safe-area-inset-bottom))}
  .portal-nav-item,.sidebar-collapsed .portal-nav-item{min-height:50px;gap:0;padding:7px 2px}
  .portal-nav-item span,.sidebar-collapsed .portal-nav-item span{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
  .task-card-summary{touch-action:manipulation}
  .task-card-sources{gap:7px}
  .task-card-sources>span{flex-basis:100%}
  .task-card-sources a{display:inline-flex;align-items:center;min-height:42px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;text-decoration:none}
}

/* The dark photo is already dimmed, so it needs no gradient overlay. */
[data-theme="dark"] body{background:var(--bg);background-attachment:scroll}
[data-theme="dark"] body::before{display:block;position:fixed;inset:0;height:auto;background-image:url("../images/bg-desktop-dark-v4.webp");background-position:center;background-size:cover;background-repeat:no-repeat}
@media (max-width:620px){[data-theme="dark"] body::before{background-image:url("../images/bg-mobile-dark-v4.webp")}}

.update-icon-study{background:#e9f2fb;color:#477ca9}
.update-badge-study{background:#e9f2fb;color:#3975a5}
.update-copy a,.update-copy .update-view-button{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:38px;padding:9px 13px;border:0;border-radius:10px;background:#e7f0f9;color:#315f88;font-size:11px;font-weight:800;text-align:center;text-decoration:none;cursor:pointer;transition:background-color .15s ease,color .15s ease}
.update-copy a:hover,.update-copy .update-view-button:hover{background:#d9e8f7;color:#244d72}
.update-copy a:focus-visible,.update-copy .update-view-button:focus-visible{outline:2px solid var(--os);outline-offset:2px}
[data-theme="dark"] .update-icon-study,[data-theme="dark"] .update-badge-study{background:#2d3940;color:#acd1df}
[data-theme="dark"] .update-copy a,[data-theme="dark"] .update-copy .update-view-button{background:#303d47;color:#c3dfef}
[data-theme="dark"] .update-copy a:hover,[data-theme="dark"] .update-copy .update-view-button:hover{background:#3b4d5b;color:#fff}
@media (max-width:620px){.update-copy a,.update-copy .update-view-button{min-height:42px}}
