@font-face{font-family:DM Sans;src:url(/assets/fonts/dm-sans-latin-variable.woff2) format("woff2");font-style:normal;font-weight:100 900;font-display:swap}@font-face{font-family:"Instrument Serif";src:url(/assets/fonts/instrument-serif-latin-italic.woff2) format("woff2");font-style:italic;font-weight:400;font-display:swap}:root{color-scheme:dark;--color-bg: #131618;--color-surface: #1c2023;--color-surface-hover: #262d32;--color-text: #f4f2ed;--color-muted: #abb1b5;--color-secondary: #a3adb4;--color-line: #343b40;--color-control-border: #657582;--color-accent: #b8d6ec;--color-accent-hover: #cbe3f4;--color-on-accent: #14202a;--color-focus: #b8d6ec;--color-media: #ebeef1;--color-media-border: #56616a;--color-portrait-border: #3c464d;--color-selected-bg: #2d4354;--color-selected-text: #e8f2f9;--color-selected-border: #5b7c95;--color-disabled-bg: #171c20;--color-disabled-text: #6f7b85;--color-disabled-border: #30383f;--color-feature: #1b2b36;--color-feature-line: #3b5363;--media-paper: #e7ebef;--media-screen: #242e38;--media-terminal: #17121d;--shadow-portrait: 0 12px 28px -12px rgb(0 0 0 / .45);--shadow-tool: 0 3px 7px rgb(0 0 0 / .2);--shadow-tool-hover: 0 10px 18px -8px rgb(0 0 0 / .42);--shadow-dialog: 0 24px 70px -18px rgb(0 0 0 / .65);--overlay-dialog: rgb(3 8 12 / .76);--blur-dialog: 6px;--tool-bg-0: #c2cfe0;--tool-bg-1: #c7c0d8;--tool-bg-2: #b4cebf;--tool-bg-3: #e0c5ae;--tool-bg-4: #dbd19d;--tool-bg-5: #b7cfd1;--tool-text: #24292b;--tool-muted: #374244;--tool-border: rgb(36 41 43 / .14);--tool-icon-border: rgb(36 41 43 / .18);--tool-icon-bg: rgb(255 255 255 / .08);--font-body: "DM Sans", "Segoe UI", Arial, sans-serif;--font-editorial: "Instrument Serif", Georgia, serif;--radius-control: 8px;--radius-media: 14px;--radius-portrait: 10px;--radius-project-media: 10px;--radius-dialog: 18px;--content-max: 1280px;--page-gutter: clamp(20px, 5vw, 72px);--header-min-height: 64px;--header-offset: 64px;--footer-height: 52px;--ease-out: cubic-bezier(.22, 1, .36, 1);--duration-fast: .16s;--duration-ui: .24s;background:var(--color-bg);color:var(--color-text);font-family:var(--font-body);font-synthesis:none}:root[data-theme=light]{color-scheme:light;--color-bg: #f6f7f9;--color-surface: #ffffff;--color-surface-hover: #e9eff5;--color-text: #1e2933;--color-muted: #4c5c69;--color-secondary: #526574;--color-line: #d8e0e8;--color-control-border: #7c8e9e;--color-accent: #315f7c;--color-accent-hover: #264f68;--color-on-accent: #ffffff;--color-focus: #2465a0;--color-media: #f0f3f6;--color-media-border: #ccd7e1;--color-portrait-border: #ccd6e0;--color-selected-bg: #e5eef6;--color-selected-text: #244e6b;--color-selected-border: #91acc0;--color-disabled-bg: #f2f4f6;--color-disabled-text: #83929e;--color-disabled-border: #dce3e9;--color-feature: #e9f0f5;--color-feature-line: #cddbe5;--media-paper: #f0f3f6;--media-screen: #e6edf4;--media-terminal: #ece6f0;--shadow-portrait: 0 2px 4px rgb(27 43 57 / .05), 0 12px 24px -14px rgb(27 43 57 / .18);--shadow-tool: 0 1px 2px rgb(27 43 57 / .05);--shadow-tool-hover: 0 8px 16px -10px rgb(27 43 57 / .22);--shadow-dialog: 0 16px 48px -12px rgb(27 43 57 / .18);--overlay-dialog: rgb(23 38 54 / .26);--blur-dialog: 4px;--tool-bg-0: #e6eef6;--tool-bg-1: #ece7f5;--tool-bg-2: #e6f0e8;--tool-bg-3: #f4e9de;--tool-bg-4: #f1eed8;--tool-bg-5: #e3eff0;--tool-text: #20323f;--tool-muted: #455b6b;--tool-border: rgb(73 96 113 / .22);--tool-icon-border: rgb(73 96 113 / .2);--tool-icon-bg: rgb(255 255 255 / .45)}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:auto;scrollbar-gutter:stable}body{margin:0;font-size:1rem;line-height:1.55}button,input{font:inherit}button,a{-webkit-tap-highlight-color:transparent;touch-action:manipulation}button{cursor:pointer;color:inherit}a{color:inherit;text-decoration:none}button:disabled{cursor:default;opacity:1;color:var(--color-disabled-text)}.icon-button:disabled{border-color:var(--color-disabled-border);background:var(--color-disabled-bg)}button:focus-visible,a:focus-visible,input:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--color-focus);outline-offset:4px}::selection{background:var(--color-accent);color:var(--color-on-accent)}[hidden]{display:none!important}h1,h2,h3,p,figure{margin:0}h1,h2,h3{font-weight:500}button svg{pointer-events:none}.control-icon{display:block;inline-size:18px;block-size:18px;flex:0 0 18px;pointer-events:none}html.dialog-open{overflow:hidden}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;z-index:50;top:-100px;left:16px;padding:12px 16px;border:1px solid var(--color-line);border-radius:var(--radius-control);background:var(--color-surface)}.skip-link:focus{top:12px}.section-label{color:var(--color-secondary);font-size:.75rem;font-weight:600;letter-spacing:.13em;line-height:1.4;text-transform:uppercase}.accent-dot{color:var(--color-accent)}.button{display:inline-flex;min-height:48px;align-items:center;justify-content:center;gap:10px;padding:12px 16px;border:1px solid transparent;border-radius:var(--radius-control);font-size:.875rem;font-weight:600;transition:background var(--duration-fast),border-color var(--duration-fast),color var(--duration-fast)}.button--primary{background:var(--color-accent);color:var(--color-on-accent)}.button--primary:hover{background:var(--color-accent-hover)}.button--outline{border-color:var(--color-control-border);background:var(--color-surface);color:var(--color-text)}.button--outline:hover{border-color:var(--color-accent);background:var(--color-surface-hover)}.button--text{padding-inline:4px;color:var(--color-text)}.button--text:hover{color:var(--color-accent)}.icon-button{display:inline-grid;width:44px;height:44px;flex:none;place-items:center;padding:0;border:1px solid var(--color-control-border);border-radius:50%;background:transparent;font-size:1.25rem;transition:background var(--duration-fast),border-color var(--duration-fast)}.icon-button:not(:disabled):hover{border-color:var(--color-accent);background:var(--color-surface-hover)}.text-button{min-height:44px;padding:8px 0;border:0;background:transparent;color:var(--color-muted);font-size:.8125rem;transition:color var(--duration-fast)}.text-button:hover{color:var(--color-text)}.noscript{position:fixed;z-index:20;inset:auto 16px 16px;padding:20px;background:var(--color-surface);border:1px solid var(--color-line)}.container{inline-size:min(var(--content-max),calc(100% - 2 * var(--page-gutter)));margin-inline:auto}.app-shell{display:grid;min-block-size:100svh;grid-template-rows:auto 1fr auto}.site-header{position:sticky;z-index:20;top:0;border-bottom:1px solid var(--color-line);background:var(--color-bg)}.header-inner{display:grid;width:min(var(--content-max),calc(100% - 2 * var(--page-gutter)));min-height:var(--header-min-height);grid-template-columns:1fr auto 1fr;align-items:center;gap:24px;margin-inline:auto}.wordmark{display:inline-flex;min-height:44px;align-items:center;justify-self:start;font-size:1.75rem;font-weight:750;letter-spacing:-.09em;line-height:1}.wordmark span{color:var(--color-accent)}.view-nav{position:relative;display:flex;align-items:center;align-self:stretch;gap:30px}.view-nav a{display:inline-flex;min-height:48px;align-items:center;gap:5px;color:var(--color-muted);font-size:.875rem;white-space:nowrap;transition:color var(--duration-fast)}.view-nav a:hover,.view-nav a[aria-current=page]{color:var(--color-text)}.nav-count{color:var(--color-secondary);font-size:.75rem;font-variant-numeric:tabular-nums}.nav-indicator{position:absolute;left:0;bottom:-1px;width:0;height:2px;background:var(--color-accent);transition:transform var(--duration-ui) var(--ease-out),width var(--duration-ui) var(--ease-out)}.nav-indicator--instant{transition:none}.header-actions{display:flex;align-items:center;justify-self:end;gap:24px}.resume-link{display:inline-flex;min-height:44px;align-items:center;gap:8px;font-size:.875rem;white-space:nowrap}.resume-link:hover{color:var(--color-accent)}.theme-toggle{display:grid;width:44px;height:44px;place-items:center;padding:0;border:1px solid var(--color-control-border);border-radius:50%;background:transparent;transition:background var(--duration-fast),border-color var(--duration-fast)}.theme-toggle:hover{border-color:var(--color-accent);background:var(--color-surface-hover)}.main-content{display:grid;min-inline-size:0;grid-template-rows:1fr;padding-block:12px;overflow:visible;touch-action:pan-y pinch-zoom}.view{min-width:0;align-self:start}.overview,.contact-view{align-self:center}.site-footer{display:flex;width:min(var(--content-max),calc(100% - 2 * var(--page-gutter)));min-height:var(--footer-height);align-items:center;justify-content:space-between;gap:16px;margin-inline:auto;border-top:1px solid var(--color-line);color:var(--color-secondary);font-size:.75rem}.view-controls{display:flex;align-items:center;gap:14px}.view-button{display:inline-flex;min-height:44px;align-items:center;gap:6px;padding:0;border:0;background:transparent;color:var(--color-secondary);font-size:.75rem}.view-button:not(:disabled):hover{color:var(--color-accent)}#view-position{min-width:46px;text-align:center;font-variant-numeric:tabular-nums;letter-spacing:.07em}@media not (min-width:1099.5px){:root{--header-min-height: 56px}.header-inner{grid-template-columns:1fr auto;grid-template-areas:"brand actions" "nav nav";gap:0}.wordmark{grid-area:brand;min-height:56px}.header-actions{grid-area:actions}.view-nav{min-height:44px;grid-area:nav;justify-content:space-between;gap:8px}.view-nav a{min-height:44px;font-size:.8125rem}}@media not (min-width:560.5px){.site-footer{flex-wrap:wrap;gap:0;padding-top:12px}.site-footer>span{flex-basis:100%}.view-controls{width:100%;justify-content:space-between;gap:4px}}@media not (min-width:360.5px){.header-actions{gap:10px}.view-nav a,.nav-count{font-size:.75rem}}@media not (min-width:560.5px),not (min-height:620.5px){.overview,.contact-view{align-self:start}}@media print{.site-header,.site-footer,.filters,.pager,.search-control,.toolkit-controls{display:none}.view[hidden]{display:block!important;margin-block:32px}.app-shell{display:block}}.overview{--portrait-width: 22rem;--portrait-inset: 1.5rem;--hero-gap: 4rem;--identity-width: 30rem;--given-size: 6rem;--surname-size: 9rem;--role-name-gap: .75rem;--name-education-gap: 1.125rem;--education-actions-gap: 1.25rem;display:grid;grid-template-columns:minmax(0,1fr);gap:.75rem}.overview-hero{min-inline-size:0}.overview-hero__inner{display:grid;max-inline-size:68.75rem;grid-template-columns:max-content minmax(0,var(--identity-width));justify-content:center;align-items:center;gap:var(--hero-gap);padding-block:0}.overview-visual{inline-size:fit-content;min-inline-size:0;max-inline-size:100%;justify-self:center;align-self:center;padding:var(--portrait-inset);border-radius:1rem;background:var(--color-feature)}.overview-identity{min-inline-size:0;overflow-wrap:anywhere}.overview-role{color:var(--color-accent);font-size:.875rem;font-weight:650;letter-spacing:.05em;text-transform:uppercase}.identity-name{margin-top:var(--role-name-gap);font-weight:500}.identity-name__given{display:block;font-size:var(--given-size);line-height:1.02;letter-spacing:-.065em}.identity-name__surname{display:block;margin-top:4px;margin-left:-.035em;font-family:var(--font-editorial);font-size:var(--surname-size);font-style:italic;font-weight:400;letter-spacing:-.035em;line-height:.98}.identity-dot{color:var(--color-accent)}.overview-education{margin-top:var(--name-education-gap);color:var(--color-muted);font-size:.9375rem}.overview-education span{padding-inline:5px;color:var(--color-secondary)}.overview-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-top:var(--education-actions-gap)}.portrait-frame{inline-size:var(--portrait-width);max-inline-size:100%;margin:0;overflow:hidden;border:1px solid var(--color-portrait-border);border-radius:var(--radius-portrait);box-shadow:var(--shadow-portrait)}.overview-portrait{display:block;inline-size:100%;block-size:auto;aspect-ratio:4 / 5;object-fit:contain}@media(min-width:1099.5px)and (not (min-height:800.5px)){.overview{--portrait-width: 16.5rem;--portrait-inset: 1rem;--hero-gap: 3rem;--identity-width: 28rem;--given-size: 4.75rem;--surname-size: 7rem;--role-name-gap: .625rem;--name-education-gap: 1rem}.overview-role{font-size:.8125rem;line-height:1.4}}@media not (min-width:1099.5px){.overview{--role-name-gap: .5rem;--name-education-gap: .875rem;--education-actions-gap: 1rem;align-self:start}}@media(min-width:767.5px)and (not (min-width:1099.5px)){.overview{--portrait-width: 14rem;--portrait-inset: 1rem;--hero-gap: 2rem;--identity-width: 28rem;--given-size: 3.5rem;--surname-size: 6rem}}@media(min-width:560.5px)and (not (min-width:767.5px)){.overview{--portrait-width: 10rem;--portrait-inset: .75rem;--hero-gap: 1.5rem;--identity-width: 28rem;--given-size: 2.5rem;--surname-size: 4.25rem}.overview-role{font-size:.8125rem;line-height:1.4}.overview-education{font-size:.875rem}}@media not (min-width:767.5px){.overview-actions .button{min-height:44px;gap:10px;padding:10px 12px;font-size:.8125rem}}@media not (min-width:560.5px){.overview{--portrait-width: clamp(11rem, 49.2vw, 12rem);--portrait-inset: 1rem;--hero-gap: 1rem;--given-size: clamp(2.5rem, 11vw, 2.75rem);--surname-size: clamp(4.5rem, 20vw, 5rem)}.overview-hero__inner{grid-template-columns:minmax(0,1fr)}.overview-identity{inline-size:100%;text-align:center}.overview-role,.overview-education{font-size:.8125rem}.overview-actions{justify-content:center}}.toolkit{min-width:0;padding-top:8px;border-top:1px solid var(--color-line)}.toolkit-header{display:flex;min-height:44px;align-items:center;justify-content:space-between;gap:12px;margin-bottom:6px}.toolkit h2{font-size:1.35rem;letter-spacing:-.04em;line-height:1.15}.toolkit h2 span{color:var(--color-accent)}.toolkit-controls{display:flex;align-items:center;justify-content:end;gap:24px}.toolkit-controls .text-button{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}.tool-strips{display:grid;inline-size:100%;min-inline-size:0;grid-template-columns:minmax(0,1fr)}.tool-group{display:grid;min-inline-size:0;max-inline-size:100%;grid-template-columns:128px minmax(0,1fr);align-items:center;gap:16px}.tool-group__label{color:var(--color-secondary);font-size:.75rem;font-weight:650;letter-spacing:.08em;text-transform:uppercase}.tool-row{inline-size:100%;min-inline-size:0;overflow:hidden;padding:10px 0;perspective:900px;-webkit-mask-image:linear-gradient(to right,transparent,#000 16px,#000 calc(100% - 16px),transparent);mask-image:linear-gradient(to right,transparent,#000 16px,#000 calc(100% - 16px),transparent)}.tool-track{display:flex;width:max-content;animation:tool-loop var(--duration, 100s) linear infinite;animation-delay:var(--delay, 0s);will-change:transform}.tool-set{display:flex;flex:none;gap:12px;padding-right:12px}.tool-card{display:flex;width:192px;min-height:76px;flex:none;align-items:center;gap:12px;padding:12px;border:1px solid var(--tool-border);border-radius:9px;background:var(--tool-bg-0);color:var(--tool-text);box-shadow:var(--shadow-tool)}.tool-strips .tool-card{position:relative;transform:perspective(700px) translate3d(var(--pull-x, 0px),var(--pull-y, 0px),var(--pull-z, 0px)) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg));transition:transform .16s ease-out,box-shadow .18s}.tool-strips .tool-card[data-magnetic=true]{z-index:2;box-shadow:var(--shadow-tool-hover)}.tool-card[data-tone="1"]{background:var(--tool-bg-1)}.tool-card[data-tone="2"]{background:var(--tool-bg-2)}.tool-card[data-tone="3"]{background:var(--tool-bg-3)}.tool-card[data-tone="4"]{background:var(--tool-bg-4)}.tool-card[data-tone="5"]{background:var(--tool-bg-5)}.tool-icon{display:grid;width:32px;height:32px;flex:none;place-items:center;border:1px solid var(--tool-icon-border);border-radius:7px;background:var(--tool-icon-bg);font-size:.875rem;font-weight:700}.tool-icon img{display:block;width:21px;height:21px}.tool-label{min-width:0;overflow-wrap:anywhere}.tool-card strong{display:block;font-size:.8125rem;font-weight:650;line-height:1.3}.tool-card small{display:block;margin-top:3px;color:var(--tool-muted);font-size:.75rem;line-height:1.25}.tool-strips[data-paused=true] .tool-track{animation-play-state:paused}@keyframes tool-loop{0%{transform:translate(0)}to{transform:translate(calc(-1 * var(--distance, 0px)))}}@media not (min-width:767.5px){.tool-group{grid-template-columns:88px minmax(0,1fr);gap:10px}}@media not (min-width:560.5px){.toolkit-controls{gap:12px}.toolkit-controls .text-button{font-size:.75rem}.tool-group{grid-template-columns:minmax(0,1fr);gap:0}.tool-group__label{display:none}.tool-row{-webkit-mask-image:linear-gradient(to right,transparent,#000 8px,#000 calc(100% - 8px),transparent);mask-image:linear-gradient(to right,transparent,#000 8px,#000 calc(100% - 8px),transparent)}.tool-card{width:176px}}.projects-view{padding-block:24px 40px}.section-heading,.projects-heading{margin-bottom:28px}.section-heading h1,.projects-heading h1{margin-top:10px;font-size:clamp(2.5rem,4.5vw,4rem);line-height:1.04;letter-spacing:-.06em}.projects-count{margin-top:12px;color:var(--color-muted);font-size:.875rem}.projects-toolbar{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:32px;padding-block:8px;border-bottom:1px solid var(--color-line);background:var(--color-bg)}.search-control{width:min(100%,320px);flex:0 0 320px}.search-field{display:flex;min-height:48px;align-items:center;gap:10px;padding:0 6px 0 14px;border:1px solid var(--color-control-border);border-radius:var(--radius-control);background:var(--color-surface);transition:border-color var(--duration-fast),background var(--duration-fast)}.search-field:hover{border-color:var(--color-accent)}.search-field:focus-within{border-color:var(--color-focus);outline:2px solid var(--color-focus);outline-offset:2px}.search-field>.control-icon{color:var(--color-muted)}.search-field input{width:100%;min-width:0;padding:10px 0;border:0;outline:0;background:transparent;color:var(--color-text);font-size:.875rem}.search-field input::placeholder{color:var(--color-secondary)}.search-field input::-webkit-search-cancel-button{display:none}.search-field button{display:grid;width:44px;height:44px;flex:none;place-items:center;border:0;border-radius:50%;background:transparent;color:var(--color-muted)}.search-field button:hover{background:var(--color-surface-hover);color:var(--color-text)}.filters{display:flex;min-width:0;flex-wrap:wrap;gap:8px}.filter{display:inline-flex;min-height:44px;min-width:44px;align-items:center;gap:5px;padding:8px 10px;border:0;border-radius:var(--radius-control);background:transparent;color:var(--color-muted);font-size:.8125rem;transition:background var(--duration-fast),color var(--duration-fast),box-shadow var(--duration-fast)}.filter:hover{background:var(--color-surface-hover);color:var(--color-text)}.filter[aria-pressed=true]{background:var(--color-selected-bg);color:var(--color-selected-text);box-shadow:inset 0 0 0 1px var(--color-selected-border);font-weight:600}.filter__count{font-size:.75rem;font-variant-numeric:tabular-nums}.project-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:start;column-gap:28px;row-gap:36px;scroll-margin-top:calc(var(--header-offset) + 12px)}.project-entry{position:relative;display:flex;min-width:0;flex-direction:column;padding-bottom:22px;border-bottom:1px solid var(--color-line);transition:transform .2s var(--ease-out)}.project-entry__media{width:100%;aspect-ratio:16 / 10;margin:0}.media-stage{display:grid;overflow:hidden;place-items:center;padding:10px;border:1px solid var(--color-media-border);border-radius:var(--radius-project-media);background:var(--media-paper)}.media-stage[data-tone=screen]{background:var(--media-screen)}.media-stage[data-tone=terminal]{background:var(--media-terminal)}.media-stage img{display:block;width:100%;height:100%;min-height:0;object-fit:contain}.media-stage--unavailable{background:var(--color-surface)!important;color:var(--color-muted);font-size:.8125rem}.media-stage__fallback{text-align:center}.project-entry__meta{margin-top:16px}.project-entry__category{color:var(--color-accent);font-size:.75rem;font-weight:650;letter-spacing:.09em;text-transform:uppercase}.project-entry__title{margin-top:9px;font-size:1.375rem;letter-spacing:-.035em;line-height:1.25}.project-entry[data-project=smishing-thesis] .project-entry__title{font-size:1.125rem;letter-spacing:-.02em;line-height:1.35}.project-entry__button{display:flex;width:100%;align-items:start;justify-content:space-between;gap:12px;padding:0;border:0;background:none;color:inherit;font:inherit;letter-spacing:inherit;line-height:inherit;text-align:left;overflow-wrap:anywhere}.project-entry__button:after{position:absolute;inset:0;z-index:1;content:""}.project-entry__arrow{margin-top:3px;transition:transform .2s var(--ease-out)}.project-entry:focus-within{outline:2px solid var(--color-focus);outline-offset:6px;border-radius:4px}.project-entry__button:focus-visible{outline:none}.project-entry__summary{margin-top:11px;color:var(--color-muted);font-size:.9375rem;line-height:1.6}.project-entry__result{margin-top:14px;font-size:.875rem;line-height:1.55}.project-entry__stack{margin-top:12px;color:var(--color-secondary);font-size:.75rem;line-height:1.6}.project-entry__attribution{margin-top:7px;color:var(--color-secondary);font-size:.75rem;line-height:1.5}.project-empty{padding:48px 0;color:var(--color-muted)}.project-empty .text-button{display:inline-flex;align-items:center;gap:6px;color:var(--color-accent)}.pager{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-top:32px;color:var(--color-muted);font-size:.8125rem}.pager-controls{display:flex;align-items:center;gap:14px}.pager-status{min-width:45px;text-align:center;font-variant-numeric:tabular-nums}@media(hover:hover)and (prefers-reduced-motion:no-preference){.project-entry:hover{transform:translateY(-2px)}.project-entry:hover .media-stage{border-color:var(--color-accent)}.project-entry:hover .project-entry__arrow{transform:translate(3px,-3px)}}@media(min-width:1099.5px)and (min-height:719.5px){.projects-toolbar{position:sticky;z-index:3;top:var(--header-offset)}.project-grid{scroll-margin-top:calc(var(--header-offset) + var(--gallery-toolbar-height, 0px) + 12px)}}@media not (min-width:1000.5px){.project-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media not (min-width:900.5px){.projects-toolbar{flex-direction:column-reverse;align-items:stretch;gap:12px}.search-control{width:100%;flex-basis:auto}.project-grid{scroll-margin-top:calc(var(--header-offset) + 12px)}}@media not (min-width:680.5px){.search-field input{font-size:1rem}.projects-view{padding-block:20px 36px}.projects-toolbar{margin-bottom:26px}.project-grid{grid-template-columns:minmax(0,1fr);row-gap:36px}.project-entry__media{aspect-ratio:16 / 11}.project-entry[data-project=smishing-thesis] .project-entry__title{font-size:1.1875rem}.pager{align-items:start;flex-wrap:wrap}.pager-controls{margin-left:auto}}@media not (min-width:560.5px){.filters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.filter{justify-content:space-between;gap:8px;text-align:left;line-height:1.35}}dialog{width:min(1200px,calc(100% - 32px));max-height:calc(100svh - 32px);margin:auto;padding:0 32px 32px;overflow-y:auto;border:1px solid var(--color-line);border-radius:var(--radius-dialog);background:var(--color-surface);color:var(--color-text);box-shadow:var(--shadow-dialog)}dialog[data-kind=tools]{width:min(880px,calc(100% - 32px))}dialog::backdrop{background:var(--overlay-dialog);-webkit-backdrop-filter:blur(var(--blur-dialog));backdrop-filter:blur(var(--blur-dialog))}.dialog-header{position:sticky;z-index:3;top:0;display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:22px;padding:20px 0 14px;border-bottom:1px solid var(--color-line);background:var(--color-surface)}#close-dialog{background:var(--color-surface)}#dialog-title{max-width:100%;font-size:clamp(1.875rem,3vw,2.25rem);line-height:1.18;letter-spacing:-.045em;overflow-wrap:anywhere}#dialog-title.dialog-title--thesis{font-size:clamp(1.75rem,2.2vw,1.875rem);line-height:1.3}.dialog-project-layout{display:grid;grid-template-columns:minmax(0,1.8fr) minmax(15rem,1fr);align-items:start;gap:32px;margin-top:24px}.dialog-project-layout--text-only{grid-template-columns:minmax(0,1fr)}.dialog-summary{color:var(--color-muted);font-size:1rem;line-height:1.65}.project-attribution{margin-top:12px;color:var(--color-secondary);font-size:.875rem}.dialog-result{margin-top:20px;color:var(--color-accent);font-size:1rem;line-height:1.55}.dialog-tools{margin-top:18px;color:var(--color-secondary);font-size:.8125rem;line-height:1.7}.dialog-highlights{margin:24px 0 0;padding-left:18px;color:var(--color-muted)}.dialog-highlights li{margin-bottom:10px;padding-left:4px;font-size:.9375rem;line-height:1.65}.dialog-media-gallery{min-width:0}.dialog-media-gallery__display .media-stage{inline-size:100%;block-size:clamp(240px,52svh,500px);min-block-size:0;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr)}.dialog-media-gallery__display img{inline-size:100%;block-size:100%;object-fit:contain}.dialog-media-gallery__caption{margin-top:10px;color:var(--color-muted);font-size:.8125rem}.dialog-media-gallery__footer{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-top:12px}.dialog-media-gallery__thumbs{display:flex;flex-wrap:wrap;gap:8px}.dialog-media-gallery__thumb{width:56px;height:48px;padding:3px;overflow:hidden;border:1px solid var(--color-line);border-radius:5px;background:var(--color-media)}.dialog-media-gallery__thumb[aria-pressed=true]{border-color:var(--color-accent);outline:1px solid var(--color-accent)}.dialog-media-gallery__thumb img{display:block;width:100%;height:100%;object-fit:contain}.dialog-media-gallery__counter{color:var(--color-secondary);font-size:.75rem}.dialog-media-gallery__open{display:inline-flex;min-height:44px;align-items:center;gap:4px;color:var(--color-accent);font-size:.8125rem;font-weight:600}.static-tool-section{margin-top:28px}.static-tool-section h3{margin-bottom:16px;font-size:1rem}.static-tool-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.static-tool-grid .tool-card{width:auto;min-width:0}@media not (min-width:999.5px){.dialog-project-layout{grid-template-columns:1fr}.dialog-media-gallery__display .media-stage{block-size:clamp(180px,38svh,380px)}}@media not (min-width:680.5px){dialog,dialog[data-kind=tools]{width:calc(100% - 24px);max-height:calc(100svh - 24px);padding:0 20px 28px;border-radius:14px}.dialog-header{padding-top:14px}#dialog-title{font-size:1.625rem}#dialog-title.dialog-title--thesis{font-size:1.5rem}.static-tool-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.static-tool-grid .tool-card{gap:8px;padding-inline:10px}}@media not (min-width:360.5px){.static-tool-grid{grid-template-columns:1fr}}.background-view{padding-block:40px}.background-timeline{display:grid;grid-template-columns:1.35fr 1fr;gap:48px;margin-top:40px}.timeline-entry{min-width:0;padding-bottom:30px}.timeline-entry--education{padding-left:48px;border-left:1px solid var(--color-line)}.timeline-date{min-height:82px;color:var(--color-muted);font-size:.875rem}.timeline-date .section-label{margin-bottom:14px}.timeline-body{margin-top:26px}.timeline-body h2{font-size:2rem;line-height:1.1;letter-spacing:-.05em}.timeline-role{margin-top:10px;font-size:1.125rem}.timeline-detail{margin-top:5px;color:var(--color-muted);font-size:.9375rem}.timeline-body ul{max-width:65ch;margin:24px 0;padding-left:18px;color:var(--color-muted)}.timeline-body li{margin-bottom:10px;padding-left:4px;font-size:.9375rem;line-height:1.7}.timeline-tools{margin-top:22px;color:var(--color-secondary);font-size:.8125rem;line-height:1.7}.timeline-honor{margin-top:24px;color:var(--color-accent);font-family:var(--font-editorial);font-size:2.25rem;font-style:italic;line-height:1}@media not (min-width:999.5px){.background-timeline{grid-template-columns:1fr;gap:32px}.timeline-entry--education{padding:32px 0 0;border-top:1px solid var(--color-line);border-left:0}.timeline-date{min-height:0}.timeline-body{margin-top:18px}}@media not (min-width:680.5px){.background-view{padding-block:24px}.background-timeline{margin-top:28px}.timeline-body h2{font-size:1.75rem}}.contact-view{min-block-size:0}.contact-layout{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);align-items:stretch;gap:0;max-inline-size:76rem;margin-inline:auto}.contact-message{display:flex;min-width:0;flex-direction:column;padding:clamp(32px,5vw,64px);border-right:1px solid var(--color-feature-line);background:var(--color-feature)}.contact-message h1{margin-top:20px;font-size:clamp(4rem,6vw,5.5rem);line-height:1;letter-spacing:-.055em}.contact-message h1 em{display:block;margin-top:4px;font-family:var(--font-editorial);font-size:1.15em;font-weight:400;letter-spacing:-.025em}.contact-intro{max-inline-size:29ch;margin-top:26px;color:var(--color-muted)}.contact-location{margin-top:auto;padding-top:42px;color:var(--color-muted);font-size:.875rem}.contact-links{display:grid;min-width:0;align-content:center;padding-inline:clamp(28px,5vw,64px);border-bottom:1px solid var(--color-line)}.contact-email-block{border-top:1px solid var(--color-line)}.contact-route{display:flex;min-block-size:5rem;align-items:center;justify-content:space-between;gap:20px;padding-block:20px;border-top:1px solid var(--color-line);font-size:1.25rem;transition:color var(--duration-fast)}.contact-email-block .contact-route{padding-bottom:8px;border-top:0}.contact-route--email{min-block-size:6rem}.contact-route__content{display:grid;min-width:0;gap:6px}.contact-route__label{color:var(--color-muted);font-size:.75rem}.contact-route__value{font-size:clamp(1.5rem,2.2vw,2rem);letter-spacing:-.045em;overflow-wrap:anywhere}.contact-route__arrow{flex:none;transition:transform var(--duration-fast)}.contact-route:hover{color:var(--color-accent)}.contact-route:hover .contact-route__arrow{transform:translate(2px,-2px)}.copy-email{display:inline-flex;min-height:44px;align-items:center;gap:7px;margin-bottom:12px;padding:8px 0;border:0;background:transparent;color:var(--color-muted);font-size:.8125rem;text-align:left}.copy-email:hover,.copy-email[data-copied=true]{color:var(--color-accent)}.copy-email__status{margin:0 0 12px;color:var(--color-muted);font-size:.8125rem}.copy-email__status:empty{display:none}.copy-email__status[data-state=copied]{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}@media not (min-width:900.5px){.contact-layout{grid-template-columns:1fr;max-inline-size:42rem}.contact-message{padding:32px;border-right:0;border-bottom:1px solid var(--color-feature-line)}.contact-links,.contact-route{padding-inline:0}}@media not (min-width:680.5px){.contact-message{padding:28px 24px}.contact-message h1{font-size:clamp(2.75rem,12vw,3.5rem)}.contact-location{padding-top:32px}.contact-route{font-size:1.125rem}.contact-route__value{font-size:clamp(1.125rem,5vw,1.375rem)}}dialog[open]{animation:dialog-enter .18s var(--ease-out) both}@keyframes dialog-enter{0%{opacity:.7;transform:translateY(8px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.tool-track,.tool-strips .tool-card,.project-entry:hover{transform:none}}
