/* Identidad común. Se carga después de Bootstrap y del CSS aislado. */
:root {
  --dc-ink: #162c46;
  --dc-muted: #5c6d81;
  --dc-blue: #245bd6;
  --dc-teal: #087b73;
  --dc-line: #e0e7ee;
  --dc-canvas: #f4f6f9;
  --dc-radius: 16px;
  --dc-shadow: 0 4px 20px #172e4810;
  --bs-primary: #245bd6;
  --bs-primary-rgb: 36, 91, 214;
  --bs-success-rgb: 8, 123, 115;
  --bs-body-color: #162c46;
  --bs-body-bg: #f4f6f9;
  --bs-border-color: #e0e7ee;
  --bs-link-color: #245bd6;
  --bs-link-hover-color: #1746ae;
}
html { scroll-padding-top: 88px; }
body.dc-app { margin: 0; font-family: 'Segoe UI', system-ui, sans-serif; font-size: .94rem; line-height: 1.55; color: var(--dc-ink); background: var(--dc-canvas); -webkit-font-smoothing: antialiased; }
.dc-app a { text-underline-offset: 3px; }
.dc-app h1, .dc-app h2, .dc-app h3 { color: var(--dc-ink); line-height: 1.25; }
.dc-app h1 { font-size: clamp(1.65rem, 2.2vw, 2.15rem); font-weight: 720; letter-spacing: -.045em; }
.dc-app h2 { letter-spacing: -.025em; }
.dc-app h3 { letter-spacing: -.015em; }
.dc-app .text-white :is(h1,h2,h3,h4) { color: inherit; }
.dc-app .text-muted, .dc-app .text-secondary { color: var(--dc-muted) !important; }
.dc-app .content > h1, .dc-app .content > h2, .dc-app .content > h3 { margin-top: .5rem; }
.dc-app .content > p { color: var(--dc-muted); margin-bottom: 1.5rem; }
.dc-app .card { --bs-card-bg: #fff; --bs-card-border-color: var(--dc-line); --bs-card-border-radius: var(--dc-radius); overflow: visible; box-shadow: var(--dc-shadow); }
.dc-app .card.shadow-sm, .dc-app .card.shadow-lg { box-shadow: var(--dc-shadow) !important; }
.dc-app .card-body { padding: 1.35rem; }
.dc-app .card-header { padding: 1rem 1.35rem; border-bottom-color: var(--dc-line); background: #fbfcfe; font-weight: 650; border-radius: var(--dc-radius) var(--dc-radius) 0 0; }
.dc-app .card-footer { background: #fbfcfe; padding: .85rem 1.35rem; border-top-color: var(--dc-line); }
.dc-app .card h3.h5 { font-size: 1.05rem; font-weight: 700; }
.dc-app .btn { --bs-btn-border-radius: 9px; --bs-btn-font-size: .88rem; --bs-btn-font-weight: 600; --bs-btn-padding-x: 1rem; --bs-btn-padding-y: .6rem; transition: background-color .15s, border-color .15s, box-shadow .15s; }
.dc-app .btn-primary { --bs-btn-bg: var(--dc-blue); --bs-btn-border-color: var(--dc-blue); --bs-btn-hover-bg: #194bc0; --bs-btn-hover-border-color: #194bc0; --bs-btn-active-bg: #153fa2; box-shadow: 0 3px 8px #245bd622; }
.dc-app .btn-success { --bs-btn-bg: var(--dc-teal); --bs-btn-border-color: var(--dc-teal); --bs-btn-hover-bg: #05665f; --bs-btn-hover-border-color: #05665f; }
.dc-app .btn-outline-primary { --bs-btn-color: #245bd6; --bs-btn-border-color: #bed0f6; --bs-btn-hover-bg: #edf3ff; --bs-btn-hover-color: #1746ae; --bs-btn-hover-border-color: #8daeea; --bs-btn-active-bg: #245bd6; }
.dc-app .btn-outline-secondary { --bs-btn-color: #52667d; --bs-btn-border-color: #d0dbe5; --bs-btn-hover-bg: #f0f4f8; --bs-btn-hover-color: #213d59; --bs-btn-hover-border-color: #9db0c3; }
.dc-app .btn-outline-success { --bs-btn-color: #086b64; --bs-btn-border-color: #b3d7d1; --bs-btn-hover-bg: #eaf7f3; --bs-btn-hover-color: #075b55; --bs-btn-hover-border-color: #64a99c; }
.dc-app .btn-sm { --bs-btn-padding-x: .7rem; --bs-btn-padding-y: .4rem; --bs-btn-font-size: .79rem; }
.dc-app .btn-lg { --bs-btn-padding-y: .85rem; --bs-btn-font-size: .97rem; }
.dc-app .form-control, .dc-app .form-select { min-height: 43px; border-color: #ccd8e3; border-radius: 9px; background-color: #fff; color: var(--dc-ink); font-size: .91rem; padding-top: .65rem; padding-bottom: .65rem; }
.dc-app .form-control::placeholder { color: #7b8898; opacity: 1; }
.dc-app .form-control:focus, .dc-app .form-select:focus { border-color: #6e94e8; box-shadow: 0 0 0 3px #245bd61c; }
.dc-app .form-control:disabled, .dc-app .form-select:disabled { background-color: #edf1f5; color: #637185; }
.dc-app .form-control-sm, .dc-app .form-select-sm { min-height: 36px; padding-block: .35rem; font-size: .82rem; }
.dc-app .form-label { color: #31465f; font-size: .86rem; font-weight: 650; margin-bottom: .5rem; }
.dc-app .form-text { color: var(--dc-muted); font-size: .8rem; line-height: 1.55; }
.dc-app .form-check-input:checked { background-color: var(--dc-blue); border-color: var(--dc-blue); }
.dc-app .table { --bs-table-bg: #fff; --bs-table-color: #31465f; --bs-table-striped-bg: #f8fafc; --bs-table-hover-bg: #f0f5fc; --bs-table-border-color: #e8edf3; font-size: .88rem; margin-bottom: 0; }
.dc-app .table > :not(caption) > * > * { padding: .95rem 1rem; vertical-align: middle; }
.dc-app .table thead { --bs-table-bg: #f6f8fc; --bs-table-color: #52657c; font-size: .76rem; letter-spacing: .025em; }
.dc-app .table thead th { font-weight: 700; white-space: nowrap; padding-block: .85rem; }
.dc-app .table td .small, .dc-app .table td small { line-height: 1.5; }
.dc-app .table td .btn { white-space: nowrap; }
.dc-app .table-responsive { border-radius: 0 0 var(--dc-radius) var(--dc-radius); }
.dc-app .badge { padding: .4rem .6rem; border-radius: 6px; font-size: .7rem; font-weight: 650; letter-spacing: .01em; }
.dc-app .badge.bg-success { color: #096656 !important; background: #e0f3eb !important; }
.dc-app .badge.bg-primary { color: #214fb2 !important; background: #e8efff !important; }
.dc-app .badge.bg-danger { color: #a52c3d !important; background: #fce8eb !important; }
.dc-app .badge.bg-warning { color: #805513 !important; background: #fff1d3 !important; }
.dc-app .badge.bg-secondary { color: #52657c !important; background: #eaf0f5 !important; }
.dc-app .alert { border-radius: 12px; padding: 1rem 1.2rem; font-size: .9rem; line-height: 1.6; }
.dc-app .alert-info { color: #235c78; background: #edf7fc; border-color: #d0e9f3; }
.dc-app .alert-warning { color: #835b1f; background: #fff8e9; border-color: #f0dfb7; }
.dc-app .alert-danger { color: #9e3344; background: #fff1f2; border-color: #f2d3da; }
.dc-app .alert-success { color: #136653; background: #edf9f3; border-color: #c8e5d7; }
.dc-app .nav-tabs { gap: .4rem; border-bottom-color: var(--dc-line); }
.dc-app .nav-tabs .nav-link { border-radius: 9px 9px 0 0; padding: .75rem 1rem; color: var(--dc-muted); font-weight: 600; }
.dc-app .nav-tabs .nav-link.active { color: var(--dc-blue); border-color: var(--dc-line) var(--dc-line) #fff; background: #fff; }
.dc-app .pagination { --bs-pagination-color: #245bd6; --bs-pagination-border-color: #dbe4ee; --bs-pagination-active-bg: #245bd6; --bs-pagination-active-border-color: #245bd6; gap: 4px; }
.dc-app .pagination .page-link { border-radius: 7px; }
.dc-app details > summary { cursor: pointer; padding: .8rem 1rem; font-weight: 650; border-radius: 10px; transition: background-color .15s; }
.dc-app details > summary:hover { background-color: #245bd608; }
.dc-app details[open] > summary { margin-bottom: .75rem; }
.dc-app .page-eyebrow, .dc-app .panel-eyebrow, .dc-app .panel-header .panel-eyebrow { color: var(--dc-teal); font-size: .7rem; text-transform: uppercase; font-weight: 750; letter-spacing: .12em; }
.dc-app .page-header { padding: 1.7rem 1.8rem; margin-bottom: 1.5rem; border: 1px solid #dce7ed; border-radius: 18px; background: linear-gradient(115deg, #fff 45%, #eaf5f3); }
.dc-app .page-header h1 { margin: .4rem 0 .55rem; }
.dc-app .page-header p { color: var(--dc-muted); margin-bottom: 0; }
.dc-app .stat-card { border-radius: 15px; background: #fff; padding: 1.3rem; border: 1px solid var(--dc-line); box-shadow: var(--dc-shadow); transition: border-color .15s, box-shadow .15s; }
.dc-app .stat-card:hover { transform: none; border-color: #aebfd7; box-shadow: 0 6px 22px #172e4818; }
.dc-app .stat-card .stat-icon { height: 48px; width: 48px; border-radius: 13px; font-size: 1.35rem; }
.dc-app .stat-card-blue .stat-icon { background: #eaf0ff; }
.dc-app .stat-card-green .stat-icon { background: #e4f5ef; }
.dc-app .stat-card-orange .stat-icon { background: #fff2df; }
.dc-app .stat-card-red .stat-icon { background: #fae9ef; }
.dc-app .stat-label { color: #596d83; font-size: .8rem; font-weight: 600; }
.dc-app .stat-value { color: var(--dc-ink); font-size: 1.85rem; letter-spacing: -.04em; }
.dc-app .stat-detail { font-size: .77rem; }
.dc-app .dashboard-panel { background: #fff; border: 1px solid var(--dc-line); border-radius: 16px; box-shadow: var(--dc-shadow); }
.dc-app .dashboard-date-card { padding: .6rem .9rem; box-shadow: none; border-color: var(--dc-line); border-radius: 10px; font-size: .8rem; color: var(--dc-muted); }
.dc-app .dashboard-date-icon { width: 28px; height: 28px; font-size: 1rem; }
.dc-app .panel-titulo-card, .dc-app .asistencia-titulo-card { border: 1px solid #cddfe4; background: linear-gradient(115deg, #fff, #edf7f4); border-radius: 16px; box-shadow: none; }
.dc-app .profesor-card, .dc-app .alumno-card { border-radius: 16px; box-shadow: var(--dc-shadow); border-color: var(--dc-line); }
.dc-app .dashboard-welcome { display: flex; justify-content: space-between; align-items: center; gap: 1.5rem; flex-wrap: wrap; margin-bottom: 1.6rem; }
.dc-app .dashboard-welcome h1 { margin: .35rem 0 .4rem; }
.dc-app .dashboard-welcome p { color: var(--dc-muted); margin: 0; }
.dc-nav-icon { display: inline-block; width: 19px; height: 19px; flex: 0 0 19px; vertical-align: -.2em; }
.dc-brand { display: inline-flex; align-items: center; gap: .8rem; text-decoration: none; }
.dc-brand-mark { display: grid; place-items: center; width: 39px; height: 39px; border-radius: 12px; background: #d5f3e7; color: #123e4c; font-size: 1.4rem; font-weight: 800; }
.dc-brand-name { font-size: 1.13rem; font-weight: 750; letter-spacing: -.035em; }
.dc-brand-caption { display: block; margin-top: 1px; font-size: .52rem; letter-spacing: .12em; text-transform: uppercase; opacity: .65; white-space: nowrap; }
.dc-app .module-symbol { display: grid; place-items: center; width: 42px; height: 42px; margin-bottom: 1rem; border-radius: 12px; color: #245bd6; background: #edf2fc; }
.dc-app .module-card:nth-child(3n + 2) .module-symbol { color: #087b73; background: #e9f5ef; }
.dc-app .module-card:nth-child(3n) .module-symbol { color: #9b681e; background: #fcf3e3; }
:where(a, button, input, select, textarea, summary):focus-visible { outline: 3px solid #3474df; outline-offset: 3px; }
.dc-app .skip-content { position: fixed; left: 1rem; top: -100px; z-index: 2000; padding: .75rem 1rem; border-radius: 9px; color: #fff; background: #162c46; }
.dc-app .skip-content:focus { top: .7rem; }
@media (max-width: 767px) {
  .dc-app .card-body { padding: 1.1rem; }
  .dc-app .table > :not(caption) > * > * { padding: .8rem; }
  .dc-app .page-header { padding: 1.25rem; }
  .dc-app .stats-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .8rem; }
  .dc-app .stat-card { padding: 1rem; gap: .65rem; }
  .dc-app .stat-card .stat-icon { width: 36px; height: 36px; }
  .dc-app .stat-value { font-size: 1.5rem; }
}
@media (prefers-reduced-motion: reduce) { .dc-app *, .dc-app *::before, .dc-app *::after { scroll-behavior: auto !important; transition: none !important; animation: none !important; } }
@media print {
  .dc-app .sidebar, .dc-app .layout-toggle-bar, .dc-app .navigation-toolbar, .dc-app .skip-content { display: none !important; }
  .dc-app .page, .dc-app .content { background: #fff !important; }
  .dc-app .card, .dc-app .dashboard-panel { box-shadow: none !important; break-inside: avoid; }
  .dc-app .content { padding: 0 !important; }
}
