:root{
    --bg:#EEEAE0;
    --paper:#FFFFFF;
    --ink:#16223A;
    --ink-soft:#5B6478;
    --line:#DAD4C4;
    --accent:#D98F2B;
    --accent-deep:#A9691A;
    --accent-wash:#F6E6CB;
    --ok:#3F7D5C;
    --ok-wash:#E4F0E9;
    --warn:#B4463B;
    --warn-wash:#F6E2DF;
    --radius:14px;
  }
  *{box-sizing:border-box;}
  html,body{margin:0;padding:0;}
  body{
    background:var(--bg);
    color:var(--ink);
    font-family:'Manrope',system-ui,sans-serif;
    font-size:15px;
    line-height:1.45;
    -webkit-font-smoothing:antialiased;
  }
  #app{min-height:100vh;display:flex;flex-direction:column;}
  a{color:inherit;}
  button{font-family:inherit;}
  input,select{font-family:inherit;font-size:15px;}

  /* ---------- Login ---------- */
  .login-wrap{
    min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;
    padding:32px 20px;gap:28px;
  }
  .brandmark{display:flex;flex-direction:column;align-items:center;gap:10px;}
  .brandmark svg{display:block;}
  .brandmark .word{font-weight:800;font-size:26px;letter-spacing:-0.02em;}
  .brandmark .tag{color:var(--ink-soft);font-size:13.5px;}
  .login-card{
    background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);
    padding:24px;width:100%;max-width:360px;
  }
  .login-card h2{margin:0 0 4px;font-size:17px;}
  .login-card p.hint{margin:0 0 18px;color:var(--ink-soft);font-size:13px;}
  .field{margin-bottom:14px;}
  .field label{display:block;font-size:12.5px;font-weight:600;color:var(--ink-soft);margin-bottom:5px;}
  .field input,.field select{
    width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:10px;
    background:#FCFBF8;color:var(--ink);outline:none;
  }
  .field input:focus,.field select:focus{border-color:var(--accent);background:#fff;}
  .btn{
    display:inline-flex;align-items:center;justify-content:center;gap:6px;
    padding:11px 16px;border-radius:10px;border:1px solid transparent;
    font-weight:700;font-size:14px;cursor:pointer;width:100%;
  }
  .btn-primary{background:var(--ink);color:#fff;}
  .btn-primary:active{background:var(--accent-deep);}
  .btn-ghost{background:transparent;border-color:var(--line);color:var(--ink);}
  .btn-danger{background:var(--warn-wash);color:var(--warn);border-color:transparent;}
  .btn-outline-accent{background:var(--accent-wash);color:var(--accent-deep);}
  .btn-sm{width:auto;padding:7px 12px;font-size:12.5px;}
  .error-msg{color:var(--warn);font-size:12.5px;margin:8px 0 0;}
  .login-note{font-size:11.5px;color:var(--ink-soft);text-align:center;max-width:320px;}

  /* ---------- App shell ---------- */
  .topbar{
    position:sticky;top:0;z-index:5;background:var(--bg);
    display:flex;align-items:center;justify-content:space-between;
    padding:14px 16px 10px;border-bottom:1px solid var(--line);
  }
  .topbar .who{display:flex;align-items:center;gap:9px;}
  .topbar .who .name{font-weight:700;font-size:15px;}
  .topbar .who .role{font-size:11px;color:var(--ink-soft);}
  .role-chip{
    font-size:10.5px;font-weight:700;padding:3px 8px;border-radius:20px;
    background:var(--accent-wash);color:var(--accent-deep);
  }
  .logout-btn{background:none;border:none;color:var(--ink-soft);font-size:12.5px;text-decoration:underline;cursor:pointer;padding:6px;}

  .content{flex:1;padding:16px;padding-bottom:88px;max-width:640px;width:100%;margin:0 auto;}

  .tabbar{
    position:fixed;bottom:0;left:0;right:0;background:var(--paper);
    border-top:1px solid var(--line);display:flex;z-index:6;
    padding-bottom:env(safe-area-inset-bottom);
  }
  .tab{
    flex:1;text-align:center;padding:11px 4px 9px;background:none;border:none;
    color:var(--ink-soft);font-size:11.5px;font-weight:600;cursor:pointer;
  }
  .tab .icon{display:block;margin:0 auto 3px;width:20px;height:20px;}
  .tab.active{color:var(--accent-deep);}

  h1.page-title{font-size:19px;margin:2px 0 16px;letter-spacing:-0.01em;}
  h3.section-title{font-size:13.5px;margin:22px 0 10px;color:var(--ink-soft);font-weight:700;}
  h3.section-title:first-child{margin-top:0;}

  .card{
    background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);
    padding:16px;margin-bottom:12px;
  }
  .stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:6px;}
  .stat-card{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:14px;}
  .stat-card .num{font-size:24px;font-weight:800;line-height:1;}
  .stat-card .lbl{font-size:11.5px;color:var(--ink-soft);margin-top:5px;}

  .search-input{width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--paper);margin-bottom:12px;}

  .list-item{
    background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);
    padding:13px 14px;margin-bottom:9px;cursor:pointer;
  }
  .list-item .row1{display:flex;justify-content:space-between;align-items:center;gap:10px;}
  .list-item .title{font-weight:700;font-size:14.5px;}
  .list-item .sub{font-size:12px;color:var(--ink-soft);margin-top:3px;}
  .diff-pill{font-size:11.5px;font-weight:700;padding:3px 9px;border-radius:20px;white-space:nowrap;}
  .diff-ok{background:var(--ok-wash);color:var(--ok);}
  .diff-warn{background:var(--warn-wash);color:var(--warn);}
  .diff-neutral{background:var(--accent-wash);color:var(--accent-deep);}

  .empty-state{text-align:center;padding:34px 16px;color:var(--ink-soft);font-size:13.5px;}

  .subject-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
  .subject-grid.four{grid-template-columns:1fr 1fr;}
  .subject-field label{font-size:12px;color:var(--ink-soft);margin-bottom:4px;display:block;}
  .subject-field input{width:100%;padding:9px 10px;border:1px solid var(--line);border-radius:8px;background:#FCFBF8;}

  table.data-table{width:100%;border-collapse:collapse;font-size:13px;}
  table.data-table th{text-align:left;font-size:11px;color:var(--ink-soft);padding:6px 6px;border-bottom:1px solid var(--line);}
  table.data-table td{padding:8px 6px;border-bottom:1px solid var(--line);}
  table.data-table tr:last-child td{border-bottom:none;}
  .num-cell{text-align:right;font-variant-numeric:tabular-nums;font-weight:600;}

  .btn-row{display:flex;gap:8px;margin-top:14px;}
  .btn-row .btn{width:auto;flex:1;}

  .back-link{display:inline-flex;align-items:center;gap:5px;color:var(--ink-soft);font-size:13px;background:none;border:none;cursor:pointer;padding:0 0 14px;font-weight:600;}

  .divider{height:1px;background:var(--line);margin:16px 0;}

  .pill-select{display:flex;gap:8px;margin-bottom:16px;}
  .pill-select button{
    flex:1;padding:9px 4px;border-radius:10px;border:1px solid var(--line);background:var(--paper);
    color:var(--ink-soft);font-weight:700;font-size:12.5px;cursor:pointer;
  }
  .pill-select button.active{background:var(--ink);color:#fff;border-color:var(--ink);}

  .bulk-textarea{
    width:100%;min-height:150px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;
    background:#FCFBF8;color:var(--ink);font-family:ui-monospace,'SF Mono',Menlo,monospace;font-size:12.5px;
    resize:vertical;line-height:1.5;
  }
  .bulk-textarea:focus{outline:none;border-color:var(--accent);background:#fff;}
  .file-input-wrap{
    display:flex;align-items:center;gap:10px;margin:10px 0;padding:10px 12px;
    border:1px dashed var(--line);border-radius:10px;background:#FCFBF8;
  }
  .file-input-wrap input[type=file]{font-size:12px;max-width:100%;}
  .col-list{margin:8px 0 0;padding-left:18px;font-size:12px;color:var(--ink-soft);}
  .col-list li{margin-bottom:2px;}
  .bulk-result{
    margin-top:12px;padding:11px 13px;border-radius:10px;background:var(--ok-wash);color:var(--ok);
    font-size:12.5px;font-weight:600;
  }
  .toast{
    position:fixed;bottom:78px;left:50%;transform:translateX(-50%);
    background:var(--ink);color:#fff;padding:9px 18px;border-radius:20px;font-size:12.5px;font-weight:600;
    z-index:20;box-shadow:0 4px 14px rgba(0,0,0,.18);
  }
/* Accessible extensions of the supplied theme. */
:focus-visible{outline:3px solid var(--accent-deep);outline-offset:3px}a.btn,a.tab,a.list-item{text-decoration:none}.block{display:block}.row1{display:flex;align-items:center;justify-content:space-between;gap:12px}.muted{color:var(--ink-soft);font-size:13px}h2{font-size:17px}h3{font-size:14px}summary{cursor:pointer;font-weight:700;padding:6px 0}details[open]>summary{margin-bottom:14px}.check{display:flex;align-items:flex-start;gap:10px;margin:16px 0;font-size:13px}.check input{flex:none;width:18px;height:18px;accent-color:var(--accent-deep)}.table-scroll{overflow-x:auto;margin-bottom:16px}.table-scroll table{min-width:460px}.bulk-result{margin-bottom:14px}pre{white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px}.skip-link{position:absolute;left:-10000px;top:4px;background:white;padding:10px;z-index:100}.skip-link:focus{left:4px}.chart-row{margin:16px 0}.chart-row .row1{font-size:12px}meter{width:100%;height:18px;accent-color:var(--accent)}meter::-webkit-meter-optimum-value{background:var(--accent)}section{scroll-margin-top:100px}button:disabled{opacity:.6;cursor:wait}.content>.btn{margin-bottom:14px}.tab{min-height:48px}.field input,.field select{min-height:44px}.login-card .error-msg ul{padding-left:18px}.login-card .card{padding:10px}button,a,input,select{touch-action:manipulation}.list-item .title{overflow-wrap:anywhere}.tabbar{max-width:100%}.filters{display:grid;gap:10px}.filters .field{margin:0}
@media(min-width:900px){.staff-content{max-width:1120px}.staff-content .stat-grid{grid-template-columns:repeat(4,1fr)}.filters{grid-template-columns:repeat(4,minmax(0,1fr));align-items:end}.tabbar{padding-left:max(0px,calc((100% - 1000px)/2));padding-right:max(0px,calc((100% - 1000px)/2))}}
.student-tabs{display:flex;gap:6px;overflow-x:auto;padding:4px 0 16px;margin-bottom:12px}.student-tabs a{flex:none;padding:10px 14px;border:1px solid var(--line);border-radius:10px;text-decoration:none;font-size:13px;font-weight:700;background:var(--paper)}.student-tabs a.active{background:var(--ink);color:white;border-color:var(--ink)}.overview-grid{display:grid;gap:12px}.eyebrow{font-size:11px;font-weight:800;letter-spacing:.06em;color:var(--accent-deep);text-transform:uppercase}.metric{font-size:30px;font-weight:800;font-variant-numeric:tabular-nums;margin:12px 0}.metric span{font-size:12px;font-weight:500;color:var(--ink-soft)}.progress-card{margin-bottom:0}.overview-grid{margin-bottom:12px}.progress-card progress{width:100%;height:10px;accent-color:var(--accent-deep)}.destination{background:var(--accent-wash)}.destination h2{font-size:22px;margin:8px 0}.field textarea{width:100%;padding:12px;background:#FCFBF8;border:1px solid var(--line);border-radius:10px;font:inherit;resize:vertical}.preserve-lines{white-space:pre-wrap;overflow-wrap:anywhere}.delete-action{margin-top:16px;color:var(--warn);font-size:12px}.task h3{font-size:17px;overflow-wrap:anywhere}.task-complete h3{color:var(--ok)}.task p{font-size:13px}.btn:hover{filter:brightness(.96)}.tab:hover,.student-tabs a:hover{color:var(--accent-deep)}.student-tabs a.active:hover{color:white}.content{padding-bottom:calc(96px + env(safe-area-inset-bottom))}
@media(min-width:700px){.overview-grid{grid-template-columns:1fr 1fr}.content{padding-top:26px}.page-title{font-size:26px!important}.card{padding:22px}.subject-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}
.progress-table table{min-width:0}.progress-table td:first-child{max-width:140px}.progress-table th,.progress-table td{padding:9px 4px}
@media(max-width:450px){.progress-table table{font-size:11.5px}.progress-table th{font-size:10px}.progress-table td:first-child{max-width:100px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}
@media print{.topbar,.tabbar,.student-tabs,.back-link,.no-print,.skip-link{display:none!important}body{background:#fff}.content{max-width:none;padding:0}.card{break-inside:avoid;box-shadow:none}details:not(.no-print){display:block}svg{max-height:220px}}
[data-countdown]{font-variant-numeric:tabular-nums;font-size:1.3rem;font-weight:700}
.tool-nav{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}.tool-nav .back-link{padding:8px 10px;border:1px solid var(--line);border-radius:9px;text-decoration:none;background:var(--paper);font-size:12px}
.card textarea{width:100%;max-width:100%}.card h2,.card h3{overflow-wrap:anywhere}
.countdown-card{background:var(--ink);color:#fff;border-color:var(--ink);text-align:center}.countdown-card .eyebrow{color:#fff;opacity:.75;margin-bottom:8px}
.countdown-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;font-size:1rem}.countdown-unit{background:rgba(255,255,255,.12);border-radius:10px;padding:10px 2px}.countdown-unit .val{font-size:20px;font-weight:800;font-variant-numeric:tabular-nums}.countdown-unit .lbl{font-size:10.5px;opacity:.8;margin-top:2px}
.countdown-edit{display:inline-block;margin-top:10px;color:#fff;opacity:.8;font-size:12px}
.announce-banner{display:block;background:var(--accent-wash);border-radius:var(--radius);padding:12px 14px;margin-bottom:12px;text-decoration:none}.announce-banner .d-title{display:block;font-weight:700;font-size:13.5px;color:var(--accent-deep);overflow-wrap:anywhere}.announce-banner .d-body{display:block;font-size:12.5px;color:var(--ink-soft);margin-top:3px;overflow-wrap:anywhere}.announce-banner.exam{background:var(--ok-wash)}.announce-banner.exam .d-title{color:var(--ok)}
.alert-card{background:var(--warn-wash);border-color:transparent}.alert-card strong{color:var(--warn)}
.stat-card.warn{background:var(--warn-wash)}.stat-card.warn .num{color:var(--warn)}
.streak-card{display:flex;justify-content:space-around;text-align:center}.streak-card .num{font-size:22px;font-weight:800}.streak-card .lbl{font-size:11px;color:var(--ink-soft)}
.topic-summary{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.topic-bar{height:8px;border-radius:5px;background:var(--line);overflow:hidden}.topic-bar span{display:block;height:100%;background:var(--ok)}
.topic-subject{padding:0;overflow:hidden}.topic-subject summary{padding:12px 14px;font-weight:700;font-size:13.5px;cursor:pointer}.topic-subject summary .muted{font-weight:500}
.topic-row{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:8px 14px;border-top:1px solid var(--line)}.topic-name{flex:1;font-size:12.5px;min-width:0;overflow-wrap:anywhere}
.topic-buttons{display:flex;gap:4px;flex-shrink:0}.topic-btn{font:inherit;font-size:11px;font-weight:600;padding:5px 8px;border-radius:8px;border:1px solid var(--line);background:var(--paper);color:var(--ink-soft);cursor:pointer}
.topic-btn.on-pending{background:var(--line);border-color:transparent}.topic-btn.on-partial{background:var(--warn-wash);color:var(--warn);border-color:transparent}.topic-btn.on-done{background:var(--ok-wash);color:var(--ok);border-color:transparent}
.topic-status{font-size:11.5px;font-weight:700}
a.stat-card{display:block;text-decoration:none}.stat-grid.five>:last-child{grid-column:1/-1}@media(min-width:900px){.staff-content .stat-grid.five{grid-template-columns:repeat(5,1fr)}.stat-grid.five>:last-child{grid-column:auto}}
.today-card .today-grid{display:flex;justify-content:space-around;text-align:center;margin:10px 0 6px}.today-card .num{font-size:20px;font-weight:800}.today-card .lbl{font-size:10.5px;color:var(--ink-soft)}.today-card p{text-align:center;font-size:11.5px;margin:0}
.card>.btn+.btn{margin-top:8px}.card>details{margin-top:10px}.num-right{text-align:right}.duyuru-item{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:13px 14px;margin-bottom:9px}.duyuru-item .d-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:5px}.duyuru-item .d-title{font-weight:700;font-size:14.5px;overflow-wrap:anywhere}.duyuru-item .d-date{font-size:11px;color:var(--ink-soft);white-space:nowrap}.duyuru-item .d-body{font-size:13.5px;white-space:pre-wrap;color:var(--ink-soft);overflow-wrap:anywhere}
.btn-stack{display:grid;gap:10px;margin-bottom:14px}
.day-title{font-size:12.5px;color:var(--ink-soft);margin:12px 0 6px}
.chart-card h2{font-size:13.5px;margin:0}.chart-card .row1{margin-bottom:8px}.chart-dates{display:flex;justify-content:space-between;font-size:11px;color:var(--ink-soft);margin-top:4px}.chart-card details summary{font-size:12px;color:var(--ink-soft)}
.top-actions{display:flex;align-items:center;gap:4px;margin-left:auto}.top-actions form{margin:0}
