.writing-entry{grid-template-columns:minmax(0,1fr)}
.hero h1{font-size:clamp(44px,5.1vw,68px);letter-spacing:-2.6px}
.hero h1,.cv-heading h1{font-weight:400}
.hero h1 em{line-height:1.13}
.hero{grid-template-columns:1.5fr 1fr;gap:64px}
.hero-intro{max-width:46ch}
.research-strip{display:grid;grid-template-columns:1fr 1fr;gap:64px;margin:38px 0;padding:38px 0;border-block:1px solid var(--line)}
.research-strip h2{font-size:34px;letter-spacing:-1px;margin-top:16px;line-height:1.18}
.research-strip h2 em{font-family:inherit;font-style:normal;font-weight:inherit}
.research-strip>div>p{font-size:15px;line-height:1.9;color:var(--text)}
.research-strip .text-link{margin-top:15px}
.writing-search{margin:0 0 32px;max-width:720px}
.writing-search label{display:block;font-size:12px;margin-bottom:9px;color:var(--text)}
.writing-search>div{display:flex;gap:15px;align-items:center}
.writing-search input{min-height:46px;padding:11px 15px;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:9px;width:min(440px,75%)}
.writing-search [role=status]{font-size:12px;color:var(--muted);white-space:nowrap}
.search-empty{padding:30px 0;font-size:14px;color:var(--text)}
.original-note{font-size:12px;max-width:72ch}
.cv-grid{display:grid;grid-template-columns:1.7fr 1fr;gap:70px}
.cv-section{border-top:1px solid var(--line);padding:26px 0;margin-bottom:18px;break-inside:avoid}
.cv-section h2{font-size:19px;letter-spacing:-.5px;margin-bottom:20px}
.cv-section p{font-size:14px;line-height:1.9;color:var(--text);margin-top:10px}
.cv-entry{padding-top:21px}
.cv-entry:first-of-type{padding-top:0}
.cv-entry>div{display:flex;justify-content:space-between;align-items:baseline;gap:20px}
.cv-entry h3{font-size:15px;line-height:1.5}
.cv-entry span{font-size:10px;color:var(--muted);flex-shrink:0}
.cv-email{font-size:12px;overflow-wrap:anywhere}
.cv-actions{display:flex;align-items:center;gap:22px;margin-top:24px}
.cv-results{font-size:12px}
.cv-results>div{margin-top:15px}
.cv-results dt{font-weight:600}
.cv-results dd{margin-top:5px;color:var(--text)}
@media (max-width:1000px){.hero{gap:35px}
.hero h1{font-size:54px}
.cv-grid{gap:35px}
.research-strip{gap:30px}}
@media (max-width:740px){.hero{grid-template-columns:1fr;gap:30px}
.hero h1{font-size:54px;letter-spacing:-2px}
.hero h1 em{font-size:.85em;letter-spacing:-2px}
.hero-intro{font-size:16px}
.research-strip{grid-template-columns:1fr;gap:22px;padding-block:27px;margin-block:26px}
.research-strip h2{font-size:31px}
.cv-grid{grid-template-columns:1fr;gap:5px}
.cv-actions{flex-wrap:wrap;gap:12px}
.cv-entry>div{flex-wrap:wrap;gap:4px}}
@media (max-width:360px){.hero h1{font-size:48px}
.hero h1 em{font-size:.79em}}
@media (prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
@media print{.cv-actions,.writing-search{display:none!important}
.cv-grid{display:block}
.cv-section{break-inside:auto;padding:12px 0;margin:0}
.cv-entry{break-inside:avoid;padding-top:12px}
.cv-heading{padding:0 0 20px}
.cv-heading h1{font-size:32px}
.cv-section h2{font-size:17px}
.cv-section p{font-size:11px;line-height:1.65}
h2,h3{break-after:avoid}
.cv-grid aside{display:grid;grid-template-columns:1fr 1fr;gap:24px}}
h1[tabindex="-1"]:focus{outline:none}
.section-heading>.text-link{white-space:nowrap;flex-shrink:0}
@media (max-width:740px){.setup-card{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:18px;min-height:0}
.setup-card>h2,.setup-card>p{grid-column:1/-1;max-width:none}
.setup-card>h2{font-size:24px}
.setup-card .desk-objects{position:static;grid-column:2;grid-row:4;height:67px;margin-top:16px;padding-right:9px;align-self:center}
.setup-card>.text-link{grid-column:1;grid-row:4;max-width:none;align-self:center;margin-top:16px;font-size:12px;line-height:1.7}}
.hero h1,.page-heading h1,.setup-card h2,.hardware-card h2,
.research-strip h2,.contact-strip h2{margin-top:0}
.now-updated{grid-column:1/-1;font-size:12px;line-height:1.6;color:var(--muted);margin-top:22px}
.ctf-tile .ctf-heading{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 14px;margin-bottom:14px}
.ctf-tile .ctf-title{margin:0;font-size:17px;font-weight:550;line-height:1.3;letter-spacing:0}
.ctf-tile .ctf-placement{display:flex;flex-direction:column;align-items:flex-start;gap:4px}
.ctf-tile .ctf-placement strong{font-size:53px;font-weight:550;line-height:1;letter-spacing:-.055em}
.ctf-tile .ctf-placement span{font-size:13px;line-height:1.35;color:var(--text)}
.ctf-tile .ctf-team{margin:0;font-size:12px;font-weight:400;line-height:1.35;color:var(--text)}
.ctf-tile .ctf-results{display:flex;flex-wrap:wrap;gap:4px 14px;margin:10px 0 0;padding:0;list-style:none;font-size:13px;line-height:1.4;color:var(--text)}
.ctf-tile .ctf-results li{white-space:nowrap}
.ctf-tile .tile-bottom{font-size:11px;line-height:1.4}
.publication-context,.document-type{font-size:14px;line-height:1.7;font-weight:400;letter-spacing:0;text-transform:none;color:var(--text)}
.writing-feature-text .publication-context{margin:0 0 12px}
.cv-heading .document-type{margin-top:14px}
.project-status{font-size:12px;line-height:1.6;text-transform:none;letter-spacing:0;color:var(--text);margin-top:10px}
.stage-title{margin-top:32px}
.case .stage-title{margin-top:38px}
.book-title{margin-top:24px}
.writing-entry .entry-kind{font-size:12px;margin-top:12px;color:var(--muted)}
@media (max-width:740px){.now-updated{margin-top:0}
.setup-card .desk-objects,.setup-card>.text-link{grid-row:3}
.case .stage-title{margin-top:27px}
}
.profile-socials{display:flex;align-items:center;gap:22px;flex-wrap:wrap;margin-top:18px}
.profile-socials a{display:inline-flex;align-items:center;gap:6px;min-height:40px;color:var(--text);font-size:13px}
.profile-socials a:hover,.now-item h2 a:hover{color:var(--accent)}
.socials,.footer-nav{flex-wrap:wrap;row-gap:4px}
.footer-bottom{flex-wrap:wrap;align-items:center;row-gap:12px}
.study-period{font-size:12px;line-height:1.6;color:var(--text);margin-top:6px}
.academics-section{margin:36px 0 42px}
.academic-current{display:flex;justify-content:space-between;align-items:center;gap:28px;padding:24px 0;border-block:1px solid var(--line)}
.academic-current h3{font-size:18px;line-height:1.5;letter-spacing:-.3px}
.academic-current p{font-size:13px;line-height:1.7;color:var(--text);margin-top:5px}
.academic-current>p{font-size:12px;margin-top:0}
.academic-records{display:grid;grid-template-columns:repeat(3,1fr);gap:40px;margin-top:28px}
.academic-record{min-width:0}
.academic-record h3{font-size:19px;line-height:1.4;letter-spacing:-.3px}
.academic-context{font-size:13px;color:var(--text);margin-top:8px;line-height:1.8}
.grade-table{table-layout:fixed;width:100%;margin-top:18px;font-size:13px}
.grade-table .grade-caption{text-align:left;color:var(--muted);font-size:12px;line-height:1.6;text-transform:none;letter-spacing:0;padding-bottom:8px}
.grade-table th{font-size:12px;letter-spacing:0;text-transform:none;font-weight:500}
.grade-table th:last-child,.grade-table td:last-child{width:64px;padding-right:0}
.grade-table td:last-child{font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.grade-table th,.grade-table td{overflow-wrap:anywhere}
.grade-table td{line-height:1.7}
.grade-table-pending th:last-child,.grade-table-pending td:last-child{width:84px}
.grade-table td.grade-pending{color:var(--muted);font-weight:400;font-style:italic;white-space:nowrap}
.setup-summary .home-mac-specs{margin-top:17px;max-width:none;min-width:0}
.setup-summary>.home-mac-specs+p{font-size:13px;line-height:1.8;max-width:none;margin-top:14px}
.setup-summary>.desk-objects{height:55px;margin-top:18px;margin-bottom:12px}
.setup-summary>.text-link{line-height:1.7}
.mac-spec-card .desk-objects{margin-top:24px}
@media (max-width:1000px){.academic-records{grid-template-columns:1fr 1fr;gap:26px}}
@media (max-width:740px){.profile-socials{gap:18px;margin-top:14px}
.profile-socials a{font-size:12px}
.socials{gap:4px 20px}
.academic-current{display:block;padding:21px 0}
.academic-current>p{margin-top:10px}
.academic-records{grid-template-columns:1fr;gap:28px;margin-top:24px}
.academics-section{margin:26px 0 34px}
.academic-record h3{font-size:18px}
.academic-record+.academic-record{border-top:1px solid var(--line);padding-top:24px}
.grade-table{font-size:12px}
.grade-table th,.grade-table td{padding-block:12px}
.setup-summary .home-mac-specs{grid-column:1/-1;grid-row:2}
.setup-summary>p{grid-row:3}
.setup-summary>.desk-objects{grid-row:4;margin-top:14px;margin-bottom:0;height:60px}
.setup-summary>.text-link{grid-row:4;margin-top:14px;max-width:none}}
@media print{.profile-socials{display:none}
.academic-current{display:block}
.academic-records{display:block}
.academic-record{margin-bottom:20px;break-inside:avoid}
.grade-table{font-size:10pt}
.grade-table tr{break-inside:avoid}}

@font-face {
  font-family: 'Riposte Cover Manrope';
  src: url('/fonts/manrope-latin-wght-normal.woff2') format('woff2');
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
}
.stage.riposte-stage {
  container-type: inline-size;
  isolation: isolate;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 30%;
  align-items: center;
  gap: 24px;
  background: #f2f8fc;
  color: #162d38;
}
.stage.riposte-stage::before {
  content: '';
  position: absolute;
  z-index: 0;
  top: -16%;
  right: -3%;
  width: 40%;
  height: 136%;
  border-radius: 64% 28% 56% 32% / 48% 44% 58% 34%;
  background: #e3edf9;
  transform: rotate(14deg);
  pointer-events: none;
}
.stage.riposte-stage .stage-title {
  margin: 0;
  max-width: none;
  min-width: 0;
  font-family: 'Riposte Cover Manrope', Arial, sans-serif;
  font-size: clamp(24px, 6.1cqw, 36px);
  font-weight: 600;
  font-style: normal;
  line-height: 1.13;
  letter-spacing: -0.045em;
  color: #162d38;
  overflow-wrap: anywhere;
}
.stage.riposte-stage .riposte-mark {
  position: relative;
  z-index: 1;
  display: block;
  justify-self: center;
  width: min(100%, 150px);
  height: auto;
  object-fit: contain;
}
.case .stage.riposte-stage { gap: 40px; }
.case .stage.riposte-stage .stage-title { font-size: clamp(32px, 5.7cqw, 64px); }
.case .stage.riposte-stage .riposte-mark { width: min(100%, 230px); }
.project-link:hover .stage.riposte-stage { filter: none; }
@media (max-width: 1000px) {
  .stage.riposte-stage,
  .case .stage.riposte-stage { gap: 16px; }
}
@media (max-width: 480px) {
  .stage.riposte-stage,
  .case .stage.riposte-stage {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto 1fr;
    gap: 12px;
    padding: 24px;
  }
  .stage.riposte-stage::before {
    top: auto;
    bottom: -24%;
    right: -12%;
    width: 66%;
    height: 102%;
  }
  .stage.riposte-stage .stage-title,
  .case .stage.riposte-stage .stage-title { font-size: clamp(24px, 8cqw, 32px); }
  .stage.riposte-stage .riposte-mark {
    justify-self: end;
    align-self: end;
    width: 90px;
  }
  .case .stage.riposte-stage .riposte-mark { width: 110px; }
}
@media (forced-colors: active) {
  .stage.riposte-stage { forced-color-adjust: none; }
}
@media screen{.footer-clock{display:inline-flex;flex-wrap:wrap;gap:4px 10px}}
@media (max-width:480px){.home-small{grid-column:1/-1;min-height:0}
.home-small>.tile-link{min-height:0}}
.about-page .page-heading{padding-bottom:16px}

.coursework-feature { margin-bottom: 48px; }
.coursework-heading { margin-bottom: 24px; }
.coursework-heading h2,
.writing-essays > h2 { font-size: 25px; line-height: 1.25; letter-spacing: -.65px; }
.coursework-heading p { margin-top: 10px; font-size: 14px; line-height: 1.8; color: var(--text); }
.coursework-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 22px; }
.coursework-card { display: flex; flex-direction: column; min-width: 0; padding: 32px; border: 1px solid var(--line); border-radius: 22px; color: var(--ink); transition: border-color .18s ease; }
.coursework-cyber { background: var(--purple); }
.coursework-network { background: var(--blue); }
.coursework-card:hover { border-color: var(--accent); }
.coursework-title { display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; }
.coursework-title h3 { max-width: 17ch; font-size: clamp(25px, 2.4vw, 30px); font-weight: 500; line-height: 1.2; letter-spacing: -.8px; }
.coursework-icon { width: 56px; height: 56px; flex: 0 0 56px; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; opacity: .65; }
.coursework-course { margin-top: 20px; font-size: 13px; font-weight: 600; line-height: 1.6; }
.coursework-summary { margin-top: 12px; margin-bottom: 28px; max-width: 46ch; font-size: 14px; line-height: 1.8; color: var(--text); }
.coursework-action { display: flex; align-items: flex-start; min-height: 64px; justify-content: space-between; gap: 20px; padding-top: 18px; margin-top: auto; border-top: 1px solid var(--line); font-size: 13px; font-weight: 500; line-height: 1.6; }
.coursework-action small { display: block; margin-top: 4px; font-size: 12px; font-weight: 400; color: var(--text); }
.writing-essays > h2 { margin-bottom: 24px; }
.writing-essays .writing-entry h3 { font-size: 19px; line-height: 1.5; letter-spacing: -.3px; }
.writing-essays .writing-entry:hover h3 { color: var(--accent); }
@media (max-width: 740px) {
  .coursework-feature { margin-bottom: 32px; }
  .coursework-heading h2, .writing-essays > h2 { font-size: 23px; }
  .coursework-grid { grid-template-columns: 1fr; gap: 18px; }
  .coursework-card { padding: 25px; }
  .coursework-title { gap: 16px; }
  .coursework-title h3 { font-size: 26px; }
  .coursework-icon { width: 44px; height: 44px; flex-basis: 44px; }
  .writing-essays .writing-entry h3 { font-size: 18px; }
}

@font-face {
  font-family: 'Frist Cover Manrope';
  src: url('/fonts/manrope-latin-wght-normal.woff2') format('woff2');
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
}
.stage.frist-stage {
  container-type: inline-size;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 30%;
  align-items: center;
  gap: 40px;
  background: #ecece8;
  color: #171717;
}
.case .frist-stage .stage-title {
  margin: 0;
  max-width: none;
  min-width: 0;
  font-family: 'Frist Cover Manrope', Arial, sans-serif;
  font-size: clamp(32px, 5.7cqw, 64px);
  font-weight: 600;
  font-style: normal;
  line-height: 1.13;
  letter-spacing: -0.045em;
}
.frist-stage .frist-mark {
  display: block;
  justify-self: center;
  width: min(100%, 230px);
  height: auto;
}
@media (max-width: 740px) {
  .stage.frist-stage { gap: 20px; }
}
@media (max-width: 480px) {
  .stage.frist-stage {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto 1fr;
    gap: 12px;
  }
  .case .frist-stage .stage-title { font-size: clamp(24px, 8cqw, 32px); }
  .frist-stage .frist-mark {
    justify-self: end;
    align-self: end;
    width: 110px;
  }
}
@media (forced-colors: active) {
  .stage.frist-stage { forced-color-adjust: none; }
}
