    /* ─── DARK THEME (default) ─── */
    :root {
      --bg: #0d1117;
      --surface: #161b27;
      --surface2: #1c2236;
      --surface3: #222840;
      --border: #2d3554;
      --border2: #3a4468;
      --accent: #4f8ef7;
      --accent2: #7c5cfc;
      --accent3: #34d399;
      --accent4: #f59e0b;
      --danger: #ef4444;
      --info: #06b6d4;
      --text: #dde3f0;
      --text2: #7e8db0;
      --text3: #4a5470;
      --radius: 14px;
      --radius-sm: 9px;
      --shadow: 0 8px 32px rgba(0, 0, 0, .5);
      --glow: 0 0 24px rgba(79, 142, 247, .18);
      --sidebar-w: 252px;
    }

    /* ─── LIGHT THEME ─── */
    [data-theme="light"] {
      --bg: #f0f2f8;
      --surface: #ffffff;
      --surface2: #f5f7fc;
      --surface3: #eaeef8;
      --border: #d0d8ee;
      --border2: #b8c4e0;
      --text: #1a2040;
      --text2: #5a6490;
      --text3: #9aa0be;
      --shadow: 0 8px 32px rgba(0, 0, 50, .12);
      --glow: 0 0 24px rgba(79, 142, 247, .2);
    }

    [data-theme="light"] .topbar {
      background: rgba(255, 255, 255, .95);
    }

    [data-theme="light"] .sidebar {
      background: var(--surface);
    }

    [data-theme="light"] #screen-login {
      background: radial-gradient(ellipse 80% 60% at 20% 10%, #c8d8ff 0%, transparent 60%), radial-gradient(ellipse 60% 50% at 80% 90%, #d8ccff 0%, transparent 60%), var(--bg);
    }

    [data-theme="light"] #screen-kiosk {
      background: radial-gradient(ellipse 70% 50% at 50% 0%, #c8d8ff, transparent 70%), var(--bg);
    }

    [data-theme="light"] .kiosk-time {
      background: linear-gradient(135deg, var(--text), var(--text2));
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
    }

    [data-theme="light"] .form-group input,
    [data-theme="light"] .form-group select,
    [data-theme="light"] .form-group textarea {
      background: var(--surface2);
      color: var(--text);
    }

    [data-theme="light"] .form-group select option {
      background: var(--surface2);
      color: var(--text);
    }

    * {
      box-sizing: border-box;
      margin: 0;
      padding: 0
    }

    body {
      font-family: 'DM Sans', sans-serif;
      background: var(--bg);
      color: var(--text);
      min-height: 100vh;
      overflow-x: hidden;
      transition: background .3s, color .3s
    }

    h1,
    h2,
    h3,
    h4,
    h5 {
      font-family: 'Syne', sans-serif;
      letter-spacing: -.02em
    }

    a {
      color: var(--accent);
      text-decoration: none
    }

    ::-webkit-scrollbar {
      width: 5px;
      height: 5px
    }

    ::-webkit-scrollbar-track {
      background: transparent
    }

    ::-webkit-scrollbar-thumb {
      background: var(--border2);
      border-radius: 3px
    }

    /* ─── SCREENS ─── */
    .screen {
      display: none;
      min-height: 100vh
    }

    .screen.active {
      display: flex
    }

    /* ─── LOGIN ─── */
    #screen-login {
      align-items: center;
      justify-content: center;
      background: radial-gradient(ellipse 80% 60% at 20% 10%, #1a2650 0%, transparent 60%),
        radial-gradient(ellipse 60% 50% at 80% 90%, #1a1040 0%, transparent 60%),
        var(--bg);
    }

    .login-wrap {
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 32px;
      width: 100%;
      max-width: 440px;
      padding: 24px
    }

    .login-brand {
      text-align: center
    }

    .login-brand .logo-ring {
      width: 72px;
      height: 72px;
      display: flex;
      align-items: center;
      justify-content: center;
      margin: 0 auto 16px;
    }

    .login-brand .logo-ring svg {
      width: 100%;
      height: 100%;
      display: block;
    }

    .login-brand h1 {
      font-size: 28px;
      font-weight: 800;
      color: var(--text);
      margin-bottom: 4px
    }

    .login-brand p {
      color: var(--text2);
      font-size: 14px
    }

    .login-card {
      background: var(--surface);
      border: 1px solid var(--border);
      border-radius: 20px;
      padding: 36px;
      width: 100%;
      box-shadow: var(--shadow);
    }

    .login-card h2 {
      font-size: 20px;
      font-weight: 800;
      margin-bottom: 4px
    }

    .login-card .sub {
      color: var(--text2);
      font-size: 13px;
      margin-bottom: 28px
    }

    .login-kiosk {
      text-align: center;
      background: var(--surface);
      border: 1px solid var(--border);
      border-radius: 12px;
      padding: 14px 20px;
      width: 100%;
      cursor: pointer;
      color: var(--text2);
      font-size: 13px;
      transition: all .2s;
    }

    .login-kiosk:hover {
      border-color: var(--accent);
      color: var(--accent)
    }

    .login-kiosk span {
      font-size: 18px;
      margin-right: 8px
    }

    /* ─── KIOSK ─── */
    #screen-kiosk {
      flex-direction: column;
      align-items: center;
      justify-content: center;
      padding: 40px 20px;
      background: radial-gradient(ellipse 70% 50% at 50% 0%, #1a2040, transparent 70%), var(--bg);
    }

    .kiosk-logo {
      display: flex;
      align-items: center;
      gap: 12px;
      margin-bottom: 16px
    }

    .kiosk-logo .lring {
      width: 44px;
      height: 44px;
      display: flex;
      align-items: center;
      justify-content: center;
    }

    .kiosk-logo .lring svg {
      width: 100%;
      height: 100%;
      display: block
    }

    .kiosk-logo span {
      font-family: 'Syne', sans-serif;
      font-size: 20px;
      font-weight: 700
    }

    .kiosk-time {
      font-family: 'Syne', sans-serif;
      font-size: 80px;
      font-weight: 800;
      background: linear-gradient(135deg, var(--text), var(--text2));
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      margin-bottom: 8px;
      line-height: 1;
      letter-spacing: -4px;
    }

    .kiosk-date {
      color: var(--text2);
      font-size: 16px;
      margin-bottom: 32px;
      text-align: center
    }

    .kiosk-subtitle {
      color: var(--text2);
      font-size: 16px;
      margin-bottom: 24px;
      text-align: center
    }

    .kiosk-grid {
      display: flex;
      flex-wrap: wrap;
      gap: 16px;
      justify-content: center;
      max-width: 960px;
      margin-bottom: 32px
    }

    .kiosk-card {
      background: var(--surface);
      border: 2px solid var(--border);
      border-radius: 18px;
      padding: 22px 20px;
      text-align: center;
      cursor: pointer;
      transition: all .25s;
      min-width: 160px;
      max-width: 200px;
      position: relative;
    }

    .kiosk-card:hover {
      border-color: var(--accent);
      transform: translateY(-3px);
      box-shadow: var(--glow)
    }

    .kiosk-card.entrada-done {
      border-color: var(--accent3);
      background: rgba(52, 211, 153, .07)
    }

    .kiosk-card.salida-done {
      border-color: var(--accent4);
      background: rgba(245, 158, 11, .07)
    }

    .kiosk-card .av-big {
      width: 56px;
      height: 56px;
      border-radius: 50%;
      margin: 0 auto 12px;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 20px;
      font-weight: 800;
      font-family: 'Syne', sans-serif;
      border: 3px solid rgba(255, 255, 255, .1)
    }

    .kiosk-card .tname {
      font-weight: 700;
      font-size: 14px;
      margin-bottom: 6px
    }

    .kiosk-card .kiosk-fichajes {
      display: flex;
      flex-direction: column;
      gap: 3px;
      margin-top: 4px
    }

    .kiosk-fichaje-row {
      font-size: 11px;
      padding: 3px 8px;
      border-radius: 6px;
      font-weight: 600
    }

    .kiosk-fichaje-row.entrada {
      background: rgba(52, 211, 153, .15);
      color: var(--accent3)
    }

    .kiosk-fichaje-row.salida {
      background: rgba(245, 158, 11, .15);
      color: var(--accent4)
    }

    .kiosk-action-hint {
      font-size: 11px;
      color: var(--text3);
      margin-top: 6px
    }

    .kiosk-back-btn {
      background: var(--surface);
      border: 1px solid var(--border);
      color: var(--text2);
      padding: 10px 24px;
      border-radius: 8px;
      cursor: pointer;
      font-size: 13px;
      transition: all .2s
    }

    .kiosk-back-btn:hover {
      border-color: var(--accent);
      color: var(--accent)
    }

    /* ─── APP LAYOUT ─── */
    #screen-app {
      flex-direction: row
    }

    .sidebar {
      width: var(--sidebar-w);
      min-width: var(--sidebar-w);
      background: var(--surface);
      border-right: 1px solid var(--border);
      display: flex;
      flex-direction: column;
      height: 100vh;
      position: sticky;
      top: 0;
      overflow-y: auto;
      transition: transform .3s, width .3s;
      z-index: 100;
    }

    .sb-logo {
      padding: 22px 18px 16px;
      border-bottom: 1px solid var(--border);
      display: flex;
      align-items: center;
      gap: 10px
    }

    .sb-logo .lr {
      width: 34px;
      height: 34px;
      flex-shrink: 0;
      display: flex;
      align-items: center;
      justify-content: center
    }

    .sb-logo .lr svg {
      width: 100%;
      height: 100%;
      display: block
    }

    .sb-logo span {
      font-family: 'Syne', sans-serif;
      font-size: 14px;
      font-weight: 700;
      letter-spacing: .2px;
      color: var(--text)
    }

    .sb-user {
      padding: 14px 16px;
      border-bottom: 1px solid var(--border);
      display: flex;
      align-items: center;
      gap: 10px
    }

    .sb-user .av {
      width: 36px;
      height: 36px;
      border-radius: 50%;
      display: flex;
      align-items: center;
      justify-content: center;
      font-weight: 800;
      font-size: 13px;
      flex-shrink: 0;
      font-family: 'Syne', sans-serif
    }

    .sb-user .inf .n {
      font-size: 13px;
      font-weight: 600;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      max-width: 160px
    }

    .sb-user .inf .r {
      font-size: 11px;
      color: var(--text2)
    }

    .sb-nav {
      flex: 1;
      padding: 10px 8px
    }

    .nav-sec {
      font-size: 10px;
      font-weight: 700;
      letter-spacing: 1.2px;
      color: var(--text3);
      padding: 10px 12px 4px;
      text-transform: uppercase
    }

    .nav-item {
      display: flex;
      align-items: center;
      gap: 10px;
      padding: 9px 12px;
      border-radius: 10px;
      cursor: pointer;
      font-size: 13.5px;
      color: var(--text2);
      transition: all .15s;
      margin-bottom: 2px;
      font-weight: 500;
    }

    .nav-item:hover {
      background: var(--surface2);
      color: var(--text)
    }

    .nav-item.active {
      background: rgba(79, 142, 247, .14);
      color: var(--accent);
      font-weight: 600
    }

    .nav-item .ico {
      width: 18px;
      text-align: center;
      flex-shrink: 0;
      font-size: 15px
    }

    .sb-foot {
      padding: 10px 8px;
      border-top: 1px solid var(--border)
    }

    /* ─── HAMBURGER / MOBILE SIDEBAR ─── */
    .hamburger-btn {
      display: none;
      background: var(--surface2);
      border: 1px solid var(--border);
      border-radius: 8px;
      padding: 7px 10px;
      cursor: pointer;
      font-size: 18px;
      color: var(--text);
      transition: all .15s;
    }

    .hamburger-btn:hover {
      border-color: var(--accent)
    }

    .sidebar-overlay {
      display: none;
      position: fixed;
      inset: 0;
      background: rgba(0, 0, 0, .6);
      z-index: 99;
      backdrop-filter: blur(2px);
    }

    .sidebar-overlay.open {
      display: block
    }

    /* ─── MAIN ─── */
    .main-area {
      flex: 1;
      overflow-y: auto;
      height: 100vh;
      display: flex;
      flex-direction: column;
      min-width: 0
    }

    .topbar {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 16px 28px;
      border-bottom: 1px solid var(--border);
      background: var(--surface);
      position: sticky;
      top: 0;
      z-index: 20;
      backdrop-filter: blur(12px);
      gap: 12px;
    }

    .topbar-left {
      display: flex;
      align-items: center;
      gap: 14px;
      min-width: 0;
      flex: 1
    }

    .topbar-left h2 {
      font-size: 19px;
      font-weight: 800;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis
    }

    .topbar-right {
      display: flex;
      gap: 10px;
      align-items: center;
      flex-shrink: 0
    }

    .theme-toggle {
      background: var(--surface2);
      border: 1px solid var(--border);
      border-radius: 8px;
      padding: 7px 11px;
      cursor: pointer;
      font-size: 16px;
      transition: all .2s;
      color: var(--text);
    }

    .theme-toggle:hover {
      border-color: var(--accent4);
      transform: rotate(10deg)
    }

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

    /* ─── FORMS ─── */
    .form-group {
      margin-bottom: 16px
    }

    .form-group label {
      display: block;
      font-size: 12px;
      font-weight: 600;
      color: var(--text2);
      margin-bottom: 6px;
      text-transform: uppercase;
      letter-spacing: .5px
    }

    .form-group input,
    .form-group select,
    .form-group textarea {
      width: 100%;
      background: var(--surface2);
      border: 1px solid var(--border);
      border-radius: var(--radius-sm);
      padding: 10px 13px;
      color: var(--text);
      font-family: 'DM Sans', sans-serif;
      font-size: 14px;
      outline: none;
      transition: border .2s;
    }

    .form-group input:focus,
    .form-group select:focus,
    .form-group textarea:focus {
      border-color: var(--accent);
      box-shadow: 0 0 0 3px rgba(79, 142, 247, .12)
    }

    .form-group textarea {
      resize: vertical;
      min-height: 80px
    }

    .form-group select option {
      background: var(--surface2)
    }

    .form-row {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 14px
    }

    .form-row3 {
      display: grid;
      grid-template-columns: 1fr 1fr 1fr;
      gap: 14px
    }

    .form-row4 {
      display: grid;
      grid-template-columns: 1fr 1fr 1fr 1fr;
      gap: 14px
    }

    /* ─── BUTTONS ─── */
    .btn {
      display: inline-flex;
      align-items: center;
      gap: 7px;
      padding: 10px 18px;
      border-radius: var(--radius-sm);
      font-family: 'DM Sans', sans-serif;
      font-size: 13.5px;
      font-weight: 600;
      border: none;
      cursor: pointer;
      transition: all .18s;
    }

    .btn-primary {
      background: var(--accent);
      color: #fff
    }

    .btn-primary:hover {
      background: #3a7ef0;
      transform: translateY(-1px);
      box-shadow: 0 4px 16px rgba(79, 142, 247, .35)
    }

    .btn-success {
      background: var(--accent3);
      color: #0d1117
    }

    .btn-success:hover {
      background: #28c183
    }

    .btn-warning {
      background: var(--accent4);
      color: #0d1117
    }

    .btn-warning:hover {
      background: #e08a00
    }

    .btn-danger {
      background: var(--danger);
      color: #fff
    }

    .btn-danger:hover {
      background: #dc2626
    }

    .btn-ghost {
      background: var(--surface3);
      color: var(--text);
      border: 1px solid var(--border)
    }

    .btn-ghost:hover {
      background: var(--border)
    }

    .btn-outline {
      background: transparent;
      color: var(--accent);
      border: 1px solid var(--accent)
    }

    .btn-outline:hover {
      background: rgba(79, 142, 247, .1)
    }

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

    .btn-sm {
      padding: 7px 13px;
      font-size: 12.5px
    }

    .btn-xs {
      padding: 4px 10px;
      font-size: 11.5px;
      border-radius: 6px
    }

    /* ─── CARDS ─── */
    .stats-grid {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
      gap: 14px;
      margin-bottom: 22px
    }

    .stat-card {
      background: var(--surface);
      border: 1px solid var(--border);
      border-radius: var(--radius);
      padding: 20px 22px;
      position: relative;
      overflow: hidden;
      transition: border .2s;
    }

    .stat-card:hover {
      border-color: var(--border2)
    }

    .stat-card::before {
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      height: 3px;
      background: var(--accent-color, var(--accent))
    }

    .stat-card .sc-label {
      font-size: 11px;
      color: var(--text2);
      font-weight: 600;
      text-transform: uppercase;
      letter-spacing: .7px;
      margin-bottom: 10px
    }

    .stat-card .sc-val {
      font-family: 'Syne', sans-serif;
      font-size: 34px;
      font-weight: 800;
      color: var(--text);
      line-height: 1
    }

    .stat-card .sc-sub {
      font-size: 12px;
      color: var(--text2);
      margin-top: 6px
    }

    .stat-card .sc-icon {
      position: absolute;
      right: 18px;
      top: 18px;
      font-size: 24px;
      opacity: .5
    }

    .card {
      background: var(--surface);
      border: 1px solid var(--border);
      border-radius: var(--radius);
      overflow: hidden
    }

    .card-head {
      padding: 16px 20px;
      border-bottom: 1px solid var(--border);
      display: flex;
      align-items: center;
      justify-content: space-between;
      flex-wrap: wrap;
      gap: 8px;
    }

    .card-head h3 {
      font-size: 15px;
      font-weight: 700
    }

    .card-head .ch-sub {
      font-size: 12px;
      color: var(--text2);
      margin-top: 2px
    }

    .card-body {
      padding: 20px
    }

    .card-body-sm {
      padding: 12px 16px
    }

    /* ─── TABLE ─── */
    .tbl-wrap {
      overflow-x: auto;
      -webkit-overflow-scrolling: touch
    }

    table {
      width: 100%;
      border-collapse: collapse;
      font-size: 13.5px
    }

    thead th {
      padding: 9px 14px;
      text-align: left;
      font-size: 10.5px;
      font-weight: 700;
      letter-spacing: .6px;
      text-transform: uppercase;
      color: var(--text2);
      background: var(--surface2);
      border-bottom: 1px solid var(--border);
      white-space: nowrap;
    }

    tbody tr {
      border-bottom: 1px solid var(--border);
      transition: background .12s
    }

    tbody tr:hover {
      background: rgba(255, 255, 255, .02)
    }

    tbody tr:last-child {
      border-bottom: none
    }

    tbody td {
      padding: 12px 14px;
      vertical-align: middle
    }

    /* ─── BADGES ─── */
    .badge {
      display: inline-flex;
      align-items: center;
      padding: 3px 9px;
      border-radius: 20px;
      font-size: 11px;
      font-weight: 700;
      letter-spacing: .2px
    }

    .b-blue {
      background: rgba(79, 142, 247, .15);
      color: var(--accent)
    }

    .b-green {
      background: rgba(52, 211, 153, .15);
      color: var(--accent3)
    }

    .b-orange {
      background: rgba(245, 158, 11, .15);
      color: var(--accent4)
    }

    .b-red {
      background: rgba(239, 68, 68, .15);
      color: var(--danger)
    }

    .b-purple {
      background: rgba(124, 92, 252, .15);
      color: var(--accent2)
    }

    .b-cyan {
      background: rgba(6, 182, 212, .15);
      color: var(--info)
    }

    /* ─── AVATAR ─── */
    .av {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      border-radius: 50%;
      font-weight: 800;
      font-family: 'Syne', sans-serif;
      flex-shrink: 0;
    }

    .av-md {
      width: 36px;
      height: 36px;
      font-size: 13px
    }

    .av-sm {
      width: 28px;
      height: 28px;
      font-size: 11px
    }

    .av-lg {
      width: 52px;
      height: 52px;
      font-size: 18px
    }

    /* ─── MODAL ─── */
    .modal-overlay {
      display: none;
      position: fixed;
      inset: 0;
      background: rgba(0, 0, 0, .75);
      z-index: 1000;
      align-items: center;
      justify-content: center;
      backdrop-filter: blur(4px);
      padding: 16px;
    }

    .modal-overlay.open {
      display: flex
    }

    .modal-box {
      background: var(--surface);
      border: 1px solid var(--border2);
      border-radius: 18px;
      padding: 28px;
      width: 620px;
      max-width: 100%;
      max-height: 90vh;
      overflow-y: auto;
      box-shadow: var(--shadow);
      animation: modalIn .2s ease;
    }

    @keyframes modalIn {
      from {
        opacity: 0;
        transform: scale(.95) translateY(8px)
      }

      to {
        opacity: 1;
        transform: none
      }
    }

    .modal-box h3 {
      font-size: 18px;
      font-weight: 800;
      margin-bottom: 20px
    }

    .modal-actions {
      display: flex;
      gap: 10px;
      justify-content: flex-end;
      margin-top: 24px;
      padding-top: 16px;
      border-top: 1px solid var(--border);
      flex-wrap: wrap
    }

    /* ─── CALENDAR ─── */
    .cal-nav {
      display: flex;
      align-items: center;
      gap: 10px
    }

    .cal-nav button {
      background: var(--surface2);
      border: 1px solid var(--border);
      color: var(--text);
      padding: 6px 13px;
      border-radius: 7px;
      cursor: pointer;
      font-size: 14px;
      transition: all .15s
    }

    .cal-nav button:hover {
      background: var(--surface3);
      border-color: var(--border2)
    }

    .cal-nav h4 {
      font-family: 'Syne', sans-serif;
      font-size: 16px;
      font-weight: 800;
      min-width: 180px;
      text-align: center
    }

    .cal-grid-wrap {
      display: grid;
      grid-template-columns: repeat(7, 1fr);
      gap: 3px;
      margin-top: 10px
    }

    .cal-hdr {
      text-align: center;
      font-size: 10.5px;
      font-weight: 700;
      color: var(--text3);
      padding: 6px 2px;
      text-transform: uppercase;
      letter-spacing: .5px
    }

    .cal-day {
      min-height: 80px;
      background: var(--surface2);
      border: 1px solid var(--border);
      border-radius: 9px;
      padding: 7px;
      cursor: pointer;
      transition: all .15s;
      position: relative;
    }

    .cal-day:hover {
      border-color: var(--accent);
      background: rgba(79, 142, 247, .05)
    }

    .cal-day.today {
      border-color: var(--accent);
      background: rgba(79, 142, 247, .08)
    }

    .cal-day.today .dn {
      color: var(--accent);
      font-weight: 800
    }

    .cal-day.om {
      opacity: .25;
      pointer-events: none
    }

    .cal-day .dn {
      font-size: 12px;
      font-weight: 600;
      color: var(--text2);
      margin-bottom: 4px
    }

    .ev-pill {
      font-size: 10px;
      padding: 2px 6px;
      border-radius: 4px;
      margin-bottom: 2px;
      font-weight: 600;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      cursor: default
    }

    .ev-pill.admin {
      background: rgba(124, 92, 252, .25);
      color: var(--accent2)
    }

    .ev-pill.personal {
      background: rgba(79, 142, 247, .25);
      color: var(--accent)
    }

    .ev-pill.exam {
      background: rgba(245, 158, 11, .25);
      color: var(--accent4)
    }

    /* ─── ATTENDANCE TOGGLE ─── */
    .att-toggle {
      display: flex;
      gap: 8px;
      flex-wrap: wrap
    }

    .att-btn {
      padding: 8px 18px;
      border-radius: 9px;
      border: 2px solid var(--border);
      background: var(--surface2);
      color: var(--text2);
      font-size: 13.5px;
      font-weight: 600;
      cursor: pointer;
      transition: all .2s;
    }

    .att-btn.present.sel {
      border-color: var(--accent3);
      background: rgba(52, 211, 153, .12);
      color: var(--accent3)
    }

    .att-btn.absent.sel {
      border-color: var(--danger);
      background: rgba(239, 68, 68, .12);
      color: var(--danger)
    }

    .att-btn.late.sel {
      border-color: var(--accent4);
      background: rgba(245, 158, 11, .12);
      color: var(--accent4)
    }

    /* ─── NOTIFY ─── */
    #notif {
      position: fixed;
      top: 20px;
      right: 20px;
      background: var(--surface2);
      border: 1px solid var(--border2);
      border-radius: 10px;
      padding: 13px 18px;
      font-size: 13.5px;
      color: var(--text);
      box-shadow: var(--shadow);
      z-index: 9999;
      transform: translateX(calc(100% + 30px));
      transition: transform .3s cubic-bezier(.175, .885, .32, 1.275);
      max-width: 300px;
      min-width: 220px;
    }

    #notif.show {
      transform: translateX(0)
    }

    #notif.ok {
      border-color: var(--accent3);
      background: rgba(52, 211, 153, .1)
    }

    #notif.err {
      border-color: var(--danger);
      background: rgba(239, 68, 68, .1)
    }

    #notif .ni {
      font-size: 16px;
      margin-right: 8px
    }

    /* ─── SEARCH ─── */
    .search-wrap {
      position: relative
    }

    .search-wrap input {
      background: var(--surface2);
      border: 1px solid var(--border);
      border-radius: 9px;
      padding: 8px 14px 8px 36px;
      color: var(--text);
      font-size: 13px;
      font-family: 'DM Sans', sans-serif;
      outline: none;
      width: 100%;
      transition: border .2s;
    }

    .search-wrap input:focus {
      border-color: var(--accent)
    }

    .search-wrap::before {
      content: '🔍';
      position: absolute;
      left: 11px;
      top: 50%;
      transform: translateY(-50%);
      font-size: 12px;
      pointer-events: none
    }

    /* ─── EMPTY ─── */
    .empty-state {
      text-align: center;
      padding: 52px 20px;
      color: var(--text2)
    }

    .empty-state .ei {
      font-size: 48px;
      margin-bottom: 12px;
      opacity: .6
    }

    .empty-state p {
      font-size: 14px
    }

    /* ─── DIVIDER ─── */
    .divider {
      height: 1px;
      background: var(--border);
      margin: 16px 0
    }

    /* ─── GRID HELPERS ─── */
    .g2 {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 18px
    }

    .g3 {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 18px
    }

    /* ─── SECTION HEADER ─── */
    .sec-hdr {
      display: flex;
      align-items: flex-end;
      justify-content: space-between;
      margin-bottom: 18px;
      flex-wrap: wrap;
      gap: 10px
    }

    .sec-hdr h2 {
      font-size: 22px;
      font-weight: 800
    }

    .sec-hdr p {
      font-size: 13px;
      color: var(--text2);
      margin-top: 3px
    }

    /* ─── STUDENT CARD ─── */
    .stu-card {
      background: var(--surface);
      border: 1px solid var(--border);
      border-radius: 12px;
      padding: 16px;
      transition: border .2s, transform .2s;
    }

    .stu-card:hover {
      border-color: var(--border2);
      transform: translateY(-1px)
    }

    /* ─── CLASS CARD (horario profesor) ─── */
    .clase-card {
      background: var(--surface);
      border: 1px solid var(--border);
      border-radius: 14px;
      padding: 20px;
      cursor: pointer;
      transition: all .2s;
      position: relative;
      overflow: hidden;
    }

    .clase-card::before {
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      width: 4px;
      height: 100%;
      background: var(--card-accent, var(--accent))
    }

    .clase-card:hover {
      border-color: var(--border2);
      transform: translateY(-2px);
      box-shadow: var(--shadow)
    }

    .clase-card .cc-hora {
      font-family: 'Syne', sans-serif;
      font-size: 28px;
      font-weight: 800;
      color: var(--accent);
      line-height: 1
    }

    .clase-card .cc-info {
      font-size: 13px;
      color: var(--text2);
      margin-top: 6px
    }

    .clase-card .cc-alumnos {
      font-size: 12px;
      color: var(--text3);
      margin-top: 8px
    }

    /* ─── ALUMNO ATT CARD ─── */
    .alu-att-card {
      background: var(--surface2);
      border: 1.5px solid var(--border);
      border-radius: 12px;
      padding: 14px;
      display: flex;
      align-items: center;
      justify-content: space-between;
      gap: 10px;
      transition: border .2s;
    }

    .alu-att-card.presente {
      border-color: var(--accent3);
      background: rgba(52, 211, 153, .07)
    }

    .alu-att-card.ausente {
      border-color: var(--danger);
      background: rgba(239, 68, 68, .07)
    }

    .att-status-btn {
      padding: 8px 14px;
      border-radius: 9px;
      border: 2px solid var(--border);
      font-size: 13px;
      font-weight: 700;
      cursor: pointer;
      transition: all .2s;
      font-family: 'DM Sans', sans-serif;
      min-width: 100px;
      text-align: center;
    }

    .att-status-btn.presente {
      border-color: var(--accent3);
      background: rgba(52, 211, 153, .12);
      color: var(--accent3)
    }

    .att-status-btn.ausente {
      border-color: var(--danger);
      background: rgba(239, 68, 68, .12);
      color: var(--danger)
    }

    .att-status-btn.sin-marcar {
      border-color: var(--border2);
      background: var(--surface3);
      color: var(--text2)
    }

    /* ─── PILL LIST ─── */
    .pill-list {
      display: flex;
      flex-wrap: wrap;
      gap: 6px
    }

    /* ─── TABS ─── */
    .tabs {
      display: flex;
      gap: 2px;
      margin-bottom: 20px;
      background: var(--surface2);
      border-radius: 10px;
      padding: 4px;
      flex-wrap: wrap
    }

    .tab-btn {
      padding: 8px 16px;
      border-radius: 7px;
      cursor: pointer;
      font-size: 13.5px;
      font-weight: 500;
      color: var(--text2);
      border: none;
      background: transparent;
      transition: all .15s;
      font-family: 'DM Sans', sans-serif;
    }

    .tab-btn.active {
      background: var(--surface);
      color: var(--text);
      font-weight: 700;
      box-shadow: 0 2px 8px rgba(0, 0, 0, .3)
    }

    /* ─── PROGRESS BAR ─── */
    .progress-bar {
      height: 6px;
      background: var(--surface2);
      border-radius: 3px;
      overflow: hidden
    }

    .progress-fill {
      height: 100%;
      border-radius: 3px;
      transition: width .4s
    }

    /* ─── INFO ROW ─── */
    .info-row {
      display: flex;
      justify-content: space-between;
      align-items: center;
      padding: 10px 0;
      border-bottom: 1px solid var(--border)
    }

    .info-row:last-child {
      border-bottom: none
    }

    .info-row .label {
      font-size: 12px;
      color: var(--text2);
      font-weight: 500
    }

    .info-row .value {
      font-size: 13px;
      font-weight: 600
    }

    /* ─── FILTER BAR ─── */
    .filter-bar {
      display: flex;
      gap: 10px;
      flex-wrap: wrap;
      align-items: center;
      margin-bottom: 16px;
      padding: 14px;
      background: var(--surface2);
      border-radius: 10px;
      border: 1px solid var(--border)
    }

    /* ─── PDF DROPDOWN ─── */
    .pdf-dropdown-wrap {
      position: relative
    }

    .pdf-dropdown-wrap .pdf-menu {
      display: none;
      position: absolute;
      top: calc(100% + 8px);
      right: 0;
      background: var(--surface2);
      border: 1px solid var(--border2);
      border-radius: 12px;
      box-shadow: var(--shadow);
      min-width: 260px;
      z-index: 200;
      overflow: hidden;
      animation: modalIn .15s ease;
    }

    .pdf-dropdown-wrap.open .pdf-menu {
      display: block
    }

    .pdf-menu-item {
      display: flex;
      align-items: center;
      gap: 12px;
      padding: 13px 16px;
      cursor: pointer;
      transition: background .15s;
      font-size: 13.5px;
      border-bottom: 1px solid var(--border);
    }

    .pdf-menu-item:last-child {
      border-bottom: none
    }

    .pdf-menu-item:hover {
      background: var(--surface3)
    }

    .pdf-menu-item .pmi-ico {
      font-size: 20px;
      flex-shrink: 0
    }

    .pdf-menu-item .pmi-text .pmi-title {
      font-weight: 700;
      margin-bottom: 2px
    }

    .pdf-menu-item .pmi-text .pmi-sub {
      font-size: 11px;
      color: var(--text2)
    }

    .pdf-menu-sep {
      padding: 8px 16px 4px;
      font-size: 10px;
      font-weight: 700;
      letter-spacing: .8px;
      color: var(--text3);
      text-transform: uppercase
    }

    /* ─── FICHAJE BADGE ─── */
    .fichaje-pill {
      display: inline-flex;
      align-items: center;
      gap: 5px;
      padding: 4px 10px;
      border-radius: 8px;
      font-size: 12px;
      font-weight: 700;
      margin: 2px
    }

    .fichaje-pill.entrada {
      background: rgba(52, 211, 153, .15);
      color: var(--accent3)
    }

    .fichaje-pill.salida {
      background: rgba(245, 158, 11, .15);
      color: var(--accent4)
    }

    /* ─── RESPONSIVE ─── */
    @media(max-width:900px) {
      .g2 {
        grid-template-columns: 1fr
      }

      .g3 {
        grid-template-columns: 1fr 1fr
      }

      .form-row3 {
        grid-template-columns: 1fr 1fr
      }

      .form-row4 {
        grid-template-columns: 1fr 1fr
      }

      .stats-grid {
        grid-template-columns: repeat(2, 1fr)
      }

      .content {
        padding: 18px 16px
      }

      .topbar {
        padding: 14px 16px
      }
    }

    @media(max-width:768px) {
      .sidebar {
        position: fixed;
        left: 0;
        top: 0;
        height: 100vh;
        transform: translateX(-100%);
        z-index: 100;
      }

      .sidebar.mobile-open {
        transform: translateX(0)
      }

      .hamburger-btn {
        display: flex
      }

      .main-area {
        width: 100%
      }

      .kiosk-time {
        font-size: 52px;
        letter-spacing: -2px
      }

      .form-row {
        grid-template-columns: 1fr
      }

      .form-row3 {
        grid-template-columns: 1fr
      }

      .form-row4 {
        grid-template-columns: 1fr 1fr
      }

      .sec-hdr {
        flex-direction: column;
        align-items: flex-start
      }

      .card-head {
        flex-direction: column;
        align-items: flex-start
      }

      .modal-box {
        padding: 20px
      }

      .stats-grid {
        grid-template-columns: 1fr 1fr
      }

      .cal-day {
        min-height: 56px
      }

      .cal-nav h4 {
        min-width: 120px;
        font-size: 14px
      }

      .topbar-left h2 {
        font-size: 16px
      }
    }

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

      .kiosk-grid {
        padding: 0 8px
      }

      .kiosk-card {
        min-width: 140px
      }

      .filter-bar {
        flex-direction: column;
        align-items: stretch
      }

      .form-row4 {
        grid-template-columns: 1fr
      }
    }
