/* shadcn primitives, composed as a personal portfolio rather than a dashboard. */
:root{--paper:#fcfcfa;--ink:#222520;--muted:#696e63;--accent:#385b43;--line:#e3e5de;--pad:clamp(22px,5vw,72px)}
.page-width,.site-header{max-width:1344px}.site-header{padding-top:22px;padding-bottom:22px}.site-header:after{display:none}.wordmark{font-family:var(--sans);font-style:normal;font-size:28px;font-weight:650;letter-spacing:-2px}.site-header nav{gap:10px}.site-header nav a{font-size:13px}
[data-slot=button]{min-height:44px;line-height:1.2;gap:9px;font-family:var(--sans);font-size:13px;font-weight:500;padding:11px 16px;border:1px solid transparent;border-radius:8px;box-shadow:none;text-decoration:none;transition:background-color .25s,border-color .25s,color .25s,box-shadow .25s,transform .35s}
[data-slot=button][data-variant=default]{background:var(--ui-primary);color:#fff;border-color:var(--ui-primary)}[data-slot=button][data-variant=default]:hover{background:#385442;border-color:#385442;color:#fff;box-shadow:0 4px 12px #273d3112}
[data-slot=button][data-variant=outline]{background:var(--ui-card);color:var(--ui-foreground);border-color:var(--ui-border)}[data-slot=button][data-variant=outline]:hover{background:var(--ui-accent);border-color:#b9c4b3;color:var(--ui-foreground)}
[data-slot=button][data-variant=ghost]{background:transparent;color:var(--ui-muted-foreground)}[data-slot=button][data-variant=ghost]:hover{background:var(--ui-accent);color:var(--ui-foreground)}[data-slot=button][data-size=lg]{min-height:48px;padding-inline:20px}
[data-slot=button] svg{width:16px;height:16px;flex-shrink:0}[data-slot=button]:focus-visible{outline:2px solid var(--ui-ring);outline-offset:3px;box-shadow:none}.hero{padding-top:78px;padding-bottom:58px}.hero-intro{display:flex;flex-direction:column;align-items:center;text-align:center;gap:29px}.hero h1{display:flex;align-items:baseline;justify-content:center;gap:.18em;font-size:clamp(68px,10.6vw,148px);line-height:1.04;font-weight:500;letter-spacing:-.075em}.name-line{display:inline-block}.surname{font-family:var(--sans);font-style:normal;font-weight:500;font-size:inherit;margin:0;letter-spacing:inherit}.name-period{color:var(--accent)}.intro-copy{max-width:635px;align-self:center;padding:0}.intro-copy>p:first-child{font-size:clamp(19px,2vw,25px);line-height:1.6;letter-spacing:-.028em}.intro-note{font-size:15px;margin-top:18px;color:#858a7d}.profile-links{justify-content:center;margin-top:27px;gap:10px}.profile-links a{border-bottom-width:1px}.profile-links .file-type{font-size:9px;opacity:.6;color:inherit}
.desk{max-width:1110px;margin:10px auto 0;padding-top:72px;gap:24px}.desk-card{border-color:#e0e3da;border-radius:12px;box-shadow:0 4px 6px -5px #1e2a2910,0 16px 36px -25px #1e2a2933;background:white;overflow:hidden}.desk-card:hover{box-shadow:0 7px 10px -6px #1e2a2915,0 20px 38px -23px #1e2a2940}.mini-browser{height:30px;background:#ffffffd9}.desk-title{padding:17px 20px;font-size:13px;border-color:#00000009}.desk-image{height:213px}.booking-preview{background:#f3f0e7}.transit-preview{background:#edf2e9}.inbox-preview{background:#f0eef5}.desk .selected-day{background:#596b4b}.calendar-month{font-size:19px}.sample-mail p{font-size:16px}
h2{font-size:clamp(36px,4.2vw,58px);line-height:1.12;font-weight:450;letter-spacing:-.055em}.section-heading{margin-bottom:38px;align-items:center}.section-heading .section-peek{width:190px;height:110px}.project-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:30px}.project-feature,.project-feature:nth-child(2){display:block;min-width:0;margin:0}.project-feature:first-child{grid-column:1/-1}.project-card{height:100%;padding:0;gap:0;border:1px solid var(--ui-border);border-radius:16px;overflow:hidden;background:#fff;box-shadow:0 1px 2px #1d292004;transition:border-color .5s,box-shadow .5s}.project-card:hover{border-color:#bfc9b6;box-shadow:0 18px 45px -30px #20382020}.project-feature:first-child .project-card{display:grid;grid-template-columns:.9fr 1.1fr;align-items:center}.project-feature:first-child .project-visual{order:2;border-bottom:0}.project-feature:first-child .project-copy{order:1;padding:48px}.project-visual{border-radius:0;transform:none!important;will-change:auto;overflow:hidden;border-bottom:1px solid #00000006}.project-art{height:330px;transition:transform 1.1s cubic-bezier(.16,1,.3,1)}.project-feature:first-child .project-art{height:460px}.project-copy{padding:33px 36px 32px;max-width:none;display:flex;flex-direction:column;flex:1;min-height:300px}.project-copy h3{font-size:31px;font-weight:500;letter-spacing:-.05em;line-height:1.1;margin-bottom:17px}.project-feature:first-child .project-copy h3{font-size:40px}.project-description{font-size:16px;line-height:1.75;letter-spacing:-.014em;color:#63695c}.project-tech{font-size:11px;line-height:1.7;margin-top:19px;color:#7f8678}.project-actions{display:flex;align-items:center;gap:8px;margin-top:24px;flex-wrap:wrap}.project-actions [data-slot=button]{margin:0;min-height:44px;padding:10px 14px;font-size:12px}.project-copy [data-project-island]{margin-top:auto}
.project-transit .project-visual,.project-transit .project-copy{order:initial!important}.project-phish .security-art{padding:86px 30px 25px}.project-phish .scan-orbit{width:190px;height:190px;top:18px;padding-top:10px}.project-phish .scan-orbit>span{font-size:38px}.project-phish .message-card{padding:19px;max-width:330px}.project-phish .message-card>p{font-size:17px;margin:15px 0;line-height:1.65}.project-phish .message-result{font-size:9px;padding-top:10px}.project-transit .route-card{bottom:35px}.project-transit .transit-map{transform:scale(1.04)}.workflow-art{background:#f0eadc}.transit-art{background:#e9f0e1}.security-art{background:#eeecf4}.smaller-projects{padding-top:70px}.smaller-projects>h3{font-family:var(--sans);font-size:25px;letter-spacing:-.045em;line-height:1.3;margin-bottom:25px}.experiment{grid-template-columns:1fr 1.65fr 25px;padding:26px 4px;gap:25px}.experiment h4{font-size:19px}.experiment p{font-size:14px}.experiment>span{font-size:22px}.work{padding-bottom:95px}.about{padding-top:25px;padding-bottom:85px;border:0}.section-divider{height:1px;background:var(--ui-border);margin-top:32px;margin-bottom:42px}.about-layout{margin-top:0;gap:12%;grid-template-columns:1.3fr 1fr}.about-copy>p:first-child{font-size:23px;line-height:1.65;letter-spacing:-.028em}.about-copy>p{font-size:17px;line-height:1.8;color:#697060}.personal-note{background:#f3f3ed;padding:38px 33px;border:1px solid #e6e8dd;border-radius:12px;box-shadow:none;transform:rotate(2deg)}.personal-note>p{font-size:29px;color:#46503c}.personal-note>span:last-child{color:#7b826f}.note-fold{display:none}.personal-note.reveal.visible{transform:rotate(2deg)}.contact .section-divider{margin-top:0;margin-bottom:45px}.contact h2{font-size:clamp(44px,6vw,78px)}.contact h2 em{font-family:var(--sans);font-style:normal;font-weight:400;color:#7a8873}.email-link{font-size:clamp(15px,1.8vw,23px);margin-top:28px;border-color:#cfd5c8}.contact #copy-email{margin-top:14px;padding:9px 13px;font-size:12px}.site-footer{border-color:var(--ui-border);padding-top:23px;padding-bottom:23px;gap:20px}.footer-name{font-family:var(--sans);font-style:normal;font-size:18px;letter-spacing:-.045em}.site-controls{gap:3px}.site-controls [data-slot=button]{font-size:11px;padding:10px 12px}.site-footer>span{font-size:11px}
/* Radix owns focus trapping, Escape, outside click, scroll lock and focus return. */
[data-slot=dialog-overlay]{background:#1c251e3d;backdrop-filter:blur(7px)}.project-dialog{width:calc(100% - 36px);max-width:590px;max-height:calc(100dvh - 40px);overflow-y:auto;overscroll-behavior:contain;padding:40px;border-radius:18px;background:var(--ui-background);border:1px solid var(--ui-border);box-shadow:0 25px 100px #202c2922;gap:24px;animation-duration:.35s}.project-dialog [data-slot=dialog-header]{text-align:left;gap:16px}.project-dialog [data-slot=dialog-title]{font-size:36px;line-height:1.15;font-weight:500;letter-spacing:-.06em;padding-right:22px}.project-dialog [data-slot=dialog-description]{font-size:16px;line-height:1.8;color:var(--ui-muted-foreground)}.project-dialog [data-slot=dialog-close]{top:10px;right:10px;width:44px;height:44px;display:grid;place-items:center;background:transparent;cursor:pointer;border-radius:8px}.project-dialog [data-slot=dialog-close]:hover{background:var(--ui-accent)}.project-accordion [data-slot=accordion-trigger]{min-height:58px;display:flex;align-items:center;text-align:left;background:none;padding:15px 0;font-size:14px;font-weight:500}.project-accordion [data-slot=accordion-trigger] svg{width:16px;height:16px;color:#858e79}.project-accordion [data-slot=accordion-content]{font-size:14px;line-height:1.8;color:var(--ui-muted-foreground)}.project-accordion [data-slot=accordion-item]{border-color:var(--ui-border)}.dialog-tech{font-size:11px;line-height:1.8;color:#868d7c}.project-dialog [data-slot=dialog-footer]{border-top:1px solid var(--ui-border);padding-top:22px}
@media(min-width:801px) and (hover:hover){.project-card:hover .project-art{transform:scale(1.018)}}
@media(max-width:1000px){.project-feature:first-child .project-copy{padding:34px}.project-copy{padding:28px;min-height:305px}.project-list{gap:24px}.desk{gap:18px}.desk-image{height:195px}.project-feature:first-child .project-art{height:450px}}
@media(max-width:800px){.hero{padding-top:45px;padding-bottom:35px}.hero h1{font-size:clamp(61px,11.8vw,95px);gap:.15em}.hero-intro{gap:25px}.intro-copy{max-width:570px}.intro-copy>p:first-child{font-size:20px}.intro-note{font-size:14px}.profile-links{gap:8px;margin-top:22px}.desk{margin-top:0;padding-top:38px;gap:15px;padding-bottom:18px}.desk-card{flex-basis:min(78%,350px)}.desk-image{height:223px}.section-heading{margin-bottom:30px;display:flex;gap:15px}.section-heading h2{font-size:36px}.section-heading .section-peek{width:160px;height:92px;margin-top:0}.project-list{grid-template-columns:1fr;gap:26px}.project-feature:first-child{grid-column:auto}.project-feature:first-child .project-card{display:flex}.project-feature:first-child .project-visual{order:0}.project-feature:first-child .project-copy{order:0;padding:30px}.project-card .project-art,.project-feature:first-child .project-art{height:360px}.project-copy{padding:30px;min-height:0}.project-feature:first-child .project-copy h3,.project-copy h3{font-size:31px}.project-card .project-visual{border-bottom:1px solid #00000006}.project-phish .security-art{padding-top:100px}.project-phish .scan-orbit{top:30px}.project-description{font-size:16px}.project-actions{margin-top:22px}.smaller-projects{padding-top:48px}.smaller-projects>h3{font-size:23px}.experiment{grid-template-columns:1fr 25px;gap:8px 20px;padding:24px 0}.experiment p{grid-column:1}.experiment>span{grid-column:2;grid-row:1/3}.work{padding-bottom:65px}.about{padding-top:15px;padding-bottom:60px}.about-layout{grid-template-columns:1fr;gap:30px}.section-divider{margin-top:25px;margin-bottom:32px}.personal-note{max-width:430px;width:calc(100% - 10px)}.contact h2{font-size:clamp(43px,8vw,63px)}.contact .section-divider{margin-bottom:30px}.site-footer{gap:8px 20px}.site-controls{margin-left:-12px;gap:8px}.project-dialog{padding:45px 25px 26px;border-radius:14px}.project-dialog [data-slot=dialog-title]{font-size:31px}}
@media(max-width:480px){.site-header{gap:12px}.site-header nav{gap:0}.site-header nav [data-slot=button]{font-size:12px;padding-inline:11px}.site-header nav [data-slot=button] svg{width:13px;height:13px}.hero{padding-top:35px}.hero h1{font-size:clamp(54px,13.7vw,67px);gap:.15em;letter-spacing:-.075em}.intro-copy>p:first-child{font-size:18px;line-height:1.65}.intro-note{font-size:13px}.profile-links [data-slot=button]{min-height:46px;padding-inline:14px;font-size:12px}.profile-links{gap:6px}.desk-card{flex-basis:88%}.section-heading{display:block}.section-heading .section-peek{margin:12px 0 0 auto}.project-copy,.project-feature:first-child .project-copy{padding:25px}.project-card .project-art,.project-feature:first-child .project-art{height:335px}.project-description{font-size:15px}.project-tech{font-size:10px}.about-copy>p:first-child{font-size:22px}.about-copy>p{font-size:16px}.personal-note{padding:28px}.personal-note>p{font-size:27px}.email-link{font-size:14px;overflow-wrap:anywhere}.site-header .wordmark{font-size:25px}}
@media(prefers-reduced-motion:reduce){.project-card,.project-art,[data-slot=button],.project-dialog{transition:none!important;animation:none!important}}
