@import url("./design-tokens.css");
@import url("./design-typography.css");
*{box-sizing:border-box} :root{--paper:var(--brand-paper);--ink:var(--brand-ink);--accent:var(--brand-vermilion);--muted:var(--brand-olive);--footer:var(--brand-charcoal)}html{scroll-behavior:smooth}body{margin:0;background:var(--footer);color:var(--ink);font:16px/1.5 "Instrument Sans",sans-serif}.container{max-width:720px;margin-inline:auto}.paper{background:var(--paper);border-radius:0 0 16px 16px}header{height:100px;display:flex;align-items:flex-start;padding-top:20px}.brand{display:inline-flex;align-items:center;gap:12px;font-weight:600;font-size:15px;color:var(--ink);text-decoration:none}.brand img{display:block}main{padding:24px 0 64px}.intro{margin-bottom:64px}h1,h2{font-family:"Instrument Serif",Georgia,serif;font-weight:400;line-height:1.15;margin:0}h1{font-size:52px;letter-spacing:-.6px}h1 em{font-style:normal;color:var(--accent)}.intro p{margin:24px 0 0}h2{font-size:32px;color:var(--accent)}.recent{list-style:none;padding:0;margin:12px 0 0}.recent li{display:flex;align-items:center;justify-content:space-between;gap:24px;min-height:62px;padding:12px 0;border-bottom:1px solid var(--brand-line)}.recent li:last-child{border-bottom:0}h3{font-size:15px;font-weight:600;line-height:1.5;margin:0}.meta{font-size:12px;color:var(--muted);margin:4px 0 0}.action{font:12px/1.5 "DM Mono",monospace;color:var(--accent);min-width:112px;text-decoration:none;white-space:nowrap}.action:hover{text-decoration:underline}.unavailable{color:var(--muted)}footer{padding:40px 24px 48px;color:var(--paper)}footer p{font-size:14px;margin:12px 0}.contact-row{display:flex;align-items:center;justify-content:space-between;gap:16px}.email-box{display:flex;align-items:center;justify-content:space-between;gap:12px;width:384px;height:48px;border:1px solid var(--brand-icon);border-radius:6px;padding:4px 4px 4px 12px}.email-box a{font:13px "DM Mono",monospace;color:var(--brand-citron);text-decoration:none}.email-box button{font:13px "Instrument Sans",sans-serif;color:var(--accent);border:0;background:transparent;border-radius:3px;min-height:38px;min-width:72px;cursor:pointer}.socials{display:flex;align-items:center;gap:16px}.socials a,.socials span{display:flex;align-items:center;justify-content:center;min-height:44px}.socials img{display:block}.unavailable-social{cursor:help}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:5px}.skip{position:absolute;top:-100px;background:var(--paper);padding:8px;z-index:10}.skip:focus{top:8px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}@media(max-width:800px){header.container,main.container{margin-inline:24px}}@media(max-width:560px){.contact-row{flex-direction:column;align-items:stretch}.email-box{width:100%}.contact-row .socials{justify-content:flex-start}header{height:88px}main{padding-top:12px;padding-bottom:48px}.paper{border-radius:0 0 16px 16px}h1{font-size:40px;letter-spacing:-.3px}.intro{margin-bottom:56px}.intro p{margin-top:20px}h2{font-size:32px}.recent{margin-top:16px}.recent li{align-items:flex-start;flex-direction:column;gap:20px;padding:22px 0}.action{min-height:24px}footer{padding-top:36px}.email-box{flex:1;width:auto;min-width:0;padding-left:8px;gap:4px}.email-box a{font-size:11px;white-space:nowrap}.email-box button{font-size:11px;min-width:52px}.socials{gap:12px}.socials img{width:22px;height:22px}}@media(max-width:370px){.contact-row{flex-wrap:wrap}.email-box{flex-basis:100%}.socials{margin-left:auto}h1{font-size:36px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

/* The content sheet scrolls over a stationary footer. */
:root{--footer-height:218px}
.paper{position:relative;z-index:1;min-height:100svh;margin-bottom:var(--footer-height)}
header{justify-content:space-between;gap:16px}
header .socials{margin-left:auto;gap:8px}
header .socials a{width:36px;height:44px}
footer{position:fixed;inset:auto 0 0;z-index:0;background:var(--footer);padding-bottom:max(48px,env(safe-area-inset-bottom))}
body.footer-in-flow .paper{margin-bottom:0}
body.footer-in-flow footer{position:relative}
@media(max-width:560px){header .socials{gap:2px}header .socials a{width:32px}.brand{gap:8px}header{gap:8px}}
@media(max-width:370px){.brand{font-size:13px}.brand img{width:36px;height:36px}header .socials a{width:30px}.brand{min-height:44px}}

/* A moving circular color layer is clipped to each social mark. */
.socials{--social-color:var(--brand-icon);--eclipse-color:var(--brand-citron);--icon-size:19.2px}
header .socials{--social-color:var(--brand-icon);--eclipse-color:var(--brand-citron);--icon-size:19.2px}
.socials .social-icon{position:relative;display:block;width:var(--icon-size);height:var(--icon-size);min-height:0;background:var(--social-color);-webkit-mask:var(--icon) center/contain no-repeat;mask:var(--icon) center/contain no-repeat;overflow:hidden}
.social-icon::after{content:"";position:absolute;inset:0;background:var(--eclipse-color);clip-path:circle(75% at -80% -80%);transition:clip-path 550ms cubic-bezier(.22,.61,.36,1)}
.socials a:is(:hover,:focus-visible) .social-icon::after{clip-path:circle(75% at 50% 50%)}
@media(max-width:560px){footer .socials,header .socials{--icon-size:17.6px}}
@media(prefers-reduced-motion:reduce){.social-icon::after{transition:none}}

#recent{color:var(--ink)}

/* The full linked row is a single keyboard-accessible target. */
.recent li:has(.row-link){padding:0}
.row-link{display:flex;align-items:center;justify-content:space-between;gap:24px;width:100%;min-height:62px;padding:12px 0;color:inherit;text-decoration:none}
.row-link .action{transition:transform 300ms ease-in-out}
.row-link:is(:hover,:focus-visible) .action{transform:translateX(6px)}
.row-link .action:hover{text-decoration:none}
@media(max-width:560px){.row-link{align-items:flex-start;flex-direction:column;gap:20px;padding:22px 0}}
@media(prefers-reduced-motion:reduce){.row-link .action{transition:none}.row-link:is(:hover,:focus-visible) .action{transform:none}}

/* Homepage uses the same typography roles as the design-system reference. */
body{font-family:var(--font-reading)}
h1{font:400 var(--type-display-size)/var(--type-display-leading) var(--font-editorial);letter-spacing:-.025em}
h2{font:400 var(--type-heading-size)/var(--type-heading-leading) var(--font-editorial)}
.intro p{font:400 var(--type-body-size)/var(--type-body-leading) var(--font-reading)}
.recent h3{font:400 var(--type-ui-size)/var(--type-ui-leading) var(--font-reading)}
.meta{font:400 var(--type-caption-size)/var(--type-caption-leading) var(--font-reading)}
.action{font:400 var(--type-caption-size)/var(--type-caption-leading) var(--font-reading);color:var(--color-link)}
.action.unavailable{color:var(--brand-olive)}
.email-box a{font:400 var(--type-caption-size)/var(--type-caption-leading) var(--font-tag)}
a:focus-visible,button:focus-visible{outline-color:var(--color-focus)}
@media(max-width:370px){.email-box a{font-size:.75rem}}

/* Continuous talks and writing list. */
.talk-archive{margin-top:25px}
.talk-archive .recent{margin:0}
.talk-archive .recent li{display:block;min-height:0;padding:0;border:0}
.talk-archive .row-link,.archive-upcoming{display:flex;flex-direction:row;align-items:center;gap:24px;min-height:68px;padding:10px 0}
.talk-archive .row-link>div,.archive-upcoming>div{flex:1;min-width:0}
.talk-archive .recent h3{font:400 var(--type-ui-size)/var(--type-ui-leading) var(--font-reading)}
.talk-archive .meta{margin-top:3px}
.talk-archive .action{min-width:0;min-height:0;font-size:16px;color:var(--muted);transition:color 180ms ease,transform 280ms cubic-bezier(.2,.7,.2,1)}
.talk-archive .row-link>div{transition:transform 280ms cubic-bezier(.2,.7,.2,1)}
.talk-archive .row-link h3{transition:color 180ms ease}
.talk-archive .row-link:is(:hover,:focus-visible)>div{transform:translateX(3px)}
.talk-archive .row-link:is(:hover,:focus-visible) .action{transform:translateX(3px);color:var(--color-link)}
.talk-archive .row-link:is(:hover,:focus-visible) h3{color:var(--color-link)}
.archive-upcoming h3{color:var(--muted)}
.soon-inline{font-size:11px}
@media(max-width:600px){.talk-archive .recent h3{font-size:15px}.talk-archive .row-link,.archive-upcoming{gap:14px}}
@media(prefers-reduced-motion:reduce){.talk-archive .row-link>div,.talk-archive .row-link h3,.talk-archive .action{transition:none}.talk-archive .row-link:is(:hover,:focus-visible)>div,.talk-archive .row-link:is(:hover,:focus-visible) .action{transform:none}}
.tag.tag-grey{background:var(--neutral-3);color:#737873;padding:2px 8px;font-size:10px;letter-spacing:.025em;white-space:nowrap;flex-shrink:0}

/* A quieter contact section with the same eclipse motion as the social marks. */
footer{padding-top:64px;color:var(--neutral-5)}
footer h2{color:var(--accent)}
.email-box button{position:relative;isolation:isolate;overflow:hidden;border-radius:999px;transition:color 550ms cubic-bezier(.22,.61,.36,1)}
.email-box button::before{content:"";position:absolute;inset:0;z-index:-1;background:var(--accent);clip-path:ellipse(85% 100% at -100% -100%);transition:clip-path 550ms cubic-bezier(.22,.61,.36,1)}
.email-box button:is(:hover,:focus-visible){color:var(--brand-charcoal)}
.email-box button:is(:hover,:focus-visible)::before{clip-path:ellipse(85% 100% at 50% 50%)}
@media(max-width:560px){footer{padding-top:56px}}
@media(prefers-reduced-motion:reduce){.email-box button,.email-box button::before{transition:none}}

/* Compact contact hierarchy: the title carries the orange accent. */
footer p{margin:8px 0 20px}
.contact-row{flex-direction:column;align-items:flex-start;gap:20px}
.email-box{width:auto;height:auto;min-height:40px;padding:0;border:0;border-radius:0;justify-content:flex-start;gap:16px}
.email-box a{font-size:14px}
.email-box button{color:var(--brand-icon);min-width:64px;min-height:36px;font-size:12px}
.email-box button::before{background:var(--brand-citron)}
footer .socials{gap:16px}
@media(max-width:560px){.email-box{flex:initial;width:auto;gap:12px;padding:0}.email-box a{font-size:13px}.email-box button{font-size:12px;min-width:60px}.contact-row .socials{margin-left:0}}
@media(max-width:370px){.email-box{gap:8px}.email-box a{font-size:11px}.email-box button{min-width:52px}}

/* Icon companion: a compact copy control beside the email address. */
.email-box #copy{display:inline-flex;align-items:center;justify-content:center;min-width:36px;min-height:36px;padding:8px}
.copy-icon{display:block;flex-shrink:0}
@media(pointer:coarse){.email-box #copy{min-width:44px;min-height:44px}}

/* Keep the email copy control visually steady on hover. */
.email-box #copy{transition:none}
.email-box #copy::before{content:none}
.email-box #copy:is(:hover,:focus-visible){color:var(--brand-icon)}

/* Gentle copy feedback, with a quiet keyboard-only focus indicator. */
.email-box #copy{width:64px;min-width:64px;transition:color 180ms ease;overflow:visible}
.email-box #copy:focus{outline:none}
.email-box #copy:focus-visible{outline:1px solid var(--brand-icon);outline-offset:2px}
.copy-idle,.copy-feedback{display:flex;align-items:center;justify-content:center;transition:opacity 180ms ease,transform 220ms ease}
.copy-feedback{position:absolute;inset:0;opacity:0;transform:translateY(5px);pointer-events:none}
.email-box #copy:hover .copy-idle{transform:translateY(-2px)}
.email-box #copy.is-copied .copy-idle{opacity:0;transform:translateY(-5px)}
.email-box #copy.is-copied .copy-feedback{opacity:1;transform:translateY(0);color:var(--brand-citron)}
@media(prefers-reduced-motion:reduce){.copy-idle,.copy-feedback,.email-box #copy{transition:none}.email-box #copy:hover .copy-idle{transform:none}}

/* Homepage indexes share the quiet, continuous archive treatment. */
.intro-contact a{color:var(--color-link);text-decoration-thickness:1px;text-underline-offset:4px}
.intro-contact a:hover{color:var(--color-link)}
.work-index{margin-bottom:64px}
.work-index h2,.thinking-index h2{color:var(--color-text)}
.index-filters{display:flex;flex-wrap:wrap;gap:8px;margin-top:20px}
.index-filters button{border:1px solid var(--brand-line);border-radius:999px;background:transparent;color:var(--muted);font:400 10px/1.5 var(--font-tag);text-transform:uppercase;letter-spacing:.06em;padding:2px 8px;cursor:pointer}
.index-filters button:hover{background:var(--vermilion-2);border-color:var(--vermilion-7);color:var(--vermilion-11)}
.index-filters button[aria-pressed="true"]{background:var(--vermilion-3);border-color:var(--vermilion-7);color:var(--vermilion-11)}
.filter-index [hidden]{display:none!important}
.index-empty{color:var(--muted);font-size:15px;padding-block:16px}
@media(max-width:560px){.work-index{margin-bottom:56px}.index-filters{gap:6px}}

.work-index .meta{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:6px}

.work-index .project-summary{flex:1;min-width:180px}

/* Compact hero contact line and consistent text-link color. */
.intro .intro-contact{font-size:var(--type-ui-size);line-height:var(--type-ui-leading)}
main a:not(.row-link){color:var(--color-link)}
main .row-link{color:var(--brand-ink)}

/* Soften the homepage introduction by mixing 20% of the paper color. */
.intro h1,.intro>p:not(.intro-contact){color:var(--color-text-secondary)}
.intro h1 em{color:var(--brand-vermilion)}
