/* Light, single-theme by design.
   Layout: calm academic directory — white surfaces on a cool paper ground, deep teal as the one accent, warm gold for data highlights. */
:root{
  --bg:#F7FAFC; --surface:#FFFFFF; --sunken:#F0F5F8; --hero:#EAF5F4;
  --ink:#1C2635; --muted:#627083; --line:#E2E8EF; --line-strong:#C9D6E0;
  --accent:#0F7B7C; --accent-ink:#0B5E5F; --accent-soft:#DDF1EF;
  --gold:#A06F1F; --gold-soft:#FBF2DF;
  --danger:#B42318; --danger-soft:#FDECEA; --ok:#1E7B4A; --ok-soft:#E3F4EA;
  --focus:#1A9A9B; --shadow:0 10px 30px rgba(20,60,70,.12); --shadow-sm:0 2px 8px rgba(20,60,70,.06);
  --display:"Source Serif 4", Georgia, "Times New Roman", serif;
  --body:"IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
  --mono:"IBM Plex Mono", ui-monospace, Menlo, Consolas, monospace;
  --r:12px; color-scheme:light;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important;animation:none!important}}
body{background:var(--bg);color:var(--ink);font:15px/1.55 var(--body);margin:0}
a{color:var(--accent)}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.wrap{max-width:1180px;margin:0 auto;padding-inline:20px}
h1,h2,h3{text-wrap:balance}
code{font-family:var(--mono);font-size:.92em;background:var(--sunken);padding:1px 5px;border-radius:4px}

/* demo banner */
.demo-bar{background:var(--gold-soft);color:var(--ink);font-size:13px;text-align:center;padding:8px 16px;border-bottom:1px solid var(--line)}

/* top bar */
.topbar{background:rgba(255,255,255,.92);backdrop-filter:saturate(1.2) blur(8px);border-bottom:1px solid var(--line);position:sticky;top:env(safe-area-inset-top,0px);z-index:30}
.topbar-in{display:flex;align-items:center;gap:20px;min-height:64px;flex-wrap:wrap;padding-block:8px}
.brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink)}
.brand-mark{width:34px;height:34px;border-radius:9px;background:var(--accent);color:#fff;display:grid;place-items:center}
.brand-mark svg{width:22px;height:22px}
.brand-name{font:600 19px/1 var(--display);letter-spacing:-.01em}
.nav{display:flex;gap:4px;flex-wrap:wrap}
.nav-link{color:var(--muted);text-decoration:none;font-weight:500;font-size:14.5px;padding:8px 12px;border-radius:8px}
.nav-link:hover{color:var(--ink);background:var(--sunken)}
.nav-link.is-active{color:var(--accent-ink);background:var(--accent-soft)}
.nav-actions{margin-left:auto;display:flex;gap:8px;align-items:center}
@media (max-width:640px){.nav{order:3;width:100%}.nav-actions{margin-left:auto}}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font:500 14px/1 var(--body);padding:10px 16px;border-radius:9px;border:1px solid var(--line);color:var(--ink);text-decoration:none;background:var(--surface);cursor:pointer;white-space:nowrap}
.btn:hover{border-color:var(--accent);color:var(--accent)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn.primary:hover{background:var(--accent-ink);border-color:var(--accent-ink);color:#fff}
.btn.ghost{border-color:transparent;background:transparent}
.btn.ghost:hover{background:var(--sunken);color:var(--ink)}
.btn.lg{font-size:15.5px;padding:13px 20px;border-radius:10px}
.btn.block{width:100%}
.btn.danger{color:var(--danger)}
.btn.danger:hover{border-color:var(--danger);background:var(--danger-soft);color:var(--danger)}
.btn:disabled{opacity:.55;cursor:not-allowed}
.btn svg{width:16px;height:16px;flex:none}
.pill{display:inline-block;font:600 11px/1 var(--body);letter-spacing:.06em;text-transform:uppercase;padding:4px 7px;border-radius:999px;background:var(--accent-soft);color:var(--accent-ink)}

/* user menu */
.user-menu{position:relative}
.avatar-btn{display:flex;align-items:center;gap:8px;background:none;border:1px solid var(--line);border-radius:999px;padding:4px 12px 4px 4px;cursor:pointer;font:500 14px var(--body);color:var(--ink);max-width:220px}
.avatar-btn:hover{border-color:var(--line-strong)}
.avatar{width:30px;height:30px;border-radius:50%;background:var(--accent);color:#fff;display:grid;place-items:center;font:600 12px var(--body);flex:none}
.user-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media (max-width:480px){.user-name{display:none}.avatar-btn{padding:4px}}
.menu{position:absolute;right:0;top:calc(100% + 8px);background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);min-width:230px;padding:6px;display:grid;z-index:40}
.menu-head{display:grid;gap:3px;padding:10px 12px;border-bottom:1px solid var(--line);margin-bottom:4px;font-size:13px;color:var(--muted)}
.menu-head strong{color:var(--ink);font-size:14px}
.menu-head .pill{justify-self:start;margin-top:4px}
.menu a,.menu button{text-align:left;background:none;border:0;padding:9px 12px;border-radius:8px;font:14px var(--body);color:var(--ink);text-decoration:none;cursor:pointer}
.menu a:hover,.menu button:hover{background:var(--sunken)}

/* forms */
.field{display:grid;gap:6px}
.field label,.eyebrow{font:600 11.5px/1 var(--body);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=tel],input[type=date],input[type=search],select,textarea{
  font:15px var(--body);padding:11px 12px;border:1px solid var(--line);border-radius:9px;background:var(--surface);color:var(--ink);width:100%}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.alert{border-radius:9px;padding:11px 14px;font-size:14px}
.alert.error{background:var(--danger-soft);color:var(--danger)}
.alert.ok{background:var(--ok-soft);color:var(--ok)}

/* footer */
.site-footer{border-top:1px solid var(--line);background:var(--surface);color:var(--muted);font-size:13.5px;margin-top:40px}
.footer-in{padding-block:28px;display:grid;gap:10px}
.footer-top{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;align-items:center}
.footer-brand{font:600 17px var(--display);color:var(--ink)}
.footer-links{display:flex;gap:18px;flex-wrap:wrap}
.footer-links a{color:var(--muted);text-decoration:none}
.footer-links a:hover{color:var(--accent)}
.site-footer p{margin:0}
.site-footer b{color:var(--ink);font-weight:500;user-select:all}
.legal{font-size:12px;line-height:1.55;max-width:95ch}
.legal a{color:var(--muted)}

/* contact panel */
.fab{position:fixed;right:18px;bottom:calc(18px + env(safe-area-inset-bottom,0px));z-index:40;display:inline-flex;align-items:center;gap:8px;background:var(--accent);color:#fff;border:0;border-radius:999px;padding:12px 18px;font:600 14px/1 var(--body);box-shadow:var(--shadow);cursor:pointer}
.fab svg{width:18px;height:18px}
.fab:hover{background:var(--accent-ink)}
@media (max-width:480px){.fab span{display:none}.fab{padding:14px}}
.panel{position:fixed;right:18px;bottom:calc(78px + env(safe-area-inset-bottom,0px));z-index:41;width:min(360px,calc(100vw - 32px));background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);overflow:hidden}
.panel-head{background:var(--accent);color:#fff;padding:16px 18px;display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.panel-head h3{margin:0;font:600 18px/1.25 var(--display)}
.panel-head p{margin:4px 0 0;font-size:13px;opacity:.9}
.x{background:transparent;border:0;color:#fff;font-size:22px;line-height:1;cursor:pointer;padding:0 2px}
.panel-body{padding:14px 18px 18px;display:grid;gap:9px}
.panel-body label{font:600 11px/1 var(--body);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.panel-body input,.panel-body textarea{padding:10px 12px}
.panel-body textarea{min-height:70px;resize:vertical}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.btn.wa{background:#1FA855;border-color:#1FA855;color:#fff}
.btn.wa:hover{background:#188A45;border-color:#188A45;color:#fff}
.consent{margin:0;font-size:12.5px;color:var(--muted)}
.contact-lines{font-size:13px;color:var(--muted);display:grid;gap:3px;border-top:1px solid var(--line);padding-top:10px}
.contact-lines b{color:var(--ink);font-weight:500;user-select:all}
.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
