@font-face {
  font-family: 'Playfair Display';
  src: url('/manus-storage/PlayfairDisplay-Bold_a8c270a5.ttf') format('truetype');
  font-weight: 600 800;
  font-display: swap;
}
@font-face {
  font-family: 'Inter';
  src: url('/manus-storage/Inter-Variable_d79f128a.ttf') format('truetype');
  font-weight: 100 900;
  font-display: swap;
}

:root {
  --navy-950: #081a30;
  --navy-900: #0B2545;
  --navy-800: #123a6b;
  --navy-700: #1a4d8a;
  --gold-300: #e7c874;
  --gold-500: #C9A227;
  --gold-700: #a7811b;
  --cream: #F8F5EC;
  --cream-dark: #EFE9D8;
  --ink: #1c2733;
  --muted: #6b7688;
  --danger: #b3261e;
  --success: #1e7d4f;
  --warning: #b06a00;
  --radius: 14px;
  --shadow-sm: 0 1px 3px rgba(11,37,69,.08), 0 1px 2px rgba(11,37,69,.06);
  --shadow-md: 0 8px 24px rgba(11,37,69,.10), 0 2px 6px rgba(11,37,69,.06);
  --shadow-lg: 0 20px 50px rgba(11,37,69,.18);
}

* { box-sizing: border-box; }

body {
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  background: var(--cream);
  color: var(--ink);
  min-height: 100vh;
}

h1, h2, h3, h4, .brand-font {
  font-family: 'Playfair Display', Georgia, serif;
  letter-spacing: .2px;
}

a { text-decoration: none; }

.skip-link {
  position: fixed; left: 16px; top: -60px; z-index: 100;
  padding: 10px 14px; border-radius: 9px;
  background: var(--gold-500); color: var(--navy-950);
  font-weight: 700; box-shadow: var(--shadow-md);
  transition: top .15s ease;
}
.skip-link:focus { top: 16px; }
:focus-visible { outline: 3px solid rgba(201,162,39,.75); outline-offset: 2px; }

/* ---------- Layout: sidebar + main ---------- */
.app-shell { display: flex; min-height: 100vh; }

.sidebar {
  width: 268px;
  flex-shrink: 0;
  background: linear-gradient(180deg, var(--navy-950) 0%, var(--navy-900) 55%, var(--navy-800) 100%);
  color: var(--cream);
  display: flex;
  flex-direction: column;
  position: sticky;
  top: 0;
  height: 100vh;
  overflow-y: auto;
}

.sidebar-brand {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 22px 20px 18px;
  border-bottom: 1px solid rgba(201,162,39,.25);
}
.sidebar-brand img { width: 42px; height: 46px; }
.sidebar-brand .name { font-family: 'Playfair Display', serif; font-size: 15px; line-height: 1.25; font-weight: 700; color: var(--cream); }
.sidebar-brand .tag { font-size: 10.5px; color: var(--gold-300); letter-spacing: .6px; text-transform: uppercase; }

.sidebar-role {
  margin: 14px 18px;
  padding: 10px 14px;
  background: rgba(201,162,39,.12);
  border: 1px solid rgba(201,162,39,.35);
  border-radius: 10px;
  font-size: 12.5px;
  color: var(--gold-300);
  display: flex;
  align-items: center;
  gap: 8px;
}

.sidebar-nav { flex: 1; padding: 6px 12px 20px; }
.sidebar-section-title {
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 1.2px;
  color: rgba(248,245,236,.45);
  margin: 18px 12px 6px;
}
.sidebar-link {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 10px 14px;
  margin: 2px 4px;
  border-radius: 10px;
  color: rgba(248,245,236,.82);
  font-size: 14px;
  font-weight: 500;
  transition: background .15s ease, color .15s ease;
}
.sidebar-link i { font-size: 16px; width: 18px; text-align: center; }
.sidebar-link:hover { background: rgba(248,245,236,.08); color: #fff; }
.sidebar-link.active { background: linear-gradient(90deg, rgba(201,162,39,.28), rgba(201,162,39,.08)); color: #fff; box-shadow: inset 3px 0 0 var(--gold-500); }

.sidebar-footer {
  padding: 14px 18px 20px;
  border-top: 1px solid rgba(201,162,39,.2);
  font-size: 12px;
  color: rgba(248,245,236,.5);
}

.main-col { flex: 1; min-width: 0; display: flex; flex-direction: column; }

.topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 28px;
  background: #fff;
  border-bottom: 1px solid #eae4d2;
  position: sticky;
  top: 0;
  z-index: 20;
}
.topbar h1 { font-size: 21px; margin: 0; color: var(--navy-900); }
.topbar .subtitle { font-size: 12.5px; color: var(--muted); margin-top: 2px; }
.topbar-actions { display: flex; align-items: center; gap: 14px; }

.icon-btn {
  position: relative;
  width: 38px; height: 38px;
  display: flex; align-items: center; justify-content: center;
  border-radius: 10px;
  background: var(--cream);
  color: var(--navy-800);
  border: 1px solid #eae4d2;
  transition: background .15s;
}
.icon-btn:hover { background: var(--cream-dark); }
.icon-badge {
  position: absolute; top: -4px; right: -4px;
  background: var(--gold-500); color: var(--navy-950);
  font-size: 10px; font-weight: 700;
  min-width: 17px; height: 17px; border-radius: 999px;
  display: flex; align-items: center; justify-content: center;
  border: 2px solid #fff;
}

.avatar {
  width: 38px; height: 38px; border-radius: 50%;
  background: linear-gradient(135deg, var(--gold-300), var(--gold-700));
  color: var(--navy-950);
  display: flex; align-items: center; justify-content: center;
  font-weight: 700; font-size: 13px;
  box-shadow: var(--shadow-sm);
}

.content { padding: 26px 28px 48px; flex: 1; }

/* ---------- Cards & components ---------- */
.card-ltt {
  background: #fff;
  border-radius: var(--radius);
  border: 1px solid #eee7d4;
  box-shadow: var(--shadow-sm);
  padding: 22px;
}
.card-ltt + .card-ltt { margin-top: 20px; }

.kpi-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 16px; margin-bottom: 22px; }
.kpi-card {
  background: linear-gradient(145deg, #fff, var(--cream));
  border: 1px solid #eee7d4;
  border-radius: var(--radius);
  padding: 18px 20px;
  box-shadow: var(--shadow-sm);
  position: relative;
  overflow: hidden;
}
.kpi-card::after {
  content: "";
  position: absolute; right: -18px; top: -18px;
  width: 74px; height: 74px; border-radius: 50%;
  background: radial-gradient(circle, rgba(201,162,39,.18), transparent 70%);
}
.kpi-card .kpi-icon {
  width: 38px; height: 38px; border-radius: 10px;
  background: var(--navy-900); color: var(--gold-300);
  display: flex; align-items: center; justify-content: center;
  margin-bottom: 10px; font-size: 17px;
}
.kpi-card .kpi-value { font-family: 'Playfair Display', serif; font-size: 30px; font-weight: 700; color: var(--navy-900); line-height: 1; }
.kpi-card .kpi-label { font-size: 12.5px; color: var(--muted); margin-top: 6px; }
a.kpi-card { text-decoration: none; display: block; transition: transform .12s ease, box-shadow .12s ease; cursor: pointer; }
a.kpi-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }

.gauge-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 16px; }
.gauge-card { background: #fff; border: 1px solid #eee7d4; border-radius: var(--radius); box-shadow: var(--shadow-sm); padding: 16px; text-align: center; }
.gauge-wrap { position: relative; width: 96px; height: 96px; margin: 0 auto 8px; }
.gauge-wrap canvas { width: 100% !important; height: 100% !important; }
.gauge-value { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-family: 'Playfair Display', serif; font-weight: 700; font-size: 18px; color: var(--navy-900); }
.gauge-label { font-size: 12px; color: var(--muted); }

.alert-item { display: flex; align-items: flex-start; gap: 10px; padding: 9px 0; border-bottom: 1px dashed #eee3c8; }
.alert-item:last-child { border-bottom: none; }
.alert-dot { width: 30px; height: 30px; border-radius: 9px; display: flex; align-items: center; justify-content: center; font-size: 13px; flex-shrink: 0; }
.alert-dot-danger { background: rgba(11,37,69,.10); color: var(--navy-900); }
.alert-dot-warning { background: rgba(26,77,138,.10); color: var(--navy-800); }
.alert-dot-info { background: rgba(44,108,168,.10); color: var(--navy-700); }
.alert-dot-success { background: rgba(11,37,69,.10); color: var(--navy-900); }

.cal-item { display: flex; justify-content: space-between; align-items: center; padding: 8px 0; border-bottom: 1px dashed #eee3c8; font-size: 12.5px; }
.cal-item:last-child { border-bottom: none; }
.cal-item span { color: var(--muted); }
.cal-item strong { color: var(--navy-900); font-weight: 600; }
.gauge-delta { font-size: 10.5px; color: var(--success); }

.topbar-search { flex: 1; max-width: 380px; margin: 0 18px; position: relative; }
.topbar-search input { width: 100%; border: 1px solid #eae4d2; border-radius: 10px; padding: 8px 14px 8px 36px; font-size: 13px; background: var(--cream); }
.topbar-search input:focus { outline: none; border-color: var(--gold-500); background: #fff; }
.topbar-search i { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--muted); font-size: 13px; }

.section-title {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 14px;
}
.section-title h2 { font-size: 17px; color: var(--navy-900); margin: 0; }
.section-title .muted { color: var(--muted); font-size: 12.5px; }

.badge-ltt {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 3px 10px; border-radius: 999px;
  font-size: 11.5px; font-weight: 600;
}
.badge-navy { background: rgba(11,37,69,.09); color: var(--navy-900); }
.badge-gold { background: rgba(201,162,39,.16); color: var(--gold-700); }
.badge-success { background: rgba(30,125,79,.12); color: var(--success); }
.badge-danger { background: rgba(179,38,30,.1); color: var(--danger); }
.badge-warning { background: rgba(176,106,0,.12); color: var(--warning); }

.table-ltt { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13.5px; }
.table-ltt thead th {
  text-align: left; font-size: 11px; text-transform: uppercase; letter-spacing: .6px;
  color: var(--muted); padding: 10px 12px; border-bottom: 2px solid var(--cream-dark);
}
.table-ltt tbody td { padding: 11px 12px; border-bottom: 1px solid #f1ead9; vertical-align: middle; }
.table-ltt tbody tr:hover { background: #fbf9f2; }

.btn-ltt-navy {
  background: var(--navy-900); color: #fff; border: none;
  padding: 9px 18px; border-radius: 9px; font-weight: 600; font-size: 13.5px;
  display: inline-flex; align-items: center; gap: 8px;
  transition: background .15s;
}
.btn-ltt-navy:hover { background: var(--navy-800); color: #fff; }
.btn-ltt-gold {
  background: var(--gold-500); color: var(--navy-950); border: none;
  padding: 9px 18px; border-radius: 9px; font-weight: 700; font-size: 13.5px;
  display: inline-flex; align-items: center; gap: 8px;
  transition: background .15s;
}
.btn-ltt-gold:hover { background: var(--gold-700); color: #fff; }
.btn-ltt-outline {
  background: transparent; color: var(--navy-900); border: 1.4px solid var(--navy-900);
  padding: 8px 16px; border-radius: 9px; font-weight: 600; font-size: 13.5px;
  display: inline-flex; align-items: center; gap: 8px;
}
.btn-ltt-outline:hover { background: var(--navy-900); color: #fff; }

.form-ltt label { font-size: 12.5px; font-weight: 600; color: var(--navy-900); margin-bottom: 5px; display: block; }
.form-ltt .form-control, .form-ltt .form-select {
  border-radius: 9px; border: 1.4px solid #e2dac0; padding: 9px 12px; font-size: 13.5px;
}
.form-ltt .form-control:focus, .form-ltt .form-select:focus {
  border-color: var(--gold-500); box-shadow: 0 0 0 3px rgba(201,162,39,.18);
}

.login-shell {
  min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: flex-start;
  background: radial-gradient(1200px 700px at 80% -10%, rgba(201,162,39,.18), transparent 60%),
              radial-gradient(1000px 600px at -10% 110%, rgba(26,77,138,.35), transparent 60%),
              linear-gradient(160deg, var(--navy-950), var(--navy-900) 55%, var(--navy-800));
  padding: 40px 24px 24px;
}
.login-wrap { display: flex; align-items: center; gap: 26px; width: 100%; max-width: 1300px; justify-content: center; }
.login-orbit-side { flex: 0 0 auto; display: block; }
.login-card {
  width: 100%; max-width: 900px;
  background: #fff; border-radius: 22px; overflow: hidden;
  display: grid; grid-template-columns: 1.05fr 1fr;
  box-shadow: var(--shadow-lg);
}
.login-side {
  background: linear-gradient(160deg, var(--navy-900), var(--navy-800));
  color: var(--cream);
  padding: 44px 38px;
  display: flex; flex-direction: column; justify-content: space-between;
  position: relative;
}
.login-side::before {
  content: "";
  position: absolute; inset: 0;
  background: radial-gradient(circle at 30% 20%, rgba(201,162,39,.18), transparent 55%);
  z-index: 2;
}
.login-hero-orbit {
  position: relative; width: 340px; height: 340px; margin: 0 auto; z-index: 3;
}
.login-hero-orbit-logo {
  position: absolute; top: 50%; left: 50%; width: 100px; height: 100px;
  transform: translate(-50%, -50%); border-radius: 50%;
  background: var(--cream); padding: 10px; box-shadow: 0 0 0 4px var(--gold-500), var(--shadow-md);
  z-index: 5;
}
.orbit-slot {
  position: absolute; top: 50%; left: 50%; width: 0; height: 0;
  transform: rotate(var(--angle));
  animation: orbitSpin 44s linear infinite;
}
.orbit-photo {
  position: absolute; top: 0; left: 0; width: 82px; height: 82px;
  transform: translate(-50%, -50%) translateY(-160px);
  border-radius: 14px; overflow: hidden; border: 3px solid var(--gold-500); background: #fff; box-shadow: var(--shadow-md);
  animation: orbitCounterSpin 44s linear infinite;
}
.orbit-photo img { width: 100%; height: 100%; object-fit: contain; object-position: center; display: block; background: #fff; }
@keyframes orbitSpin {
  from { transform: rotate(var(--angle)); }
  to { transform: rotate(calc(var(--angle) + 360deg)); }
}
@keyframes orbitCounterSpin {
  from { transform: translate(-50%, -50%) translateY(-160px) rotate(0deg); }
  to { transform: translate(-50%, -50%) translateY(-160px) rotate(-360deg); }
}
.login-form-side { padding: 46px 42px; display: flex; flex-direction: column; justify-content: center; }

.stat-pill { display: flex; align-items: center; gap: 10px; padding: 8px 0; font-size: 13px; color: rgba(248,245,236,.85); }
.login-news {
  margin-top: 10px; padding: 12px 14px; border-radius: 12px;
  background: rgba(248,245,236,.06); border: 1px solid rgba(201,162,39,.35);
}
.login-news-title { font-size: 11px; text-transform: uppercase; letter-spacing: .5px; color: var(--gold-300); margin-bottom: 6px; }
.login-news-item { display: flex; justify-content: space-between; gap: 10px; font-size: 12px; color: rgba(248,245,236,.85); padding: 3px 0; }
.login-news-item strong { color: var(--gold-300); font-weight: 600; white-space: nowrap; }
.login-footer {
  max-width: 900px; margin: 18px auto 0; padding: 14px 10px 4px;
  display: flex; flex-wrap: wrap; gap: 18px; justify-content: center;
  font-size: 12px; color: rgba(248,245,236,.7);
}
.login-footer-copy { width: 100%; text-align: center; font-size: 11px; color: rgba(248,245,236,.45); margin-top: 6px; }
.stat-pill i { color: var(--gold-300); }

.timeline-item { display: flex; gap: 12px; padding: 10px 0; border-bottom: 1px dashed #eee3c8; }
.timeline-item:last-child { border-bottom: none; }
.timeline-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--gold-500); margin-top: 6px; flex-shrink: 0; }

.schedule-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 12px; }
.schedule-day { background: var(--cream); border-radius: 12px; padding: 12px; min-height: 90px; border: 1px solid #eee3c8; }
.schedule-day h4 { font-size: 12.5px; text-transform: uppercase; letter-spacing: .5px; color: var(--navy-800); margin-bottom: 8px; }
.schedule-slot { background: #fff; border-left: 3px solid var(--gold-500); border-radius: 6px; padding: 7px 9px; font-size: 11.5px; margin-bottom: 6px; box-shadow: var(--shadow-sm); }
.schedule-slot .time { color: var(--muted); font-size: 10.5px; }

.avg-ring { width: 68px; height: 68px; }

/* Bulletin (print) */
.bulletin-wrap { max-width: 840px; margin: 0 auto; }
.bulletin-header { display: flex; align-items: center; gap: 18px; border-bottom: 3px solid var(--navy-900); padding-bottom: 16px; margin-bottom: 20px; }
.bulletin-header img { width: 64px; }
.bulletin-title { font-family: 'Playfair Display', serif; font-size: 22px; color: var(--navy-900); }
.bulletin-meta-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px 20px; font-size: 12.5px; margin-bottom: 18px; }
.bulletin-meta-grid div span { color: var(--muted); display: block; font-size: 10.5px; text-transform: uppercase; }
.mention-badge { display: inline-block; padding: 6px 16px; border-radius: 999px; font-weight: 700; font-family: 'Playfair Display', serif; }

@media print {
  .no-print { display: none !important; }
  body { background: #fff; }
  .content { padding: 0; }
  .bulletin-wrap { max-width: 100%; }
}

@media print {
  .council-stats-table { font-size: 6.5pt !important; }
  .council-stats-table th, .council-stats-table td { padding: 1.5pt 2pt !important; }
  @page { size: A4 landscape; margin: 0.5cm; }
}

@media (max-width: 900px) {
  .sidebar { position: fixed; left: -280px; z-index: 50; transition: left .2s; box-shadow: var(--shadow-lg); }
  .sidebar.open { left: 0; }
  .main-col { width: 100%; }
  .topbar { padding: 13px 16px; gap: 12px; }
  .topbar h1 { font-size: 18px; }
  .content { padding: 20px 16px 36px; }
  .login-card { grid-template-columns: 1fr; }
  .login-side { display: none; }
  .login-wrap { flex-direction: column; gap: 14px; }
  .login-hero-orbit { width: 168px; height: 168px; }
  .login-hero-orbit-logo { width: 62px; height: 62px; padding: 6px; }
  .orbit-photo { width: 46px; height: 46px; border-width: 2px; border-radius: 10px; transform: translate(-50%, -50%) translateY(-76px); }
  @keyframes orbitCounterSpin { from { transform: translate(-50%, -50%) translateY(-76px) rotate(0deg); } to { transform: translate(-50%, -50%) translateY(-76px) rotate(-360deg); } }
}

@media (max-width: 560px) {
  .topbar { align-items: flex-start; }
  .topbar-actions { gap: 7px; }
  .topbar .subtitle { max-width: 170px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .card-ltt { padding: 16px; }
  .kpi-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .kpi-card { padding: 14px; }
  .kpi-card .kpi-value { font-size: 24px; }
  .table-responsive { border-radius: 10px; }
  .login-shell { padding: 20px 14px 18px; }
  .login-hero-orbit { width: 138px; height: 138px; }
  .login-hero-orbit-logo { width: 54px; height: 54px; }
  .orbit-photo { width: 40px; height: 40px; border-radius: 9px; transform: translate(-50%, -50%) translateY(-61px); }
  @keyframes orbitCounterSpin { from { transform: translate(-50%, -50%) translateY(-61px) rotate(0deg); } to { transform: translate(-50%, -50%) translateY(-61px) rotate(-360deg); } }
}

::-webkit-scrollbar { width: 9px; height: 9px; }
::-webkit-scrollbar-thumb { background: #d9d0b0; border-radius: 8px; }
::-webkit-scrollbar-track { background: transparent; }

/* ---------- Dashboard 2.0 ---------- */
.content { background: radial-gradient(720px 360px at 90% 0%, rgba(201,162,39,.10), transparent 68%), linear-gradient(180deg, #fcfbf7 0%, var(--cream) 100%); }
.dashboard-hero { background: linear-gradient(128deg, var(--navy-950), var(--navy-800)); color: var(--cream); border-radius: 20px; padding: 28px 30px; margin-bottom: 22px; display: flex; align-items: center; justify-content: space-between; gap: 26px; overflow: hidden; position: relative; box-shadow: var(--shadow-md); }
.dashboard-hero::after { content: ""; position: absolute; width: 240px; height: 240px; right: -80px; top: -105px; border: 1px solid rgba(201,162,39,.30); border-radius: 50%; box-shadow: 0 0 0 35px rgba(201,162,39,.06), 0 0 0 70px rgba(201,162,39,.04); }
.dashboard-hero > * { position: relative; z-index: 1; }
.eyebrow, .chart-kicker { display: inline-flex; align-items: center; gap: 6px; text-transform: uppercase; letter-spacing: 1.05px; font-size: 10.5px; font-weight: 750; color: var(--gold-500); }
.dashboard-hero h2 { color: #fff; margin: 7px 0 8px; font-size: clamp(22px, 2vw, 29px); max-width: 620px; }
.dashboard-hero p { max-width: 650px; color: rgba(248,245,236,.72); margin: 0; font-size: 13px; line-height: 1.6; }
.hero-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 10px; min-width: 260px; }
.btn-hero-ghost { display: inline-flex; align-items: center; gap: 8px; padding: 9px 15px; border: 1px solid rgba(248,245,236,.35); border-radius: 9px; color: #fff; font-weight: 600; font-size: 13px; background: rgba(248,245,236,.06); transition: transform .16s ease, background .16s ease; }
.btn-hero-ghost:hover { color: #fff; background: rgba(248,245,236,.14); transform: translateY(-1px); }
.setup-panel { background: #fff; border: 1px solid rgba(201,162,39,.35); border-radius: 18px; padding: 22px; margin-bottom: 22px; box-shadow: var(--shadow-sm); }
.setup-panel-heading { display: grid; grid-template-columns: auto minmax(0,1fr) auto; gap: 16px; align-items: center; }
.setup-icon { width: 46px; height: 46px; display: grid; place-items: center; border-radius: 14px; background: rgba(201,162,39,.16); color: var(--gold-700); font-size: 20px; }
.setup-panel h2 { margin: 4px 0 5px; color: var(--navy-900); font-size: 19px; }
.setup-panel p { color: var(--muted); margin: 0; font-size: 12.5px; }
.setup-progress { text-align: right; display: grid; }
.setup-progress strong { color: var(--navy-900); font-family: 'Playfair Display', serif; font-size: 26px; line-height: 1; }
.setup-progress span { color: var(--muted); font-size: 10.5px; text-transform: uppercase; letter-spacing: .65px; margin-top: 4px; }
.setup-progress-bar { height: 7px; border-radius: 999px; background: var(--cream-dark); overflow: hidden; margin: 18px 0; }
.setup-progress-bar span { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--gold-500), var(--gold-300)); transition: width .35s ease; }
.setup-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; }
.setup-step { min-width: 0; display: grid; grid-template-columns: auto minmax(0,1fr) auto; align-items: center; gap: 9px; padding: 12px; border: 1px solid #eee7d4; border-radius: 12px; color: var(--ink); background: #fff; transition: transform .16s ease, border-color .16s ease, box-shadow .16s ease; }
.setup-step:hover { color: var(--ink); transform: translateY(-2px); border-color: var(--gold-300); box-shadow: var(--shadow-sm); }
.setup-step.is-done { background: linear-gradient(145deg, #fff, rgba(30,125,79,.05)); border-color: rgba(30,125,79,.24); }
.setup-step-icon { width: 31px; height: 31px; display: grid; place-items: center; border-radius: 9px; background: var(--cream); color: var(--navy-800); }
.setup-step.is-done .setup-step-icon { background: rgba(30,125,79,.12); color: var(--success); }
.setup-step strong, .setup-step small { display: block; overflow: hidden; text-overflow: ellipsis; }
.setup-step strong { font-size: 11.5px; line-height: 1.25; }
.setup-step small { color: var(--muted); font-size: 10.5px; margin-top: 3px; }
.setup-step-arrow { color: var(--gold-700); font-size: 16px; }
.chart-card { padding: 20px 22px; }
.chart-title-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
.chart-title-row h2 { margin: 3px 0 0; font-size: 17px; color: var(--navy-900); }
.chart-pill { display: inline-flex; gap: 6px; align-items: center; padding: 5px 9px; border-radius: 999px; background: var(--cream); color: var(--navy-800); font-size: 10.5px; font-weight: 700; white-space: nowrap; }
.chart-pill i { color: var(--gold-700); }
.chart-card-compact { height: 100%; }
.dashboard-insight { min-height: 100%; display: flex; align-items: center; gap: 16px; }
.dashboard-insight h2 { margin: 3px 0 5px; color: var(--navy-900); font-size: 19px; }
.dashboard-insight p { color: var(--muted); font-size: 12.5px; margin: 0; max-width: 430px; }
.dashboard-insight .btn-ltt-outline { margin-left: auto; white-space: nowrap; }
.insight-icon { width: 45px; height: 45px; border-radius: 14px; display: grid; place-items: center; background: rgba(201,162,39,.15); color: var(--gold-700); font-size: 19px; flex-shrink: 0; }
.gauge-card { background: linear-gradient(165deg, #fff, #fbfaf5); }
.gauge-card:hover { border-color: rgba(201,162,39,.40); }
.card-ltt { transition: border-color .16s ease, box-shadow .16s ease; }
.card-ltt:hover { border-color: #e5dcc2; }
@media (max-width: 1180px) { .setup-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 860px) { .dashboard-hero { display: block; padding: 23px 21px; } .hero-actions { justify-content: flex-start; margin-top: 18px; } .setup-panel-heading { grid-template-columns: auto minmax(0,1fr); } .setup-progress { grid-column: 2; text-align: left; } .setup-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .dashboard-hero h2 { font-size: 22px; } .hero-actions > * { width: 100%; justify-content: center; } .setup-panel { padding: 17px; } .setup-grid { grid-template-columns: 1fr; } .dashboard-insight { align-items: flex-start; flex-wrap: wrap; } .dashboard-insight .btn-ltt-outline { margin-left: 0; width: 100%; justify-content: center; } .chart-title-row { align-items: flex-start; } }
@media (prefers-reduced-motion: no-preference) { .kpi-card, .setup-step, .btn-hero-ghost { will-change: transform; } }

.role-hero { background: linear-gradient(128deg, var(--navy-950), var(--navy-800)); border-radius: 18px; padding: 24px 27px; margin-bottom: 20px; color: #fff; display: flex; align-items: center; justify-content: space-between; gap: 20px; position: relative; overflow: hidden; box-shadow: var(--shadow-md); }
.role-hero::after { content: ""; position: absolute; right: -42px; bottom: -70px; width: 180px; height: 180px; border: 1px solid rgba(201,162,39,.28); border-radius: 50%; box-shadow: 0 0 0 28px rgba(201,162,39,.05); }
.role-hero > * { position: relative; z-index: 1; }
.role-hero h2 { color: #fff; margin: 5px 0 6px; font-size: 24px; }
.role-hero p { margin: 0; max-width: 680px; color: rgba(248,245,236,.74); font-size: 13px; line-height: 1.55; }
.role-hero-student { background: linear-gradient(128deg, #0b2545, #245b95); }
.role-hero-parent { background: linear-gradient(128deg, #123a6b, #2c6ca8); }
.role-hero-metric { min-width: 94px; padding: 12px; text-align: center; border-radius: 14px; background: rgba(248,245,236,.10); border: 1px solid rgba(248,245,236,.18); }
.role-hero-metric strong, .role-hero-metric small { display: block; }
.role-hero-metric strong { font-family: 'Playfair Display', serif; font-size: 28px; color: var(--gold-300); line-height: 1; }
.role-hero-metric small { font-size: 10.5px; color: rgba(248,245,236,.7); text-transform: uppercase; letter-spacing: .55px; margin-top: 4px; }
.compact-kpi-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.dashboard-table-card { padding: 21px 22px; }
.student-average-card { height: 100%; min-height: 250px; border-radius: 18px; padding: 25px; background: linear-gradient(155deg, var(--navy-950), var(--navy-800)); color: #fff; box-shadow: var(--shadow-md); display: flex; flex-direction: column; }
.student-average-card .chart-kicker { color: var(--gold-300); }
.student-average-value { margin: 14px 0 2px; font-family: 'Playfair Display', serif; font-size: 54px; font-weight: 700; color: #fff; line-height: 1; }
.student-average-value small { font-family: 'Inter', sans-serif; color: var(--gold-300); font-size: 17px; }
.student-average-card p { color: rgba(248,245,236,.7); font-size: 12.5px; margin: 8px 0 20px; }
.student-average-card .btn-ltt-gold { margin-top: auto; }
.family-card { background: linear-gradient(155deg, #fff, var(--cream)); border: 1px solid #eee7d4; border-radius: 16px; padding: 20px; box-shadow: var(--shadow-sm); height: 100%; }
.family-card-head { display: flex; align-items: center; gap: 12px; margin-bottom: 18px; }
.family-avatar { width: 48px; height: 48px; font-size: 15px; }
.family-card h2 { color: var(--navy-900); font-size: 18px; margin: 0 0 3px; }
.family-card p { color: var(--muted); font-size: 12px; margin: 0; }
.family-average { display: flex; align-items: end; justify-content: space-between; padding: 13px 0; margin-bottom: 15px; border-top: 1px dashed #e6ddc7; border-bottom: 1px dashed #e6ddc7; }
.family-average span { color: var(--muted); font-size: 12px; }
.family-average strong { font-family: 'Playfair Display', serif; font-size: 25px; color: var(--navy-900); }
.family-average small { color: var(--muted); font-family: 'Inter', sans-serif; font-size: 12px; }
@media (max-width: 860px) { .role-hero { display: block; padding: 22px; } .role-hero > .btn-hero-ghost, .role-hero-metric { display: inline-flex; margin-top: 16px; } .compact-kpi-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .compact-kpi-grid { grid-template-columns: 1fr; } .role-hero h2 { font-size: 21px; } }

.first-login-wrap { min-height: calc(100vh - 156px); display: grid; place-items: center; padding: 22px 0; }
.first-login-card { width: min(100%, 560px); background: #fff; border: 1px solid rgba(201,162,39,.34); border-radius: 20px; box-shadow: var(--shadow-md); padding: 31px; }
.first-login-card .setup-icon { margin-bottom: 16px; }
.first-login-card h2 { color: var(--navy-900); margin: 6px 0 8px; font-size: 26px; }
.first-login-card p { color: var(--muted); font-size: 13px; line-height: 1.6; }
.password-security { margin-top: 11px; padding: 13px 14px; border: 1px solid var(--sig-border); border-radius: 11px; background: #f8fbff; }
.password-security-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; color: var(--muted); font-size: 11.5px; font-weight: 650; }.password-security-heading strong { color: var(--sig-blue); font-size: 12px; }
.password-security-meter { overflow: hidden; height: 7px; margin: 9px 0 11px; border-radius: 99px; background: #e7edf5; }.password-security-meter span { display:block; width: 0; height:100%; border-radius:inherit; background:#d14e5c; transition: width .2s var(--ease-out), background .2s var(--ease-out); }.password-security-meter span[data-score="2"] { background:#dc8a36; }.password-security-meter span[data-score="3"] { background:#c9a227; }.password-security-meter span[data-score="4"], .password-security-meter span[data-score="5"] { background:#218057; }
.password-criteria { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px 10px; margin: 0; padding: 0; list-style: none; color: #6b7789; font-size: 11px; }.password-criteria li::before { content: "○"; margin-right: 5px; color: #9aa8ba; }.password-criteria li.is-valid { color: #19734c; }.password-criteria li.is-valid::before { content: "✓"; color: #19734c; font-weight: 800; }.password-match-status { min-height: 18px; padding-top: 6px; font-size: 11.5px; }.password-match-status.is-valid { color:#19734c; }.password-match-status.is-invalid { color:#b33845; }
.auto-password-note, .generated-password-card { border: 1px solid rgba(47,116,233,.24); border-radius: 11px; background: #f4f8ff; padding: 13px 14px; }.auto-password-note strong, .generated-password-label { display:block; color: var(--sig-blue); font-size:12px; }.auto-password-note span { display:block; margin-top:5px; color:#607086; font-size:11.5px; line-height:1.45; }.generated-password-card > div:first-child { display:flex; align-items:center; justify-content:space-between; gap:10px; }.generated-password-card strong { color:#19734c; font-size:11.5px; }.copy-password { margin-top:9px; border:0; padding:0; background:transparent; color:var(--sig-blue); font-weight:700; font-size:11.5px; }.generated-password-help { margin-top:10px !important; font-size:11.5px !important; }
.principal-summary { margin: 0 0 18px; padding: 20px; border: 1px solid var(--sig-border); border-radius: 11px; background: #fff; box-shadow: 0 2px 10px rgba(17,31,61,.045); }.principal-summary-heading { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:15px; }.principal-summary h2 { margin: 3px 0 0; color:var(--sig-navy); font-size:18px; }.principal-summary-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:11px; }.principal-summary-grid article { min-height:105px; padding:14px; border:1px solid #e8edf5; border-radius:10px; background:linear-gradient(145deg,#fff,#f8fbff); display:flex; flex-direction:column; }.principal-summary-grid span { color:#68778b; font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.45px; }.principal-summary-grid strong { margin:8px 0 5px; color:var(--sig-navy); font-family:Inter,sans-serif; font-size:27px; line-height:1; }.principal-summary-grid small { margin-top:auto; color:#68778b; font-size:11px; line-height:1.35; }
@media (max-width: 860px) { .principal-summary-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }.principal-summary-heading { align-items:flex-start; flex-direction:column; }.password-criteria { grid-template-columns:1fr; } } @media (max-width: 520px) { .principal-summary { padding:16px; }.principal-summary-grid { grid-template-columns:1fr; }.principal-summary-heading .btn-ltt-outline { width:100%; justify-content:center; } }
.setup-structure-card { margin-bottom: 20px; background: linear-gradient(145deg, #fff, #fbfaf5); }
.password-toggle { width: 32px; height: 32px; padding: 0; border: 0; background: transparent; color: var(--navy-800); display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; cursor: pointer; transition: background .16s ease, color .16s ease; }
.password-toggle:hover, .password-toggle:focus-visible { background: #eef3f8; color: var(--navy-900); outline: none; }
.password-toggle svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
.password-toggle.is-visible svg path { stroke-dasharray: 27; stroke-dashoffset: 9; }
.login-hero-orbit { background-image: radial-gradient(circle at center, rgba(11,37,69,.12), transparent 64%), url('/manus-storage/informatique_77068e96.jpg'); background-size: cover; background-position: center; border-radius: 50%; overflow: hidden; }
.login-hero-orbit::before { content: ''; position: absolute; inset: 12%; border-radius: 50%; background: rgba(5,22,42,.78); backdrop-filter: blur(1px); }
.login-hero-orbit-logo, .orbit-slot { z-index: 1; }
.attendance-mark { display: inline-grid; place-items: center; min-width: 20px; height: 20px; border-radius: 50%; color: #8b95a1; background: #f0f2f4; font-size: 12px; font-weight: 800; }
.attendance-mark.is-present { color: #fff; background: var(--success); }
.attendance-mark.is-absent { color: #fff; background: var(--danger); }
.attendance-mark.is-late { color: #fff; background: var(--warning); }
.bulletin-mark { display: inline-block; width: 14px; color: #9aa4b1; font-weight: 800; text-align: center; }
.bulletin-mark.is-selected { color: var(--success); }
.correspondence-hero, .late-hero { margin-bottom: 20px; }
.correspondence-list { display: grid; gap: 9px; }
.correspondence-row { display: flex; align-items: center; gap: 13px; padding: 14px; border: 1px solid #eee7d4; border-radius: 13px; color: var(--ink); background: linear-gradient(135deg, #fff, #fcfbf7); transition: transform .14s ease, border-color .14s ease, box-shadow .14s ease; }
.correspondence-row:hover { color: var(--ink); transform: translateY(-1px); border-color: rgba(201,162,39,.6); box-shadow: var(--shadow-sm); }
.correspondence-row.is-priority { border-left: 4px solid var(--danger); }
.correspondence-icon { width: 38px; height: 38px; flex: 0 0 auto; display: grid; place-items: center; border-radius: 12px; background: rgba(11,37,69,.09); color: var(--navy-800); }
.correspondence-icon.is-critical { background: rgba(179,38,30,.10); color: var(--danger); }
.correspondence-main { min-width: 0; flex: 1; }
.correspondence-main strong { color: var(--navy-900); font-size: 14px; }
.correspondence-meta { display: grid; gap: 4px; min-width: 94px; color: var(--muted); font-size: 11.5px; text-align: right; }
.empty-ltt { min-height: 190px; display: grid; place-content: center; justify-items: center; gap: 8px; color: var(--muted); text-align: center; }
.empty-ltt i { font-size: 32px; color: var(--gold-700); }
.empty-ltt strong { color: var(--navy-900); }
.correspondence-detail { max-width: 920px; }
.correspondence-detail.is-priority { border-top: 4px solid var(--danger); }
.correspondence-detail h2 { color: var(--navy-900); font-size: 25px; }
.correspondence-body { color: var(--ink); font-size: 14px; line-height: 1.75; white-space: normal; }
.correspondence-receipt { display: flex; align-items: center; gap: 11px; margin-top: 24px; padding: 13px 15px; border-radius: 12px; background: #f5f7fa; color: var(--navy-800); }
.correspondence-receipt.is-acknowledged { background: rgba(30,125,79,.10); color: var(--success); }
.correspondence-receipt i { font-size: 22px; }
.correspondence-receipt strong, .correspondence-receipt span { display: block; }
.correspondence-receipt span { font-size: 12px; color: var(--muted); }
@media (max-width: 650px) { .correspondence-row { align-items: flex-start; } .correspondence-meta { min-width: unset; text-align: left; } .correspondence-row { flex-wrap: wrap; } .correspondence-main { width: calc(100% - 52px); flex: initial; } }

/* ---------- SIGEST-LTT visual system ---------- */
:root { --sig-blue: #2f74e9; --sig-navy: #111f3d; --sig-surface: #f6f8fc; --sig-border: #e6ebf3; }
body { background: var(--sig-surface); }
.sidebar { width: 256px; background: linear-gradient(180deg, #122346 0%, #0d1b35 100%); border-right: 1px solid rgba(255,255,255,.08); }
.sidebar-brand { min-height: 78px; padding: 17px 18px; background: linear-gradient(135deg, #152b53, #132544); border-bottom-color: rgba(255,255,255,.12); }
.sidebar-brand img { width: 44px; height: 48px; object-fit: contain; }
.sidebar-brand .tag { color: rgba(255,255,255,.62); letter-spacing: .45px; }
.sidebar-role { margin: 12px 14px; padding: 9px 12px; background: rgba(255,255,255,.07); border-color: rgba(255,255,255,.1); color: #dce7ff; }
.sidebar-nav { padding: 5px 10px 18px; }
.sidebar-section-title { margin: 18px 10px 7px; color: rgba(255,255,255,.44); font-size: 10px; }
.sidebar-link { margin: 2px 0; padding: 9px 12px; border-radius: 8px; font-size: 13px; }
.sidebar-link.active { background: linear-gradient(90deg, #2f74e9, #2868d5); box-shadow: none; color: #fff; }
.sidebar-link:hover { background: rgba(255,255,255,.1); }
.sidebar-footer { border-top-color: rgba(255,255,255,.1); color: rgba(255,255,255,.48); }
.topbar { min-height: 72px; padding: 13px 26px; background: #fff; border-bottom-color: var(--sig-border); box-shadow: 0 1px 0 rgba(17,31,61,.03); }
.topbar h1 { font-family: Inter, sans-serif; font-size: 20px; font-weight: 750; letter-spacing: -.35px; }
.topbar-year { width: 124px; padding: 7px 11px; border: 1px solid var(--sig-border); border-radius: 8px; background: #fff; line-height: 1.18; }
.topbar-year span { font-size: 9px; color: var(--muted); text-transform: uppercase; letter-spacing: .45px; }
.topbar-year strong { font-size: 12px; color: var(--sig-navy); }
.topbar-search { max-width: 420px; }
.topbar-search input { background: #f8fafc; border-color: var(--sig-border); border-radius: 8px; }
.icon-btn { border-radius: 8px; border-color: var(--sig-border); background: #fff; }
.content { background: var(--sig-surface); padding: 23px 26px 42px; }
.dashboard-hero { margin-bottom: 16px; padding: 20px 23px; background: #fff; color: var(--sig-navy); border: 1px solid var(--sig-border); box-shadow: 0 3px 14px rgba(17,31,61,.05); }
.dashboard-hero::after { display: none; }
.dashboard-hero h2 { color: var(--sig-navy); font-family: Inter, sans-serif; font-size: 23px; font-weight: 750; margin: 5px 0; }
.dashboard-hero p { color: var(--muted); }
.eyebrow, .chart-kicker { color: var(--sig-blue); }
.btn-hero-ghost { color: var(--sig-blue); border-color: rgba(47,116,233,.35); background: #fff; }
.btn-hero-ghost:hover { background: #eef4ff; color: var(--sig-blue); }
.kpi-grid { grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 13px; margin-bottom: 16px; }
.kpi-card { min-height: 112px; border-radius: 11px; border-color: var(--sig-border); background: #fff; padding: 16px; box-shadow: 0 2px 10px rgba(17,31,61,.045); }
.kpi-card::after { display: none; }
.kpi-card .kpi-icon { width: 42px; height: 42px; margin-bottom: 9px; border-radius: 13px; background: var(--kpi-soft, #eaf1ff); color: var(--kpi-color, var(--sig-blue)); font-size: 19px; }
.kpi-card .kpi-value { font-family: Inter, sans-serif; font-size: 23px; color: var(--sig-navy); }
.kpi-card .kpi-label { margin-top: 4px; font-size: 11.5px; font-weight: 650; color: #4e5b70; }
.kpi-card:hover { transform: translateY(-2px); border-color: rgba(47,116,233,.35); box-shadow: 0 8px 18px rgba(17,31,61,.08); }
.kpi-blue { --kpi-color:#2f74e9; --kpi-soft:#e9f1ff; }.kpi-green { --kpi-color:#21a66a; --kpi-soft:#e8f8f0; }.kpi-orange { --kpi-color:#f49a27; --kpi-soft:#fff3df; }.kpi-purple { --kpi-color:#7b55d7; --kpi-soft:#f1ebff; }.kpi-cyan { --kpi-color:#1ba1b7; --kpi-soft:#e3f8fb; }.kpi-red { --kpi-color:#e05050; --kpi-soft:#fdeaea; }
.card-ltt, .chart-card, .gauge-card { border-color: var(--sig-border); border-radius: 11px; box-shadow: 0 2px 10px rgba(17,31,61,.045); }
.chart-card { padding: 18px 19px; }.chart-title-row h2, .section-title h2 { font-family: Inter, sans-serif; font-size: 15px; font-weight: 750; }
.chart-pill { background: #eef4ff; color: var(--sig-blue); }.chart-pill i { color: var(--sig-blue); }
.alert-item { border-bottom-color: #eef1f6; }.alert-dot { border-radius: 50%; }.gauge-card { padding: 14px; }
.setup-panel { border-color: var(--sig-border); border-radius: 11px; box-shadow: 0 2px 10px rgba(17,31,61,.045); }
.setup-icon, .setup-step-icon { background: #edf3ff; color: var(--sig-blue); }.setup-step { border-color: var(--sig-border); border-radius: 9px; }
@media (max-width: 900px) { .content { padding: 18px 14px 32px; }.topbar { padding: 11px 14px; }.sidebar { width: 256px; }.topbar-year { display:none !important; } }

/* ---------- Cartes scolaires ---------- */
.student-card-print-wrap { width: min(100%, 920px); margin: 0 auto; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; align-items: start; }
.student-id-card { min-height: 324px; position: relative; overflow: hidden; isolation: isolate; border: 1px solid rgba(17,31,61,.2); border-left: 7px solid #007a3d; border-right: 7px solid #fcd116; border-top: 7px solid #ce1126; border-bottom: 7px solid #ce1126; border-radius: 16px; background: #fff; color: var(--sig-navy); padding: 20px 22px; box-shadow: 0 14px 30px rgba(17,31,61,.12); aspect-ratio: 1.586 / 1; }
.student-id-card::before { content: ''; position: absolute; inset: 0; z-index: -2; background: linear-gradient(145deg, #fff 0%, #f5f9ff 55%, #e6f0ff 100%); }
.student-id-card::after { content: ''; position: absolute; z-index: -1; width: 230px; height: 230px; right: -94px; bottom: -132px; border-radius: 50%; border: 32px solid rgba(47,116,233,.08); box-shadow: 0 0 0 1px rgba(47,116,233,.05); }
.student-id-front { background-image: linear-gradient(145deg, #fff 0%, #f5f9ff 55%, #e6f0ff 100%); }
.student-id-back { display: flex; flex-direction: column; }
.card-cameroon-flag { display: none; }
/* Les photographies d’ateliers restent intégrales : le cadre ne masque plus leurs bords. */
.orbit-photo { overflow: visible; padding: 3px; display: flex; align-items: center; justify-content: center; background: rgba(255,255,255,.98); }
.orbit-photo img { width: 100% !important; height: 100% !important; display: block; object-fit: contain !important; object-position: center !important; border-radius: 10px; background: #fff; }
@media (max-width: 900px) { .orbit-photo { padding: 2px; } .orbit-photo img { border-radius: 7px; } }
/* Fallback mobile : les raccourcis restent lisibles même si la police Bootstrap Icons n’est pas chargée. */
.sidebar-link > i.bi::before { font-family: "Segoe UI Symbol", "Noto Sans Symbols", Arial, sans-serif !important; font-weight: 700 !important; font-size: 15px; }
.sidebar-link > .bi-grid-1x2-fill::before { content: "▦" !important; }.sidebar-link > .bi-megaphone-fill::before { content: "●" !important; }.sidebar-link > .bi-chat-dots-fill::before { content: "✉" !important; }.sidebar-link > .bi-journal-text::before, .sidebar-link > .bi-journal-bookmark-fill::before { content: "▤" !important; }.sidebar-link > .bi-clipboard2-check-fill::before, .sidebar-link > .bi-clipboard2-data-fill::before { content: "✓" !important; }.sidebar-link > .bi-clock-history::before { content: "◷" !important; }.sidebar-link > .bi-people-fill::before { content: "♟" !important; }.sidebar-link > .bi-diagram-3-fill::before { content: "◇" !important; }.sidebar-link > .bi-calendar2-check-fill::before, .sidebar-link > .bi-calendar2-week-fill::before, .sidebar-link > .bi-calendar3::before { content: "□" !important; }.sidebar-link > .bi-gear-fill::before { content: "⚙" !important; }.sidebar-link > .bi-mortarboard-fill::before { content: "★" !important; }.sidebar-link > .bi-file-earmark-medical-fill::before { content: "▧" !important; }.sidebar-link > .bi-door-open-fill::before { content: "▯" !important; }.sidebar-link > .bi-bar-chart-line-fill::before, .sidebar-link > .bi-graph-up::before { content: "↗" !important; }.sidebar-link > .bi-person-workspace::before { content: "♙" !important; }.sidebar-link > .bi-exclamation-octagon-fill::before, .sidebar-link > .bi-shield-exclamation::before { content: "!" !important; }
.sidebar-role > .bi::before, .sidebar-footer > .bi::before, .icon-btn > .bi::before, .topbar-search > .bi::before, .topbar .bi-list::before { font-family: "Segoe UI Symbol", "Noto Sans Symbols", Arial, sans-serif !important; font-weight: 700 !important; }
.sidebar-role > .bi-shield-check::before { content: "✓" !important; }.sidebar-footer > .bi-c-circle::before { content: "©" !important; }.sidebar-link > .bi-building::before { content: "⌂" !important; }.sidebar-link > .bi-clock-fill::before { content: "◷" !important; }.sidebar-link > .bi-list-check::before { content: "☷" !important; }.sidebar-link > .bi-journal-check::before { content: "☑" !important; }.sidebar-link > .bi-exclamation-triangle-fill::before { content: "!" !important; }.topbar .bi-list::before { content: "☰" !important; }.topbar-search > .bi-search::before { content: "⌕" !important; }.icon-btn > .bi-download::before { content: "⇩" !important; }.icon-btn > .bi-megaphone::before { content: "●" !important; }.icon-btn > .bi-envelope::before { content: "✉" !important; }
.topbar-search { display: flex; align-items: center; gap: 8px; }.topbar-search > .bi { color: var(--sig-blue); font-size: 17px; }.topbar-search-submit { flex: 0 0 auto; border: 0; border-radius: 8px; padding: 7px 11px; color: #fff; background: var(--sig-blue); font-size: 11.5px; font-weight: 700; line-height: 1.2; transition: transform .16s var(--ease-out), background .16s var(--ease-out); }.topbar-search-submit:hover { background: var(--sig-navy); transform: translateY(-1px); }.topbar-search-submit:focus-visible { outline: 3px solid rgba(47,116,233,.28); outline-offset: 2px; }.icon-btn { width: auto; min-width: 36px; gap: 6px; padding: 0 9px; }.icon-btn-label { font-size: 10.5px; font-weight: 700; }.icon-btn:has(.icon-badge) { position: relative; }
@media (max-width: 1050px) { .topbar-search-submit { padding: 7px 9px; font-size: 10.5px; }.topbar-search input { min-width: 160px; } } @media (max-width: 760px) { .icon-btn { width: 36px; padding: 0; justify-content: center; }.icon-btn-label { display: none; } }
/* Couverture universelle : aucun navigateur ne doit afficher un glyphe carré à la place d’une action. */
.bi::before, [class*=" bi-"]::before, [class^="bi-"]::before { font-family: "Segoe UI Symbol", "Noto Sans Symbols", Arial, sans-serif !important; font-weight: 700 !important; }
.bi-activity::before, .bi-lightning-charge-fill::before { content:"ϟ" !important; }.bi-arrow-down::before { content:"↓" !important; }.bi-arrow-down-up::before { content:"↕" !important; }.bi-arrow-left::before { content:"←" !important; }.bi-arrow-right::before, .bi-arrow-right-short::before { content:"→" !important; }.bi-arrow-up::before { content:"↑" !important; }.bi-award-fill::before, .bi-stars::before { content:"★" !important; }.bi-bar-chart-fill::before, .bi-bar-chart-line-fill::before { content:"▥" !important; }.bi-bell-fill::before, .bi-megaphone::before, .bi-megaphone-fill::before { content:"●" !important; }.bi-box-arrow-in-right::before { content:"↪" !important; }.bi-box-arrow-right::before { content:"⇥" !important; }.bi-calendar2-check-fill::before, .bi-calendar2-plus::before, .bi-calendar2-plus-fill::before, .bi-calendar2-week-fill::before, .bi-calendar3::before { content:"◫" !important; }.bi-chat-dots-fill::before, .bi-envelope::before, .bi-envelope-fill::before, .bi-inbox-fill::before { content:"✉" !important; }.bi-check2::before, .bi-check2-circle::before, .bi-clipboard2-check::before, .bi-clipboard2-check-fill::before, .bi-clipboard2-data-fill::before, .bi-journal-check::before, .bi-patch-check-fill::before { content:"✓" !important; }.bi-clipboard2-plus-fill::before, .bi-plus-circle::before, .bi-plus-circle-fill::before, .bi-plus-lg::before { content:"+" !important; }.bi-clock-fill::before, .bi-clock-history::before, .bi-speedometer2::before { content:"◷" !important; }.bi-cpu-fill::before { content:"▣" !important; }.bi-diagram-3-fill::before { content:"◇" !important; }.bi-door-open-fill::before, .bi-house-fill::before { content:"⌂" !important; }.bi-download::before { content:"⇩" !important; }.bi-exclamation-diamond-fill::before, .bi-exclamation-octagon-fill::before, .bi-exclamation-triangle-fill::before, .bi-shield-exclamation::before { content:"!" !important; }.bi-eye::before, .bi-eye-fill::before { content:"◉" !important; }.bi-eye-slash::before { content:"⊘" !important; }.bi-file-earmark-excel-fill::before { content:"X" !important; }.bi-file-earmark-medical-fill::before { content:"▧" !important; }.bi-file-earmark-pdf-fill::before { content:"P" !important; }.bi-file-earmark-text-fill::before { content:"T" !important; }.bi-flask::before { content:"⚗" !important; }.bi-folder2-open::before { content:"▰" !important; }.bi-funnel-fill::before { content:"▽" !important; }.bi-gear-fill::before { content:"⚙" !important; }.bi-geo-alt-fill::before { content:"⌖" !important; }.bi-graph-up::before, .bi-graph-up-arrow::before { content:"↗" !important; }.bi-info-circle::before, .bi-info-circle-fill::before { content:"i" !important; }.bi-journal-bookmark-fill::before, .bi-journal-plus::before, .bi-journal-text::before { content:"▤" !important; }.bi-key-fill::before { content:"⚿" !important; }.bi-list::before, .bi-list-check::before { content:"☰" !important; }.bi-mortarboard-fill::before { content:"★" !important; }.bi-pencil-square::before { content:"✎" !important; }.bi-people::before, .bi-people-fill::before, .bi-person-workspace::before { content:"♙" !important; }.bi-person-badge::before, .bi-person-fill::before, .bi-person-gear::before, .bi-person-vcard-fill::before { content:"●" !important; }.bi-person-dash-fill::before { content:"−" !important; }.bi-power::before { content:"⏻" !important; }.bi-printer-fill::before { content:"▤" !important; }.bi-reply-fill::before { content:"↩" !important; }.bi-rocket-takeoff-fill::before { content:"↗" !important; }.bi-save::before, .bi-save-fill::before { content:"▣" !important; }.bi-search::before { content:"⌕" !important; }.bi-send::before, .bi-send-fill::before { content:"➤" !important; }.bi-shield-check::before { content:"✓" !important; }.bi-shield-lock-fill::before { content:"⌂" !important; }.bi-sliders2::before { content:"≡" !important; }.bi-tools::before { content:"⚒" !important; }.bi-trash::before, .bi-x-octagon-fill::before { content:"×" !important; }.bi-upload::before { content:"⇧" !important; }.bi-c-circle::before { content:"©" !important; }
/* La photo est réduite dans le disque : ses quatre bords restent visibles, sans découpe par le cadre circulaire. */
.orbit-photo { border-radius: 50% !important; overflow: hidden !important; padding: 4px !important; border-color: var(--gold-500); background: #fff; display: grid !important; place-items: center; }
.orbit-photo img { width: 70% !important; height: 70% !important; border-radius: 0 !important; object-fit: contain !important; object-position: center !important; background: #fff; }

/* Recherche : le champ et le bouton disposent de colonnes distinctes, même sur les écrans étroits. */
.topbar-search { display: grid !important; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 0; position: static; max-width: 430px; }
.topbar-search > .bi-search { display: none !important; }
.topbar-search input { min-width: 0; width: 100%; padding: 8px 12px; border-radius: 8px 0 0 8px; }
.topbar-search-submit { min-height: 34px; white-space: nowrap; border-radius: 0 8px 8px 0; }
@media (max-width: 1050px) { .topbar-search { max-width: 290px; margin: 0 8px; } .topbar-search input { min-width: 0; } }

/* L’orbite n’utilise plus de photo de fond en mode cover : celle-ci était forcément rognée par le disque. */
.login-hero-orbit { background-image: radial-gradient(circle at center, rgba(201,162,39,.14), rgba(5,22,42,.2) 62%, transparent 63%) !important; background-size: auto !important; background-position: center !important; overflow: visible !important; }
.login-hero-orbit::before { z-index: 0; }
.orbit-photo { border-radius: 50% !important; overflow: hidden !important; }
.orbit-photo img { width: 78% !important; height: 78% !important; border-radius: 0 !important; }

/* Communiqués généraux visibles dès l’accueil, sans exposer les annonces réservées à un rôle. */
.login-public-announcements { margin-top: 18px; border: 1px solid rgba(201,162,39,.42); border-radius: 14px; overflow: hidden; background: rgba(255,255,255,.96); box-shadow: 0 8px 22px rgba(4,24,47,.12); }
.login-public-announcements-title { padding: 10px 13px; color: #fff; background: linear-gradient(100deg, var(--navy-900), var(--navy-700)); font-size: 12px; font-weight: 800; letter-spacing: .15px; }
.login-public-announcement { padding: 10px 13px; border-top: 1px solid #edf0f4; }
.login-public-announcement:first-of-type { border-top: 0; }
.login-public-announcement > div { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; }
.login-public-announcement strong { color: var(--navy-900); font-size: 12px; line-height: 1.3; }
.login-public-announcement time { flex: 0 0 auto; color: var(--muted); font-size: 10px; }
.login-public-announcement p { margin: 4px 0 0; color: #536277; font-size: 11.5px; line-height: 1.4; white-space: pre-line; }
@media (max-width: 900px) { .login-public-announcements { margin-top: 12px; } }

/* Occupation visuelle des salles : barres proportionnelles à la plage ouvrée hebdomadaire. */
.room-utilisation-chart { margin: 16px 0 18px; padding: 16px; border: 1px solid var(--sig-border); border-radius: 12px; background: linear-gradient(145deg, #fff, #f6f9ff); }
.room-utilisation-heading { display: flex; justify-content: space-between; gap: 16px; align-items: end; margin-bottom: 13px; }.room-utilisation-heading h3 { margin: 3px 0 0; color: var(--sig-navy); font-size: 16px; }.room-utilisation-heading p { margin: 0; color: var(--muted); font-size: 11px; }
.room-utilisation-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 11px; }.room-utilisation-grid article { padding: 11px; border: 1px solid #e7edf6; border-radius: 9px; background: #fff; }.room-utilisation-label { display: flex; justify-content: space-between; gap: 8px; color: var(--sig-navy); font-size: 12px; }.room-utilisation-label span { color: var(--sig-blue); font-weight: 800; }.room-utilisation-track { height: 9px; margin: 9px 0 6px; border-radius: 999px; overflow: hidden; background: #e6edf7; }.room-utilisation-track i { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--sig-blue), #54a7ff); }.room-utilisation-grid small { color: var(--muted); font-size: 10.5px; }
@media (max-width: 860px) { .room-utilisation-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }.room-utilisation-heading { align-items: flex-start; flex-direction: column; } } @media (max-width: 520px) { .room-utilisation-grid { grid-template-columns: 1fr; } }
@media (max-width: 900px) { .orbit-photo { padding: 2px !important; } }
.card-header-line { display: grid; grid-template-columns: 1fr 54px 1fr; gap: 8px; align-items: center; text-align: left; color: #586b85; font-size: 8px; font-weight: 700; letter-spacing: .15px; line-height: 1.35; text-transform: uppercase; }
.card-header-line small { font-size: 7px; font-weight: 500; letter-spacing: 0; text-transform: none; }.card-header-line img { width: 44px; height: 50px; margin: auto; object-fit: contain; }.card-header-line .text-end { text-align: right; }
.card-school-title { margin: 11px 0 7px; color: var(--sig-navy); font-size: 18px; font-weight: 800; letter-spacing: -.45px; text-align: center; }
.card-label { display: table; margin: 0 auto 15px; padding: 4px 10px; border: 1px solid #b9d0f5; border-radius: 999px; background: #edf4ff; color: #295a9e; font-size: 10px; font-weight: 700; text-align: center; }.card-label small { margin-left: 4px; font-weight: 500; }
.card-front-main { display: grid; grid-template-columns: 94px 1fr; align-items: start; gap: 15px; }.card-photo { width: 94px; height: 119px; overflow: hidden; border: 3px solid #fff; border-radius: 10px; background: #eaf1fc; box-shadow: 0 0 0 1px rgba(17,31,61,.16), 0 5px 12px rgba(17,31,61,.14); }.card-photo img { display: block; width: 100%; height: 100%; object-fit: cover; }
.card-data { padding-top: 2px; }.card-data p { margin: 0 0 6px; color: #3e506b; font-size: 10.5px; line-height: 1.18; }.card-data b { margin-right: 3px; color: var(--sig-navy); font-size: 9px; letter-spacing: .24px; }.card-inline { display: inline-block; margin-left: 7px; }.card-validity { position: absolute; left: 20px; right: 20px; bottom: 15px; padding-top: 8px; border-top: 1px dashed #b9c9df; color: #5d6f88; font-size: 9px; text-align: center; }
.card-back-logo { position: absolute; top: 18px; left: 21px; width: 54px; height: 54px; border-radius: 50%; background: #fff; padding: 6px; box-shadow: 0 2px 8px rgba(17,31,61,.12); }.card-back-logo img { width: 100%; height: 100%; object-fit: contain; }.student-id-back .card-school-title { margin: 8px 60px 4px; }.card-contact { margin: 0 35px 17px; color: #63748b; font-size: 8.5px; font-weight: 650; text-align: center; }
.card-back-row { display: flex; align-items: center; justify-content: space-around; gap: 24px; margin-top: 7px; }.card-qr { width: 104px; height: 104px; padding: 4px; border: 1px solid #c8d8ee; border-radius: 8px; background: #fff; image-rendering: pixelated; }.card-signature { min-width: 170px; display: grid; gap: 7px; color: #596a80; font-size: 9.5px; text-align: center; }.card-signature b { color: var(--sig-navy); font-size: 14px; }.card-signature em { color: #a34040; font-family: 'Playfair Display', Georgia, serif; font-size: 10px; }.card-verify-text { margin-top: auto; padding-top: 11px; border-top: 1px dashed #b9c9df; color: #5d6f88; font-size: 8.5px; text-align: center; }
@media (max-width: 760px) { .student-card-print-wrap { grid-template-columns: 1fr; max-width: 500px; }.student-id-card { min-height: 316px; } }
@media (max-width: 430px) { .student-id-card { min-height: 300px; padding: 16px; border-radius: 12px; }.card-header-line { grid-template-columns: 1fr 43px 1fr; font-size: 6.8px; }.card-header-line img { width: 38px; height: 42px; }.card-school-title { margin: 8px 0 6px; font-size: 15px; }.card-label { margin-bottom: 11px; font-size: 8.5px; }.card-front-main { grid-template-columns: 76px 1fr; gap: 12px; }.card-photo { width: 76px; height: 99px; }.card-data p { margin-bottom: 4px; font-size: 9px; }.card-data b { font-size: 7.5px; }.card-validity { left: 16px; right: 16px; bottom: 12px; font-size: 7.5px; }.card-back-logo { top: 15px; left: 16px; width: 45px; height: 45px; }.student-id-back .card-school-title { margin: 8px 48px 4px; font-size: 14px; }.card-contact { margin: 0 27px 10px; font-size: 7.2px; }.card-back-row { gap: 11px; margin-top: 2px; }.card-qr { width: 88px; height: 88px; }.card-signature { min-width: 130px; font-size: 8px; gap: 5px; }.card-signature b { font-size: 12px; }.card-verify-text { padding-top: 7px; font-size: 7.3px; } }
@media print { .sidebar, .topbar, .no-print { display: none !important; }.app-shell, .main-col, .content { display: block !important; min-height: 0 !important; background: #fff !important; padding: 0 !important; }.student-card-print-wrap { width: 176mm; max-width: none; grid-template-columns: 86mm 86mm; gap: 4mm; page-break-inside: avoid; }.student-id-card { min-height: 54mm; width: 86mm; border-radius: 0; box-shadow: none; }.student-id-card::after { display: none; } @page { size: A4 landscape; margin: 12mm; } }
