:root{
  --bg:#F4F7F6;--surface:#fff;--green:#3F5351;--green2:#2F433C;--terracotta:#D96C4A;
  --action:#B95738;--actionHover:#9F452D;--text:#2C3E3A;--muted:#63746F;--line:#DCE5E1;
  --danger:#A13A3A;--warning:#B66A25;--ok:#287552;--shadow:0 12px 34px rgba(38,58,54,.08);
  font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
}
*{box-sizing:border-box} body{margin:0;background:var(--bg);color:var(--text);font-size:15px} button,input,select,textarea{font:inherit}
button{cursor:pointer} a{color:inherit}.hidden{display:none!important}.muted{color:var(--muted)}.small{font-size:.84rem}.nowrap{white-space:nowrap}
.login-shell{min-height:100vh;display:grid;place-items:center;padding:28px;background:linear-gradient(135deg,#F4F7F6 0%,#E8EFEC 100%)}
.login-card{width:min(440px,100%);background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:32px;box-shadow:var(--shadow)}
.brand-lockup{display:flex;gap:13px;align-items:center;margin-bottom:24px}.brand-mark{width:46px;height:46px;border-radius:13px;background:var(--green);display:grid;place-items:center;color:white;font-weight:800;letter-spacing:.04em}
.brand-lockup h1{font-size:1.35rem;margin:0}.brand-lockup p{margin:4px 0 0;color:var(--muted)}
.field{display:grid;gap:7px;margin:14px 0}.field label{font-weight:650;font-size:.91rem}.field input,.field select,.field textarea,.search-row input,.search-row select{width:100%;border:1px solid #C9D7D2;border-radius:10px;background:#fff;color:var(--text);padding:11px 12px;outline:none}.field textarea{min-height:115px;resize:vertical}.field input:focus,.field select:focus,.field textarea:focus,.search-row input:focus,.search-row select:focus{border-color:var(--green);box-shadow:0 0 0 3px rgba(63,83,81,.11)}
.btn{border:0;border-radius:10px;padding:10px 14px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;gap:7px}.btn-primary{background:var(--action);color:#fff}.btn-primary:hover{background:var(--actionHover)}.btn-secondary{background:#E7EFEC;color:var(--green2)}.btn-secondary:hover{background:#DDE8E4}.btn-outline{background:#fff;border:1px solid #BFD0C9;color:var(--green2)}.btn-danger{background:#F7E7E7;color:#8A2525}.btn-sm{padding:7px 10px;font-size:.83rem}.btn:disabled{opacity:.55;cursor:not-allowed}
.alert{padding:12px 14px;border-radius:10px;margin:12px 0;border:1px solid}.alert-error{background:#FFF0F0;border-color:#E9B8B8;color:#7C2929}.alert-info{background:#EEF5F3;border-color:#C7DAD4}.alert-warning{background:#FFF7EA;border-color:#EDD0A5;color:#77501E}.alert-success{background:#EEF8F2;border-color:#BDE0CB;color:#235D3F}
.app{min-height:100vh;display:grid;grid-template-columns:255px 1fr}.sidebar{background:var(--green);color:#fff;padding:22px 16px;position:sticky;top:0;height:100vh;overflow:auto}.sidebar .brand-lockup{margin-bottom:26px}.sidebar .brand-mark{background:#fff;color:var(--green)}.sidebar .brand-lockup p{color:#D8E3DF}.nav{display:grid;gap:6px}.nav button{width:100%;text-align:left;border:0;border-radius:10px;padding:11px 12px;background:transparent;color:#E7F0ED;font-weight:650}.nav button:hover,.nav button.active{background:rgba(255,255,255,.13);color:#fff}.sidebar-footer{margin-top:28px;padding-top:18px;border-top:1px solid rgba(255,255,255,.18);font-size:.82rem;color:#D7E2DE}.main{min-width:0}.topbar{height:72px;background:rgba(255,255,255,.93);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 28px;position:sticky;top:0;z-index:5}.topbar h2{margin:0;font-size:1.1rem}.topbar-actions{display:flex;align-items:center;gap:10px}.topbar select{border:1px solid #C9D7D2;border-radius:9px;padding:8px 10px;background:white;max-width:260px}
.content{padding:26px;max-width:1450px;margin:0 auto}.view-title{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:20px}.view-title h1{margin:0 0 5px;font-size:1.65rem}.view-title p{margin:0;color:var(--muted)}
.cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:15px}.metric{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:18px;box-shadow:0 5px 18px rgba(39,64,57,.04)}.metric strong{display:block;font-size:1.8rem;color:var(--green);margin-top:4px}.metric span{color:var(--muted);font-size:.88rem}.panel{background:var(--surface);border:1px solid var(--line);border-radius:15px;padding:20px;box-shadow:0 5px 20px rgba(38,58,54,.04);margin-bottom:18px}.panel h3{margin:0 0 14px;font-size:1.08rem}.panel-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:13px}.panel-header h3{margin:0}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:18px}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.search-row{display:grid;grid-template-columns:180px 1fr auto;gap:10px;align-items:end;margin-bottom:14px}.search-row label{display:block;font-weight:650;font-size:.88rem;margin-bottom:6px}
.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:11px}table{border-collapse:collapse;width:100%;min-width:760px}th,td{padding:11px 12px;border-bottom:1px solid #E7EEEB;text-align:left;vertical-align:top}th{font-size:.78rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);background:#F8FAF9;position:sticky;top:0}tr:last-child td{border-bottom:0}.table-actions{display:flex;gap:6px;flex-wrap:wrap}
.student-selected{border:2px solid var(--green)!important;background:#F4F8F6}.badge{display:inline-flex;align-items:center;padding:4px 8px;border-radius:999px;font-size:.75rem;font-weight:800;letter-spacing:.02em}.badge-valid{background:#E5F4EB;color:#246844}.badge-annulled,.badge-revoked,.badge-failed{background:#F8E5E5;color:#8B3030}.badge-replaced{background:#FFF1DF;color:#8A5A21}.badge-generating{background:#E9EFF7;color:#3E5878}
.preview{background:#FBFCFB;border:1px dashed #AFC4BC;border-radius:12px;padding:24px;min-height:310px}.preview .doc-head{text-align:center;border-bottom:1px solid var(--line);padding-bottom:14px;margin-bottom:20px}.preview .doc-head strong{display:block;color:var(--green);font-size:1.1rem}.preview .doc-title{text-align:center;font-weight:800;font-size:1.22rem;margin:28px 0}.preview .signature-preview{margin-top:42px;width:220px;border-top:1px solid var(--muted);padding-top:8px}.preview .verify-preview{margin-top:32px;padding:10px;border-radius:9px;background:#F0F5F3;color:var(--muted);font-size:.82rem}
.template-item{border:1px solid var(--line);border-radius:11px;padding:13px;margin-bottom:9px;display:flex;justify-content:space-between;gap:10px;align-items:center}.template-item strong{display:block}.tokens{display:flex;gap:6px;flex-wrap:wrap}.token{background:#EDF3F1;border-radius:7px;padding:4px 7px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.75rem}
.permission-grid{display:grid;grid-template-columns:minmax(220px,1.5fr) repeat(5,minmax(110px,.7fr)) 90px;gap:8px;align-items:center;padding:9px;border-bottom:1px solid #E8EEEB}.permission-grid.head{font-size:.75rem;text-transform:uppercase;color:var(--muted);font-weight:800;background:#F8FAF9}.permission-grid select{width:100%;padding:7px;border:1px solid #C9D7D2;border-radius:8px;background:#fff}.permission-user small{display:block;color:var(--muted)}
.loading-overlay{position:fixed;inset:0;background:rgba(244,247,246,.75);backdrop-filter:blur(2px);display:grid;place-items:center;z-index:50}.spinner{width:42px;height:42px;border:4px solid #CFDCD7;border-top-color:var(--green);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
.toast{position:fixed;right:20px;bottom:20px;max-width:420px;padding:13px 16px;background:#233B34;color:white;border-radius:10px;box-shadow:var(--shadow);z-index:60}.toast.error{background:#7F3030}
@media(max-width:1050px){.cards{grid-template-columns:repeat(2,1fr)}.grid-2{grid-template-columns:1fr}.permission-grid{grid-template-columns:1.5fr repeat(2,1fr)}.permission-grid>*:nth-child(n+4):not(:last-child){display:none}}
@media(max-width:780px){.app{grid-template-columns:1fr}.sidebar{height:auto;position:static}.nav{grid-template-columns:repeat(2,1fr)}.topbar{padding:0 14px}.content{padding:16px}.topbar-actions .user-label{display:none}.cards{grid-template-columns:1fr 1fr}.search-row{grid-template-columns:1fr}.grid-3{grid-template-columns:1fr}.view-title{display:block}.view-title .btn{margin-top:12px}}
@media(max-width:480px){.cards{grid-template-columns:1fr}.nav{grid-template-columns:1fr}.topbar select{max-width:175px}.login-card{padding:24px 20px}}
@media print{.sidebar,.topbar,.no-print{display:none!important}.app{display:block}.content{padding:0}.panel{box-shadow:none;border:0}}
