:root {
  --ink: #18231f;
  --ink-2: #26342f;
  --muted: #66736f;
  --line: rgba(40, 57, 51, .14);
  --surface: rgba(255, 255, 255, .86);
  --soft: #eef4f0;
  --green: #147a55;
  --green-2: #0f5f49;
  --green-soft: #dff6e8;
  --red: #c84343;
  --red-soft: #ffe7e3;
  --gold: #bd8b2e;
  --blue: #2e6fae;
  --shadow: 0 24px 70px rgba(20, 36, 31, .16);
  --shadow-soft: 0 16px 36px rgba(20, 36, 31, .09);
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

* { box-sizing: border-box; }
html { min-height: 100%; }
body {
  margin: 0;
  min-height: 100vh;
  color: var(--ink);
  background:
    linear-gradient(104deg, rgba(13, 111, 75, .70) 0 22%, transparent 22% 100%),
    linear-gradient(118deg, transparent 0 27%, rgba(18, 154, 93, .60) 27% 43%, transparent 43% 100%),
    linear-gradient(292deg, rgba(44, 75, 82, .28) 0 17%, transparent 17% 100%),
    linear-gradient(180deg, rgba(112, 178, 229, .42) 0%, rgba(230, 244, 247, .38) 32%, rgba(255, 248, 231, .80) 100%),
    linear-gradient(135deg, #e7f0eb 0%, #fff7e8 48%, #e6f3f6 100%);
}
body::before {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  background-image:
    linear-gradient(rgba(20, 36, 31, .060) 1px, transparent 1px),
    linear-gradient(90deg, rgba(20, 36, 31, .060) 1px, transparent 1px),
    repeating-linear-gradient(90deg, rgba(12, 117, 76, .12) 0 76px, rgba(255,255,255,.10) 76px 80px, transparent 80px 156px);
  background-size: 38px 38px, 38px 38px, 312px 100%;
  mask-image: linear-gradient(to bottom, rgba(0,0,0,.92), transparent 88%);
}
body::after {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  background:
    linear-gradient(90deg, rgba(6, 50, 37, .26), transparent 24%, transparent 72%, rgba(36, 66, 76, .20)),
    linear-gradient(180deg, rgba(255,255,255,.10), transparent 42%, rgba(13,111,75,.18));
  opacity: .92;
}

a { color: inherit; text-decoration: none; }
button, input, textarea, select { font: inherit; }
button { cursor: pointer; }
h1, h2, p { margin-top: 0; }

.auth-shell {
  position: relative;
  min-height: 100vh;
  display: grid;
  place-items: center;
  padding: 24px;
  isolation: isolate;
}
.auth-shell::before {
  content: "";
  position: fixed;
  left: max(-120px, -7vw);
  bottom: max(-90px, -9vh);
  width: min(1120px, 68vw);
  height: min(760px, 82vh);
  border: 1px solid rgba(255,255,255,.38);
  border-radius: 0 8px 8px 0;
  background:
    linear-gradient(115deg, rgba(8, 126, 77, .94), rgba(24, 177, 105, .86) 46%, rgba(12, 105, 76, .92)),
    repeating-linear-gradient(0deg, rgba(255,255,255,.12) 0 2px, transparent 2px 84px),
    repeating-linear-gradient(90deg, rgba(3, 66, 48, .18) 0 2px, transparent 2px 132px);
  box-shadow: inset -18px 0 42px rgba(5, 52, 40, .22), 0 42px 110px rgba(20,36,31,.22);
  clip-path: polygon(0 14%, 84% 0, 100% 100%, 0 100%);
  transform: translateY(8px) skewX(-5deg);
  z-index: 0;
}
.auth-shell::after {
  content: "";
  position: fixed;
  width: min(520px, 34vw);
  height: min(740px, 82vh);
  right: clamp(24px, 7vw, 130px);
  top: clamp(24px, 6vh, 80px);
  background:
    radial-gradient(circle, rgba(12, 34, 39, .32) 0 2px, transparent 2.6px),
    linear-gradient(90deg, rgba(255,255,255,.24), transparent 18%, transparent 82%, rgba(255,255,255,.20)),
    linear-gradient(160deg, rgba(116, 128, 132, .82), rgba(50, 62, 66, .72));
  background-size: 18px 18px, 100% 100%, 100% 100%;
  border: 1px solid rgba(255,255,255,.46);
  box-shadow: 0 38px 100px rgba(20, 36, 31, .20);
  clip-path: polygon(11% 0, 100% 5%, 88% 100%, 0 91%);
  opacity: .78;
  pointer-events: none;
  z-index: 0;
}
.auth-panel, .panel, .card {
  background: var(--surface);
  border: 1px solid rgba(255, 255, 255, .76);
  border-radius: 8px;
  box-shadow: var(--shadow);
  backdrop-filter: blur(18px);
}
.auth-panel {
  position: relative;
  z-index: 1;
  width: min(100%, 480px);
  padding: 34px;
  overflow: hidden;
  background:
    linear-gradient(145deg, rgba(255,255,255,.97), rgba(255,255,255,.86)),
    linear-gradient(120deg, rgba(20,122,85,.10), transparent 28%, rgba(46,111,174,.08));
  border-color: rgba(255,255,255,.88);
  box-shadow: 0 38px 110px rgba(8, 58, 43, .28), 0 1px 0 rgba(255,255,255,.88) inset;
}
.auth-panel::before, .panel::before {
  content: "";
  position: absolute;
  inset: 0 0 auto;
  height: 4px;
  background: linear-gradient(90deg, var(--green), var(--gold), var(--blue));
}

.brand-lockup, .topbar-title { display: flex; gap: 14px; align-items: center; }
.brand-mark {
  width: 48px; height: 48px; display: grid; place-items: center;
  border-radius: 8px; background: linear-gradient(145deg, var(--green), #1aa36d);
  color: white; font-weight: 900; font-size: 22px; flex: 0 0 auto;
  box-shadow: 0 12px 24px rgba(20, 122, 85, .24), inset 0 1px 0 rgba(255,255,255,.28);
}
.eyebrow { margin: 0 0 6px; color: var(--gold); font-size: 12px; font-weight: 800; text-transform: uppercase; }
h1 { margin-bottom: 0; font-size: clamp(30px, 4vw, 42px); line-height: 1.04; }

.form-stack, .task-list { display: grid; gap: 14px; }
label span { display: block; margin-bottom: 7px; color: #33433d; font-size: 13px; font-weight: 800; }
input, textarea, select {
  width: 100%; min-height: 44px; border: 1px solid var(--line); border-radius: 8px;
  background: rgba(255, 255, 255, .92); color: var(--ink); padding: 11px 12px;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.7);
  transition: border-color .18s ease, box-shadow .18s ease, background .18s ease;
}
input:focus, textarea:focus, select:focus {
  outline: none; border-color: rgba(20, 122, 85, .56); background: #fff;
  box-shadow: 0 0 0 4px rgba(20, 122, 85, .12);
}
textarea { min-height: 96px; resize: vertical; }
.checkline { display: inline-flex; gap: 9px; align-items: center; }
.checkline input { width: auto; min-height: auto; accent-color: var(--green); }
.checkline span { margin: 0; }

.primary-action, .ghost-action, .icon-action {
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid transparent; border-radius: 8px; min-height: 42px;
  padding: 9px 15px; font-weight: 850;
  transition: transform .16s ease, box-shadow .16s ease, background .16s ease, border-color .16s ease;
}
.danger-action {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid rgba(200, 67, 67, .24);
  border-radius: 8px;
  min-height: 42px;
  padding: 9px 15px;
  color: white;
  background: linear-gradient(135deg, #d35252, #a92f2f);
  font-weight: 850;
}
.danger-action:disabled {
  cursor: not-allowed;
  opacity: .45;
}
.primary-action {
  color: white; background: linear-gradient(135deg, var(--green), var(--green-2));
  box-shadow: 0 14px 28px rgba(20, 122, 85, .24);
}
.primary-action:disabled {
  cursor: not-allowed;
  opacity: .58;
  transform: none;
  box-shadow: none;
}
.ghost-action { color: var(--ink); background: rgba(255,255,255,.72); border-color: var(--line); }
.icon-action { min-width: 42px; padding-inline: 10px; background: rgba(255,255,255,.82); border-color: var(--line); }
.primary-action:hover, .ghost-action:hover, .icon-action:hover {
  transform: translateY(-1px);
  box-shadow: 0 14px 28px rgba(20, 36, 31, .12);
}
.primary-action:disabled:hover {
  transform: none;
  box-shadow: none;
}

.app-shell {
  min-height: 100vh;
  display: grid;
  grid-template-columns: 280px minmax(0, 1fr);
}

.app-sidebar {
  position: sticky;
  top: 0;
  height: 100vh;
  display: flex;
  flex-direction: column;
  gap: 22px;
  padding: 24px 18px;
  color: white;
  background:
    radial-gradient(circle at 12% 8%, rgba(24, 177, 105, .30), transparent 28%),
    linear-gradient(165deg, #073828 0%, #0e4f3b 50%, #102b25 100%);
  border-right: 1px solid rgba(255, 255, 255, .12);
  box-shadow: 24px 0 70px rgba(8, 35, 27, .22);
  z-index: 50;
}

.sidebar-brand {
  display: flex;
  gap: 12px;
  align-items: center;
  min-width: 0;
}

.sidebar-brand strong,
.user-chip strong {
  display: block;
  line-height: 1.15;
}

.sidebar-brand small,
.user-chip small {
  display: block;
  margin-top: 3px;
  color: rgba(255, 255, 255, .68);
  font-size: 12px;
}

.sidebar-nav {
  display: grid;
  gap: 20px;
  overflow: auto;
  padding-right: 2px;
}

.sidebar-group {
  display: grid;
  gap: 7px;
}

.sidebar-group p {
  margin: 0 0 4px;
  padding-inline: 4px;
  color: rgba(255, 255, 255, .56);
  font-size: 11px;
  font-weight: 900;
  text-transform: uppercase;
}

.sidebar-link {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 40px;
  padding: 9px 10px;
  border: 1px solid transparent;
  border-radius: 8px;
  color: rgba(255, 255, 255, .88);
  font-size: 14px;
  font-weight: 800;
}

.sidebar-link span {
  width: 24px;
  height: 24px;
  display: grid;
  place-items: center;
  border-radius: 7px;
  background: rgba(255, 255, 255, .10);
  color: rgba(255, 255, 255, .76);
  font-size: 12px;
}

.sidebar-link.active,
.sidebar-link:hover {
  border-color: rgba(255, 255, 255, .16);
  background: rgba(255, 255, 255, .13);
  color: white;
}

.sidebar-logout {
  margin-top: auto;
}

.sidebar-logout button {
  width: 100%;
  min-height: 42px;
  border: 1px solid rgba(255, 255, 255, .18);
  border-radius: 8px;
  background: rgba(255, 255, 255, .12);
  color: white;
  font-weight: 900;
}

.content-shell {
  min-width: 0;
}

.content-topbar {
  position: sticky;
  top: 0;
  z-index: 40;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  min-height: 72px;
  padding: 14px clamp(16px, 3vw, 32px);
  border-bottom: 1px solid var(--line);
  background: rgba(255, 255, 255, .84);
  box-shadow: 0 8px 26px rgba(20, 36, 31, .06);
  backdrop-filter: blur(18px);
}

.sidebar-toggle {
  display: none;
  min-height: 40px;
  padding: 8px 13px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255, 255, 255, .8);
  color: var(--ink);
  font-weight: 900;
}

.topbar-context strong,
.topbar-context span {
  display: block;
}

.topbar-context span {
  margin-top: 2px;
  color: var(--muted);
  font-size: 12px;
  font-weight: 750;
}

.user-chip {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}

.avatar {
  width: 42px;
  height: 42px;
  display: grid;
  place-items: center;
  border-radius: 999px;
  background: linear-gradient(145deg, var(--green), #1aa36d);
  color: white;
  font-weight: 900;
}

.avatar.small {
  width: 34px;
  height: 34px;
  font-size: 13px;
}

img.avatar.small {
  width: 34px;
  height: 34px;
  object-fit: cover;
  border-radius: 999px;
}
img.avatar {
  width: 42px;
  height: 42px;
  object-fit: cover;
  border-radius: 999px;
}
img.brand-mark {
  width: 48px;
  height: 48px;
  object-fit: cover;
  border-radius: 8px;
}

.user-chip small {
  color: var(--muted);
}

.sidebar-backdrop {
  display: none;
}

.page-heading {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  padding: 18px 22px;
  background: var(--surface);
  border-radius: 14px;
  box-shadow: var(--shadow-soft);
  margin-bottom: 16px;
  backdrop-filter: blur(4px);
}

.page-heading h1 {
  font-size: clamp(24px, 3vw, 34px);
  margin: 0;
  color: var(--ink);
}

.page-heading .eyebrow {
  margin: 0 0 4px;
  color: var(--green);
  font-size: 11px;
}

.page-heading .muted {
  margin: 4px 0 0;
  font-size: 13px;
}

.page-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  justify-content: flex-end;
}

.modern-stat {
  display: grid;
  grid-template-columns: 54px minmax(0, 1fr);
  gap: 4px 14px;
  align-items: center;
}

.modern-stat i {
  grid-row: span 3;
  width: 54px;
  height: 54px;
  display: grid;
  place-items: center;
  border-radius: 18px;
  background: var(--green-soft);
  color: var(--green);
  font-style: normal;
  font-size: 14px;
  font-weight: 950;
}

.modern-stat strong,
.modern-stat span,
.modern-stat small {
  margin: 0;
}

.modern-stat small {
  color: var(--muted);
  font-size: 12px;
  font-weight: 800;
}

.modern-stat.green i { background: var(--green-soft); color: var(--green); }
.modern-stat.gold i { background: rgba(189, 139, 46, .16); color: var(--gold); }
.modern-stat.red i { background: var(--red-soft); color: var(--red); }
.modern-stat.blue i { background: rgba(46, 111, 174, .14); color: var(--blue); }

.dashboard-board {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 18px;
}

.dashboard-board.user-board {
  grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr);
}

.insight-panel {
  min-height: 220px;
}

.panel-header.compact {
  align-items: flex-start;
}

.panel-header.compact h2 {
  font-size: 18px;
}

.mini-list {
  display: grid;
  gap: 10px;
}

.mini-item {
  display: grid;
  grid-template-columns: 34px minmax(0, 1fr) auto;
  gap: 10px;
  align-items: center;
  padding: 11px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255, 255, 255, .58);
  transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease;
}

a.mini-item:hover {
  transform: translateY(-1px);
  border-color: rgba(20, 122, 85, .32);
  box-shadow: 0 12px 28px rgba(20, 36, 31, .10);
}

.mini-item strong,
.mini-item small {
  display: block;
}

.mini-item small {
  margin-top: 2px;
  color: var(--muted);
  font-size: 12px;
}

.role-progress-list {
  display: grid;
  gap: 13px;
}

.role-progress {
  display: grid;
  grid-template-columns: 140px minmax(0, 1fr) 44px;
  gap: 10px;
  align-items: center;
  font-size: 13px;
  font-weight: 850;
}

.role-progress div {
  height: 9px;
  border-radius: 999px;
  background: rgba(20, 36, 31, .10);
  overflow: hidden;
}

.role-progress i {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: linear-gradient(90deg, var(--green), #45b77b);
}

.quick-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

.quick-card {
  display: grid;
  gap: 4px;
  min-height: 76px;
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255, 255, 255, .64);
}

.quick-card strong {
  font-size: 14px;
}

.quick-card span {
  color: var(--muted);
  font-size: 12px;
}

.quick-card.green { border-color: rgba(20, 122, 85, .24); background: rgba(223, 246, 232, .62); }
.quick-card.gold { border-color: rgba(189, 139, 46, .24); background: rgba(255, 246, 224, .64); }
.quick-card.blue { border-color: rgba(46, 111, 174, .22); background: rgba(232, 243, 255, .62); }
.quick-card.red { border-color: rgba(200, 67, 67, .20); background: rgba(255, 231, 227, .58); }

.confirm-overlay {
  position: fixed;
  inset: 0;
  z-index: 80;
  display: grid;
  place-items: center;
  padding: 24px;
  background: rgba(16, 28, 24, .48);
  backdrop-filter: blur(8px);
}
.confirm-overlay[hidden] { display: none; }
.confirm-dialog {
  width: min(440px, 100%);
  display: grid;
  gap: 20px;
  padding: 24px;
  border: 1px solid rgba(255,255,255,.72);
  border-radius: 8px;
  background:
    linear-gradient(135deg, rgba(255,255,255,.96), rgba(242,250,247,.92)),
    var(--surface);
  box-shadow: 0 30px 90px rgba(20,36,31,.28);
}
.confirm-kicker {
  margin-bottom: 6px;
  color: var(--gold);
  font-size: 12px;
  font-weight: 900;
  text-transform: uppercase;
}
.confirm-dialog h3 {
  margin-bottom: 6px;
  font-size: 22px;
  line-height: 1.15;
}
.confirm-dialog p:not(.confirm-kicker) {
  color: var(--muted);
}
.confirm-actions {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  flex-wrap: wrap;
}

.error-text { color: var(--red); font-size: 13px; margin: 0; }
.demo-users {
  margin-top: 24px; padding: 16px; border: 1px solid rgba(189, 139, 46, .24);
  border-radius: 8px; background: linear-gradient(135deg, rgba(255, 242, 207, .78), rgba(255,255,255,.66));
  display: grid; gap: 7px; color: var(--muted); font-size: 13px;
}
.demo-users p { margin-bottom: 2px; color: var(--ink-2); font-weight: 800; }

.topbar {
  position: sticky; top: 0; z-index: 10; display: flex; justify-content: space-between;
  gap: 16px; align-items: center; padding: 14px clamp(16px, 4vw, 36px);
  background: rgba(18, 33, 29, .86); border-bottom: 1px solid rgba(255,255,255,.12);
  box-shadow: 0 18px 44px rgba(17, 28, 25, .18); backdrop-filter: blur(18px);
}
.topbar-title strong { display: block; font-size: 18px; color: white; }
.topbar-title small { color: rgba(255,255,255,.68); font-size: 13px; }
.topbar .ghost-action { background: rgba(255,255,255,.1); color: white; border-color: rgba(255,255,255,.18); }
.topbar-actions, .actions-row, .report-actions, .admin-toolbar, .row-actions { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.topbar-actions { justify-content: flex-end; }
.topbar-toggle {
  display: none;
  width: 42px;
  height: 42px;
  border: 1px solid rgba(255,255,255,.18);
  border-radius: 8px;
  background: rgba(255,255,255,.1);
  color: white;
  cursor: pointer;
  align-items: center;
  justify-content: center;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.14);
}
.topbar-toggle span {
  width: 11px;
  height: 11px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: translateY(3px) rotate(225deg);
  transition: transform .2s ease;
}
.admin-toolbar { justify-content: flex-end; }
.row-actions { gap: 8px; }
.admin-filter-bar {
  display: grid;
  grid-template-columns: minmax(240px, 1fr) auto auto auto;
  gap: 12px;
  align-items: end;
  margin: 16px 0;
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.52);
}
.filter-tabs {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}
.filter-chip {
  min-height: 42px;
  display: inline-flex;
  align-items: center;
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 8px 13px;
  background: rgba(255,255,255,.72);
  color: var(--ink);
  font-size: 13px;
  font-weight: 850;
}
.filter-chip.active {
  border-color: rgba(20,122,85,.32);
  background: var(--green-soft);
  color: #105c3b;
}

.workspace {
  position: relative; width: min(1320px, 100%); margin: 0 auto;
  padding: 26px clamp(16px, 4vw, 36px) 44px; display: grid; gap: 20px;
}
.notice {
  padding: 12px 14px; border: 1px solid #9ad7af; border-radius: 8px;
  background: var(--green-soft); color: #105c3b; font-weight: 800; box-shadow: var(--shadow-soft);
}
.error-notice { border-color: #e7aaaa; background: var(--red-soft); color: #8a2222; }
.muted { color: var(--muted); font-size: 13px; margin-bottom: 0; }
.panel { position: relative; padding: 20px; overflow: hidden; box-shadow: var(--shadow-soft); }
.narrow { width: min(860px, 100%); margin: 0 auto; }
.panel-header { display: flex; justify-content: space-between; gap: 12px; align-items: center; margin-bottom: 16px; }
.panel-header h2 { margin: 0; font-size: 22px; color: var(--ink); }
.management-panel,
.form-panel,
.detail-panel {
  border-top: 4px solid transparent;
  border-image: linear-gradient(90deg, var(--green), var(--gold), var(--blue)) 1;
}

.management-panel::before,
.form-panel::before,
.detail-panel::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    radial-gradient(circle at 8% 0%, rgba(20, 122, 85, .06), transparent 28%),
    linear-gradient(135deg, rgba(255,255,255,.16), transparent 42%);
}

.management-panel > *,
.form-panel > *,
.detail-panel > * {
  position: relative;
}

.settings-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 18px;
}

.summary-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; }
.stat { position: relative; padding: 18px; overflow: hidden; box-shadow: var(--shadow-soft); }
.stat::after {
  content: ""; position: absolute; right: -24px; top: -24px; width: 86px; height: 86px;
  border-radius: 999px; background: rgba(189, 139, 46, .13);
}
.stat strong { display: block; font-size: 34px; line-height: 1; margin-bottom: 8px; color: var(--green-2); }
.stat span { color: var(--muted); font-size: 13px; font-weight: 700; }
.modern-stat strong {
  display: block;
  color: var(--green-2);
  font-size: 30px;
  line-height: 1;
  font-weight: 950;
}
.modern-stat span {
  color: var(--ink);
  font-size: 14px;
  font-weight: 900;
}

.dashboard-grid { display: grid; grid-template-columns: minmax(300px, 430px) 1fr; gap: 20px; align-items: start; }
.month-nav { display: flex; gap: 8px; align-items: center; font-weight: 900; }
.month-nav span { min-width: 138px; text-align: center; }
.month-jump-form {
  display: grid;
  grid-template-columns: minmax(112px, 1fr) 86px;
  gap: 8px;
  align-items: center;
}
.admin-month-jump {
  grid-template-columns: minmax(118px, 1fr) 80px;
  min-width: 212px;
}
.month-jump-form select {
  min-height: 42px;
  padding: 8px 10px;
  font-weight: 850;
}
.calendar-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 8px; }
.weekday { color: var(--muted); font-size: 12px; font-weight: 900; text-align: center; padding-bottom: 2px; }
.day-cell {
  aspect-ratio: 1; border: 1px solid var(--line); border-radius: 8px;
  background: rgba(255,255,255,.82); display: grid; place-items: center; font-weight: 900;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.72);
  transition: transform .16s ease, box-shadow .16s ease, border-color .16s ease;
}
a.day-cell:hover { transform: translateY(-1px); box-shadow: 0 12px 24px rgba(20, 36, 31, .12); }
.day-cell.empty { visibility: hidden; }
.day-cell.done { background: linear-gradient(145deg, #e7faee, #c8efd8); border-color: rgba(20,122,85,.24); color: #105c3b; }
.day-cell.cuti { background: linear-gradient(145deg, #e3f0ff, #c4deff); border-color: rgba(30,100,200,.24); color: #1a4a8a; }
.day-cell.missing { background: linear-gradient(145deg, #fff1ee, #ffd7d0); border-color: rgba(200,67,67,.24); color: #8d2323; }
.day-cell.future, .day-cell.weekend { background: rgba(244,246,245,.8); color: #9aa6a2; }
.day-cell.selected { outline: 3px solid rgba(189,139,46,.28); border-color: var(--gold); }
.legend { display: flex; gap: 12px; flex-wrap: wrap; color: var(--muted); font-size: 13px; margin-top: 16px; }
.legend span {
  display: inline-flex; gap: 6px; align-items: center; padding: 6px 9px;
  border-radius: 999px; background: rgba(255,255,255,.58); border: 1px solid var(--line);
}
.dot { width: 12px; height: 12px; border-radius: 50%; display: inline-block; }
.dot.green { background: var(--green); }
.dot.red { background: var(--red); }
.dot.blue { background: #2563eb; }
.dot.gray { background: #a3afab; }
.dot.blue { background: var(--blue, #2563eb); }

.leave-calendar-panel .month-nav {
  align-items: center;
}

.leave-calendar-grid {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 10px;
}

.leave-weekday {
  color: var(--muted);
  font-size: 12px;
  font-weight: 950;
  text-align: center;
  text-transform: uppercase;
}

.leave-calendar-day {
  min-height: 132px;
  display: grid;
  align-content: start;
  gap: 9px;
  padding: 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255, 255, 255, .62);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .72);
}

.leave-calendar-day.empty {
  visibility: hidden;
}

.leave-calendar-day.today {
  border-color: rgba(189, 139, 46, .42);
  box-shadow: inset 0 0 0 2px rgba(189, 139, 46, .16);
}

.leave-calendar-day.has-leave,
.leave-calendar-day.done {
  background: linear-gradient(145deg, rgba(223, 246, 232, .9), rgba(255, 255, 255, .74));
  border-color: rgba(20, 122, 85, .24);
}

.leave-calendar-day.pending {
  background: linear-gradient(145deg, rgba(255, 246, 224, .92), rgba(255, 255, 255, .74));
  border-color: rgba(189, 139, 46, .26);
}

.leave-calendar-day.missing {
  background: linear-gradient(145deg, rgba(255, 231, 227, .86), rgba(255, 255, 255, .74));
  border-color: rgba(200, 67, 67, .22);
}

.leave-day-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

.leave-day-head strong {
  color: var(--green-2);
  font-size: 22px;
  line-height: 1;
}

.leave-day-head span {
  border-radius: 999px;
  padding: 4px 7px;
  background: rgba(20, 122, 85, .12);
  color: #105c3b;
  font-size: 11px;
  font-weight: 900;
  white-space: nowrap;
}

.leave-day-list {
  display: grid;
  gap: 5px;
  min-width: 0;
}

.leave-day-list a,
.leave-day-list em {
  display: block;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  border-radius: 8px;
  padding: 6px 7px;
  background: rgba(255, 255, 255, .72);
  color: var(--ink);
  font-size: 12px;
  font-weight: 900;
}

.leave-day-list small {
  display: block;
  color: var(--muted);
  font-size: 11px;
  font-weight: 800;
}

.leave-day-list em {
  color: var(--muted);
  font-style: normal;
}

.leave-calendar-list {
  display: grid;
  gap: 10px;
}

.leave-list-card {
  display: grid;
  grid-template-columns: 38px minmax(0, 1fr) minmax(220px, .8fr);
  gap: 12px;
  align-items: center;
  padding: 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255, 255, 255, .62);
}

.leave-list-card strong,
.leave-list-card small {
  display: block;
}

.leave-list-card small {
  margin-top: 3px;
  color: var(--muted);
  font-size: 12px;
}

.task-row {
  display: grid; grid-template-columns: 96px 1fr 140px 76px; gap: 10px; align-items: start;
  padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: rgba(255,255,255,.5);
}
.profile-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.full-width { grid-column: 1 / -1; }
.holiday-sync-form {
  display: grid;
  grid-template-columns: minmax(160px, .7fr) minmax(220px, 1fr);
  gap: 12px;
  align-items: end;
}
.form-divider {
  margin-top: 6px;
  padding-top: 16px;
  border-top: 1px solid var(--line);
}
.form-divider strong,
.form-divider span {
  display: block;
}
.form-divider span {
  color: var(--muted);
  font-size: 13px;
  margin-top: 3px;
}
.signature-preview-box {
  width: 220px;
  height: 86px;
  display: grid;
  place-items: center;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.74);
}
.signature-preview-box img {
  max-width: 190px;
  max-height: 68px;
  object-fit: contain;
}
.table-wrap { overflow: auto; }
.admin-table { width: 100%; min-width: 760px; border-collapse: separate; border-spacing: 0; }
.admin-table th, .admin-table td { border-bottom: 1px solid var(--line); padding: 13px 12px; text-align: left; vertical-align: top; }
.admin-table th { font-size: 12px; text-transform: uppercase; color: var(--muted); background: rgba(255,255,255,.48); }
.admin-table tbody tr:hover { background: rgba(255,255,255,.42); }
.status-pill { display: inline-flex; border-radius: 999px; padding: 5px 10px; font-size: 12px; font-weight: 900; }
.status-pill.done { background: var(--green-soft); color: #11613d; }
.status-pill.missing { background: var(--red-soft); color: #8a2222; }
.status-pill.admin { background: rgba(46, 111, 174, .14); color: #1d568d; }
.status-pill.pending { background: rgba(189, 139, 46, .16); color: #825a12; }
.status-pill.attendance-hadir { background: var(--green-soft); color: #11613d; }
.status-pill.attendance-dinas_luar { background: rgba(46, 111, 174, .14); color: #1d568d; }
.status-pill.attendance-izin { background: rgba(189, 139, 46, .16); color: #825a12; }
.status-pill.attendance-alfa { background: var(--red-soft); color: #8a2222; }
.status-pill.attendance-belum_lengkap { background: rgba(189, 139, 46, .16); color: #825a12; }

.attendance-admin-heading {
  align-items: flex-start;
}

.attendance-admin-heading .page-actions {
  align-items: center;
}

.inline-date-form input {
  min-height: 42px;
  padding: 0 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.82);
  color: var(--ink);
  font-weight: 850;
}

.attendance-export-action {
  background: rgba(255,255,255,.72);
}

.attendance-kpi-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 14px;
}

.attendance-kpi {
  position: relative;
  min-height: 118px;
  display: grid;
  grid-template-columns: 56px minmax(0, 1fr);
  grid-template-areas:
    "icon label"
    "icon number"
    "icon note";
  align-items: center;
  gap: 4px 14px;
  padding: 18px;
  overflow: hidden;
  border: 1px solid rgba(255,255,255,.76);
  border-radius: 8px;
  background: rgba(255,255,255,.78);
  box-shadow: var(--shadow-soft);
}

.attendance-kpi::after {
  content: "";
  position: absolute;
  right: -24px;
  top: -28px;
  width: 92px;
  height: 92px;
  border-radius: 999px;
  background: rgba(189, 139, 46, .12);
}

.attendance-kpi i {
  grid-area: icon;
  width: 56px;
  height: 56px;
  display: grid;
  place-items: center;
  border-radius: 8px;
  font-style: normal;
  font-weight: 950;
}

.attendance-kpi span {
  grid-area: label;
  color: var(--muted);
  font-weight: 900;
}

.attendance-kpi strong {
  grid-area: number;
  color: var(--green);
  font-size: 34px;
  line-height: .95;
}

.attendance-kpi small {
  grid-area: note;
  color: var(--muted);
  font-weight: 750;
}

.attendance-kpi.green i { background: var(--green-soft); color: var(--green); }
.attendance-kpi.blue i { background: rgba(46, 111, 174, .14); color: var(--blue); }
.attendance-kpi.gold i { background: rgba(189, 139, 46, .16); color: var(--gold); }
.attendance-kpi.red i { background: var(--red-soft); color: var(--red); }

.attendance-admin-board {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 340px;
  gap: 18px;
  align-items: start;
}

.attendance-table-panel {
  min-width: 0;
}

.attendance-toolbar {
  display: grid;
  grid-template-columns: minmax(240px, 320px) minmax(0, 1fr) auto;
  gap: 12px;
  align-items: end;
  margin: 16px 0;
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.54);
}

.attendance-toolbar .filter-tabs {
  flex-wrap: nowrap;
  overflow-x: auto;
  padding-bottom: 2px;
  scrollbar-width: thin;
}

.attendance-toolbar .filter-chip {
  flex: 0 0 auto;
}

.attendance-table {
  min-width: 1080px;
}

.attendance-table tbody tr.is-selected {
  background: rgba(20, 122, 85, .08);
}

.attendance-table tbody tr.is-selected td:first-child {
  box-shadow: inset 3px 0 0 var(--green);
}

.attendance-user-link {
  display: inline-grid;
  gap: 3px;
  color: inherit;
  text-decoration: none;
}

.attendance-user-link span {
  color: var(--muted);
  font-size: 13px;
}

.attendance-user-link:hover strong {
  color: var(--green);
  text-decoration: underline;
}

.attendance-time-cell {
  white-space: nowrap;
  font-weight: 850;
}

.time-check {
  display: inline-grid;
  place-items: center;
  width: 18px;
  height: 18px;
  margin-right: 6px;
  border-radius: 999px;
  background: var(--green-soft);
  color: var(--green);
  font-size: 12px;
  font-weight: 950;
}

.time-check.field {
  background: rgba(46, 111, 174, .14);
  color: var(--blue);
}

.mini-action {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 34px;
  padding: 0 13px;
  border: 1px solid rgba(20, 122, 85, .32);
  border-radius: 8px;
  color: var(--green);
  background: rgba(255,255,255,.72);
  font-weight: 900;
}

.attendance-table-footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: 14px;
  color: var(--muted);
  font-size: 13px;
  font-weight: 750;
}

.attendance-side-card {
  position: sticky;
  top: 90px;
  display: grid;
  gap: 14px;
}

.attendance-profile {
  display: flex;
  gap: 14px;
  align-items: center;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--line);
}

.attendance-avatar {
  width: 64px;
  height: 64px;
  display: grid;
  place-items: center;
  border-radius: 999px;
  background: linear-gradient(135deg, var(--green), #0f6d4d);
  color: white;
  font-size: 23px;
  font-weight: 950;
  box-shadow: 0 14px 28px rgba(20, 122, 85, .2);
}

.attendance-profile strong,
.attendance-profile span {
  display: block;
}

.attendance-profile strong {
  font-size: 17px;
}

.attendance-profile span {
  margin-top: 3px;
  color: var(--muted);
  font-weight: 750;
}

.detail-list {
  display: grid;
  gap: 12px;
  margin: 0;
}

.detail-list div {
  display: grid;
  grid-template-columns: 96px minmax(0, 1fr);
  gap: 10px;
}

.detail-list dt {
  color: var(--muted);
  font-weight: 850;
}

.detail-list dd {
  margin: 0;
  font-weight: 750;
}

.attendance-map-card {
  position: relative;
  min-height: 184px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  gap: 10px;
  overflow: hidden;
  padding: 16px;
  border: 1px solid rgba(46, 111, 174, .16);
  border-radius: 8px;
  background:
    radial-gradient(circle at 54% 42%, rgba(46,111,174,.22), transparent 0 34px, rgba(46,111,174,.1) 35px 62px, transparent 63px),
    linear-gradient(135deg, rgba(255,255,255,.86), rgba(232,243,255,.72)),
    repeating-linear-gradient(36deg, rgba(46,111,174,.12) 0 2px, transparent 2px 22px);
}

.attendance-map-card::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    linear-gradient(90deg, transparent 0 46%, rgba(46,111,174,.22) 46% 47%, transparent 47%),
    linear-gradient(0deg, transparent 0 42%, rgba(20,122,85,.16) 42% 43%, transparent 43%);
  opacity: .55;
  pointer-events: none;
}

.attendance-map-card span,
.attendance-map-card a {
  position: relative;
  z-index: 1;
}

.attendance-map-card span {
  color: var(--muted);
  font-weight: 750;
}

.attendance-map-card a {
  color: var(--blue);
  font-weight: 950;
}

.full-action {
  width: 100%;
  justify-content: center;
}

.attendance-info-banner {
  display: flex;
  gap: 16px;
  align-items: center;
  margin-top: 18px;
  padding: 18px 22px;
  border: 1px solid rgba(255,255,255,.7);
  border-radius: 8px;
  background: rgba(255,255,255,.78);
  box-shadow: var(--shadow-soft);
  font-weight: 800;
}

.attendance-info-banner i {
  width: 46px;
  height: 46px;
  display: grid;
  place-items: center;
  border-radius: 999px;
  background: var(--green-soft);
  color: var(--green);
  font-style: normal;
  font-weight: 950;
}

.attendance-hero {
  display: flex;
  justify-content: space-between;
  gap: 18px;
  align-items: end;
  padding: 22px;
  border: 1px solid rgba(255,255,255,.72);
  border-radius: 8px;
  background:
    linear-gradient(135deg, rgba(6, 73, 51, .92), rgba(20, 122, 85, .82)),
    radial-gradient(circle at 12% 8%, rgba(255,255,255,.22), transparent 28%);
  color: white;
  box-shadow: var(--shadow-soft);
}
.attendance-hero span,
.attendance-hero small,
.attendance-hero p {
  color: rgba(255,255,255,.78);
}
.attendance-hero strong {
  display: block;
  margin: 4px 0;
  font-size: clamp(34px, 5vw, 54px);
  line-height: 1;
}
.attendance-hero p {
  max-width: 360px;
  margin: 0;
  text-align: right;
  font-weight: 750;
}
.attendance-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 14px;
}
.attendance-action-card {
  display: grid;
  grid-template-columns: 58px minmax(0, 1fr);
  gap: 14px;
  align-items: center;
  padding: 18px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.78);
  box-shadow: var(--shadow-soft);
  transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
}
.attendance-action-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}
.attendance-action-card i {
  width: 58px;
  height: 58px;
  display: grid;
  place-items: center;
  border-radius: 8px;
  font-style: normal;
  font-weight: 950;
}
.attendance-action-card.green i { background: var(--green-soft); color: var(--green); }
.attendance-action-card.red i { background: var(--red-soft); color: var(--red); }
.attendance-action-card.blue i { background: rgba(46,111,174,.14); color: var(--blue); }
.attendance-action-card strong,
.attendance-action-card small,
.attendance-action-card em {
  display: block;
}
.attendance-action-card small {
  margin-top: 4px;
  color: var(--muted);
}
.attendance-action-card em {
  grid-column: 2;
  color: var(--green);
  font-style: normal;
  font-size: 13px;
  font-weight: 850;
}
.attendance-status-list {
  display: grid;
  gap: 12px;
}
.attendance-status-list div,
.attendance-status-list a {
  display: grid;
  grid-template-columns: 14px minmax(0, 1fr) auto;
  gap: 10px;
  align-items: center;
  padding: 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.58);
  transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease;
}
.attendance-status-list a:hover {
  transform: translateY(-1px);
  border-color: rgba(20, 122, 85, .34);
  box-shadow: 0 12px 28px rgba(20, 36, 31, .10);
}
.status-dot {
  width: 12px;
  height: 12px;
  border-radius: 999px;
  background: #9aa7a2;
}
.status-dot.done { background: var(--green); }
.status-dot.field { background: var(--blue); }
.status-dot.neutral { background: #a8b4af; }
.attendance-status-list em {
  color: var(--muted);
  font-style: normal;
  font-size: 13px;
  font-weight: 750;
}
.attendance-form-shell {
  display: grid;
  place-items: start center;
}
.attendance-phone {
  width: min(100%, 620px);
}
.attendance-notice {
  display: grid;
  gap: 6px;
  margin-bottom: 18px;
  padding: 14px;
  border-radius: 8px;
  font-size: 13px;
  font-weight: 750;
}
.attendance-notice p {
  margin: 0;
}
.attendance-notice.green { background: var(--green-soft); color: #11613d; }
.attendance-notice.red { background: var(--red-soft); color: #8a2222; }
.attendance-notice.blue { background: rgba(232,243,255,.85); color: #1d568d; }
.attendance-time {
  margin-bottom: 18px;
}
.attendance-time span,
.attendance-time small {
  display: block;
  color: var(--muted);
  font-weight: 750;
}
.attendance-time strong {
  display: block;
  margin: 4px 0;
  font-size: 34px;
  line-height: 1;
}
.map-preview {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  align-items: center;
  min-height: 76px;
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background:
    linear-gradient(135deg, rgba(255,255,255,.82), rgba(232,243,255,.62)),
    repeating-linear-gradient(45deg, rgba(46,111,174,.08) 0 8px, transparent 8px 18px);
}
.map-preview a {
  color: var(--blue);
  font-weight: 900;
}
.camera-upload {
  display: grid;
  gap: 8px;
  padding: 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.64);
}
.camera-trigger {
  justify-content: center;
}
.camera-upload small {
  color: var(--muted);
  font-weight: 700;
}
.sr-only-file {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
}
.selfie-preview,
.attendance-selfie {
  width: 100%;
  max-height: 340px;
  object-fit: cover;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.74);
}
.attendance-submit.red {
  background: linear-gradient(135deg, #ef3b3b, #bf2e2e);
  box-shadow: 0 14px 28px rgba(200,67,67,.22);
}
.attendance-submit.blue {
  background: linear-gradient(135deg, #2d76d6, #1d5bb0);
  box-shadow: 0 14px 28px rgba(46,111,174,.22);
}
.attendance-detail-card {
  display: grid;
  gap: 14px;
}
.admin-map {
  min-height: 58px;
}
.selfie-link {
  display: inline-block;
  justify-self: start;
}
.attendance-selfie {
  max-width: 420px;
  max-height: none;
  object-fit: contain;
  cursor: pointer;
}

.pagination {
  margin-top: 16px;
}

.pagination nav {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}

.leave-form-title {
  padding: 16px;
  border: 1px solid rgba(189, 139, 46, .24);
  border-radius: 8px;
  background: linear-gradient(135deg, rgba(255, 246, 224, .72), rgba(255,255,255,.7));
  text-align: center;
}

.leave-form-title strong,
.leave-form-title span {
  display: block;
}

.leave-form-title strong {
  text-transform: uppercase;
  font-size: 16px;
}

.leave-form-title span {
  margin-top: 4px;
  color: var(--muted);
  font-size: 13px;
  font-weight: 750;
}

.soft-alert {
  display: grid;
  gap: 4px;
  padding: 13px 14px;
  border: 1px solid rgba(189, 139, 46, .32);
  border-radius: 8px;
  background: rgba(255, 246, 224, .7);
  color: #5f3b00;
  font-size: 13px;
}

.segmented-options {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.segmented-options label {
  position: relative;
}

.segmented-options input {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

.segmented-options label span {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 42px;
  min-width: 96px;
  margin: 0;
  padding: 8px 14px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.72);
  color: var(--ink);
  font-size: 13px;
  font-weight: 850;
  cursor: pointer;
}

.segmented-options input:checked + span {
  border-color: rgba(20,122,85,.32);
  background: var(--green-soft);
  color: #105c3b;
  box-shadow: 0 10px 22px rgba(20, 122, 85, .14);
}

.detail-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
  margin-bottom: 18px;
}

.detail-grid > div {
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.54);
}

.detail-grid span {
  display: block;
  color: var(--muted);
  font-size: 12px;
  font-weight: 850;
  text-transform: uppercase;
  margin-bottom: 6px;
}

.detail-grid p {
  margin: 0;
  line-height: 1.55;
}

.admin-date-editor {
  margin: 18px 0;
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.52);
}

.panel-subhead {
  display: grid;
  gap: 3px;
}

.panel-subhead strong {
  font-size: 15px;
}

.panel-subhead span {
  color: var(--muted);
  font-size: 13px;
}

.approval-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
  margin: 18px 0;
}

.approval-grid form {
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.5);
}

.quick-approval-panel {
  min-width: min(420px, 72vw);
  margin-top: 10px;
  padding: 12px;
  border: 1px solid rgba(20,122,85,.2);
  border-radius: 8px;
  background: linear-gradient(135deg, rgba(223,246,232,.76), rgba(255,255,255,.88));
  box-shadow: 0 16px 34px rgba(20, 36, 31, .12);
}

.quick-approval-panel.danger {
  border-color: rgba(200,67,67,.22);
  background: linear-gradient(135deg, rgba(255,231,227,.82), rgba(255,255,255,.9));
}

.quick-approval-panel textarea {
  min-height: 82px;
  margin-bottom: 10px;
}

.quick-approval-panel .row-actions {
  justify-content: flex-start;
}

.monthly-matrix-wrap {
  max-height: 72vh;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: rgba(255,255,255,.46);
}

.monthly-matrix {
  width: 100%;
  min-width: 1120px;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 12px;
}

.monthly-matrix th,
.monthly-matrix td {
  border-right: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
  text-align: center;
}

.monthly-matrix th {
  position: sticky;
  top: 0;
  z-index: 2;
  padding: 9px 7px;
  background: rgba(255,255,255,.92);
  color: var(--ink);
  backdrop-filter: blur(10px);
}

.monthly-matrix th span,
.monthly-matrix th small {
  display: block;
}

.monthly-matrix th small {
  color: var(--muted);
  font-size: 10px;
  margin-top: 2px;
}

.monthly-matrix .sticky-person {
  position: sticky;
  left: 0;
  z-index: 3;
  min-width: 180px;
  text-align: left;
  background: rgba(255,255,255,.96);
}

.monthly-matrix td.sticky-person {
  padding: 11px 12px;
}

.monthly-matrix td.sticky-person small {
  display: block;
  color: var(--muted);
  margin-top: 3px;
}

.monthly-matrix th.weekend-head {
  color: #97a19d;
  background: rgba(244,246,245,.96);
}

.matrix-cell {
  width: 36px;
  height: 40px;
  padding: 0;
  font-weight: 900;
}

.matrix-cell a,
.matrix-cell span {
  width: 100%;
  height: 100%;
  display: grid;
  place-items: center;
}

.matrix-cell.cuti {
  background: rgba(219, 234, 254, .92);
  color: #1e40af;
}

.matrix-cell.done {
  background: rgba(223, 246, 232, .92);
  color: #11613d;
}

.matrix-cell.done a:hover {
  background: rgba(20,122,85,.14);
}

.matrix-cell.missing {
  background: rgba(255, 231, 227, .92);
  color: #8a2222;
}

.matrix-cell.weekend,
.matrix-cell.future {
  background: rgba(244,246,245,.82);
  color: #9aa6a2;
}

.report-actions {
  justify-content: flex-end;
  position: sticky;
  top: 88px;
  z-index: 8;
  padding: 10px;
  border: 1px solid rgba(255,255,255,.72);
  border-radius: 8px;
  background: rgba(255,255,255,.68);
  box-shadow: var(--shadow-soft);
  backdrop-filter: blur(14px);
}

.report-nav {
  position: relative;
  overflow: hidden;
  gap: 7px;
  will-change: transform, box-shadow;
}

.report-nav::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(120deg, transparent 0%, rgba(255,255,255,.76) 48%, transparent 100%);
  transform: translateX(-130%);
  transition: transform .52s cubic-bezier(.2, .8, .2, 1);
}

.report-nav span {
  position: relative;
  display: inline-block;
  font-size: 20px;
  line-height: 0;
  transition: transform .2s cubic-bezier(.2, .8, .2, 1);
}

.report-nav:hover::before {
  transform: translateX(130%);
}

.report-nav.previous:hover span {
  transform: translateX(-3px);
}

.report-nav.next:hover span {
  transform: translateX(3px);
}

.report-nav:active {
  transform: translateY(0) scale(.98);
}
.report-preview {
  background: linear-gradient(135deg, rgba(20,36,31,.18), rgba(189,139,46,.12)), #d9e0dd;
  padding: 24px; overflow: auto; border-radius: 8px;
  perspective: 1400px;
}

.report-preview.all-pages {
  display: grid;
  gap: 24px;
}

.report-preview.all-pages .report-sheet {
  page-break-after: always;
  break-after: page;
}

.report-preview.all-pages .report-sheet:last-child {
  page-break-after: auto;
  break-after: auto;
}

.report-sheet {
  width: 1120px; min-height: 790px; background: white; color: #111; margin: 0 auto;
  padding: 28px 42px 26px; font-family: Arial, Helvetica, sans-serif;
  box-shadow: 0 18px 42px rgba(0, 0, 0, .22);
  transform-origin: center;
  will-change: transform, opacity;
  animation: reportSettle .28s cubic-bezier(.2, .8, .2, 1) both;
}
.report-title { text-align: center; font-weight: 700; font-size: 13px; line-height: 1.35; margin-bottom: 16px; }
.report-meta { display: grid; grid-template-columns: 1fr 1fr; gap: 42px; margin-bottom: 8px; font-size: 12px; }
.meta-line { display: grid; grid-template-columns: 88px 12px 1fr; min-height: 18px; }
.report-columns { display: grid; grid-template-columns: 1fr 1fr; gap: 34px; }
.report-column { min-width: 0; }
.report-column .report-table { width: 100%; }
.report-table { width: 100%; border-collapse: collapse; table-layout: fixed; font-size: 10px; }
.report-table th, .report-table td { border: 1px solid #1d2623; height: 28px; padding: 3px 5px; text-align: center; vertical-align: middle; overflow: hidden; }
.report-table th { text-align: center; font-size: 9px; height: 22px; }
.report-table .no-col { width: 36px; text-align: center; }
.report-table .time-col { width: 72px; }
.report-table .note-col { width: 92px; }
.report-table td:nth-child(3) { text-align: left; }
.report-task-text { display: block; max-height: 1.2em; overflow: hidden; line-height: 1.15; white-space: nowrap; font-size: 12px; }
.signature-row { display: grid; grid-template-columns: 1fr 1fr; gap: 34px; margin-top: 22px; text-align: center; font-size: 11px; }
.signature-block { min-height: 104px; display: flex; flex-direction: column; justify-content: space-between; }
.signature-name { font-weight: 700; text-decoration: underline; }
.signature-block .signature-name { margin-top: 68px; }
.signature-image {
  display: block;
  width: 150px;
  height: 48px;
  object-fit: contain;
  margin: 14px auto -58px;
}

.report-preview.slide-in-right .report-sheet {
  animation: reportSlideInRight .26s cubic-bezier(.2, .8, .2, 1) both;
}

.report-preview.slide-in-left .report-sheet {
  animation: reportSlideInLeft .26s cubic-bezier(.2, .8, .2, 1) both;
}

.report-preview.slide-out-left .report-sheet {
  animation: reportSlideOutLeft .17s cubic-bezier(.4, 0, 1, 1) both;
}

.report-preview.slide-out-right .report-sheet {
  animation: reportSlideOutRight .17s cubic-bezier(.4, 0, 1, 1) both;
}

@keyframes reportSettle {
  from { opacity: .88; transform: translateY(10px) scale(.992); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

@keyframes reportSlideInRight {
  from { opacity: 0; transform: translate3d(54px, 0, 0) rotateY(-2deg) scale(.992); }
  to { opacity: 1; transform: translate3d(0, 0, 0) rotateY(0) scale(1); }
}

@keyframes reportSlideInLeft {
  from { opacity: 0; transform: translate3d(-54px, 0, 0) rotateY(2deg) scale(.992); }
  to { opacity: 1; transform: translate3d(0, 0, 0) rotateY(0) scale(1); }
}

@keyframes reportSlideOutLeft {
  from { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
  to { opacity: 0; transform: translate3d(-42px, 0, 0) scale(.992); }
}

@keyframes reportSlideOutRight {
  from { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }
  to { opacity: 0; transform: translate3d(42px, 0, 0) scale(.992); }
}

/* Notification Bell & Dropdown */
.notif-wrap {
  position: relative;
  display: flex;
  align-items: center;
}

.notif-bell {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border: 0;
  border-radius: 10px;
  background: rgba(13, 111, 75, .07);
  color: #0d6f4b;
  cursor: pointer;
  transition: background .15s ease, color .15s ease, transform .12s ease;
  outline: none;
}

.notif-bell:hover {
  background: rgba(13, 111, 75, .08);
  color: #0d6f4b;
}

.notif-bell.active {
  background: rgba(13, 111, 75, .12);
  color: #0d6f4b;
}

.notif-bell svg {
  position: relative;
  z-index: 1;
}

.notif-badge {
  position: absolute;
  top: 3px;
  right: 3px;
  z-index: 2;
  min-width: 17px;
  height: 17px;
  padding: 0 4px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: #d63c3c;
  color: #fff;
  font-size: 10px;
  font-weight: 800;
  border-radius: 999px;
  line-height: 1;
  box-shadow: 0 0 0 2px #fff;
  transform: scale(0);
  animation: badgePop .3s cubic-bezier(.34, 1.56, .64, 1) forwards;
}

@keyframes badgePop {
  from { transform: scale(0); }
  to { transform: scale(1); }
}

.notif-dropdown {
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  width: 360px;
  max-height: 420px;
  background: #fff;
  border-radius: 14px;
  box-shadow: 0 20px 60px rgba(8, 30, 24, .16), 0 0 0 1px rgba(0,0,0,.04);
  display: flex;
  flex-direction: column;
  opacity: 0;
  transform: translateY(-6px) scale(.97);
  pointer-events: none;
  transition: opacity .22s ease, transform .22s cubic-bezier(.22, .8, .22, 1);
  z-index: 100;
  overflow: hidden;
}

.notif-dropdown.open {
  opacity: 1;
  transform: translateY(0) scale(1);
  pointer-events: auto;
}

.notif-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 16px 10px;
  border-bottom: 1px solid rgba(0,0,0,.06);
}

.notif-header strong {
  font-size: 14px;
  color: #1d2623;
}

.notif-mark-all {
  border: 0;
  background: none;
  color: #0d6f4b;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  padding: 4px 8px;
  border-radius: 6px;
  transition: background .12s ease;
}

.notif-mark-all:hover {
  background: rgba(13, 111, 75, .08);
}

.notif-list {
  flex: 1;
  overflow-y: auto;
  padding: 4px 0;
  scrollbar-width: thin;
}

.notif-empty {
  padding: 36px 16px;
  text-align: center;
  color: #889f97;
  font-size: 13px;
}

.notif-item {
  display: grid;
  grid-template-columns: 34px minmax(0, 1fr);
  gap: 10px;
  padding: 10px 16px;
  cursor: pointer;
  transition: background .12s ease;
  align-items: start;
}

.notif-item:hover {
  background: rgba(13, 111, 75, .04);
}

.notif-item.unread {
  background: rgba(13, 111, 75, .06);
  border-left: 3px solid #0d6f4b;
  padding-left: 13px;
}

.notif-item.unread:hover {
  background: rgba(13, 111, 75, .09);
}

.notif-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: 10px;
  background: rgba(13, 111, 75, .08);
  font-size: 14px;
  line-height: 1;
}

.notif-item.unread .notif-icon {
  background: rgba(13, 111, 75, .14);
}

.notif-content {
  min-width: 0;
}

.notif-title {
  font-size: 13px;
  font-weight: 600;
  color: #1d2623;
  line-height: 1.2;
  margin-bottom: 2px;
}

.notif-body {
  font-size: 12px;
  color: #5a7368;
  line-height: 1.3;
  margin-bottom: 3px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.notif-time {
  font-size: 11px;
  color: #889f97;
}

@media (max-width: 640px) {
  .notif-dropdown {
    position: fixed;
    top: 72px;
    left: 10px;
    right: 10px;
    width: auto;
    max-height: calc(100vh - 100px);
    box-shadow: 0 20px 60px rgba(8, 30, 24, .24);
  }
}

.topbar-right {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-left: auto;
}

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

@media (max-width: 920px) {
  .app-shell {
    display: block;
  }
  .app-sidebar {
    position: fixed;
    inset: 0 auto 0 0;
    width: min(310px, 86vw);
    transform: translateX(-105%);
    transition: transform .22s ease;
  }
  body.sidebar-open .app-sidebar {
    transform: translateX(0);
  }
  .sidebar-backdrop {
    position: fixed;
    inset: 0;
    z-index: 45;
    display: block;
    background: rgba(10, 24, 19, .48);
    opacity: 0;
    pointer-events: none;
    transition: opacity .18s ease;
    backdrop-filter: blur(5px);
  }
  body.sidebar-open .sidebar-backdrop {
    opacity: 1;
    pointer-events: auto;
  }
  .content-topbar {
    min-height: 64px;
    padding: 10px 14px;
  }
  .sidebar-toggle {
    display: inline-flex;
  }
  .topbar-context {
    display: none;
  }
  .page-heading {
    align-items: flex-start;
    flex-direction: column;
  }
  .page-actions {
    width: 100%;
    justify-content: flex-start;
  }
  .page-actions .primary-action,
  .page-actions .ghost-action {
    flex: 1 1 180px;
  }
  .dashboard-board,
  .dashboard-board.user-board {
    grid-template-columns: 1fr;
  }
  .modern-stat {
    grid-template-columns: 46px minmax(0, 1fr);
  }
  .modern-stat i {
    width: 46px;
    height: 46px;
    border-radius: 14px;
  }
  .dashboard-grid, .summary-strip, .profile-grid, .detail-grid, .approval-grid, .settings-grid, .holiday-sync-form { grid-template-columns: 1fr; }
  .attendance-grid { grid-template-columns: 1fr; }
  .attendance-hero {
    align-items: flex-start;
    flex-direction: column;
  }
  .attendance-hero p {
    max-width: none;
    text-align: left;
  }
  .admin-filter-bar { grid-template-columns: 1fr; }
  .task-row { grid-template-columns: 1fr; }
  .topbar { align-items: flex-start; flex-direction: column; }
}

@media (max-width: 640px) {
  body {
    background:
      linear-gradient(120deg, rgba(13, 111, 75, .42) 0 34%, transparent 34% 100%),
      linear-gradient(286deg, rgba(44, 75, 82, .24) 0 25%, transparent 25% 100%),
      linear-gradient(180deg, rgba(112, 178, 229, .34) 0%, rgba(245, 250, 248, .78) 44%, rgba(255, 248, 231, .88) 100%),
      #edf5f1;
  }
  body::before {
    background-size: 32px 32px, 32px 32px, 210px 100%;
    opacity: .72;
  }
  body::after {
    opacity: .58;
  }
  .auth-shell {
    align-items: center;
    padding: 18px;
  }
  .auth-shell::before {
    left: -34vw;
    bottom: -18vh;
    width: 92vw;
    height: 72vh;
    opacity: .58;
    transform: skewX(-6deg);
  }
  .auth-shell::after {
    right: -24vw;
    top: 5vh;
    width: 64vw;
    height: 64vh;
    opacity: .38;
  }
  .auth-panel {
    width: 100%;
    padding: 26px 20px;
    box-shadow: 0 26px 70px rgba(8, 58, 43, .24), 0 1px 0 rgba(255,255,255,.88) inset;
  }
  .brand-lockup {
    align-items: flex-start;
    gap: 12px;
  }
  .brand-mark {
  img.brand-mark {
    width: 44px;
    height: 44px;
  }
    width: 44px;
    height: 44px;
    font-size: 20px;
  }
  h1 {
    font-size: 34px;
  }
  .eyebrow {
    font-size: 10px;
    line-height: 1.25;
  }
  .topbar {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 42px;
    align-items: start;
    padding: 14px 16px;
    gap: 14px;
  }
  .topbar-title {
    width: 100%;
    align-items: flex-start;
    grid-column: 1;
    min-width: 0;
  }
  .topbar-toggle {
    display: inline-flex;
    grid-column: 2;
    grid-row: 1;
    justify-self: end;
  }
  .topbar-title strong {
    font-size: 17px;
  }
  .topbar-title small {
    font-size: 12px;
    line-height: 1.35;
  }
  .topbar-actions {
    width: 100%;
    grid-column: 1 / -1;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
    max-height: 280px;
    opacity: 1;
    overflow: hidden;
    transform: translateY(0);
    transition: max-height .24s ease, opacity .18s ease, transform .18s ease, margin .18s ease;
  }
  .topbar-actions form,
  .topbar-actions .ghost-action {
    width: 100%;
  }
  .topbar.is-collapsed {
    gap: 8px;
  }
  .topbar.is-collapsed .topbar-actions {
    max-height: 0;
    margin-top: -8px;
    opacity: 0;
    pointer-events: none;
    transform: translateY(-6px);
  }
  .topbar.is-collapsed .topbar-toggle span {
    transform: translateY(-2px) rotate(45deg);
  }
  .workspace {
    padding: 14px;
    gap: 14px;
  }
  .content-topbar {
    align-items: center;
  }
  .user-chip {
    max-width: calc(100vw - 104px);
  }
  .user-chip span:last-child {
    min-width: 0;
  }
  .user-chip strong,
  .user-chip small {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .summary-strip {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
  }
  .attendance-hero {
    padding: 18px;
  }
  .attendance-action-card {
    grid-template-columns: 50px minmax(0, 1fr);
    padding: 14px;
  }
  .attendance-action-card i {
    width: 50px;
    height: 50px;
  }
  .attendance-status-list div {
    grid-template-columns: 12px minmax(0, 1fr);
  }
  .attendance-status-list em {
    grid-column: 2;
  }
  .attendance-time strong {
    font-size: 30px;
  }
  .map-preview {
    align-items: flex-start;
    flex-direction: column;
  }
  .attendance-selfie {
    max-width: 100%;
  }
  .page-heading h1 {
    font-size: 30px;
  }
  .quick-grid {
    grid-template-columns: 1fr;
  }
  .mini-item {
    grid-template-columns: 34px minmax(0, 1fr);
  }
  .mini-item .status-pill {
    grid-column: 2;
    justify-self: start;
  }
  .role-progress {
    grid-template-columns: 1fr 62px;
  }
  .role-progress div {
    grid-column: 1 / -1;
    grid-row: 2;
  }
  .stat {
    min-height: 96px;
    padding: 14px;
  }
  .stat strong {
    font-size: 28px;
  }
  .panel {
    padding: 16px;
  }
  .panel-header {
    align-items: flex-start;
    flex-direction: column;
  }
  .panel-header h2 {
    font-size: 25px;
    line-height: 1.08;
  }
  .admin-toolbar {
    width: 100%;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
  }
  .admin-toolbar .primary-action,
  .admin-toolbar .month-nav {
    grid-column: 1 / -1;
  }
  .admin-toolbar > .ghost-action,
  .admin-toolbar > .primary-action {
    width: 100%;
  }
  .month-nav {
    width: 100%;
    display: grid;
    grid-template-columns: 42px minmax(0, 1fr) 42px;
  }
  .month-nav span {
    min-width: 0;
  }
  .month-jump-form,
  .admin-month-jump {
    min-width: 0;
    width: 100%;
    grid-template-columns: minmax(0, 1fr) 78px;
  }
  .leave-calendar-panel .month-nav {
    grid-template-columns: 42px minmax(0, 1fr) 42px;
  }
  .leave-calendar-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .leave-weekday {
    display: none;
  }
  .leave-calendar-day {
    min-height: 116px;
  }
  .leave-calendar-day.empty {
    display: none;
  }
  .leave-list-card {
    grid-template-columns: 38px minmax(0, 1fr);
  }
  .leave-list-card > span:last-child {
    grid-column: 2;
  }
  .admin-filter-bar {
    padding: 12px;
  }
  .filter-tabs {
    gap: 8px;
  }
  .filter-chip {
    min-height: 40px;
    padding: 8px 12px;
    font-size: 13px;
  }
  .admin-filter-bar .primary-action,
  .admin-filter-bar .ghost-action {
    width: 100%;
  }
  .report-actions {
    position: static;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
    padding: 12px;
  }
  .report-actions .primary-action {
    grid-column: 1 / -1;
  }
  .report-actions .ghost-action,
  .report-actions .primary-action {
    width: 100%;
  }
  .report-preview {
    padding: 10px;
    overflow: auto;
  }
  .report-preview.all-pages {
    display: block;
  }
  .report-preview .report-sheet {
    margin: 0;
    zoom: .32;
  }
  .report-preview.all-pages .report-sheet {
    margin-bottom: 24px;
  }
  .monthly-matrix-wrap {
    max-height: 62vh;
  }
}

@media (max-width: 1180px) {
  .attendance-kpi-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .attendance-admin-board {
    grid-template-columns: 1fr;
  }
  .attendance-side-card {
    position: static;
  }
  .attendance-toolbar {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (max-width: 720px) {
  .attendance-admin-heading .page-actions {
    display: grid;
    grid-template-columns: 1fr;
    width: 100%;
  }
  .attendance-admin-heading .page-actions > *,
  .attendance-export-action,
  .inline-date-form,
  .inline-date-form input,
  .attendance-info-banner,
  .full-action {
    width: 100%;
  }
  .attendance-kpi-grid {
    grid-template-columns: 1fr;
  }
  .attendance-kpi {
    min-height: 104px;
  }
  .attendance-toolbar {
    padding: 12px;
  }
  .attendance-table-panel {
    overflow-x: auto;
  }
  .attendance-table {
    min-width: 860px;
  }
  .attendance-side-card {
    padding: 16px;
  }
  .attendance-profile {
    display: grid;
    grid-template-columns: 52px minmax(0, 1fr);
  }
  .detail-list div {
    grid-template-columns: 1fr;
    gap: 4px;
  }
  .attendance-info-banner {
    align-items: flex-start;
  }
}

@media print {
  html, body {
    background: white !important;
    color: #000 !important;
  }
  body::before,
  body::after,
  .auth-shell::before,
  .auth-shell::after {
    display: none !important;
    content: none !important;
  }
  .topbar,
  .app-sidebar,
  .content-topbar,
  .sidebar-backdrop,
  .report-actions,
  .notice {
    display: none !important;
  }
  .app-shell,
  .content-shell {
    display: block !important;
  }
  .workspace {
    width: auto;
    max-width: none;
    margin: 0;
    padding: 0;
    display: block;
    visibility: hidden;
  }
  #print-area {
    position: absolute;
    inset: 0 auto auto 0;
    width: 100%;
    padding: 0;
    color: #000 !important;
    background: white !important;
    overflow: visible;
    border-radius: 0;
    visibility: visible;
  }
  #print-area * {
    visibility: visible;
  }
  .report-preview {
    background: white !important;
    box-shadow: none !important;
    filter: none !important;
    opacity: 1 !important;
  }
  .report-sheet {
    width: 278mm;
    height: 190mm;
    min-height: 0;
    position: relative;
    color: #000 !important;
    background: white !important;
    box-shadow: none;
    margin: 0 auto;
    padding: 0;
    overflow: hidden;
    animation: none;
    page-break-inside: avoid;
    break-inside: avoid;
    filter: none !important;
    opacity: 1 !important;
    zoom: 1 !important;
  }
  .report-sheet * {
    filter: none !important;
    opacity: 1 !important;
  }
  .report-preview.all-pages {
    display: block;
  }
  .report-preview.all-pages .report-sheet {
    margin-bottom: 0;
    page-break-after: always;
    break-after: page;
  }
  .report-preview.all-pages .report-sheet:last-child {
    page-break-after: auto;
    break-after: auto;
  }
  .report-title {
    position: absolute;
    top: 3mm;
    left: 9mm;
    right: 9mm;
    font-size: 12px;
    line-height: 1.22;
    margin: 0;
  }
  .report-meta {
    position: absolute;
    top: 20mm;
    left: 9mm;
    right: 9mm;
    gap: 10mm;
    margin: 0;
    font-size: 10px;
  }
  .meta-line {
    grid-template-columns: 24mm 4mm 1fr;
    min-height: 4.6mm;
  }
  .report-columns {
    position: absolute;
    top: 34mm;
    left: 9mm;
    right: 9mm;
    gap: 9mm;
  }
  .report-column {
    min-width: 0;
  }
  .report-table {
    font-size: 10px;
  }
  .report-table th,
  .report-table td {
    height: 6.8mm;
    padding: .6mm 1.1mm;
    text-align: center;
    vertical-align: middle;
  }
  .report-table th {
    height: 5mm;
    font-size: 9px;
  }
  .report-table .no-col {
    width: 9mm;
  }
  .report-table .time-col {
    width: 21mm;
  }
  .report-table .note-col {
    width: 19mm;
  }
  .report-table td:nth-child(2) {
    white-space: nowrap;
    font-size: 8px;
  }
  .report-table td:nth-child(3) {
    text-align: left;
  }
  .report-task-text {
    max-height: 1.2em;
    line-height: 1.15;
    white-space: nowrap;
    font-size: 12px;
  }
  .signature-row {
    position: absolute;
    top: 147mm;
    left: 9mm;
    right: 9mm;
    gap: 9mm;
    margin: 0;
    font-size: 11px;
  }
  .signature-block {
    min-height: 24mm;
    display: block;
  }
  .signature-block .signature-name {
    margin-top: 0;
    font-size: 11px;
  }
  .signature-image {
    width: 44mm;
    height: 17mm;
    margin: 2mm auto -17mm;
  }
  .signature-block > div:last-child {
    margin-top: 20mm;
    page-break-inside: avoid;
    break-inside: avoid;
  }
  .signature-block:nth-child(2) > div:last-child {
    margin-top: 23mm;
  }
  @page { size: A4 landscape; margin: 8mm; }
}

/* ===== Chart Styles ===== */


.chart-bar-wrap {
  width: 100%;
  height: 220px;
  padding: 8px 12px 4px;
}

.chart-line-wrap {
  width: 100%;
  height: 260px;
  padding: 8px 12px 4px;
}

.chart-panel-wide {
  min-height: 280px;
}

.chart-panel-line {
  grid-column: 1 / -1;
  margin-block: 8px;
}

.dashboard-board .panel.chart-panel-line {
  margin-top: 0;
}
@media (max-width: 768px) {
  .chart-panel-wide {
    grid-column: 1 !important;
  }
  .chart-bar-wrap,
  .chart-line-wrap {
    height: 200px;
  }
  .chart-donut-box {
    width: 120px;
    height: 120px;
  }
  .chart-donut-label strong {
    font-size: 20px;
  }
}

/* ===== Dashboard Split Layout (Table + Quick Action Sidebar) ===== */


/* ===== Quick Action Side Panel in Dashboard Board ===== */
.quick-side-panel {
  display: flex;
  flex-direction: column;
}

.quick-side-panel .sidebar-quick-grid {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 4px 16px 20px;
  flex: 1;
}

.quick-side-panel .sidebar-quick-grid .quick-card {
  width: 100%;
  margin: 0;
}

.quick-side-panel .sidebar-quick-grid .quick-card span {
  font-size: 11px;
}

/* ===== Admin Table Progress Bar ===== */
.admin-progress-cell {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 130px;
}

.admin-progress-bar {
  flex: 1;
  max-width: 100px;
  height: 8px;
  background: #e2e8f0;
  border-radius: 4px;
  overflow: hidden;
}

.admin-progress-bar i {
  display: block;
  height: 100%;
  border-radius: 4px;
  transition: width 0.4s ease;
}

.admin-progress-label {
  font-size: 12px;
  font-weight: 600;
  color: #33433d;
  white-space: nowrap;
}

.admin-table td strong[style] {
  font-size: 14px;
}

@media (max-width: 768px) {
  .admin-progress-cell {
    min-width: auto;
    flex-direction: column;
    gap: 4px;
  }
  .admin-progress-bar {
    max-width: 80px;
  }
}


.chart-donut-label {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}

.chart-donut-label strong {
  font-size: 24px;
  font-weight: 800;
  color: var(--text-primary, #1a2e26);
  line-height: 1.1;
}

.chart-donut-label span {
  font-size: 11px;
  color: var(--text-muted, #6b7b73);
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

/* ===== Rekap Bulanan Panel ===== */
.rekap-panel {
  min-height: auto;
}

.rekap-grid {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  padding: 8px 16px 20px;
}

.rekap-chart-area {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 40px;
}

.rekap-chart-area .chart-donut-box {
  position: relative;
  width: 120px;
  height: 120px;
}

.rekap-chart-area .chart-donut-label strong {
  font-size: 22px;
}
.rekap-chart-area .chart-donut-label {
  padding-top: 6px;
}

.rekap-chart-area .chart-donut-legend {
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  gap: 20px;
  margin-top: 4px;
}

.rekap-chart-area .chart-donut-legend span {
  font-size: 14px;
  font-weight: 700;
}

.rekap-stats-col {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  flex: 1;
}

.rekap-stat {
  display: flex;
  align-items: center;
  gap: 10px;
  background: #f8faf9;
  border-radius: 8px;
  padding: 10px 12px;
}


.rekap-stat-icon {
  width: 36px;
  height: 36px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  font-size: 16px;
  font-weight: 700;
  color: #fff;
}

.rekap-stat-icon i {
  font-size: 13px;
  font-weight: 800;
  font-style: normal;
  line-height: 1;
}

.rekap-stat-icon.blue  { background: #3b82f6; }
.rekap-stat-icon.green { background: #0d6f4b; }
.rekap-stat-icon.gold  { background: #e8a838; }
.rekap-stat-icon.info  { background: #06b6d4; }

.rekap-stat div {
  display: flex;
  flex-direction: column;
  line-height: 1.2;
}

.rekap-stat strong {
  font-size: 16px;
  font-weight: 700;
  color: #1a2e26;
}

.rekap-stat small {
  font-size: 10px;
  color: #6b7b73;
  text-transform: uppercase;
  letter-spacing: 0.3px;
}

@media (max-width: 768px) {
  .rekap-stats-col {
    grid-template-columns: 1fr 1fr;
    width: 100%;
  }
}

@media (max-width: 480px) {
  .rekap-stats-col {
    grid-template-columns: 1fr;
  }
}

/* ───────────────────────────────────────────────
   FACE-LIFT: UI ENHANCEMENTS (opt-in)
   Dihapus? git checkout -- public/css/app.css
   ─────────────────────────────────────────────── */

/* 1. SIDEBAR — lebih premium & halus */
.app-sidebar {
  background:
    radial-gradient(circle at 0% 10%, rgba(24, 177, 105, .25), transparent 35%),
    radial-gradient(circle at 100% 90%, rgba(16, 185, 129, .12), transparent 40%),
    linear-gradient(165deg, #042a1e 0%, #0a3d2e 45%, #0d4f3a 100%);
  transition: box-shadow .4s ease;
}

.sidebar-link {
  position: relative;
  transition: all .25s cubic-bezier(.4, 0, .2, 1);
  overflow: hidden;
}

.sidebar-link::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(135deg, rgba(255,255,255,.08), transparent);
  opacity: 0;
  transition: opacity .25s ease;
}

.sidebar-link:hover::before,
.sidebar-link.active::before {
  opacity: 1;
}

.sidebar-link:hover {
  transform: translateX(3px);
  border-color: rgba(255,255,255,.22);
  box-shadow: 0 4px 16px rgba(0,0,0,.18);
}

.sidebar-link.active {
  border-color: rgba(24, 177, 105, .4);
  background: rgba(24, 177, 105, .18);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.08), 0 4px 16px rgba(24, 177, 105, .12);
}

.sidebar-link.active span {
  background: rgba(24, 177, 105, .3);
  color: #fff;
}

.sidebar-link span {
  transition: all .25s ease;
  font-weight: 800;
}

.sidebar-group p {
  letter-spacing: .8px;
  font-size: 10px;
}

/* Sidebar logout button */
.sidebar-logout button {
  transition: all .25s ease;
}

.sidebar-logout button:hover {
  background: rgba(255,255,255,.2);
  border-color: rgba(255,255,255,.3);
  transform: translateY(-1px);
}

/* 2. STAT CARDS — animasi masuk & shadow premium */
.summary-strip {
  perspective: 800px;
}

.modern-stat {
  transition: all .3s cubic-bezier(.4, 0, .2, 1);
  animation: statPopIn .5s ease backwards;
  animation-delay: calc(var(--stat-index, 0) * .08s);
}

.modern-stat:nth-child(1) { --stat-index: 1; }
.modern-stat:nth-child(2) { --stat-index: 2; }
.modern-stat:nth-child(3) { --stat-index: 3; }
.modern-stat:nth-child(4) { --stat-index: 4; }
.modern-stat:nth-child(5) { --stat-index: 5; }

.modern-stat:hover {
  transform: translateY(-3px);
  box-shadow: 0 12px 32px rgba(20, 36, 31, .12);
  border-color: rgba(20, 122, 85, .2);
}

.modern-stat i {
  transition: all .3s ease;
}

.modern-stat:hover i {
  transform: scale(1.06);
}

@keyframes statPopIn {
  from {
    opacity: 0;
    transform: translateY(16px) scale(.96);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

/* 3. PANEL / CARD — hover lift premium */
.panel {
  transition: all .3s cubic-bezier(.4, 0, .2, 1);
}

.panel:hover {
  box-shadow: 0 8px 30px rgba(20, 36, 31, .06);
}

.insight-panel {
  transition: all .3s cubic-bezier(.4, 0, .2, 1);
}

/* 4. TOMBOL — micro-animasi */
.primary-action {
  position: relative;
  overflow: hidden;
  transition: all .25s cubic-bezier(.4, 0, .2, 1);
}

.primary-action::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, rgba(255,255,255,.15), transparent 50%);
  opacity: 0;
  transition: opacity .25s ease;
}

.primary-action:hover::after {
  opacity: 1;
}

.primary-action:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 24px rgba(20, 122, 85, .28);
}

.primary-action:active {
  transform: translateY(0) scale(.98);
}

.ghost-action {
  transition: all .2s cubic-bezier(.4, 0, .2, 1);
}

.ghost-action:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(20, 36, 31, .06);
}

.ghost-action:active {
  transform: translateY(0);
}

/* Danger action */
.danger-action {
  transition: all .2s ease;
}

.danger-action:hover {
  transform: translateY(-1px);
  box-shadow: 0 6px 18px rgba(200, 67, 67, .22);
}

.danger-action:active {
  transform: translateY(0) scale(.97);
}

/* Icon action */
.icon-action {
  transition: all .25s ease;
}

.icon-action:hover {
  transform: translateY(-1px) scale(1.08);
}

.icon-action:active {
  transform: scale(.92);
}

/* 5. MINI ITEM — lebih refined */
.mini-item {
  transition: all .25s cubic-bezier(.4, 0, .2, 1);
  position: relative;
}

.mini-item::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(135deg, rgba(255,255,255,.4), transparent 60%);
  opacity: 0;
  transition: opacity .25s ease;
  pointer-events: none;
}

.mini-item:hover::after {
  opacity: 1;
}

a.mini-item:hover {
  transform: translateY(-2px);
  border-color: rgba(20, 122, 85, .35);
  box-shadow: 0 12px 28px rgba(20, 36, 31, .10);
}

/* 6. QUICK CARD — lebih tactile */
.quick-card {
  transition: all .25s cubic-bezier(.4, 0, .2, 1);
  cursor: pointer;
  position: relative;
  overflow: hidden;
}

.quick-card::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(135deg, rgba(255,255,255,.3), transparent 50%);
  opacity: 0;
  transition: opacity .25s ease;
  pointer-events: none;
}

.quick-card:hover::after {
  opacity: 1;
}

.quick-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 10px 28px rgba(20, 36, 31, .10);
}

.quick-card:active {
  transform: translateY(-1px) scale(.98);
}

/* 7. TABEL — hover & visual feedback */
.admin-table tr {
  transition: background .2s ease;
}

.admin-table tbody tr:hover {
  background: rgba(20, 122, 85, .04);
}

.admin-table tbody tr:active {
  background: rgba(20, 122, 85, .08);
}

/* Monthly matrix hover */
.monthly-matrix tbody tr:hover td {
  background: rgba(20, 122, 85, .03);
}

.monthly-matrix .matrix-cell {
  transition: background .15s ease, transform .15s ease;
}

.monthly-matrix .matrix-cell:hover {
  transform: scale(1.12);
  z-index: 2;
  position: relative;
}

.monthly-matrix .matrix-cell.done:hover {
  background: rgba(13, 111, 75, .12);
}

.monthly-matrix .matrix-cell.missing:hover {
  background: rgba(214, 60, 60, .1);
}

/* 8. FILTER CHIP — lebih tactile */
.filter-chip {
  transition: all .25s cubic-bezier(.4, 0, .2, 1);
}

.filter-chip:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(20, 36, 31, .06);
}

.filter-chip.active:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 16px rgba(20, 122, 85, .2);
}

/* 9. CONFIRM DIALOG — animasi masuk */
.confirm-overlay {
  animation: overlayIn .2s ease;
}

.confirm-overlay[hidden] {
  display: none !important;
}

.confirm-dialog {
  animation: dialogSlideIn .3s cubic-bezier(.4, 0, .2, 1);
}

@keyframes overlayIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes dialogSlideIn {
  from {
    opacity: 0;
    transform: translateY(24px) scale(.94);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

/* 10. SCROLLBAR — lebih premium */
.sidebar-nav::-webkit-scrollbar {
  width: 4px;
}

.sidebar-nav::-webkit-scrollbar-track {
  background: transparent;
}

.sidebar-nav::-webkit-scrollbar-thumb {
  background: rgba(255,255,255,.12);
  border-radius: 999px;
}

.sidebar-nav::-webkit-scrollbar-thumb:hover {
  background: rgba(255,255,255,.2);
}

/* Global focus ring */
*:focus-visible {
  outline: 2px solid rgba(20, 122, 85, .5);
  outline-offset: 2px;
  border-radius: 4px;
}

/* Selection */
::selection {
  background: rgba(20, 122, 85, .18);
  color: inherit;
}

/* 11. REKAP STAT — animasi */
.rekap-stat {
  transition: all .25s cubic-bezier(.4, 0, .2, 1);
}

.rekap-stat:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 20px rgba(20, 36, 31, .08);
  background: #f0f7f4;
}

.rekap-stat-icon {
  transition: all .3s ease;
}

.rekap-stat:hover .rekap-stat-icon {
  transform: scale(1.08);
}

/* 12. MONTH NAV — smoother */
.month-nav a {
  transition: all .25s ease;
}

.month-nav a:hover {
  transform: scale(1.12);
}

.month-nav a:active {
  transform: scale(.88);
}

/* 13. PROGRESS BAR — animasi */
.admin-progress-bar i {
  transition: width .6s cubic-bezier(.4, 0, .2, 1);
}

/* 14. STATUS PILL — refined */
.status-pill {
  transition: all .25s ease;
}

.mini-item:hover .status-pill {
  transform: scale(1.04);
}

/* 15. Topbar — refined */
.content-topbar {
  backdrop-filter: blur(24px) saturate(1.2);
  transition: box-shadow .3s ease;
}

/* 16. Avatar — subtle glow */
.avatar {
  transition: all .3s ease;
  position: relative;
}

.avatar::after {
  content: '';
  position: absolute;
  inset: -2px;
  border-radius: inherit;
  border: 2px solid rgba(255,255,255,.3);
  opacity: 0;
  transition: opacity .3s ease;
  pointer-events: none;
}

.mini-item:hover .avatar::after {
  opacity: 1;
}

/* ───────────────────────────────────────────────
   END FACE-LIFT
   ─────────────────────────────────────────────── */

/* ───────────────────────────────────────────────
   ENHANCED MINI ITEMS (Kinerja Terbaru & Cuti)
   ─────────────────────────────────────────────── */

/* Avatar with jabatan color */
.mini-item .avatar.small {
  transition: all .25s ease;
  flex-shrink: 0;
}

.mini-item:hover .avatar.small {
  transform: scale(1.08);
}

/* Preview teks */
.mini-preview {
  display: block;
  margin-top: 3px;
  color: var(--muted, #6b7b73);
  font-size: 11.5px;
  line-height: 1.35;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 180px;
}

/* Meta column (time + status) */
.mini-meta {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 3px;
  flex-shrink: 0;
}

.mini-time {
  font-size: 10.5px;
  color: var(--muted, #6b7b73);
  font-weight: 700;
  white-space: nowrap;
}

.mini-clock {
  font-size: 10.5px;
  color: var(--muted, #6b7b73);
  font-weight: 600;
  white-space: nowrap;
}

/* Status pill inside mini-meta */
.mini-meta .status-pill {
  font-size: 10px;
  padding: 2px 8px;
}

/* Adjust mini-item grid for new layout */
.mini-item {
  grid-template-columns: 34px minmax(0, 1fr) auto;
  gap: 10px;
}

/* Avatar status variants for leave */
.avatar.small.done {
  background: var(--green, #0d6f4b) !important;
}

.avatar.small.missing {
  background: var(--red, #d63c3c) !important;
}

.avatar.small.pending {
  background: var(--gold, #e8a838) !important;
}

/* Leave status label in meta */
.mini-meta .status-pill {
  margin-top: 2px;
}

/* Mobile adjustments */
@media (max-width: 640px) {
  .mini-preview {
    max-width: 120px;
  }

  .mini-meta {
    gap: 2px;
  }
}

/* ───────────────────────────────────────────────
   ENHANCEMENT ROUND 2 — Quick Action, Avatar, Chart, Mobile, Filter
   ─────────────────────────────────────────────── */

/* 1. Quick Action — Icon + Left Accent Bar */
.sidebar-quick-grid .quick-card {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  position: relative;
  overflow: hidden;
}

.sidebar-quick-grid .quick-card::before {
  content: '';
  position: absolute;
  left: 0;
  top: 8px;
  bottom: 8px;
  width: 3px;
  border-radius: 0 4px 4px 0;
  transition: top .2s ease, bottom .2s ease;
}

.sidebar-quick-grid .quick-card:hover::before {
  top: 3px;
  bottom: 3px;
}

.sidebar-quick-grid .quick-card.green::before { background: var(--green, #0d6f4b); }
.sidebar-quick-grid .quick-card.gold::before  { background: var(--gold, #e8a838); }
.sidebar-quick-grid .quick-card.blue::before  { background: var(--blue, #3b82f6); }
.sidebar-quick-grid .quick-card.red::before   { background: var(--red, #d63c3c); }

.quick-icon {
  font-size: 22px;
  line-height: 1;
  flex-shrink: 0;
  width: 34px;
  height: 34px;
  display: grid;
  place-items: center;
  border-radius: 10px;
  background: rgba(255,255,255,.7);
  transition: transform .2s ease;
}

.quick-card:hover .quick-icon {
  transform: scale(1.1);
}

.quick-text {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.quick-text strong {
  font-size: 13.5px;
}

.quick-text span {
  font-size: 11px;
  color: var(--muted, #6b7b73);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.sidebar-quick-grid {
  gap: 8px;
}


/* 2. Table — Avatar Circle + Row Striping */
.admin-user-cell {
  display: flex;
  align-items: center;
  gap: 10px;
}

.admin-avatar {
  width: 30px;
  height: 30px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  color: #fff;
  font-size: 12px;
  font-weight: 800;
  flex-shrink: 0;
  transition: transform .2s ease;
  letter-spacing: .3px;
}

tr:hover .admin-avatar {
  transform: scale(1.12);
}

/* Subtle row striping */
.admin-table tbody tr:nth-child(even) {
  background: rgba(0,0,0,.015);
}

.admin-table tbody tr:hover {
  background: rgba(13,111,75,.04);
}


/* 4. Mobile — Stacking Layout */
@media (max-width: 900px) {
  .dashboard-board {
    grid-template-columns: 1fr;
  }

  .dashboard-board.user-board {
    grid-template-columns: 1fr;
  }

  .rekap-grid {
    grid-template-columns: 1fr;
  }

  .rekap-chart-area {
    flex-direction: column;
    align-items: center;
  }

  .rekap-stats-col {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 8px;
  }

  .quick-side-panel {
    order: 10;
  }

  .chart-panel-wide {
    grid-column: 1 !important;
  }

  .chart-panel-line .chart-line-wrap {
    min-height: 200px;
  }

  /* Mini items stack vertically on small screens */
  .mini-item {
    grid-template-columns: 34px 1fr;
    gap: 8px;
  }

  .mini-meta {
    grid-column: 2;
    flex-direction: row;
    justify-content: flex-start;
    gap: 8px;
    margin-top: 2px;
  }

  .mini-meta .status-pill {
    margin-top: 0;
  }

  /* Admin table scroll horizontal */
  .table-wrap {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }

  .admin-filter-bar {
    flex-wrap: wrap;
  }

  .filter-tabs {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    padding-bottom: 4px;
  }

  .filter-chip {
    white-space: nowrap;
    flex-shrink: 0;
  }

  /* Page heading */
  .page-heading {
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
  }

  .page-actions {
    width: 100%;
    justify-content: flex-start;
  }
}

@media (max-width: 640px) {
  .admin-toolbar {
    flex-wrap: wrap;
    gap: 6px;
  }

  .month-nav {
    width: 100%;
    justify-content: center;
  }

  .admin-progress-cell {
    min-width: 100px;
  }

  .rekap-stat {
    padding: 8px;
  }

  .card.stat {
    padding: 12px;
  }

  .modern-stat i {
    width: 40px;
    height: 40px;
    font-size: 12px;
    border-radius: 14px;
  }

  .modern-stat strong {
    font-size: 16px;
  }

  .admin-toolbar .primary-action,
  .admin-toolbar .ghost-action {
    font-size: 12px;
    padding: 6px 12px;
  }
}


/* 5. Filter Chip — Active State Lebih Jelas */
.filter-tabs {
  display: flex;
  gap: 4px;
  flex-wrap: wrap;
}

.filter-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 6px 14px;
  border-radius: 20px;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--muted, #6b7b73);
  background: rgba(107,123,115,.08);
  border: 1px solid transparent;
  transition: all .2s ease;
  text-decoration: none;
}

.filter-chip:hover {
  background: rgba(107,123,115,.14);
  color: var(--text, #25312d);
}

.filter-chip.active {
  background: rgba(13,111,75,.12);
  color: var(--green, #0d6f4b);
  border-color: rgba(13,111,75,.30);
  box-shadow: 0 0 0 3px rgba(13,111,75,.08);
  position: relative;
}

.filter-chip.active::after {
  content: '';
  position: absolute;
  bottom: -2px;
  left: 30%;
  right: 30%;
  height: 2px;
  background: var(--green, #0d6f4b);
  border-radius: 2px;
}

/* Badge count on filter */
.filter-chip .badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 9px;
  font-size: 10px;
  font-weight: 800;
  line-height: 1;
  background: rgba(107,123,115,.14);
  color: var(--muted, #6b7b73);
}

.filter-chip.active .badge {
  background: rgba(13,111,75,.16);
  color: var(--green, #0d6f4b);
}

/* ───────────────────────────────────────────────
   PJLP DASHBOARD — Quick Action Icons (sama dengan admin)
   ─────────────────────────────────────────────── */
.user-board .quick-grid .quick-card {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  position: relative;
  overflow: hidden;
  min-height: 0;
}

.user-board .quick-grid .quick-card::before {
  content: '';
  position: absolute;
  left: 0;
  top: 8px;
  bottom: 8px;
  width: 3px;
  border-radius: 0 4px 4px 0;
  transition: top .2s ease, bottom .2s ease;
}

.user-board .quick-grid .quick-card:hover::before {
  top: 3px;
  bottom: 3px;
}

.user-board .quick-grid .quick-card.green::before { background: var(--green, #0d6f4b); }
.user-board .quick-grid .quick-card.gold::before  { background: var(--gold, #e8a838); }
.user-board .quick-grid .quick-card.blue::before  { background: var(--blue, #3b82f6); }
.user-board .quick-grid .quick-card.red::before   { background: var(--red, #d63c3c); }


/* ───────────────────────────────────────────────
   SIDEBAR NAV — Refinement
   ─────────────────────────────────────────────── */

/* Right accent glow for active link */
.sidebar-link.active {
  box-shadow: inset 0 1px 0 rgba(255,255,255,.08),
              0 4px 16px rgba(24, 177, 105, .12),
              -3px 0 0 rgba(24, 177, 105, .4);
  border-left: 0;
}

/* Better icon inside active link */
.sidebar-link.active span {
  background: linear-gradient(135deg, rgba(24,177,105,.35), rgba(24,177,105,.20));
  color: #fff;
  transform: scale(1.05);
}

/* Hover: gentle glow + translate */
.sidebar-link:hover {
  transform: translateX(4px);
  box-shadow: 0 4px 20px rgba(0,0,0,.2);
}

/* Link icon hover state */
.sidebar-link:hover span {
  background: rgba(255,255,255,.18);
  transform: scale(1.08);
}

/* Subtle divider between nav groups */
.sidebar-group + .sidebar-group {
  position: relative;
  padding-top: 4px;
}

.sidebar-group + .sidebar-group::before {
  content: '';
  position: absolute;
  top: -8px;
  left: 4px;
  right: 4px;
  height: 1px;
  background: rgba(255,255,255,.08);
  border-radius: 1px;
}

/* Logout button refinement */
.sidebar-logout button {
  width: 100%;
  padding: 11px 10px;
  border-radius: 8px;
  background: rgba(255,255,255,.06);
  border: 1px solid rgba(255,255,255,.08);
  color: rgba(255,255,255,.72);
  font-size: 13px;
  font-weight: 800;
  cursor: pointer;
  transition: all .2s ease;
}

.sidebar-logout button:hover {
  background: rgba(239,68,68,.18);
  border-color: rgba(239,68,68,.3);
  color: #fca5a5;
  transform: translateY(-1px);
}


/* ───────────────────────────────────────────────
   CALENDAR — Refinement
   ─────────────────────────────────────────────── */
.day-cell {
  position: relative;
  transition: all .2s ease;
}

.day-cell.done {
  background: linear-gradient(145deg, #d4f5e4, #b8e9d0);
  border-color: rgba(20,122,85,.30);
  color: #0a4d2e;
  font-weight: 800;
}

.day-cell.missing {
  background: linear-gradient(145deg, #fde8e4, #fccfc4);
  border-color: rgba(200,67,67,.28);
  color: #7a1f1f;
  font-weight: 800;
}

.day-cell.selected {
  outline: 3px solid rgba(189,139,46,.35);
  border-color: var(--gold);
  transform: scale(1.05);
  z-index: 2;
}

.day-cell.done::after {
  content: '';
  position: absolute;
  bottom: 3px;
  left: 50%;
  transform: translateX(-50%);
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--green, #0d6f4b);
  opacity: .6;
}

.day-cell.missing::after {
  content: '';
  position: absolute;
  bottom: 3px;
  left: 50%;
  transform: translateX(-50%);
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--red, #d63c3c);
  opacity: .6;
}


/* ───────────────────────────────────────────────
   MOBILE — PJLP dashboard
   ─────────────────────────────────────────────── */
@media (max-width: 900px) {
  .user-board .quick-grid {
    grid-template-columns: 1fr;
  }

  .user-board .quick-grid .quick-card {
    padding: 10px 12px;
  }

  .day-cell.selected {
    transform: scale(1.03);
  }
}

@media (max-width: 640px) {
  .user-board {
    gap: 12px;
  }

  .user-board .panel.insight-panel {
    min-height: 0;
  }
}

/* ───────────────────────────────────────────────
   ATTENDANCE ADMIN — Seragamkan dengan Dashboard
   ─────────────────────────────────────────────── */


/* Image avatar (foto profil) */
img.admin-avatar {
  object-fit: cover;
  display: inline-block;
}

img.admin-avatar.big {
  object-fit: cover;
  display: inline-block;
}
/* Side panel avatar big */
.admin-avatar.big {
  width: 44px;
  height: 44px;
  font-size: 16px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  color: #fff;
  font-weight: 800;
  flex-shrink: 0;
  letter-spacing: .3px;
}

/* Attendance profile in side panel */
.attendance-profile {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 16px 18px;
  border-bottom: 1px solid var(--line, rgba(0,0,0,.06));
}

.attendance-profile strong {
  font-size: 15px;
}

.attendance-side-card {
  padding: 0 0 16px;
  min-width: 260px;
}

.attendance-side-card .panel-header {
  padding: 16px 18px 8px;
}

.attendance-side-card .panel-header h2 {
  font-size: 16px;
}

/* Detail list inside side card */
.detail-list {
  padding: 12px 18px;
  display: grid;
  gap: 10px;
}

.detail-list div {
  display: grid;
  gap: 2px;
}

.detail-list dt {
  font-size: 11px;
  font-weight: 800;
  color: var(--muted, #6b7b73);
  text-transform: uppercase;
  letter-spacing: .5px;
}

.detail-list dd {
  font-size: 13px;
  font-weight: 700;
}

/* Map card */
.attendance-map-card {
  margin: 0 18px 12px;
  padding: 12px 14px;
  border-radius: 8px;
  background: rgba(244,246,245,.7);
  border: 1px solid var(--line, rgba(0,0,0,.06));
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.attendance-map-card span {
  font-size: 12px;
  color: var(--muted, #6b7b73);
  line-height: 1.4;
}

.attendance-map-card a {
  font-size: 12px;
  font-weight: 800;
  color: var(--blue, #3b82f6);
}

/* Table row striping & hover — seragam dengan admin dashboard */
.attendance-table tbody tr:nth-child(even) {
  background: rgba(0,0,0,.015);
}

.attendance-table tbody tr:hover {
  background: rgba(13,111,75,.04);
}

.attendance-table tbody tr.is-selected {
  background: rgba(13,111,75,.08) !important;
  box-shadow: inset 3px 0 0 var(--green, #0d6f4b);
}

/* Time cell refinement */
.attendance-time-cell .time-check {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: rgba(13,111,75,.1);
  color: var(--green, #0d6f4b);
  font-size: 10px;
  font-weight: 900;
  margin-right: 4px;
}

.attendance-time-cell .time-check.field {
  background: rgba(59,130,246,.1);
  color: var(--blue, #3b82f6);
}

/* Info banner refinement */
.attendance-info-banner {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 18px;
  border-radius: 8px;
  background: rgba(13,111,75,.06);
  border: 1px solid rgba(13,111,75,.14);
  color: var(--muted, #6b7b73);
  font-size: 13px;
}

.attendance-info-banner i {
  width: 32px;
  height: 32px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: rgba(13,111,75,.12);
  color: var(--green, #0d6f4b);
  font-style: normal;
  font-weight: 900;
  font-size: 12px;
  flex-shrink: 0;
}

/* User link in table */
.attendance-user-link {
  display: flex;
  flex-direction: column;
  gap: 1px;
  text-decoration: none;
}

.attendance-user-link strong {
  font-size: 13.5px;
}

.attendance-user-link span {
  font-size: 11px;
  color: var(--muted, #6b7b73);
}

/* Mobile responsive */
@media (max-width: 900px) {
  .attendance-admin-board {
    grid-template-columns: 1fr;
  }

  .attendance-side-card {
    min-width: 0;
  }

  .attendance-table th:nth-child(3),
  .attendance-table td:nth-child(3),
  .attendance-table th:nth-child(6),
  .attendance-table td:nth-child(6),
  .attendance-table th:nth-child(8),
  .attendance-table td:nth-child(8) {
    display: none;
  }
}

@media (max-width: 640px) {
  .attendance-table th:nth-child(4),
  .attendance-table td:nth-child(4),
  .attendance-table th:nth-child(5),
  .attendance-table td:nth-child(5) {
    font-size: 12px;
  }

  .attendance-time-cell {
    white-space: nowrap;
  }

  .attendance-info-banner {
    font-size: 12px;
    padding: 10px 14px;
  }
}

/* ─── Notification Pulse Animation ─── */
.notif-bell.pulse {
  animation: notif-pulse 0.5s ease-in-out 3;
}

@keyframes notif-pulse {
  0%, 100% { transform: scale(1); }
  25% { transform: scale(1.2); color: #fbbf24; }
  50% { transform: scale(0.95); }
  75% { transform: scale(1.1); color: #f59e0b; }
}

/* Toast notification for new real-time alerts */
.notif-toast {
  position: fixed;
  top: 16px;
  right: 16px;
  z-index: 9999;
  background: #1e293b;
  color: #f1f5f9;
  padding: 12px 18px;
  border-radius: 10px;
  box-shadow: 0 8px 30px rgba(0,0,0,.25);
  max-width: 360px;
  cursor: pointer;
  opacity: 0;
  transform: translateY(-12px);
  transition: opacity .3s ease, transform .3s ease;
  pointer-events: none;
}
.notif-toast.show {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}
.notif-toast strong {
  display: block;
  font-size: 13px;
  margin-bottom: 2px;
}
.notif-toast span {
  font-size: 12px;
  opacity: .75;
}

/* ─── Modal Overlay ─── */
.modal-overlay {
  position: fixed;
  inset: 0;
  z-index: 9000;
  background: rgba(0,0,0,.45);
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  visibility: hidden;
  transition: opacity .2s ease, visibility .2s ease;
}
.modal-overlay.open {
  opacity: 1;
  visibility: visible;
}
.modal-box {
  background: #fff;
  border-radius: 14px;
  width: 480px;
  max-width: 94vw;
  max-height: 85vh;
  overflow-y: auto;
  box-shadow: 0 20px 60px rgba(0,0,0,.2);
  transform: translateY(12px) scale(.97);
  transition: transform .25s ease;
}
.modal-overlay.open .modal-box {
  transform: translateY(0) scale(1);
}
.modal-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 18px 22px 0;
}
.modal-header h3 {
  font-size: 17px;
  margin: 0;
}
.modal-close {
  background: none;
  border: none;
  font-size: 26px;
  cursor: pointer;
  color: #64748b;
  line-height: 1;
  padding: 0;
}
.modal-body {
  padding: 14px 22px 22px;
}
.modal-body .form-group {
  margin-bottom: 14px;
}
.modal-body label {
  display: block;
  font-size: 13px;
  font-weight: 600;
  margin-bottom: 4px;
  color: #33433d;
}
.modal-body input[type="file"] {
  display: block;
  width: 100%;
  font-size: 13px;
  padding: 8px 0;
}
.modal-body .form-actions {
  display: flex;
  gap: 8px;
}
@media (prefers-color-scheme: dark) {
  .modal-overlay { background: rgba(0,0,0,.65); }
  .modal-box { background: #1e293b; }
  .modal-header h3 { color: #f1f5f9; }
  .modal-body label { color: #cbd5e1; }
}
