
:root{
  --navy:#17324d;--navy-2:#264b6d;--maroon:#7b2736;--gold:#c7a13a;
  --paper:#f7f8fa;--line:#d7dde4;--text:#1f2933;--muted:#66717d;
  --orange:#f28c28;--purple:#eadff5;--purple-text:#5b347d;
  --green:#d9ead3;--green-text:#245b35;--danger:#a23a43;--white:#fff;
  --shadow:0 8px 24px rgba(18,40,61,.10)
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--paper);color:var(--text);font-family:Arial,Helvetica,sans-serif}
button,input,select,textarea{font:inherit}button{cursor:pointer}.hidden{display:none!important}

#loginView{min-height:100vh;display:grid;place-items:center;padding:24px}
.login-card{width:min(460px,100%);background:white;border:1px solid var(--line);border-top:6px solid var(--maroon);border-radius:14px;padding:32px;box-shadow:var(--shadow)}
.login-card h1{margin:0 0 8px;color:var(--navy);font-size:28px}.login-card p{color:var(--muted);line-height:1.5}
#googleButton{margin-top:24px;min-height:42px}

.app-shell{min-height:100vh}
.topbar{position:sticky;top:0;z-index:20;background:var(--navy);color:white;display:flex;align-items:center;gap:10px;padding:5px 12px;min-height:46px;box-shadow:0 2px 8px rgba(0,0,0,.14)}
.brand{font-weight:700;letter-spacing:.1px;white-space:nowrap;font-size:15px}
.year-select{width:220px;max-width:32vw;background:white;color:var(--text);border:0;border-radius:5px;padding:5px 9px;height:32px}
.spacer{flex:1}.identity{font-size:12px;color:#dce7f2;line-height:1.1}
.sync-button{background:var(--gold);color:#222;border:0;padding:6px 11px;border-radius:5px;font-weight:700;height:32px}
.sync-button:disabled{opacity:.5;cursor:not-allowed}
.icon-button{width:32px;height:32px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.35);background:transparent;border-radius:5px;color:white;padding:6px}
.icon-button svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.dirty-pill{display:inline-flex;align-items:center;border-radius:999px;background:#fff3cd;color:#684f00;padding:3px 7px;font-size:11px}

.navbar{position:sticky;top:46px;z-index:19;background:white;border-bottom:1px solid var(--line);padding:0 12px;display:flex;gap:2px;overflow:auto}
.nav-button{border:0;background:transparent;color:var(--muted);padding:10px 12px;border-bottom:3px solid transparent;white-space:nowrap;font-size:14px}
.nav-button.active{color:var(--navy);border-bottom-color:var(--maroon);font-weight:700}

main{padding:12px}.page{display:none}.page.active{display:block}
.page-head{display:flex;align-items:flex-start;gap:12px;margin-bottom:10px}.compact-head h2{font-size:24px}
.page-head h2{margin:0;color:var(--navy)}.page-head p{margin:2px 0 0;color:var(--muted);font-size:13px}
.page-head .actions{margin-left:auto;display:flex;gap:8px}
.primary{background:var(--navy);color:white;border:0;border-radius:5px;padding:7px 11px}
.secondary{background:white;color:var(--navy);border:1px solid var(--line);border-radius:5px;padding:7px 11px}
.danger{background:var(--danger);color:white;border:0;border-radius:5px;padding:7px 11px}
.text-link{border:0;background:transparent;color:#174c7a;text-decoration:underline;padding:0;font-size:13px}
.text-link:hover{color:var(--maroon)}

.notice{background:#fff7d8;border:1px solid #ead48a;border-radius:7px;padding:10px 12px;margin-bottom:10px;color:#5a4a11;font-size:13px}
.empty{background:white;border:1px dashed #b8c1cb;border-radius:9px;padding:25px;text-align:center;color:var(--muted)}

.calendar-wrap{background:white;border:1px solid var(--line);overflow:auto;max-height:calc(100vh - 145px)}
.cal-grid{min-width:1450px}
.cal-row{display:grid;position:relative;grid-template-columns:105px 45px 45px 45px var(--lane-columns);border-bottom:1px solid var(--line);min-height:50px}
.cal-row.header{position:sticky;top:0;z-index:10;min-height:auto;background:#f1f4f7;border-bottom:2px solid #8c99a6;font-weight:700}
.cal-meta,.cal-cell,.cal-head{padding:5px;border-right:1px solid var(--line);white-space:pre-wrap}
.cal-meta{font-size:11px;background:rgba(255,255,255,.86)}.cal-cell{min-width:112px;position:relative;padding-top:18px}
.cal-head{font-size:11px;text-align:center;background:#f1f4f7}
.cal-row.weekend .cal-meta,.cal-row.weekend .cal-cell{background:#f0f0f0}
.cal-row.ramadan .cal-meta,.cal-row.ramadan .cal-cell{background:var(--purple)}
.cal-row.today{outline:3px solid var(--orange);outline-offset:-3px;z-index:2}
.cell-add{position:absolute;top:2px;right:3px;border:0;background:transparent;color:#789;font-size:17px;line-height:1;padding:0 2px;opacity:.55}
.cell-add:hover{opacity:1;color:var(--navy)}
.event-card{background:white;border:1px solid #b7c1ca;border-left:4px solid var(--navy-2);border-radius:4px;padding:4px 5px;margin:2px 0;font-size:10.5px;line-height:1.22;cursor:default;overflow-wrap:anywhere}
.event-card.editable{cursor:pointer}.event-card.psle{background:var(--green);color:var(--green-text);border-left-color:#4f8b5d}
.event-card.hidden-event{opacity:.55;border-style:dashed}.event-tag{font-weight:700}.event-time{color:var(--muted);font-size:9.5px;margin-top:2px}
.event-cont{font-style:italic;color:var(--muted)}.shift-both{box-shadow:inset 0 0 0 1px var(--gold)}.month-marker{font-weight:700;color:var(--navy)}

.weekly-wrap{background:white;border:1px solid var(--line);overflow:auto;max-height:calc(100vh - 145px)}
.weekly-grid{border-collapse:collapse;width:max-content;min-width:100%;table-layout:fixed}
.weekly-grid th,.weekly-grid td{border:1px solid #9da7b1;vertical-align:top}
.weekly-grid thead th{position:sticky;top:0;z-index:5;background:#f0f1f3;padding:6px;text-align:center;font-size:12px}
.weekly-grid .week-label{width:58px;min-width:58px;background:#ddd;text-align:center;font-weight:700;padding:6px 3px;font-size:12px}
.week-day{width:190px;min-width:190px;height:118px;padding:5px;position:relative;background:white}
.week-day.weekend{background:#dedede}.week-day.ramadan{background:var(--purple)}
.week-day.today{outline:3px solid var(--orange);outline-offset:-3px}
.week-date{font-size:12px;margin-bottom:5px;padding-right:18px}.week-date strong{font-weight:700}
.week-event{font-size:11px;line-height:1.22;margin:0 0 4px;padding:1px 2px;border-radius:2px;cursor:default}
.week-event.editable{cursor:pointer}.week-event.psle{background:var(--green);color:var(--green-text)}
.week-event.hidden-event{opacity:.55}.week-lane{font-weight:700}

.card{background:white;border:1px solid var(--line);border-radius:9px;padding:13px;margin-bottom:10px}
.card h3{margin:0 0 9px;color:var(--navy);font-size:17px}
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.form-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}
.field{display:flex;flex-direction:column;gap:4px}.field.full{grid-column:1/-1}
label{font-size:11px;color:var(--muted);font-weight:700}
input,select,textarea{width:100%;border:1px solid #b9c3cd;border-radius:5px;padding:7px 8px;background:white}
textarea{min-height:70px;resize:vertical}.checkbox{display:flex;align-items:center;gap:8px}.checkbox input{width:auto}
.source-links{display:flex;gap:8px;flex-wrap:wrap}.source-links a{color:var(--navy-2)}

.data-table-wrap{overflow:auto;width:max-content;max-width:100%;background:white}
.data-table{border-collapse:collapse;background:white;width:auto;font-size:14px}
.data-table th,.data-table td{border:1px solid var(--line);padding:5px 8px;text-align:left;vertical-align:top;white-space:nowrap}
.data-table th{background:#eef2f5;color:var(--navy);position:sticky;top:0;font-size:13px}
.data-table td{font-size:14px}.data-table td.wrap{white-space:normal;max-width:520px}
.role-badge{display:inline-block;padding:2px 6px;border-radius:999px;font-size:11px;background:#e9eef4;color:var(--navy);margin-right:4px}
.parent-yes{color:#25633a;font-weight:700}.parent-no{color:var(--muted)}

.modal-backdrop{position:fixed;inset:0;background:rgba(16,28,40,.56);z-index:50;display:grid;place-items:center;padding:24px}
.modal{width:min(800px,100%);max-height:92vh;overflow:auto;background:white;border-radius:11px;box-shadow:var(--shadow)}
.modal-head{display:flex;align-items:center;padding:14px 16px;border-bottom:1px solid var(--line)}.modal-head h3{margin:0;color:var(--navy)}
.modal-body{padding:16px}.modal-foot{display:flex;gap:8px;justify-content:flex-end;padding:12px 16px;border-top:1px solid var(--line)}
.close-x{margin-left:auto;border:0;background:transparent;font-size:22px;color:var(--muted)}.status-line{font-size:12px;color:var(--muted);margin-left:auto}

.toast{position:fixed;right:16px;bottom:16px;z-index:80;background:#243746;color:white;border-radius:7px;padding:10px 13px;box-shadow:var(--shadow);max-width:440px;font-size:13px}
.toast.error{background:#8b2e38}

.sync-overlay{position:fixed;inset:0;z-index:100;background:rgba(242,245,248,.78);backdrop-filter:blur(5px);display:grid;place-items:center}
.sync-panel{width:min(430px,calc(100% - 32px));background:white;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);padding:22px;text-align:center}
.sync-panel h3{margin:8px 0;color:var(--navy)}.sync-spinner{width:34px;height:34px;margin:auto;border:4px solid #d8e0e7;border-top-color:var(--navy);border-radius:50%;animation:spin .85s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}.progress-track{height:8px;background:#e5e9ed;border-radius:999px;overflow:hidden;margin:15px 0 8px}
.progress-bar{height:100%;width:8%;background:var(--navy);transition:width .5s ease}.sync-detail{font-size:12px;color:var(--muted)}

.url-value{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;max-width:650px;overflow-wrap:anywhere;white-space:normal}
.pdf-link{color:#174c7a}.privacy-note{font-size:12px;color:var(--muted)}

@media(max-width:800px){
  .brand{display:none}.identity{display:none}.year-select{max-width:none;width:180px}
  .form-grid,.form-grid.three{grid-template-columns:1fr}.topbar{gap:7px}.navbar{top:46px}
  main{padding:8px}.week-day{width:160px;min-width:160px}
}


.weekly-toolbar{
  display:flex;
  justify-content:flex-end;
  margin:0 0 8px;
}

.week-event[draggable="true"]{
  cursor:grab;
  border:1px solid transparent;
  padding:2px 3px;
}
.week-event.dragging{
  opacity:.35;
  cursor:grabbing;
}
.week-day.drop-hover{
  box-shadow:inset 0 0 0 2px var(--navy);
}
.drop-actions{
  margin-top:6px;
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:4px;
}
.drop-zone{
  border:1px dashed #8c99a6;
  border-radius:4px;
  padding:5px 4px;
  text-align:center;
  font-size:10px;
  font-weight:700;
  background:rgba(255,255,255,.88);
  color:var(--navy);
}
.move-zone{border-color:var(--navy)}
.copy-zone{border-color:var(--gold)}
.drop-zone:hover{
  background:#f3f6f8;
}

.boot-status{display:flex;align-items:center;gap:10px;margin-top:22px;color:var(--muted);font-size:13px}
.boot-spinner{width:19px;height:19px;border:3px solid #d8e0e7;border-top-color:var(--navy);border-radius:50%;animation:spin .85s linear infinite;flex:0 0 auto}
.migration-summary{display:flex;gap:7px;flex-wrap:wrap;margin:0 0 9px}
.summary-chip{border:1px solid var(--line);background:white;border-radius:999px;padding:4px 9px;font-size:12px}
.summary-chip.ready{background:#edf6ed;color:#245b35}.summary-chip.review{background:#fff4db;color:#6a4d00}.summary-chip.committed{background:#e9eef4;color:var(--navy)}
.migration-row-review{background:#fffaf0}.migration-row-ready{background:#f5fbf5}.migration-row-committed{opacity:.62}
.migration-raw{white-space:pre-wrap;min-width:260px;max-width:520px;line-height:1.25}
.migration-actions{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin-bottom:9px}


.planning-note-cell{
  background:#fffdf2;
  color:#5d5538;
  font-size:11px;
  line-height:1.3;
  padding:5px;
  white-space:pre-wrap;
}
.planning-note-cell.editable-note{cursor:pointer}
.planning-note-cell.editable-note:hover{box-shadow:inset 0 0 0 2px #c7a13a}
.planning-note-placeholder{color:#9b9171;font-style:italic}
.planning-note-text{white-space:pre-wrap}

/* Browser Save-as-PDF / print layout. Weekly View only. */
@media print{
  @page{size:A4 landscape;margin:7mm}
  body.printing-weekly{background:white!important}
  body.printing-weekly #loginView,
  body.printing-weekly .topbar,
  body.printing-weekly .navbar,
  body.printing-weekly main > .page:not(#page-weekly),
  body.printing-weekly #page-weekly .page-head,
  body.printing-weekly .weekly-toolbar,
  body.printing-weekly #modalHost,
  body.printing-weekly #toast,
  body.printing-weekly #syncOverlay,
  body.printing-weekly .drop-actions{
    display:none!important;
  }
  body.printing-weekly #appView,
  body.printing-weekly main,
  body.printing-weekly #page-weekly{
    display:block!important;
    padding:0!important;
    margin:0!important;
    min-height:0!important;
  }
  body.printing-weekly .weekly-wrap{
    display:block!important;
    overflow:visible!important;
    max-height:none!important;
    border:0!important;
  }
  body.printing-weekly .weekly-grid{
    width:100%!important;
    min-width:0!important;
    table-layout:fixed!important;
    font-size:7pt!important;
  }
  body.printing-weekly .weekly-grid thead th{
    position:static!important;
    font-size:7pt!important;
    padding:2mm!important;
  }
  body.printing-weekly .weekly-grid .week-label{
    width:10mm!important;
    min-width:10mm!important;
    padding:1mm!important;
    font-size:7pt!important;
  }
  body.printing-weekly .week-day{
    width:auto!important;
    min-width:0!important;
    height:auto!important;
    min-height:18mm!important;
    padding:1.2mm!important;
    -webkit-print-color-adjust:exact!important;
    print-color-adjust:exact!important;
  }
  body.printing-weekly .week-day.weekend{
    background:#dedede!important;
  }
  body.printing-weekly .week-day.ramadan{
    background:var(--purple)!important;
  }
  body.printing-weekly .week-day.today{
    outline:none!important; /* Today orange intentionally omitted from PDF */
  }
  body.printing-weekly .week-event{
    font-size:6.5pt!important;
    line-height:1.16!important;
    margin:0 0 .8mm!important;
    padding:.5mm!important;
    -webkit-print-color-adjust:exact!important;
    print-color-adjust:exact!important;
  }
  body.printing-weekly .week-event.psle{
    background:var(--green)!important;
    color:var(--green-text)!important;
  }
  body.printing-weekly .week-date{
    font-size:7pt!important;
    margin-bottom:1mm!important;
  }
}
