/* ============ DESIGN TOKENS ============
     One accent (teal) = flexible / yours to shape.
     One neutral dark (graphite) = fixed / not yours to move.
     Color only ever encodes: flexible vs fixed vs urgent/danger. No decoration. */
:root{
    --paper:#F4F4EF; --paper-raised:#FFFFFF;
    --ink:#20241F; --ink-soft:#616D64; --ink-faint:#93998F;
    --line:#E4E4DA; --line-strong:#CDD0C3;
    --accent:#2F6F64; --accent-deep:#1E4A42; --accent-tint:#E6EFEC;
    --fixed:#2B3038; --fixed-tint:#E9EAEC;
    --danger:#B23A3A;
    --space-1:4px; --space-2:8px; --space-3:12px; --space-4:16px; --space-5:24px;
    --control-h:40px; --nav-control:36px; --radius-sm:8px; --radius:12px; --radius-lg:16px;
    --focus-ring:0 0 0 3px rgba(47,111,100,.22);
    --row-h:30px; --ruler-w:54px; --header-h:40px;
}
.startup-gate{min-height:100vh;display:grid;place-items:center;padding:var(--space-5);background:var(--paper);}
.startup-card{width:min(100%,420px);display:grid;gap:var(--space-3);padding:var(--space-5);background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius-lg);}
.startup-card h1{margin:0;font-size:24px}.startup-card p{margin:0;color:var(--muted);line-height:1.7}.startup-card label{font-weight:700;font-size:13px}
.startup-card input{min-height:var(--control-h);border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:0 var(--space-3);font:inherit}
.data-tools{display:flex;align-items:center;gap:var(--space-2);margin-inline-start:auto;flex-wrap:wrap}.sync-status{font-size:12px;color:var(--muted)}
.sync-status[data-state="offline"],.sync-status[data-state="conflict"],.sync-status[data-state="blocked"]{color:var(--danger);font-weight:700}
.sync-conflict{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;margin-bottom:var(--space-3);padding:var(--space-3);border:1px solid var(--danger);border-radius:var(--radius);background:var(--paper-raised)}
.sync-conflict span{color:var(--muted);flex:1;min-width:220px}
.ai-review{margin-top:var(--space-3);padding:var(--space-3);border:1px solid var(--line);border-radius:var(--radius);background:var(--paper-raised)}
.ai-review h3{margin:0 0 var(--space-2);font-size:14px}.ai-review-item{display:flex;align-items:flex-start;gap:var(--space-2);padding:var(--space-2) 0;border-bottom:1px solid var(--line)}
.ai-review-item:last-child{border-bottom:0}.ai-review-item span{display:block}.ai-review-item small{color:var(--ink-soft)}
  *{box-sizing:border-box;}
  html,body{margin:0;padding:0;}
  body{background:var(--paper); color:var(--ink); font-family:'Tajawal',sans-serif; min-height:100vh; -webkit-font-smoothing:antialiased;}
  .mono{font-family:'IBM Plex Mono',monospace;}
  button{font-family:'Tajawal',sans-serif;}
  button,input,select,summary{outline:none;}
  button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{box-shadow:var(--focus-ring); border-color:var(--accent) !important;}
  .hidden{display:none !important;}

  .nav-btn .nav-icon svg, .more-item .mi-icon svg, .icon-inline svg, .ai-icon-btn svg, .plan-video svg{
    stroke:currentColor; fill:none; stroke-width:2; stroke-linecap:round; stroke-linejoin:round;
  }
  /* ---------- shell: sidebar (desktop) / bottom tabs (mobile) ----------
     Fitts's Law (1954) + Hoober's thumb-zone field study: primary nav
     belongs where motor cost to reach it is lowest — bottom of a
     handheld phone, a side rail on desktop where a mouse isn't
     constrained by one-handed reach. */
  .shell{display:flex; min-height:100vh;}
  .nav-btn{
    display:flex; align-items:center; gap:10px; background:none; border:none; cursor:pointer;
    color:var(--ink-soft); font-size:13px; font-weight:700; padding:11px 12px; border-radius:9px;
    text-align:right; width:100%;
  }
  .nav-btn .nav-icon{width:20px; text-align:center; flex:none; display:inline-flex; align-items:center; justify-content:center;}
  .nav-btn .nav-icon svg{width:17px; height:17px;}
  .nav-btn.active{background:var(--accent-tint); color:var(--accent-deep);}
  .side-brand{font-family:'Rakkas',serif; font-weight:400; font-size:21px; color:var(--accent-deep); margin:2px 12px 20px;}

  @media (min-width:881px){
    .side-nav{display:flex; flex-direction:column; gap:3px; width:200px; flex:0 0 200px; position:sticky; top:0; height:100vh; padding:22px 10px; border-left:1px solid var(--line-strong); background:var(--paper-raised);}
    .bottom-nav{display:none;}
    .app{flex:1; min-width:0;}
    .top .brand{display:none;}
    .app.schedule-active.mode-day-active{max-width:900px;}
    .app.schedule-active.mode-week-active,.app.schedule-active.mode-month-active{max-width:1440px;}
    .app.university-active{max-width:1280px;}
    .top{margin-bottom:6px;}
    .hero{display:flex; justify-content:center; align-items:baseline; gap:10px; padding:2px 8px 6px; margin-bottom:6px;}
    .hero .h-label{margin:0;}.hero .h-sub{margin:0;}
    .ai-card{padding:8px 10px; margin-bottom:10px;}
    .ai-head{display:none;}
    .ai-text-input{height:36px;}.ai-icon-btn{width:34px;height:34px}.ai-send-btn{padding:8px 14px;}
    .view-toggle{margin-bottom:12px;}
  }
  @media (max-width:880px){
    .side-nav{display:none;}
    .bottom-nav{display:flex; position:fixed; bottom:0; right:0; left:0; z-index:40; background:var(--paper-raised); border-top:1px solid var(--line-strong); padding:6px 4px calc(6px + env(safe-area-inset-bottom)); justify-content:space-around;}
    .bottom-nav .nav-btn{flex-direction:column; gap:2px; width:auto; flex:1; padding:6px 4px; font-size:10px; border-radius:10px; text-align:center;}
    .bottom-nav .nav-btn .nav-icon{width:auto;}
    .bottom-nav .nav-btn .nav-icon svg{width:19px; height:19px;}
    .bottom-nav .nav-btn.active{background:transparent;}
    .app{padding-bottom:80px;}
  }

  .app{max-width:720px; margin:0 auto; padding:var(--space-4) var(--space-4) 70px;}
  .app.wide{max-width:1180px;}

  .top{display:flex; align-items:center; justify-content:space-between; margin-bottom:var(--space-3);}
  .top .brand{font-size:13px; font-weight:700; color:var(--ink-faint);}
  .top .date{font-size:12px; color:var(--ink-faint); font-family:'IBM Plex Mono',monospace;}

  /* ---------- HERO ---------- */
  .hero{text-align:center; padding:8px 10px 12px; margin-bottom:var(--space-3);}
  .hero .h-label{font-size:11px; color:var(--ink-faint); letter-spacing:.08em; margin-bottom:var(--space-1);}
  .hero .h-line{font-family:'Rakkas',serif; font-weight:400; font-size:22px; line-height:1.35; color:var(--ink);}
  .hero .h-line b{color:var(--accent-deep); font-weight:400;}
  .hero .h-sub{margin-top:var(--space-1); font-size:11.5px; color:var(--ink-soft); font-family:'IBM Plex Mono',monospace;}

  /* ---------- AI capture ---------- */
  .ai-card{background:var(--paper-raised); border:1px solid var(--line-strong); border-radius:var(--radius); padding:var(--space-3); margin-bottom:var(--space-4);}
  .ai-head{font-size:11.5px; font-weight:700; color:var(--ink-soft); margin-bottom:var(--space-2);}
  .ai-input-row{display:flex; gap:8px; align-items:center;}
  .ai-text-input{flex:1; min-width:0; background:var(--paper); border:1px solid var(--line-strong); border-radius:8px; padding:10px 12px; color:var(--ink); font-size:13.5px;}
  .ai-text-input::placeholder{color:var(--ink-faint);}
  .ai-text-input:focus{outline:none; border-color:var(--accent);}
  .ai-icon-btn{flex:none; width:36px; height:36px; border-radius:50%; border:1px solid var(--line-strong); background:var(--paper); color:var(--ink-soft); font-size:15px; cursor:pointer; display:flex; align-items:center; justify-content:center;}
  .ai-icon-btn:hover{border-color:var(--accent); color:var(--accent-deep);}
  .ai-icon-btn.listening{background:var(--danger); border-color:var(--danger); color:#fff; animation:pulse 1.2s infinite;}
  @keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(178,58,58,.45);} 50%{box-shadow:0 0 0 7px rgba(178,58,58,0);}}
  .ai-send-btn{flex:none; background:var(--accent-deep); color:#fff; border:none; border-radius:8px; padding:10px 16px; font-weight:700; font-size:13px; cursor:pointer;}
  .ai-send-btn:disabled{opacity:.5;}
  .ai-status{margin-top:9px; font-size:12px; line-height:1.7; color:var(--ink-soft);}
  .ai-status.error{color:var(--danger);}
  @media (max-width:480px){ .ai-input-row{flex-wrap:wrap;} .ai-text-input{order:1; flex:1 1 100%;} .ai-send-btn{order:2; flex:1;} }

  /* ---------- pill sub-toggle (day / week / month — one page, Jakob's Law: matches Google/Apple Calendar convention) ---------- */
  .view-toggle{display:flex; gap:var(--space-1); background:var(--paper-raised); border:1px solid var(--line-strong); border-radius:999px; padding:var(--space-1); width:max-content; margin:0 auto var(--space-4);}
  .vt-btn{border:none; min-height:var(--nav-control); background:transparent; color:var(--ink-soft); font-weight:700; font-size:13px; padding:6px 22px; border-radius:999px; cursor:pointer; transition:.15s;}
  .vt-btn.active{background:var(--accent-deep); color:#fff;}
  .sched-mode.hidden{display:none;}

  .schedule-surface{min-width:0;}
  .task-tray{background:var(--paper-raised); border:1px solid var(--line-strong); border-radius:var(--radius); padding:12px;}
  .task-tray-head{display:flex; align-items:baseline; justify-content:space-between; gap:8px;}
  .task-tray-head h3{font-size:13px; margin:0;}
  .task-tray-head span{font-size:10.5px; color:var(--ink-faint);}
  #taskCount{color:var(--ink-faint); font-size:11px;}
  @media (min-width:881px){
    .schedule-planning-stage{display:block;}
    .mode-week-active .schedule-planning-stage{display:grid; grid-template-columns:minmax(0,1fr) 210px; gap:0; align-items:stretch; border:1px solid var(--line-strong); border-radius:var(--radius-lg); overflow:hidden; background:var(--paper-raised);}
    .mode-week-active .schedule-surface{padding:10px 10px 10px 0;}
    .task-tray{position:sticky; top:0; align-self:start; max-height:var(--week-workspace-height,calc(100vh - 230px)); overflow:auto; border:0; border-left:1px solid var(--line-strong); border-radius:0; background:var(--paper);}
    .task-tray .task-list:empty::after{content:'ما عندك مهام غير مجدولة'; display:block; color:var(--ink-faint); font-size:11px; text-align:center; padding:18px 4px;}
  }
  @media (max-width:880px){
    .task-tray{margin-top:16px;}
  }

  .day-actions{display:flex; align-items:center; justify-content:space-between; gap:var(--space-2); margin-bottom:var(--space-3);}
  .day-backlog-anchor{position:relative;}
  .day-backlog-toggle{min-height:36px; border:1px solid var(--line-strong); border-radius:999px; background:var(--paper-raised); color:var(--ink-soft); padding:6px 12px; cursor:pointer; font-weight:700;}
  .day-backlog-panel{position:absolute; top:calc(100% + 6px); right:0; z-index:12; width:min(340px,calc(100vw - 32px)); max-height:min(420px,60vh); overflow:auto; background:var(--paper-raised); border:1px solid var(--line-strong); border-radius:var(--radius); box-shadow:0 14px 40px rgba(32,36,31,.18); padding:10px;}
  .day-backlog-panel-head{display:flex; align-items:center; justify-content:space-between; gap:8px; font-size:12px;}
  .day-backlog-panel-head button{border:0;background:none;font-size:18px;color:var(--ink-soft);cursor:pointer;}
  .compact-task-list{padding:4px 10px 10px; margin-top:0;}

  .task-editor{width:min(440px,calc(100vw - 32px)); border:1px solid var(--line-strong); border-radius:var(--radius-lg); padding:0; color:var(--ink); background:var(--paper-raised); box-shadow:0 18px 60px rgba(32,36,31,.2);}
  .task-editor::backdrop{background:rgba(32,36,31,.42);}
  .task-editor form{padding:var(--space-4);}
  .dialog-head{display:flex; align-items:center; justify-content:space-between; gap:var(--space-3);}
  .dialog-head h2{font-size:18px; margin:0;}
  .dialog-close{width:var(--control-h); height:var(--control-h); border:1px solid transparent; border-radius:var(--radius-sm); background:none; color:var(--ink-soft); font-size:22px; cursor:pointer;}
  .task-editor-name{margin:4px 0 16px; color:var(--ink-soft); font-size:13px;}
  .editor-fields{display:grid; grid-template-columns:110px 1fr; gap:10px 12px; align-items:center;}
  .editor-fields label{font-size:12.5px; font-weight:700;}
  .editor-fields input{height:var(--control-h); border:1px solid var(--line-strong); border-radius:var(--radius-sm); background:var(--paper); padding:8px 10px; font:inherit;}
  .dialog-actions{display:flex; flex-wrap:wrap; gap:var(--space-2); margin-top:var(--space-4);}
  .dialog-actions .m-btn{min-height:var(--control-h); width:auto; flex:1;}
  .dialog-actions .delete-action{color:var(--danger); border-color:var(--danger);}
  .editor-error{margin-top:var(--space-3); padding:10px 12px; border:1px solid var(--danger); border-radius:var(--radius-sm); background:#FAECEC; color:var(--danger); font-size:12.5px; line-height:1.6;}
  .editor-delete-confirm{margin-top:var(--space-4); padding:var(--space-3); border:1px solid var(--danger); border-radius:var(--radius); background:#FAECEC;}
  .editor-delete-confirm p{margin:0; font-size:13px; font-weight:700; color:var(--ink);}
  .editor-delete-confirm .dialog-actions{margin-top:var(--space-3);}
  .dialog-actions .delete-confirm-action{background:var(--danger); color:#fff;}
  @media (max-width:480px){.editor-fields{grid-template-columns:1fr; gap:5px}.dialog-actions .m-btn{flex:1 1 100%;}}

  /* ---------- day nav (shared: day mode + calendar) ---------- */
  .prayer-setup{margin-bottom:16px;}
  .prayer-strip{margin-bottom:16px;}
  .prayer-count{font-size:11.5px; color:var(--ink-soft); margin-bottom:6px;}
  .prayer-chip-row{display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:6px; padding:2px 0;}
  .prayer-chip{
    min-width:0; display:flex; align-items:center; justify-content:center; gap:5px;
    background:var(--paper-raised); border:1px solid var(--line-strong); border-radius:999px;
    padding:6px 12px; font-size:11px; color:var(--ink-soft); cursor:pointer;
  }
  .prayer-chip:hover{border-color:var(--accent);}
  .prayer-chip.now{border-color:var(--accent); color:var(--accent-deep); font-weight:700;}
  .prayer-chip.done{background:var(--accent-tint); border-color:var(--accent); color:var(--accent-deep);}
  .prayer-chip svg{width:12px; height:12px;}
  .prayer-tools-row{display:flex; gap:6px; margin-top:8px;}
  @media (max-width:700px){.prayer-chip-row{grid-template-columns:repeat(2,minmax(0,1fr));}.prayer-chip:last-child{grid-column:1/-1;}.prayer-tools-row{flex-wrap:wrap;}}
  .prayer-edit{
    flex:0 0 auto; background:none; border:1px dashed var(--line-strong); color:var(--ink-faint);
    border-radius:999px; padding:6px 10px; font-size:11px; cursor:pointer;
  }
  .prayer-edit.on{border-style:solid; border-color:var(--accent); color:var(--accent-deep);}
  .day-nav{display:flex; align-items:center; justify-content:space-between; margin-bottom:14px;}
  .disruption-btn{margin:0; width:auto; padding:7px 11px; border-color:var(--danger); color:var(--danger);}
  .disruption-btn:hover{background:var(--danger); color:#fff;}
  .disruption-result{
    background:var(--accent-tint); border:1px solid var(--accent); border-radius:10px;
    padding:12px 14px; margin-bottom:16px; font-size:12.5px; color:var(--ink); line-height:1.7;
  }
  .disruption-result .dr-close{float:left; background:none; border:none; color:var(--ink-faint); font-size:15px; cursor:pointer;}
  .day-nav-btn{background:var(--paper-raised); border:1px solid var(--line-strong); border-radius:var(--radius-sm); width:var(--nav-control); height:var(--nav-control); cursor:pointer; color:var(--ink-soft); font-size:12px;}
  .day-nav-btn:hover{border-color:var(--accent);}
  .day-nav-label{font-weight:700; font-size:14px; color:var(--ink);}

  /* ---------- agenda list (used by day mode + mobile week) ---------- */
  .day-list{display:flex; flex-direction:column;}
  .day-item{display:flex; align-items:center; gap:12px; padding:13px 4px; border-bottom:1px solid var(--line);}
  .day-item .di-time{font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--ink-soft); flex:0 0 58px; text-align:center; line-height:1.5; white-space:pre-line;}
  .day-item .di-dot{width:20px; height:20px; border-radius:50%; flex:none; border:2px solid var(--line-strong); background:none; cursor:pointer; padding:0; display:flex; align-items:center; justify-content:center; font-size:11px; color:transparent;}
  .day-item .di-dot.done{background:var(--accent); border-color:var(--accent); color:#fff;}
  .day-item.done .di-title{color:var(--ink-faint); text-decoration:line-through;}
  .day-item .di-body{flex:1; min-width:0;}
  .day-item .di-title{font-size:13.5px; font-weight:700; color:var(--ink);}
  .day-item .di-sub{font-size:11px; color:var(--ink-faint); margin-top:1px;}
  .day-item .di-del{background:none; border:none; color:var(--ink-faint); font-size:16px; cursor:pointer; flex:none; padding:4px;}
  .day-item .di-del:hover{color:var(--danger);}
  .day-gap{text-align:center; color:var(--ink-faint); font-size:11px; padding:9px 0;}
  .empty-day{text-align:center; color:var(--ink-faint); font-size:13px; padding:32px 10px; border:1px dashed var(--line-strong); border-radius:10px;}

  /* ---------- week: desktop grid vs mobile compact ----------
     A 7-column hour grid needs real width to stay readable and keep
     touch targets at a usable size; collapsing it onto a ~360px phone
     violates the same touch-target-size research cited for nav
     (MIT Touch Lab fingertip data). So mobile gets a day-picker strip
     + the same agenda list used in day mode, not a shrunk grid. */
  @media (min-width:881px){ #weekCompact{display:none;} }
  @media (max-width:880px){ #weekGridWrap{display:none;} }

  .week-chip-row{display:flex; gap:6px; overflow-x:auto; padding-bottom:6px; margin-bottom:14px;}
  .week-chip{flex:0 0 auto; min-width:50px; padding:8px 6px; border-radius:10px; border:1px solid var(--line-strong); background:var(--paper-raised); text-align:center; cursor:pointer;}
  .week-chip .wc-day{font-size:11px; color:var(--ink-soft); font-weight:700;}
  .week-chip .wc-tag{font-size:8.5px; color:var(--ink-faint); margin-top:2px;}
  .week-chip .wc-dot{width:5px; height:5px; border-radius:50%; background:var(--accent); margin:4px auto 0;}
  .week-chip.active{background:var(--accent-deep); border-color:var(--accent-deep);}
  .week-chip.active .wc-day, .week-chip.active .wc-tag{color:#fff;}

  .schedule-scroll{overflow:auto; max-height:70vh; border:1px solid var(--line-strong); border-radius:var(--radius); background:var(--paper-raised);}
  @media (min-width:881px){
    .mode-week-active .schedule-scroll{height:var(--week-workspace-height,calc(100vh - 230px)); min-height:320px; max-height:none; border-radius:var(--radius-sm);}
    .mode-week-active #modeWeek>.day-nav{margin-bottom:8px;}
    .mode-week-active .manual-toggle{margin-top:12px;}
  }
  .schedule-grid{display:grid; grid-template-columns:var(--ruler-w) repeat(7, minmax(96px,1fr)); grid-template-rows:var(--header-h) auto; width:max-content; min-width:100%;}
  .corner, .day-head{position:sticky; top:0; z-index:3; background:var(--paper-raised); border-bottom:1px solid var(--line-strong); display:flex; align-items:center; justify-content:center;}
  .corner{right:0; z-index:4; border-left:1px solid var(--line-strong);}
  .day-head{font-size:11.5px; font-weight:700; color:var(--ink);}
  .day-head.today{background:var(--accent-tint); color:var(--accent-deep);}
  .ruler{position:sticky; right:0; z-index:2; background:var(--paper-raised); border-left:1px solid var(--line-strong);}
  .ruler-label{position:absolute; right:0; left:0; transform:translateY(-50%); font-size:9.5px; color:var(--ink-faint); text-align:center; font-family:'IBM Plex Mono',monospace; pointer-events:none;}
  .day-col{position:relative; border-left:1px solid var(--line); background-image:repeating-linear-gradient(to bottom, var(--line-strong) 0, var(--line-strong) 1px, transparent 1px, transparent calc(var(--row-h)*2)), repeating-linear-gradient(to bottom, var(--line) 0, var(--line) 1px, transparent 1px, transparent var(--row-h)); transition:background-color .15s;}
  .day-col.drop-hover{background-color:var(--accent-tint);}
  .day-col.blocked{background-color:#F3DEDA;}
  .now-line{position:absolute; right:0; left:0; height:0; border-top:2px solid var(--accent-deep); z-index:1; pointer-events:none;}
  .now-line::after{content:''; position:absolute; right:-4px; top:-5px; width:8px; height:8px; border-radius:50%; background:var(--accent-deep);}

  .block{position:absolute; border-radius:6px; padding:4px 7px; overflow:hidden; cursor:grab; border:1px solid rgba(0,0,0,.06); box-shadow:0 1px 3px rgba(20,24,20,.08); transition:box-shadow .15s; background:var(--accent-tint); border-right:3px solid var(--accent);}
  .block:hover{box-shadow:0 3px 10px rgba(20,24,20,.16); z-index:2;}
  .block.dragging{opacity:.35;}
  .block .b-title{font-size:11px; font-weight:700; line-height:1.25; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; color:var(--ink);}
  .block .b-time{font-size:9px; color:var(--ink-soft); font-family:'IBM Plex Mono',monospace; white-space:nowrap;}
  .block .b-loc{font-size:9px; color:var(--ink-soft); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
  .block.compact .b-time, .block.compact .b-loc{display:none;}
  .block .del-btn{position:absolute; top:1px; left:2px; background:none; border:none; color:var(--ink-faint); font-size:12px; cursor:pointer; opacity:0; transition:.15s; padding:2px;}
  .block:hover .del-btn{opacity:1;}
  .block .del-btn:hover{color:var(--danger);}
  .resize-handle{position:absolute; bottom:0; right:0; left:0; height:7px; cursor:ns-resize;}
  .resize-handle::after{content:''; position:absolute; bottom:2px; right:50%; transform:translateX(50%); width:20px; height:2px; background:rgba(0,0,0,.16); border-radius:2px;}
  .block.commitment{background:var(--fixed); border:1px solid #1A1D22; border-right:3px solid #565D68; cursor:pointer;}
  .block.commitment .b-title, .block.commitment .b-time, .block.commitment .b-loc{color:#E9EAEC;}
  .block.commitment .b-time, .block.commitment .b-loc{color:#A9ADB5;}

  /* ---------- month calendar ---------- */
  .month-layout{display:grid; grid-template-columns:minmax(0,1.7fr) minmax(260px,.7fr); gap:14px; align-items:start;}
  .cal-card{background:var(--paper-raised); border:1px solid var(--line-strong); border-radius:var(--radius); padding:14px 12px;}
  .cal-nav{display:flex; align-items:center; justify-content:space-between; margin-bottom:10px;}
  .cal-label{font-weight:700; font-size:14px; color:var(--ink);}
  .cal-grid{display:grid; grid-template-columns:repeat(7,1fr); gap:3px;}
  .cal-dow{text-align:center; font-size:10px; color:var(--ink-faint); font-weight:700; padding:4px 0;}
  .cal-cell{min-height:92px; display:flex; flex-direction:column; align-items:stretch; justify-content:flex-start; border:1px solid var(--line); border-radius:8px; padding:6px; font-size:12px; color:var(--ink); position:relative; gap:4px; overflow:hidden;}
  .cal-cell.pad{visibility:hidden;}
  .cal-cell.today{background:var(--accent-tint); color:var(--accent-deep); font-weight:700;}
  .cal-cell.has-items{cursor:pointer;}
  .cal-cell.has-items:hover{background:var(--line);}
  .cal-cell.selected{outline:2px solid var(--accent-deep); outline-offset:-2px;}
  .cal-day-number{font-weight:700;}
  .cal-cell-items{display:flex; flex-direction:column; gap:3px; min-width:0;}
  .cal-cell-item{font-size:10.5px; line-height:1.35; padding:2px 5px; border-radius:4px; background:var(--accent-tint); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
  .cal-cell-item.exam,.cal-cell-item.deadline{border-right:2px solid var(--danger);}
  .cal-cell-more{font-size:10px; color:var(--ink-soft); font-weight:700;}
  .month-details{background:var(--paper-raised); border:1px solid var(--line-strong); border-radius:var(--radius); padding:12px; max-height:calc(100vh - 220px); overflow:auto;}
  .month-details-toolbar{display:flex; flex-direction:column; gap:8px; margin-bottom:8px;}
  .month-details .ms-list-head{margin:0; min-height:28px;}
  .month-add-toggle{width:100%;}
  .month-add-panel{border-top:1px solid var(--line); padding-top:12px; margin-bottom:10px;}
  @media (max-width:880px){.month-layout{grid-template-columns:1fr}.cal-cell{min-height:48px;padding:4px}.cal-cell-item{display:none}.month-details{max-height:none;}}
  .ms-list-head{display:flex; justify-content:space-between; align-items:center; margin:16px 2px 6px; font-size:12px; color:var(--ink-soft);}
  .ms-list-head button{background:none; border:none; color:var(--accent-deep); font-size:11.5px; cursor:pointer; text-decoration:underline;}
  .milestone-item{display:flex; align-items:center; gap:12px; padding:13px 4px; border-bottom:1px solid var(--line);}
  .milestone-item .mi-date{font-family:'IBM Plex Mono',monospace; font-size:10.5px; color:var(--ink-soft); flex:0 0 66px; text-align:center; line-height:1.4;}
  .milestone-item .mi-body{flex:1; min-width:0;}
  .milestone-item .mi-title{font-weight:700; font-size:13.5px; color:var(--ink);}
  .milestone-item .mi-kind{font-size:11px; color:var(--ink-faint);}
  .milestone-item .mi-count{font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--ink-soft); flex:0 0 64px; text-align:center;}
  .milestone-item.urgent .mi-count{color:var(--danger); font-weight:700;}
  .milestone-item.past{opacity:.45;}
  .milestone-item .mi-del{background:none; border:none; color:var(--ink-faint); font-size:16px; cursor:pointer; flex:none; padding:4px;}
  .milestone-item .mi-del:hover{color:var(--danger);}

  /* ---------- manual add (collapsed by default) ---------- */
  .manual-toggle{display:block; width:100%; text-align:center; background:none; border:1px dashed var(--line-strong); color:var(--ink-soft); border-radius:10px; padding:11px; font-size:12.5px; cursor:pointer; margin:22px 0 14px;}
  .manual-toggle:hover{border-color:var(--accent); color:var(--accent-deep);}
  .manual-panels{display:none; gap:14px; flex-direction:column;}
  .manual-panels.open{display:flex;}
  .m-card{background:var(--paper-raised); border:1px solid var(--line-strong); border-radius:var(--radius); padding:16px;}
  .m-card h3{font-size:13px; margin:0 0 10px; color:var(--ink);}
  .m-hint{color:var(--ink-faint); font-size:11px; line-height:1.6; margin:-4px 0 10px;}
  .m-form{display:flex; flex-direction:column; gap:8px;}
  .m-form input[type=text], .m-form select, .m-form input[type=number], .m-form input[type=time], .m-form input[type=date]{font-size:13.5px; padding:9px 10px; border:1px solid var(--line-strong); border-radius:7px; background:var(--paper); color:var(--ink); width:100%;}
  .m-form input:focus, .m-form select:focus{outline:none; border-color:var(--accent);}
  .m-form .row{display:flex; gap:8px;}
  .m-form .row > *{flex:1; min-width:0;}
  .m-btn{background:var(--accent-deep); color:#fff; border:none; border-radius:7px; padding:10px; font-weight:700; font-size:13px; cursor:pointer;}
  .m-btn:hover{background:var(--accent);}
  .m-btn.ghost{background:transparent; border:1px solid var(--line-strong); color:var(--ink-soft); margin-top:2px;}
  .task-list{display:flex; flex-direction:column; gap:8px; min-height:36px; margin-top:10px;}
  .task-list.drop-hover{background:var(--accent-tint); outline:2px dashed var(--accent); outline-offset:4px; border-radius:8px;}
  .chip{background:var(--paper); border:1px solid var(--line-strong); border-right:3px solid var(--accent); border-radius:var(--radius-sm); padding:8px 10px; cursor:pointer; display:flex; align-items:center; justify-content:space-between; gap:8px;}
  .chip .chip-title{font-size:12.5px; font-weight:700;}
  .chip .chip-dur{font-size:10.5px; color:var(--ink-soft); font-family:'IBM Plex Mono',monospace;}
  .chip .del-btn{background:none; border:none; color:var(--ink-faint); font-size:15px; cursor:pointer;}
  .chip .del-btn:hover{color:var(--danger);}
  .clear-row{display:flex; gap:8px;}
  .clear-row .m-btn.ghost{flex:1; font-size:11.5px; padding:9px;}

  /* ---------- goals ---------- */
  .goals-header,.goal-week-nav{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-4)}
  .goals-header h2{margin:0}.goals-header p{margin:3px 0 0;color:var(--ink-soft);font-size:12px}.goals-header .m-btn{width:auto}
  .goal-week-nav{background:var(--paper-raised);border:1px solid var(--line-strong);border-radius:var(--radius);padding:10px 14px;text-align:center}.goal-week-nav button{width:var(--nav-control);height:var(--nav-control);border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--paper-raised);cursor:pointer}.goal-week-nav strong,.goal-week-nav span{display:block}.goal-week-nav strong{font-size:12px}.goal-week-nav span{font-size:11px;color:var(--ink-soft);margin-top:2px}
  .goal-card{background:var(--paper-raised); border:1px solid var(--line-strong); border-radius:var(--radius); padding:14px 16px; margin-bottom:12px; position:relative;}
  .goal-card h4{margin:0 26px 4px 0; font-size:14px; color:var(--ink);}
  .goal-card .g-target{font-size:11.5px; color:var(--ink-soft); margin-bottom:6px;}
  .goal-card .g-week{font-size:11px; color:var(--ink-faint); margin-bottom:3px;}
  .goal-card .g-progress{font-size:11.5px; color:var(--accent-deep); font-family:'IBM Plex Mono',monospace;}
  .goal-practice-list{margin-top:var(--space-2)}.goal-practice{display:flex;justify-content:space-between;gap:10px;width:100%;background:none;border:0;border-bottom:1px solid var(--line);padding:9px 2px;text-align:right;cursor:pointer;color:var(--ink)}.goal-practice small{color:var(--ink-soft)}.goal-practice.done span{text-decoration:line-through;color:var(--ink-faint)}
  .goal-empty{font-size:12px;color:var(--ink-faint);padding:10px 0}.g-add-practice{background:none;border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:8px 10px;color:var(--accent-deep);font-weight:700;cursor:pointer;margin-top:10px}
  .goal-clarification{display:grid;gap:var(--space-2)}.goal-clarification-question{line-height:1.6}.goal-clarification-answer{box-sizing:border-box;width:100%;max-width:100%;min-height:64px;resize:vertical;border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:9px;font:inherit;color:var(--ink);background:var(--paper-raised)}.goal-clarification .accept{justify-self:start;min-height:var(--control-h)}
  .goal-clarification-reuse{color:var(--ink-soft)}.g-context-row{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;margin:var(--space-2) 0;color:var(--ink-soft);font-size:12px}.g-context-row span{flex:1 1 220px}.g-context-row button,.g-repeat{border:1px solid var(--line);background:var(--paper-raised);color:var(--accent-deep);border-radius:var(--radius-sm);padding:6px 9px;font:inherit;cursor:pointer}.g-repeat-box{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;margin-top:var(--space-2)}.g-repeat-box>small{width:100%;color:var(--ink-soft)}
  .goal-card .g-del{position:absolute; top:12px; left:12px; background:none; border:none; color:var(--ink-faint); font-size:16px; cursor:pointer;}
  .goal-card .g-del:hover{color:var(--danger);}
  .suggestion-card{background:var(--accent-tint); border:1px solid var(--accent); border-radius:10px; padding:11px 12px; margin-top:8px; font-size:12.5px; color:var(--ink); line-height:1.65;}
  .suggestion-card .sc-label{font-weight:700; margin-bottom:4px; display:block;}
  .suggestion-card .sc-items{color:var(--ink-soft); font-size:11.5px; margin-bottom:8px;}
  .suggestion-actions{display:flex; gap:8px;}
  .suggestion-actions button{flex:1; border:none; border-radius:7px; padding:8px; font-weight:700; font-size:12px; cursor:pointer;}
  .suggestion-actions .accept{background:var(--accent-deep); color:#fff;}
  .suggestion-actions .dismiss{background:var(--paper-raised);color:var(--ink-soft);border:1px solid var(--line-strong)}
  .g-refresh{background:none; border:1px dashed var(--line-strong); color:var(--ink-soft); border-radius:8px; padding:7px 10px; font-size:11.5px; cursor:pointer; margin-top:10px; width:100%;}
  .g-refresh:hover{border-color:var(--accent); color:var(--accent-deep);}
  .practice-editor{border:0;border-radius:var(--radius-lg);padding:var(--space-4);width:min(440px,calc(100vw - 32px));background:var(--paper-raised);color:var(--ink)}.practice-editor::backdrop{background:rgba(20,24,20,.5)}.practice-editor form{display:grid;gap:8px}.practice-editor label{font-size:12px;font-weight:700}.practice-editor input{min-height:var(--control-h);border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:8px;font-family:inherit}

  /* ---------- gym ---------- */
  .gym-day-head{font-size:12px; font-weight:700; color:var(--ink-soft); margin:16px 2px 6px;}
  .gym-day-head:first-child{margin-top:0;}
  .gym-item{display:flex; align-items:center; gap:12px; padding:11px 4px; border-bottom:1px solid var(--line);}
  .gym-item .gi-body{flex:1; min-width:0;}
  .gym-item .gi-title{font-size:13.5px; font-weight:700; color:var(--ink);}
  .gym-item .gi-sub{font-size:11px; color:var(--ink-soft); font-family:'IBM Plex Mono',monospace; margin-top:1px;}
  .gym-item .gi-prev{font-size:10.5px; color:var(--ink-faint); margin-top:1px;}
  .gym-item .gi-del{background:none; border:none; color:var(--ink-faint); font-size:16px; cursor:pointer; flex:none; padding:4px;}
  .gym-item .gi-del:hover{color:var(--danger);}

  /* ---------- more menu + sub-pages ---------- */
  .more-item{
    display:flex; align-items:center; gap:10px; width:100%; background:var(--paper-raised);
    border:1px solid var(--line-strong); border-radius:10px; padding:14px 14px; margin-bottom:8px;
    font-size:14px; font-weight:700; color:var(--ink); cursor:pointer;
  }
  .more-item:hover{border-color:var(--accent);}
  .more-item .mi-icon{width:22px; text-align:center; flex:none; display:inline-flex; align-items:center; justify-content:center;}
  .more-item .mi-icon svg{width:18px; height:18px;}
  .icon-inline{display:inline-flex; vertical-align:-3px; margin-left:2px;}
  .icon-inline svg{width:13px; height:13px;}
  .more-item .mi-arrow{margin-right:auto; color:var(--ink-faint);}
  .back-link{background:none; border:none; color:var(--accent-deep); font-size:12.5px; font-weight:700; cursor:pointer; padding:0; margin-bottom:10px;}
  .sub-title{font-size:16px; margin:0 0 14px; color:var(--ink);}

  .gym-facts{display:flex; flex-direction:column; gap:4px; background:var(--paper-raised); border:1px solid var(--line-strong); border-radius:10px; padding:12px 14px; margin-bottom:16px; font-size:12.5px; color:var(--ink-soft);}
  .gym-facts b{color:var(--ink);}
  .plan-upload-row{display:flex; align-items:center; gap:10px; margin-bottom:6px;}
  .plan-upload-row #gymPlanName{font-size:11.5px; color:var(--ink-faint); flex:1;}
  .plan-upload-row .m-btn.ghost{width:auto; font-size:11.5px; padding:8px 12px;}
  .plan-exercise-wrap{border-bottom:1px solid var(--line);}
  .plan-exercise-wrap:last-child{border-bottom:none;}
  .plan-exercise{display:flex; align-items:center; gap:8px; padding:8px 2px;}
  .plan-exercise input[type=checkbox]{width:18px; height:18px; flex:none; accent-color:var(--accent-deep);}
  .plan-exercise .pe-name{flex:1; font-size:12.5px; font-weight:700; color:var(--ink);}
  .plan-exercise .pe-range{font-size:10px; color:var(--ink-faint); font-family:'IBM Plex Mono',monospace;}
  .plan-exercise input[type=number]{width:70px; flex:none; font-size:12.5px; padding:6px 8px; border:1px solid var(--line-strong); border-radius:6px; background:var(--paper);}
  .pe-expand{flex:none; background:none; border:none; color:var(--ink-faint); cursor:pointer; padding:4px; display:flex;}
  .pe-expand svg{width:14px; height:14px; transition:transform .15s;}
  .pe-expand.open svg{transform:rotate(180deg);}
  .pe-detail{padding:2px 2px 10px 30px; font-size:11.5px; color:var(--ink-soft); line-height:2;}
  .pe-detail a{color:var(--accent-deep); text-decoration:none; display:inline-flex; align-items:center; gap:3px;}
  .pe-detail a:hover{text-decoration:underline;}
  .pe-alt-row{margin-top:4px; display:block;}
  .pe-replace{
    background:var(--accent-tint); border:1px solid var(--accent); color:var(--accent-deep);
    border-radius:6px; padding:3px 9px; font-size:11px; font-weight:700; cursor:pointer;
    display:inline-flex; align-items:center; gap:4px; margin-right:4px;
  }
  .pe-replace:hover{background:var(--accent); color:#fff;}
  .pe-replace svg{width:11px; height:11px;}

  .uni-header,.uni-section-head,.uni-detail-head,.uni-context-actions{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);}
  .uni-header{margin-bottom:var(--space-3);}.uni-header .sub-title{margin:0}.uni-header p{margin:2px 0 0;color:var(--ink-faint);font-size:12px}.uni-header .m-btn{width:auto}
  .uni-upcoming{margin-bottom:var(--space-4);}.uni-upcoming h3,.uni-detail-section h3{margin-top:0}
  .uni-upcoming-row{display:block;width:100%;text-align:right;background:none;border:0;border-bottom:1px solid var(--line);padding:9px 2px;color:var(--ink)}
  button.uni-upcoming-row{cursor:pointer}.uni-upcoming-row:last-child{border-bottom:0}.uni-upcoming-row strong,.uni-upcoming-row small{display:block}.uni-upcoming-row small{color:var(--ink-soft);margin-top:2px}
  .uni-workspace{display:grid;grid-template-columns:minmax(210px,.72fr) minmax(0,1.6fr);gap:var(--space-4);align-items:start}
  .uni-course-pane,.uni-detail-pane{min-width:0}.uni-section-head h3{margin:0}.text-action{border:0;background:none;color:var(--accent-deep);font-weight:700;cursor:pointer;padding:8px}
  .text-action.danger{color:var(--danger)}
  .course-item{display:block;width:100%;padding:11px 8px;border:0;border-bottom:1px solid var(--line);background:none;text-align:right;cursor:pointer;border-radius:var(--radius-sm);}
  .course-item:last-child{border-bottom:none;}
  .course-item.selected{background:var(--accent-tint);color:var(--accent-deep)}
  .course-item .co-name{font-size:13.5px; font-weight:700; color:var(--ink);}
  .course-item .co-identity{font-size:11px;color:var(--ink-faint);margin-top:2px}
  .course-item .co-sub{font-size:11px; color:var(--ink-soft); margin-top:2px;}
  .uni-detail-head .m-btn,.uni-context-actions .m-btn{width:auto}.uni-course-meta{font-size:12px;color:var(--ink-soft)}
  .uni-context-actions{justify-content:flex-start;margin:var(--space-3) 0}.uni-detail-section{border-top:1px solid var(--line);padding-top:var(--space-4);margin-top:var(--space-4)}
  .uni-lecture-row{padding:9px 0;border-bottom:1px solid var(--line);font-size:13px}.uni-task-row{display:flex;justify-content:space-between;gap:10px;width:100%;border:0;border-bottom:1px solid var(--line);background:none;text-align:right;padding:10px 0;cursor:pointer;color:var(--ink)}.uni-task-row small{color:var(--ink-soft)}

  .semester-manager{border:0;border-radius:var(--radius-lg);padding:var(--space-4);width:min(920px,calc(100vw - 32px));max-height:90vh;background:var(--paper-raised);color:var(--ink)}
  .semester-manager::backdrop{background:rgba(20,24,20,.5)}.manager-layout{display:grid;grid-template-columns:210px 1fr;gap:var(--space-4)}
  .manager-course-list{border-left:1px solid var(--line);padding-left:var(--space-3)}.manager-course-list .m-btn{margin-bottom:8px}.manager-course-list #managerCourseList button{display:block;width:100%;text-align:right;border:0;background:none;padding:9px;border-radius:var(--radius-sm);cursor:pointer}.manager-course-list #managerCourseList button.selected{background:var(--accent-tint)}
  .manager-editor form{display:grid;gap:7px}.manager-editor label{font-size:12px;font-weight:700}.manager-editor input,.manager-editor select{min-height:var(--control-h);border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:8px;background:var(--paper-raised);font-family:inherit}.manager-editor .row>div{flex:1;display:grid;gap:5px}
  #lectureManager{margin-top:var(--space-4);border-top:1px solid var(--line);padding-top:var(--space-3)}.manager-lecture-row{display:grid;grid-template-columns:1fr auto auto;gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line)}.manager-lecture-row button{border:0;background:none;color:var(--accent-deep);cursor:pointer}.manager-lecture-row button:last-child{color:var(--danger)}
  .manager-confirm{background:#fff5f5;border:1px solid #e8caca;border-radius:var(--radius);padding:var(--space-3);margin-top:var(--space-2)}.manager-confirm p{margin:0 0 8px}.manager-confirm .m-btn,.manager-confirm .delete-confirm-action{width:auto;margin-left:8px}.manager-semester-danger{border-top:1px solid var(--line);margin-top:var(--space-4);padding-top:var(--space-3)}

  .semester-banner{background:var(--accent-tint); border:1px solid var(--accent); border-radius:10px; padding:13px 14px; margin-bottom:16px; font-size:12.5px; color:var(--ink); line-height:1.7;}
  .semester-banner .sb-actions{display:flex; gap:8px; margin-top:10px;}
  .semester-banner button{flex:1; border:none; border-radius:7px; padding:8px; font-weight:700; font-size:12px; cursor:pointer;}
  .semester-banner .sb-clear{background:var(--accent-deep); color:#fff;}
  .semester-banner .sb-dismiss{background:var(--paper-raised); border:1px solid var(--line-strong); color:var(--ink-soft);}

  footer.note{text-align:center; color:var(--ink-faint); font-size:11px; margin-top:24px;}

  .modal-overlay{position:fixed; inset:0; background:rgba(20,24,20,.45); display:flex; align-items:center; justify-content:center; z-index:50; padding:20px;}
  .modal-box{background:var(--paper-raised); border-radius:12px; padding:20px; max-width:340px; width:100%; box-shadow:0 12px 40px rgba(0,0,0,.25);}
  .modal-msg{margin:0 0 18px; font-size:14px; line-height:1.7; color:var(--ink);}
  .modal-actions{display:flex; gap:8px;}
  .modal-btn{flex:1; border:none; border-radius:8px; padding:10px; font-weight:700; font-size:13px; cursor:pointer;}
  .modal-btn.confirm{background:var(--accent-deep); color:#fff;}
  .modal-btn.cancel{background:var(--paper); color:var(--ink-soft); border:1px solid var(--line-strong);}

  @media (prefers-reduced-motion: reduce){ *{transition:none!important; animation:none!important;} }
  @media(max-width:760px){.uni-workspace,.manager-layout{grid-template-columns:1fr}.manager-course-list{border-left:0;border-bottom:1px solid var(--line);padding:0 0 var(--space-3)}.uni-detail-head,.uni-context-actions{align-items:flex-start;flex-wrap:wrap}.uni-task-row{flex-direction:column}}
