/* Melli Architect: shared styles for every page.
   One palette, one spacing scale, one set of controls. Page-specific layout
   lives in student.css (profile) and stats.css (statistics). */

@font-face{font-family:'Noto Kufi Arabic';src:url('assets/NotoKufiArabic-fa.woff2') format('woff2');font-weight:400 700;font-display:swap}
@font-face{font-family:'Kode Mono';src:url('assets/KodeMono.woff2') format('woff2');font-weight:400 700;font-display:swap}
@font-face{font-family:MelliDigits;src:url('assets/Vazirmatn.woff2') format('woff2');font-weight:100 900;font-display:swap;unicode-range:U+0030-0039,U+0660-0669,U+06F0-06F9}
@font-face{font-family:Estedad;src:url('assets/Estedad-Bold.woff2') format('woff2');font-weight:700;font-display:swap}

:root{
  color-scheme:dark;
  --bg:#070a10;--surface:#0c111b;--surface-2:#121a28;--surface-3:#19223a;
  --line:#1c2433;--line-strong:#2a3446;
  --text:#ebe8e1;--muted:#9aa2ae;--faint:#6d7584;
  --accent:#c8bfa4;--sage:#9ec1ac;--amber:#d8a76a;--lineage:#c0171f;--lineage-ink:#f2b2ab;--lineage-mat:#2a0d10;
  --font:MelliDigits,'Noto Kufi Arabic',Tahoma,sans-serif;
  --font-num:Estedad,MelliDigits,'Noto Kufi Arabic',sans-serif;
  --font-en:'Kode Mono',ui-monospace,Menlo,monospace;
  --r-sm:4px;--r-md:6px;--r-lg:8px;
  --shadow:0 18px 40px -24px rgb(0 0 0 / .9);
  --bar-h:64px;
}
:root[lang="en"]{--font:var(--font-en);--font-num:var(--font-en)}
[lang="en"]{font-family:var(--font-en)}

*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:calc(var(--bar-h) + 16px)}
body{margin:0;background:var(--bg);color:var(--text);font:15px/1.8 var(--font);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
:root[lang="en"] body{font-size:14px;line-height:1.7}
body::after{content:'';position:fixed;inset:0;z-index:60;pointer-events:none;opacity:.04;mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
a{color:inherit;text-decoration:none}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer}
img{max-width:100%}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
::selection{background:var(--accent);color:var(--bg)}
[hidden]{display:none!important}
.skip-link{position:fixed;top:12px;inset-inline-start:12px;z-index:70;padding:10px 18px;border-radius:var(--r-sm);background:var(--text);color:var(--bg);transform:translateY(-200%)}
.skip-link:focus{transform:none}
.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.page-shell{max-width:1440px;margin:0 auto;padding:0 40px}

/* ---------------------------------------------------------------- controls */
.btn,.lang-switch,.stats-link,.cohort-toggle,.filter-more,.filter-clear{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:0 16px;border:1px solid var(--line-strong);border-radius:var(--r-md);background:transparent;color:var(--text);font-size:13px;line-height:1;white-space:nowrap;transition:background .2s,border-color .2s,color .2s,transform .1s}
.btn:hover,.lang-switch:hover,.stats-link:hover,.cohort-toggle:hover,.filter-more:hover,.filter-clear:hover{background:var(--surface-2);border-color:var(--faint)}
.btn:active,.lang-switch:active,.stats-link:active,.cohort-toggle:active,.filter-more:active,.filter-clear:active{transform:translateY(1px)}
.lang-switch{min-height:34px;padding:0 12px;font-size:12px}
:root[lang="fa"] .lang-switch{font-family:var(--font-en)}
:root[lang="en"] .lang-switch{font-family:MelliDigits,'Noto Kufi Arabic',sans-serif}
.field{display:grid;gap:6px;font-size:12px;color:var(--muted)}
input[type="text"],input[type="search"],select{width:100%;min-height:42px;padding:0 14px;border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--bg);color:var(--text);font-size:14px;transition:border-color .2s}
select{padding-inline-end:36px;appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px;background-repeat:no-repeat}
:root[dir="rtl"] select{background-position:18px 50%,13px 50%}
input:hover,select:hover{border-color:var(--faint)}
input:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgb(200 191 164 / .15)}
input::placeholder{color:var(--faint)}

/* ---------------------------------------------------------------- home: masthead */
.masthead{position:relative;display:grid;grid-template-columns:1fr auto 1fr;grid-template-areas:'national title university';align-items:center;gap:24px;margin-top:20px;padding:40px 40px 34px;border:1px solid var(--line);border-radius:var(--r-lg);background:radial-gradient(110% 140% at 50% 0%,#0f1729 0%,#070b14 64%);overflow:hidden}
:root[dir="rtl"] .masthead{grid-template-areas:'university title national'}
.masthead::before{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,transparent 0 calc(50% - .5px),rgb(255 255 255 / .03) calc(50% - .5px) calc(50% + .5px),transparent calc(50% + .5px)),linear-gradient(0deg,transparent 0 calc(100% - 1px),rgb(255 255 255 / .03) 0)}
.masthead-lang{position:absolute;top:16px;inset-inline-end:16px;z-index:1}
.university-logo,.national-logo{display:block;width:88px;height:88px;object-fit:contain;padding:3px;border-radius:4px;background:#fff}
.university-logo{grid-area:university;justify-self:right}
.national-logo{grid-area:national;justify-self:left}
.masthead-title{grid-area:title;text-align:center}
.masthead-title h1{margin:0}
.melli-logo{display:block;width:min(100%,330px);height:auto;margin:0 auto;filter:grayscale(1) contrast(3.2) invert(1) blur(.45px);mix-blend-mode:screen;opacity:.9}
.masthead-title p{margin:10px 0 0;font-size:14px;color:#b4bac4}

/* ---------------------------------------------------------------- home: sticky bar */
.archive-nav{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:20px;min-height:var(--bar-h);margin:20px 0 32px;padding:10px 0 12px;border-bottom:3px double var(--line-strong);background:rgb(7 10 16 / .9);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}
/* Years read like a drafting scale: a baseline, a tick under each year and a short one between. */
.year-nav{display:flex;flex:1 1 auto;align-self:stretch;align-items:flex-end;min-width:0;gap:0;overflow-x:auto;scrollbar-width:none}
.year-nav::-webkit-scrollbar{display:none}
.year-nav a{position:relative;flex:0 0 auto;padding:4px 14px 14px;font:500 13px var(--font);color:var(--muted);box-shadow:inset 0 -1px var(--line-strong);transition:color .2s}
.year-nav a::after,.year-nav a::before{content:'';position:absolute;bottom:0;width:1px;background:var(--faint);transition:height .25s,background .25s}
.year-nav a::after{inset-inline-start:calc(50% - .5px);height:6px}
.year-nav a::before{inset-inline-end:0;height:3px;opacity:.7}
.year-nav a:last-child::before{display:none}
.year-nav a:hover{color:var(--text)}
.year-nav a:hover::after{height:9px;background:var(--muted)}
.year-nav a[aria-current="true"]{color:var(--accent)}
.year-nav a[aria-current="true"]::after{inset-inline-start:calc(50% - 1px);width:2px;height:12px;background:var(--accent)}
.archive-tools{display:flex;align-items:center;gap:14px;flex:0 0 auto;padding-inline-start:20px;border-inline-start:1px solid var(--line)}
.view-switch{display:inline-flex;align-items:center}
.view-switch button{min-height:32px;padding:0 12px;border:0;background:transparent;color:var(--muted);font-size:12px;white-space:nowrap;text-decoration:underline 1px transparent;text-underline-offset:8px;transition:color .2s,text-decoration-color .2s}
.view-switch button+button{border-inline-start:1px solid var(--line-strong)}
.view-switch button:hover{color:var(--text)}
.view-switch button[aria-pressed="true"]{color:var(--text);text-decoration-color:var(--accent)}
.stats-link{border-color:#5a4522;color:#f0d6ac;background:transparent}
.stats-link:hover{border-color:var(--amber);background:rgb(216 167 106 / .08)}
.stats-icon{display:inline-block;width:14px;height:12px;background:linear-gradient(var(--amber),var(--amber)) 0 100%/3px 50% no-repeat,linear-gradient(var(--amber),var(--amber)) 50% 100%/3px 100% no-repeat,linear-gradient(var(--amber),var(--amber)) 100% 100%/3px 70% no-repeat}

/* ---------------------------------------------------------------- home: layout */
.archive-layout{display:grid;grid-template-columns:300px minmax(0,1fr);gap:40px;align-items:start;margin-bottom:72px}
.archive-main{min-width:0}

/* Lineage ("نسل من") panel */
.lineage-panel{position:sticky;top:calc(var(--bar-h) + 20px);display:flex;flex-direction:column;max-height:calc(100dvh - var(--bar-h) - 48px);overflow:auto;padding:24px;border:1px solid var(--line);border-radius:var(--r-lg);background:linear-gradient(180deg,rgb(192 23 31 / .07),transparent 220px),var(--surface);box-shadow:var(--shadow)}
.lineage-panel::before{content:'';display:block;width:84px;height:12px;margin-bottom:14px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 10'%3E%3Cfilter id='g' filterUnits='userSpaceOnUse' x='0' y='0' width='64' height='10'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.12 1.1' numOctaves='3' seed='5' result='n'/%3E%3CfeDisplacementMap in='SourceGraphic' in2='n' scale='3' xChannelSelector='R' yChannelSelector='G' result='e'/%3E%3CfeColorMatrix in='n' type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 -1.35' result='m'/%3E%3CfeComposite in='e' in2='m' operator='in'/%3E%3C/filter%3E%3Cpath d='M3 6Q30 2.5 61 5' fill='none' stroke='%23c0171f' stroke-width='5' stroke-linecap='round' filter='url(%23g)'/%3E%3C/svg%3E") no-repeat 0 0/100% 100%}
.lineage-panel h2{margin:0 0 8px;font-size:22px;font-weight:700;line-height:1.5}
.lineage-help{margin:0 0 16px;font-size:13px;line-height:2;color:#b0b7c2;text-wrap:pretty}
:root[lang="en"] .lineage-help{line-height:1.7}
.lineage-form{display:grid;gap:8px}
.lineage-form label{font-size:12px;color:var(--muted)}
.lineage-form input{text-align:center;direction:ltr;font-size:15px;letter-spacing:1px}
.lineage-form input[aria-invalid="true"]{border-color:#b6655f}
.lineage-actions{display:flex;gap:8px}
.lineage-actions button{flex:1;min-height:42px;border:0;border-radius:var(--r-md);background:var(--lineage);color:#fff;font-size:13px;font-weight:700;transition:background .2s}
.lineage-actions button:hover{background:#d42029}
.lineage-actions .lineage-clear{flex:0 0 auto;padding:0 14px;border:1px solid var(--line-strong);background:transparent;color:var(--muted);font-weight:400}
.lineage-actions .lineage-clear:hover{background:var(--surface-2);color:var(--text)}
.lineage-status{margin:16px 0 0;font-size:13px;line-height:2;color:var(--lineage-ink)}
.lineage-share{display:flex;gap:8px;margin-top:12px}
.lineage-share-link{display:inline-flex;flex:1;align-items:center;justify-content:center;gap:8px;min-height:36px;padding:0 10px;border:1px solid var(--line-strong);border-radius:var(--r-md);background:transparent;color:var(--text);font-size:12px;white-space:nowrap;transition:border-color .2s,color .2s}
.lineage-share-link:hover{border-color:var(--lineage);color:var(--lineage-ink)}
.lineage-share .tg-icon{width:15px;height:15px;flex:0 0 auto}
.lineage-list{list-style:none;margin:14px 0 0;padding:0;border-inline-start:1px solid rgb(192 23 31 / .6)}
.lineage-list a{position:relative;display:grid;gap:1px;padding:7px 0;padding-inline-start:16px;font-size:13px}
.lineage-list a::before{content:'';position:absolute;inset-inline-start:-5px;top:14px;width:9px;height:9px;border:1px solid var(--lineage);border-radius:50%;background:var(--surface)}
.lineage-list li.is-self a::before{inset-inline-start:-6px;top:13px;width:11px;height:11px;background:var(--lineage);box-shadow:0 0 0 2px var(--surface),0 0 0 3px rgb(192 23 31 / .55)}
.lineage-list li.is-self .lineage-name{color:var(--lineage-ink)}
.lineage-role{font-size:11px;color:var(--muted)}
.lineage-list a:hover .lineage-name{color:var(--lineage-ink)}

/* Filters */
.filters{display:grid;gap:14px;margin:0 0 36px;padding:18px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface)}
.filters-row{display:grid;grid-template-columns:minmax(220px,1.6fr) repeat(3,minmax(140px,1fr));gap:12px;align-items:end}
#filter-extra{grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}
.filters label{display:grid;gap:6px;font-size:12px;color:var(--muted)}
.filter-search input{padding-inline-start:40px;background:var(--bg) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%239aa2ae' stroke-width='2'%3E%3Ccircle cx='7' cy='7' r='5'/%3E%3Cpath d='m11 11 4 4'/%3E%3C/svg%3E") no-repeat;background-position:calc(100% - 14px) 50%}
:root[dir="ltr"] .filter-search input{background-position:14px 50%}
.filters .filter-check{display:flex;align-items:center;gap:10px;min-height:42px;padding:0 14px;border:1px solid var(--line-strong);border-radius:var(--r-md);color:var(--text);font-size:13px;cursor:pointer;transition:border-color .2s,background .2s}
.filters .filter-check:has(input:checked){border-color:var(--sage);background:#122019}
.filter-check input{width:16px;height:16px;margin:0;accent-color:var(--sage)}
.filters-foot{display:flex;align-items:center;flex-wrap:wrap;gap:10px 16px;padding-top:12px;border-top:1px solid var(--line)}
.filter-more{min-height:34px;font-size:12px;border-color:transparent;background:var(--surface-2)}
.filter-count{margin:0;font-size:13px;font-weight:600;color:var(--text)}
.filter-clear{min-height:34px;margin-inline-start:auto;font-size:12px;color:var(--muted)}
.filter-empty{margin:0;padding:56px 20px;border:1px dashed var(--line-strong);border-radius:var(--r-lg);text-align:center;color:var(--muted)}

/* Intakes */
.cohorts{position:relative;min-width:0}
.cohort-group{margin:0 0 64px;scroll-margin-top:calc(var(--bar-h) + 16px)}
.cohort-head{display:flex;align-items:center;flex-wrap:wrap;gap:10px 14px;margin-bottom:40px;padding-bottom:16px;border-bottom:1px solid var(--line)}
.cohort-title{margin:0;font:700 clamp(36px,4vw,54px)/1.1 var(--font-num);color:var(--text)}
.cohort-period,.cohort-count{padding:3px 10px;border:1px solid var(--line-strong);border-radius:var(--r-sm);font-size:12px;color:#c3c8d1;line-height:1.8}
.cohort-count{margin-inline-start:auto}
.cohort-toggle{min-height:32px;padding:0 14px;font-size:12px}
.lineage-active .cohort-head{opacity:.7}

/* Portrait grid */
.student-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:44px 16px}
.student-tile{position:relative;display:flex;flex-direction:column;gap:2px;text-align:center;transition:opacity .35s,filter .35s,transform .25s}
.tile-frame{position:relative;display:block;aspect-ratio:3/4;margin-bottom:8px;overflow:hidden;border-radius:var(--r-sm);background:var(--surface-2);box-shadow:0 0 0 1px var(--line),0 12px 24px -16px #000;transition:box-shadow .25s}
.graduate-photo{display:block;width:100%;height:100%;aspect-ratio:3/4;object-fit:cover;background-color:var(--surface-2);background-repeat:no-repeat}
.tile-name{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:13px;font-weight:600;line-height:1.6;color:#dcd9d2;text-wrap:balance}
.tile-number{font:700 11px var(--font-num);letter-spacing:.5px;color:var(--faint)}
.student-tile:hover .tile-frame,.student-tile:focus-visible .tile-frame{box-shadow:0 0 0 1px var(--accent),0 16px 28px -16px #000}
.student-tile:focus-visible{outline:none}
.student-tile:focus-visible .tile-frame{outline:2px solid var(--accent);outline-offset:3px}
.student-tile:hover .tile-name{color:var(--text)}
@media(hover:hover) and (pointer:fine){.student-tile:hover{transform:translateY(-3px)}}
/* Lineage highlight */
.lineage-active .student-tile:not(.in-lineage){opacity:.16;filter:grayscale(1)}
.student-tile.in-lineage{z-index:2}
/* The red frame around each portrait is drawn in crayon by app.js. */
.lineage-active .student-tile.in-lineage .tile-frame{border-radius:0;background:var(--lineage-mat);box-shadow:0 14px 26px -18px #000}
.lineage-active .student-tile.in-lineage .graduate-photo{border-radius:0}
.lineage-active .student-tile.in-lineage:hover{transform:none}
.in-lineage .graduate-photo{filter:sepia(.22) saturate(.9)}
.in-lineage .tile-name{color:#f3dcd8}
.in-lineage .tile-number{color:#e0817c}
.lineage-active .student-tile.is-self .tile-frame{box-shadow:0 18px 30px -16px #000}
.is-self .graduate-photo{filter:none}
.is-self .tile-name{color:#fff}
.is-self .tile-number{color:var(--lineage-ink)}
.lineage-lines{position:absolute;inset:0;z-index:1;width:100%;height:100%;overflow:visible;pointer-events:none;fill:none;stroke:var(--lineage);stroke-width:4;stroke-linecap:round}
/* The crayon texture is a filter per stroke, set up in app.js. */
.lineage-node{fill:var(--lineage);stroke:none;opacity:0;transition:opacity .5s ease var(--delay,0s)}
.lineage-lines.is-drawn .lineage-node{opacity:1}

/* Group photo of an intake */
.cohort-photo{display:none;position:relative;margin:0;border-radius:var(--r-lg);overflow:hidden;background:var(--surface);box-shadow:0 0 0 1px var(--line)}
.cohort-photo img{display:block;width:100%;aspect-ratio:16/9;object-fit:cover;filter:grayscale(1) brightness(.85)}
.cohort-photo figcaption{position:absolute;bottom:14px;inset-inline-start:14px;padding:4px 12px;border-radius:999px;background:rgb(7 10 16 / .75);font-size:12px}
.cohort-photo.is-empty{place-items:center;aspect-ratio:16/9;border:1px dashed var(--line-strong);box-shadow:none}
.cohort-photo.is-empty figcaption{position:static;background:none;color:var(--muted)}
.view-photo .student-grid{display:none}
.view-photo .cohort-photo{display:block}
.view-photo .cohort-photo.is-empty{display:grid}

.noscript{padding:48px 0;text-align:center;color:var(--muted)}

/* ---------------------------------------------------------------- inner pages: header */
.directory-header{display:flex;align-items:center;gap:14px;min-height:84px;border-bottom:1px solid var(--line)}
.directory-brand{font-size:22px;font-weight:700;white-space:nowrap}
.directory-brand>span:first-child{color:var(--text)}
.brand-dot{color:var(--accent)}
.directory-header .lang-switch{margin-inline-start:auto}
.directory-back{display:inline-flex;align-items:center;gap:10px;min-height:34px;padding:0 12px;border-radius:var(--r-md);font-size:12px;color:var(--muted);white-space:nowrap;transition:background .2s,color .2s}
.directory-back:hover{background:var(--surface-2);color:var(--text)}
.back-arrow{font:16px Arial,sans-serif;color:var(--accent)}
.directory-empty{padding:72px 0;text-align:center;color:var(--muted)}
.directory-empty h1{color:var(--text);font-size:24px}
.student-suffix{position:absolute;bottom:12px;inset-inline-end:12px;display:flex;align-items:center;justify-content:center;min-width:36px;height:30px;padding:0 9px;border-radius:9px;background:rgb(7 10 16 / .9);color:#f0ede5;font:700 14px var(--font-num);direction:ltr}
.profile-kicker{margin:0 0 6px;font-size:13px;color:var(--accent)}

/* ---------------------------------------------------------------- footer */
footer{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;padding:32px 0 40px;border-top:1px solid var(--line)}
.footer-brand{font-size:20px;font-weight:700}
.footer-dot{color:var(--accent)}
.demo-note{margin:0;font-size:12px;color:var(--faint)}
.footer-actions{display:flex;align-items:center;gap:clamp(12px,3vw,32px)}
.artinext{display:flex;align-items:center;gap:12px;text-align:left}
.artinext-logo{display:block;flex:none;width:auto;height:40px}
.artinext-name{display:flex;flex-direction:column;gap:2px;font-family:var(--font-en);white-space:nowrap}
.artinext-name strong{font-size:20px;font-weight:700;letter-spacing:-.4px;line-height:1.1}
.artinext-name span{font-size:11px;color:var(--muted)}
.back-top{display:inline-flex;align-items:center;gap:10px;font-size:12px;color:var(--muted);white-space:nowrap}
.back-top:hover{color:var(--text)}
.back-top-arrow{font:18px Arial,sans-serif;color:var(--accent)}

/* ---------------------------------------------------------------- responsive */
@media(max-width:1180px){
  .archive-layout{grid-template-columns:260px minmax(0,1fr);gap:28px}
  .filters-row{grid-template-columns:repeat(2,minmax(0,1fr))}
  .filter-search{grid-column:1/-1}
}
@media(max-width:900px){
  .page-shell{padding:0 24px}
  .masthead{grid-template-columns:1fr 1fr;grid-template-areas:'title title' 'national university';padding:48px 24px 24px;gap:20px}
  :root[dir="rtl"] .masthead{grid-template-areas:'title title' 'university national'}
  .university-logo,.national-logo{width:64px;height:64px}
  .archive-layout{grid-template-columns:1fr;gap:24px}
  .lineage-panel{position:static;max-height:none}
}
@media(max-width:640px){
  :root{--bar-h:auto}
  body{font-size:14px}
  .page-shell{padding:0 16px}
  .masthead{margin-top:12px;padding:46px 16px 20px;border-radius:var(--r-md)}
  .melli-logo{width:min(100%,240px)}
  .masthead-title p{font-size:12px}
  .university-logo,.national-logo{width:52px;height:52px}
  .artinext{gap:10px}
  .artinext-logo{height:30px}
  .artinext-name strong{font-size:15px}
  .artinext-name span{font-size:9px}
  .archive-nav{position:static;flex-wrap:wrap;gap:10px;margin:14px 0 20px}
  .year-nav{flex-basis:100%}
  .archive-tools{flex-basis:100%;flex-wrap:wrap;padding-inline-start:0;border-inline-start:0}
  .archive-tools .view-switch{flex:1}
  .view-switch button{flex:1}
  .lineage-panel{padding:18px}
  .lineage-panel h2{font-size:19px}
  .lineage-help{font-size:12px}
  .filters{padding:14px;margin-bottom:28px}
  .filters-row,#filter-extra{grid-template-columns:1fr 1fr;gap:10px}
  .filters-row:first-child>label:last-child{grid-column:1/-1}
  #filter-extra .filter-check{grid-column:span 1}
  .cohort-group{margin-bottom:48px}
  .cohort-head{margin-bottom:34px}
  .cohort-count{margin-inline-start:0}
  .student-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:38px 10px}
  .tile-name{font-size:12px}
  .tile-number{font-size:10px}
  footer{justify-content:center;text-align:center}
  .directory-header{gap:8px;min-height:72px}
  .directory-back{max-width:130px;white-space:normal;line-height:1.5;text-align:end;font-size:11px}
}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{transition:none!important;animation:none!important}
}

/* ---------------------------------------------------------------- sketch layer
   Warm paper, a faint drafting grid and pencil line work (sketch.js).
   Without JavaScript every element keeps its plain border. */
:root{--sketch:rgb(214 204 176 / .55);--sketch-soft:rgb(214 204 176 / .24);--mat:#151c2a}
html{background:var(--bg)}
body{background:transparent}
body::before{content:'';position:fixed;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(900px 520px at 50% -6%,rgb(216 167 106 / .07),transparent 70%),linear-gradient(rgb(214 204 176 / .03) 1px,transparent 1px) 0 0/32px 32px,linear-gradient(90deg,rgb(214 204 176 / .03) 1px,transparent 1px) 0 0/32px 32px;-webkit-mask-image:radial-gradient(130% 90% at 50% 0%,#000 30%,transparent 80%);mask-image:radial-gradient(130% 90% at 50% 0%,#000 30%,transparent 80%)}
body::after{opacity:.07}

.sketch{position:absolute;pointer-events:none;overflow:visible;fill:none;stroke:var(--sketch);stroke-width:1.15;stroke-linecap:round;stroke-linejoin:round;filter:url(#sketch-rough)}
.sk{stroke-dasharray:var(--len);stroke-dashoffset:var(--len);transition:stroke-dashoffset var(--dur,1s) cubic-bezier(.55,.08,.3,1) var(--delay,0s)}
.is-drawn .sk{stroke-dashoffset:0}
.sk-soft{stroke:var(--sketch-soft)}
.sk-tick{stroke:var(--accent);stroke-width:1.4}
.sk.sk-guide{stroke:var(--sketch-soft);stroke-dasharray:2 8;stroke-dashoffset:0;opacity:0;transition:opacity 1.6s ease var(--delay,0s)}
.is-drawn .sk-guide{opacity:1}

.has-sketch.sketch-frame{border-color:transparent!important}
.sketch-frame:not(.lineage-panel):not(.student-portrait){position:relative}
/* The panel fits the window under the bar; only the list scrolls. */
.lineage-panel.has-sketch{overflow:visible}
.lineage-panel>*,.lineage-panel::before{flex-shrink:0}
.lineage-panel.has-sketch .lineage-list{flex:1 1 auto;min-height:96px;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}
/* Inside the scrolling list the red line is a background, so the dots on it are not clipped. */
.lineage-panel.has-sketch .lineage-list{padding-inline-start:8px;border-inline-start:0;background:linear-gradient(rgb(192 23 31 / .6),rgb(192 23 31 / .6)) left 4px top 0/1px 100% no-repeat local}
:root[dir="rtl"] .lineage-panel.has-sketch .lineage-list{background-position:right 4px top 0}
.lineage-panel.has-sketch .lineage-list a::before{inset-inline-start:-8px}
.lineage-panel.has-sketch .lineage-list li.is-self a::before{inset-inline-start:-9px}
.sketch-frame-svg{inset:-10px;width:calc(100% + 20px);height:calc(100% + 20px)}
.sketch-underline,.sketch-rule{position:relative}
.has-sketch.sketch-underline{border-bottom-color:transparent!important}
.has-sketch.sketch-rule{border-top-color:transparent!important}
.sketch-underline-svg,.sketch-rule-svg{left:-8px;width:calc(100% + 16px);height:14px}
.sketch-underline-svg{bottom:-7px}
.sketch-rule-svg{top:-7px}

/* Masthead: a street of an old arcade, a domed hall and a new block, drawn along the bottom. */
.masthead{isolation:isolate}
.sketch-masthead{z-index:-1;left:0;bottom:0;width:100%;height:auto;max-height:82%;opacity:.5;stroke-width:1;-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.masthead-title p{text-shadow:0 1px 10px #070b14,0 0 2px #070b14}

/* Portraits sit on a mat like prints in an album; pencil lines run past the corners on hover. */
.tile-frame{overflow:visible;padding:4px;border-radius:6px;background:var(--mat);box-shadow:0 0 0 1px var(--line),0 14px 26px -18px #000}
.tile-frame .graduate-photo{border-radius:3px}
.tile-frame::before{content:'';position:absolute;inset:-8px;z-index:2;pointer-events:none;background:linear-gradient(var(--sketch),var(--sketch)) left 0 top 4px/0 1px no-repeat,linear-gradient(var(--sketch),var(--sketch)) right 0 bottom 4px/0 1px no-repeat,linear-gradient(var(--sketch),var(--sketch)) right 4px top 0/1px 0 no-repeat,linear-gradient(var(--sketch),var(--sketch)) left 4px bottom 0/1px 0 no-repeat;transition:background-size .5s cubic-bezier(.55,.08,.3,1)}
.student-tile:hover .tile-frame::before,.student-tile:focus-visible .tile-frame::before{background-size:100% 1px,100% 1px,1px 100%,1px 100%}
.student-tile:hover .tile-frame,.student-tile:focus-visible .tile-frame{box-shadow:0 0 0 1px var(--line-strong),0 18px 30px -18px #000}
.in-lineage .tile-frame::before{display:none}

/* The community block: everyone keeps their own page up to date. */
.community{margin:0 0 72px}
.community-card{display:grid;grid-template-columns:minmax(200px,320px) minmax(0,1fr);gap:48px;align-items:center;padding:40px 48px;border:1px solid var(--line);border-radius:var(--r-lg);background:linear-gradient(160deg,#0e1424,var(--surface) 60%)}
.community-art{position:relative;aspect-ratio:300/220}
.sketch-tools{inset:0;width:100%;height:100%;stroke-width:1.3}
.community-kicker{margin:0 0 6px;font-size:13px;color:var(--amber)}
.community h2{margin:0 0 12px;font-size:clamp(22px,2.4vw,30px);line-height:1.5}
.community-text>p{max-width:62ch;margin:0;color:#c3c8d1;line-height:2.1;text-wrap:pretty}
:root[lang="en"] .community-text>p{line-height:1.8}
.community-stats{display:flex;flex-wrap:wrap;gap:12px 40px;margin:24px 0}
.community-stats div{display:grid}
.community-stats dt{order:2;font-size:12px;color:var(--muted)}
.community-stats dd{order:1;margin:0;font:700 34px/1.3 var(--font-num)}
.community-cta{display:inline-flex;align-items:center;gap:10px;min-height:44px;padding:0 20px;border-radius:var(--r-md);background:var(--accent);color:var(--bg);font-size:14px;font-weight:700;transition:background .2s,transform .1s}
.community-cta:hover{background:#ddd5bd}
.community-cta:active{transform:translateY(1px)}
.community-cta .tg-icon{width:18px;height:18px;flex:0 0 auto}

@media(max-width:900px){
  .lineage-panel.sketch-frame{position:relative;max-height:none}
  .lineage-panel.has-sketch .lineage-list{flex:none;max-height:min(46vh,420px)}
  .community-card{grid-template-columns:1fr;gap:24px;padding:32px 28px}
  .community-art{max-width:260px}
}
@media(max-width:640px){
  .community{margin-bottom:48px}
  .community-card{padding:26px 20px}
  .community-stats dd{font-size:28px}
  .tile-frame{padding:3px}
}
@media(prefers-reduced-motion:reduce){
  .sk{stroke-dashoffset:0}
  .sk-guide{opacity:1}
}
