:root {
  --soft-bg: #f5f7fb;
  --line: #e5e7eb;
}
body { background: var(--soft-bg); }
.card-soft { border: 0; border-radius: 18px; box-shadow: 0 10px 30px rgba(15, 23, 42, .08); }
.login-card { max-width: 430px; margin: 8vh auto; }
.table thead th { white-space: nowrap; }
.color-dot { display:inline-block; width:12px; height:12px; border-radius:50%; margin-right:6px; vertical-align:-1px; border:1px solid rgba(0,0,0,.15); }
.unit-badge { display:inline-flex; align-items:center; gap:6px; border-radius:999px; padding:.22rem .55rem; font-size:.85rem; background:#fff; border:1px solid var(--line); }
.month-grid { display:grid; grid-template-columns: repeat(3, minmax(280px, 1fr)); gap: 18px; }
@media (max-width: 1200px) { .month-grid { grid-template-columns: repeat(2, minmax(280px, 1fr)); } }
@media (max-width: 768px) { .month-grid { grid-template-columns: 1fr; } }
.month-card { background:#fff; border-radius:18px; box-shadow:0 8px 22px rgba(15,23,42,.08); overflow:hidden; border:1px solid rgba(226,232,240,.9); }
.month-header { display:flex; align-items:center; justify-content:space-between; gap:10px; background:linear-gradient(135deg,#0f766e,#2563eb); color:#fff; padding:10px 12px; }
.month-title { font-weight:800; letter-spacing:.02em; }
.effective-label { font-size:.8rem; background:rgba(255,255,255,.18); padding:4px 8px; border-radius:999px; white-space:nowrap; }
.week-row, .days-grid { display:grid; grid-template-columns: repeat(7, 1fr); }
.week-row div { text-align:center; font-weight:700; font-size:.78rem; padding:8px 2px; color:#475569; background:#f8fafc; border-bottom:1px solid #e2e8f0; }
.week-row div:first-child { color:#dc2626; }
.day-cell { min-height:76px; border-right:1px solid #edf2f7; border-bottom:1px solid #edf2f7; padding:5px; position:relative; cursor:pointer; background:#fff; transition:.15s; }
.day-cell:hover { outline:2px solid #2563eb; z-index:2; }
.day-cell:nth-child(7n) { border-right:0; }
.day-number { font-size:1.05rem; font-weight:700; color:#111827; }
.day-cell.other-month .day-number { color:#a1a1aa; }
.day-cell.sunday .day-number { color:#dc2626; }
.day-cell.friday .day-number { color:#16a34a; }
.day-cell.saturday-mode5 .day-number { color:#b45309; }
.day-cell.saturday-mode5 { background:#fff7ed; }
.day-cell.holiday-cell .day-number,
.day-cell.holiday-cell.sunday .day-number,
.day-cell.holiday-cell.friday .day-number,
.day-cell.holiday-cell.saturday-mode5 .day-number,
.day-cell.holiday-cell.other-month .day-number { color:#fff !important; }
.day-cell.holiday-cell .day-count { color:#fff !important; }
.day-cell.holiday-cell .day-marker { border-color:rgba(255,255,255,.95); box-shadow:0 0 0 1px rgba(255,255,255,.25); }
.day-markers { display:flex; flex-wrap:wrap; gap:3px; margin-top:4px; }
.day-marker { width:8px; height:8px; border-radius:50%; border:1px solid rgba(255,255,255,.7); box-shadow:0 0 0 1px rgba(0,0,0,.08); }
.day-count { font-size:.68rem; color:#475569; margin-top:3px; }
.legend-box { display:flex; flex-wrap:wrap; gap:8px 14px; }
.legend-item { display:inline-flex; align-items:center; gap:5px; font-size:.88rem; }
.agenda-list-swal { text-align:left; max-height:430px; overflow:auto; }
.agenda-list-swal .item { border-left:5px solid #0d6efd; padding:9px 10px; margin-bottom:8px; background:#f8fafc; border-radius:10px; }
.agenda-list-swal .meta { font-size:.8rem; color:#64748b; }
.form-help { font-size:.83rem; color:#64748b; }
.required:after { content:' *'; color:#dc2626; }
.bg-gradient-soft { background:linear-gradient(135deg,#eef6ff,#f8fafc); }


/* Print kalender: hanya area kalender yang dicetak, navbar dan filter tidak ikut. */
@media print {
  @page { size: A4 landscape; margin: 8mm; }
  html, body { background:#fff !important; }
  body { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  nav, .navbar, .no-print { display:none !important; }
  main.container-fluid { padding:0 !important; margin:0 !important; width:100% !important; max-width:none !important; }
  .print-area { display:block !important; margin:0 !important; }
  .calendar-print-title { box-shadow:none !important; border:0 !important; border-radius:0 !important; margin-bottom:8px !important; }
  .calendar-print-title .card-body { padding:0 0 8px 0 !important; }
  .month-grid { grid-template-columns: repeat(3, 1fr) !important; gap:8px !important; }
  .month-card { box-shadow:none !important; border:1px solid #cbd5e1 !important; border-radius:8px !important; break-inside:avoid; page-break-inside:avoid; overflow:hidden !important; }
  .month-header { padding:5px 7px !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .month-title { font-size:.8rem !important; }
  .effective-label { font-size:.58rem !important; padding:2px 5px !important; }
  .week-row div { font-size:.58rem !important; padding:3px 1px !important; }
  .day-cell { min-height:42px !important; padding:2px 3px !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .day-number { font-size:.78rem !important; }
  .day-markers { gap:2px !important; margin-top:2px !important; }
  .day-marker { width:5px !important; height:5px !important; }
  .day-count { font-size:.5rem !important; margin-top:1px !important; }
  .legend-box { gap:4px 10px !important; }
  .legend-item { font-size:.7rem !important; }
  .color-dot { width:9px !important; height:9px !important; }
}

/* Halaman tabel agenda hanya dipakai saat print. */
.agenda-print-page { display:none; }

/* Revisi print portrait: navbar/filter tidak tercetak, halaman 1 kalender, halaman berikutnya tabel agenda. */
@media print {
  @page { size: A4 portrait; margin: 6mm; }

  html, body {
    width: 210mm !important;
    min-height: 297mm !important;
    background:#fff !important;
  }
  body {
    -webkit-print-color-adjust: exact !important;
    print-color-adjust: exact !important;
    overflow: visible !important;
  }

  /* Paksa hanya #printArea yang terlihat di print preview. */
  body * { visibility: hidden !important; }
  #printArea, #printArea * { visibility: visible !important; }
  nav, .navbar, .no-print, #calendarLoading { display:none !important; visibility:hidden !important; }

  main.container-fluid {
    padding:0 !important;
    margin:0 !important;
    width:100% !important;
    max-width:none !important;
  }
  main.container-fluid > *:not(#printArea) { display:none !important; }

  #printArea {
    display:block !important;
    position:absolute !important;
    left:0 !important;
    top:0 !important;
    width:198mm !important;
    margin:0 !important;
    padding:0 !important;
  }

  .print-calendar-page {
    display:block !important;
    width:198mm !important;
    min-height:284mm !important;
    max-height:284mm !important;
    overflow:hidden !important;
    break-after: page !important;
    page-break-after: always !important;
  }

  .calendar-print-title {
    box-shadow:none !important;
    border:0 !important;
    border-radius:0 !important;
    margin:0 0 3mm 0 !important;
    background:#fff !important;
  }
  .calendar-print-title .card-body { padding:0 !important; }
  .calendar-print-title h4 { font-size:12pt !important; margin:0 !important; line-height:1.1 !important; }
  .calendar-print-title .text-muted { font-size:7.5pt !important; line-height:1.2 !important; }
  .legend-box { gap:2mm 4mm !important; line-height:1.1 !important; max-width:105mm !important; }
  .legend-item { font-size:6.6pt !important; white-space:nowrap !important; }
  .color-dot { width:2.5mm !important; height:2.5mm !important; margin-right:1mm !important; }

  .month-grid {
    display:grid !important;
    width:198mm !important;
    margin:0 !important;
  }
  .month-grid.print-grid-year {
    grid-template-columns: repeat(3, 1fr) !important;
    gap:2mm !important;
  }
  .month-grid.print-grid-semester {
    grid-template-columns: repeat(2, 1fr) !important;
    gap:3mm !important;
  }

  .month-card {
    box-shadow:none !important;
    border:0.3mm solid #cbd5e1 !important;
    border-radius:2mm !important;
    overflow:hidden !important;
    break-inside:avoid !important;
    page-break-inside:avoid !important;
    background:#fff !important;
  }
  .month-header {
    padding:1.2mm 1.6mm !important;
    min-height:auto !important;
    -webkit-print-color-adjust: exact !important;
    print-color-adjust: exact !important;
  }
  .month-title { font-size:6.7pt !important; letter-spacing:0 !important; line-height:1.05 !important; }
  .effective-label { font-size:4.8pt !important; padding:.5mm 1mm !important; line-height:1 !important; }
  .week-row div {
    font-size:5pt !important;
    padding:.7mm .2mm !important;
    line-height:1 !important;
  }
  .day-cell {
    min-height:6.6mm !important;
    padding:.5mm .7mm !important;
    -webkit-print-color-adjust: exact !important;
    print-color-adjust: exact !important;
  }
  .print-grid-semester .day-cell { min-height:10.6mm !important; }
  .day-number { font-size:6.2pt !important; line-height:1 !important; }
  .print-grid-semester .day-number { font-size:7.5pt !important; }
  .day-markers { gap:.4mm !important; margin-top:.6mm !important; }
  .day-marker {
    width:1.8mm !important;
    height:1.8mm !important;
    border:0.15mm solid rgba(255,255,255,.85) !important;
  }
  .day-count { display:none !important; }

  .agenda-print-page {
    display:block !important;
    width:198mm !important;
    box-shadow:none !important;
    border:0 !important;
    border-radius:0 !important;
    margin:0 !important;
    padding:0 !important;
    break-before: page !important;
    page-break-before: always !important;
  }
  .agenda-print-page .card-body { padding:0 !important; }
  .agenda-print-page h4 { font-size:12pt !important; margin:0 0 1mm 0 !important; }
  .agenda-print-page .text-muted { font-size:8pt !important; margin-bottom:3mm !important; }
  .agenda-print-table { font-size:7.5pt !important; width:100% !important; border-collapse:collapse !important; }
  .agenda-print-table th, .agenda-print-table td {
    padding:1.2mm 1.4mm !important;
    border:0.25mm solid #94a3b8 !important;
    vertical-align:top !important;
  }
  .agenda-print-table thead th {
    background:#e2e8f0 !important;
    color:#0f172a !important;
    -webkit-print-color-adjust: exact !important;
    print-color-adjust: exact !important;
  }
  .agenda-print-table .badge { font-size:6pt !important; padding:.6mm 1mm !important; }
}

/* Print fix final: fallback kalau pengguna menekan Ctrl+P langsung dari halaman utama. */
@media print {
  @page { size: A4 portrait; margin: 5mm; }
  body > nav.navbar,
  body > main > .no-print,
  body > main > #calendarLoading,
  .navbar,
  .no-print {
    display: none !important;
    visibility: hidden !important;
  }
  body > main.container-fluid {
    padding: 0 !important;
    margin: 0 !important;
    width: 100% !important;
    max-width: none !important;
  }
  body > main.container-fluid > *:not(#printArea) {
    display: none !important;
    visibility: hidden !important;
  }
  #printArea {
    display: block !important;
    visibility: visible !important;
    position: static !important;
    width: 200mm !important;
    margin: 0 auto !important;
    padding: 0 !important;
  }
  #printArea * {
    visibility: visible !important;
  }
}


/* Libur dan cuti nasional: background tanggal otomatis merah. */
.day-cell.holiday-cell {
  background: #DC3545 !important;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.day-cell.holiday-cell .day-number,
.day-cell.holiday-cell.sunday .day-number,
.day-cell.holiday-cell.friday .day-number,
.day-cell.holiday-cell.saturday-mode5 .day-number,
.day-cell.holiday-cell.other-month .day-number,
.day-cell.holiday-cell .day-count {
  color: #ffffff !important;
}

/* Keterangan agenda/libur/cuti per bulan */
.month-notes {
  border-top:1px solid #e2e8f0;
  padding:7px 8px 8px;
  background:#ffffff;
  max-height:150px;
  overflow:auto;
}
.month-notes-empty {
  color:#94a3b8;
  font-size:.75rem;
  font-style:italic;
}
.month-note-row {
  display:grid;
  grid-template-columns:10px 66px 86px 1fr;
  gap:6px;
  align-items:start;
  font-size:.74rem;
  line-height:1.2;
  margin-bottom:4px;
}
.month-note-dot {
  width:8px;
  height:8px;
  border-radius:50%;
  margin-top:3px;
  box-shadow:0 0 0 1px rgba(0,0,0,.08);
}
.month-note-date { font-weight:700; color:#0f172a; white-space:nowrap; }
.month-note-type { color:#64748b; white-space:nowrap; }
.month-note-title { color:#111827; overflow:hidden; text-overflow:ellipsis; }
.month-note-more { font-size:.72rem; color:#64748b; font-style:italic; margin-top:2px; }
.holiday-legend-dot { background:#DC3545 !important; }

/* Print baru: 1 halaman = 1 semester. Halaman tahun ajaran utuh otomatis menjadi 2 halaman kalender. */
@media print {
  .month-notes {
    max-height:none !important;
    overflow:hidden !important;
    border-top:0.2mm solid #e2e8f0 !important;
    padding:.7mm .9mm .85mm .9mm !important;
    min-height:21mm !important;
  }
  .month-note-row {
    grid-template-columns:2mm 12mm 14mm 1fr !important;
    gap:.7mm !important;
    font-size:4.35pt !important;
    line-height:1.12 !important;
    margin-bottom:.45mm !important;
  }
  .month-note-dot { width:1.5mm !important; height:1.5mm !important; margin-top:.25mm !important; }
  .month-note-date, .month-note-type { white-space:nowrap !important; }
  .month-note-more, .month-notes-empty { font-size:4.25pt !important; }
}
