.editorial-resume .hero{padding:88px 0 48px}.editorial-resume .hero h1{margin-bottom:20px;font-size:clamp(56px,11vw,144px)}.editorial-resume .hero-bio{max-width:60ch}.editorial-resume .back-row{margin:0 0 24px}.editorial-resume .back-link{font-family:var(--font-geist-mono),"Geist Mono",monospace;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);transition:color var(--t);font-size:11px;text-decoration:none}.editorial-resume .back-link:hover{color:var(--accent)}.editorial-resume .divider-rule{border-top:1px solid var(--line)}.editorial-resume .resume-lede{font-family:var(--font-bricolage),"Bricolage Grotesque",sans-serif;letter-spacing:-.015em;color:var(--ink-2);font-variation-settings:"opsz" 24;max-width:70ch;margin:0 0 16px;font-size:19px;font-weight:500;line-height:1.42}.editorial-resume .contact-line{font-family:var(--font-geist-mono),"Geist Mono",monospace;color:var(--ink-3);letter-spacing:.04em;margin:0;font-size:12px}.editorial-resume .gate{border:1px solid var(--ink);background:var(--bg);max-width:600px;padding:40px 32px;position:relative}.editorial-resume .gate.shake{animation:.4s cubic-bezier(.36,.07,.19,.97) editorial-shake}@keyframes editorial-shake{10%,90%{transform:translate(-1px)}20%,80%{transform:translate(2px)}30%,50%,70%{transform:translate(-4px)}40%,60%{transform:translate(4px)}}.editorial-resume .gate-lede{color:var(--ink-2);max-width:50ch;margin:0 0 24px;font-size:14px;line-height:1.5}.editorial-resume .gate-form{flex-wrap:wrap;gap:12px;display:flex}.editorial-resume .gate-input{appearance:none;border:1px solid var(--ink);background:var(--bg);min-width:220px;color:var(--ink);font-family:var(--font-geist-mono),"Geist Mono",monospace;letter-spacing:.1em;transition:border-color var(--t);border-radius:999px;outline:none;flex:1;padding:12px 16px;font-size:13px}.editorial-resume .gate-input:focus{border-color:var(--accent)}.editorial-resume .gate-input.is-error{border-color:var(--accent);color:var(--accent)}.editorial-resume .gate-input:disabled{opacity:.5}.editorial-resume .gate-err{font-family:var(--font-geist-mono),"Geist Mono",monospace;letter-spacing:.08em;text-transform:uppercase;color:var(--accent);margin:16px 0 0;font-size:11px}.editorial-resume .skills-grid{border-top:1px solid var(--ink);border-left:1px solid var(--ink)}.editorial-resume .skill-row{border-right:1px solid var(--ink);border-bottom:1px solid var(--ink);background:var(--bg);transition:background var(--t);grid-template-columns:200px minmax(0,1fr);gap:24px;padding:18px 22px;display:grid}.editorial-resume .skill-row:hover{background:var(--bg-2)}.editorial-resume .skill-k{font-family:var(--font-geist-mono),"Geist Mono",monospace;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);font-size:11px}.editorial-resume .skill-v{color:var(--ink-2);font-size:14px;line-height:1.55}.editorial-resume .jobs{flex-direction:column;gap:32px;display:flex}.editorial-resume .job{border-top:1px solid var(--line);padding-top:24px}.editorial-resume .job:first-child{border-top:0;padding-top:0}.editorial-resume .job-hd{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:16px;display:flex}.editorial-resume .job-title{font-family:var(--font-bricolage),"Bricolage Grotesque",sans-serif;letter-spacing:-.025em;color:var(--ink);text-transform:lowercase;font-variation-settings:"opsz" 32;margin:0 0 6px;font-size:28px;font-weight:700;line-height:1.05}.editorial-resume .job-org{font-family:var(--font-geist-mono),"Geist Mono",monospace;color:var(--ink-3);letter-spacing:.08em;margin:0;font-size:11px}.editorial-resume .job-org strong{color:var(--ink);font-weight:600}.editorial-resume .job-date{font-family:var(--font-geist-mono),"Geist Mono",monospace;color:var(--ink-3);letter-spacing:.06em;font-variant-numeric:tabular-nums;white-space:nowrap;font-size:11px}.editorial-resume .job-bullets{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.editorial-resume .job-bullets li{color:var(--ink-2);max-width:80ch;padding-left:18px;font-size:14px;line-height:1.55;position:relative}.editorial-resume .job-bullets li:before{content:"/";font-family:var(--font-geist-mono),"Geist Mono",monospace;color:var(--accent);font-weight:600;position:absolute;top:0;left:0}.editorial-resume .job-bullets li strong{color:var(--ink);font-weight:600}.editorial-resume .resume-projects{border-top:1px solid var(--ink);border-left:1px solid var(--ink);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.editorial-resume .resume-project{border-right:1px solid var(--ink);border-bottom:1px solid var(--ink);background:var(--bg);transition:background var(--t);flex-direction:column;gap:14px;min-height:220px;padding:24px 22px;display:flex}.editorial-resume .resume-project:hover{background:var(--ink);color:var(--bg)}.editorial-resume .resume-project:hover .resume-project-status,.editorial-resume .resume-project:hover .resume-project-stack{color:var(--lime)}.editorial-resume .resume-project header{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px;display:flex}.editorial-resume .resume-project-title{font-family:var(--font-bricolage),"Bricolage Grotesque",sans-serif;letter-spacing:-.025em;color:inherit;font-variation-settings:"opsz" 24;flex:1;min-width:0;margin:0;font-size:22px;font-weight:600}.editorial-resume .resume-project-status{font-family:var(--font-geist-mono),"Geist Mono",monospace;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);white-space:nowrap;transition:color var(--t);font-size:10px}.editorial-resume .resume-project-blurb{color:inherit;opacity:.85;margin:0;font-size:13px;line-height:1.5}.editorial-resume .resume-project-stack{font-family:var(--font-geist-mono),"Geist Mono",monospace;color:var(--ink-3);letter-spacing:.02em;transition:color var(--t);margin:auto 0 0;font-size:10.5px}.editorial-resume .apps{border-top:1px solid var(--line);flex-direction:column;display:flex}.editorial-resume .app-row{border-bottom:1px solid var(--line);color:var(--ink);transition:padding-left var(--t),background var(--t);grid-template-columns:200px 1fr 200px 24px;align-items:baseline;gap:18px;padding:14px 0;text-decoration:none;display:grid}.editorial-resume .app-row:hover{background:var(--bg-2);padding-left:12px}.editorial-resume .app-row:hover .arr{color:var(--accent);transform:translate(4px,-4px)}.editorial-resume .app-name{font-family:var(--font-bricolage),"Bricolage Grotesque",sans-serif;letter-spacing:-.02em;color:var(--ink);text-transform:lowercase;font-variation-settings:"opsz" 24;font-size:18px;font-weight:600}.editorial-resume .app-role{font-family:var(--font-geist-mono),"Geist Mono",monospace;color:var(--ink-2);font-size:11px;font-style:italic}.editorial-resume .app-url{font-family:var(--font-geist-mono),"Geist Mono",monospace;color:var(--ink-3);text-align:right;white-space:nowrap;text-overflow:ellipsis;font-size:10.5px;overflow:hidden}.editorial-resume .apps-note{font-family:var(--font-geist-mono),"Geist Mono",monospace;color:var(--ink-3);margin-top:16px;font-size:11px;font-style:italic}.editorial-resume .edu-grid{border-top:1px solid var(--ink);border-left:1px solid var(--ink);grid-template-columns:repeat(3,minmax(0,1fr));gap:0;display:grid}.editorial-resume .edu-grid>div{border-right:1px solid var(--ink);border-bottom:1px solid var(--ink);background:var(--bg);padding:20px 22px}.editorial-resume .edu-k{font-family:var(--font-geist-mono),"Geist Mono",monospace;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);margin-bottom:8px;font-size:11px}.editorial-resume .edu-v{font-family:var(--font-bricolage),"Bricolage Grotesque",sans-serif;letter-spacing:-.02em;color:var(--ink);font-size:16px;font-weight:600}.editorial-resume .dayjob-list{border-top:1px solid var(--line);flex-direction:column;display:flex}.editorial-resume .dj-row{border-bottom:1px solid var(--line);color:var(--ink);transition:padding-left var(--t),background var(--t);grid-template-columns:minmax(0,2.4fr) 130px minmax(0,1.4fr) 130px;align-items:center;gap:18px;padding:12px 0;font-size:13px;text-decoration:none;display:grid}.editorial-resume .dj-link:hover{background:var(--bg-2);padding-left:12px}.editorial-resume .dj-link:hover .arr{color:var(--accent);transform:translate(4px,-4px)}.editorial-resume .dj-name{font-family:var(--font-bricolage),"Bricolage Grotesque",sans-serif;letter-spacing:-.015em;color:var(--ink);font-variation-settings:"opsz" 24;font-size:16px;font-weight:500}.editorial-resume .dj-year{font-family:var(--font-geist-mono),"Geist Mono",monospace;color:var(--ink-3);letter-spacing:.06em;font-variant-numeric:tabular-nums;font-size:11px}.editorial-resume .dj-role{font-family:var(--font-geist-mono),"Geist Mono",monospace;color:var(--ink-3);letter-spacing:.08em;text-transform:uppercase;font-size:10.5px}.editorial-resume .dj-tag-wrap{justify-content:flex-end;align-items:center;gap:8px;display:flex}.editorial-resume .dj-tag{font-family:var(--font-geist-mono),"Geist Mono",monospace;letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;border:1px solid;padding:3px 8px;font-size:9.5px}.editorial-resume .dj-tag-classified{color:var(--accent);border-color:var(--accent)}.editorial-resume .dj-tag-restricted{color:var(--ink-2);border-color:var(--ink-3);background:var(--bg-2)}.editorial-resume .dj-tag-decommissioned{color:var(--ink-4);border-color:var(--ink-4);text-decoration:line-through}.editorial-resume .dayjob-list-locked{margin:0;padding:0;list-style:none}.editorial-resume .dj-row-locked{border-bottom:1px solid var(--line);padding:12px 0}.editorial-resume .dj-row-locked .dj-name{display:block}.editorial-resume .ey-logo{width:auto;height:20px;margin-left:4px}.editorial-resume.dark .ey-logo,.editorial.dark .editorial-resume .ey-logo{filter:invert()brightness(1.3)}.editorial-resume .contact-h{margin-bottom:24px;font-size:clamp(48px,9vw,120px)}@media (max-width:980px){.editorial-resume .skill-row{grid-template-columns:1fr;gap:6px;padding:14px 16px}.editorial-resume .resume-projects,.editorial-resume .app-row{grid-template-columns:1fr}.editorial-resume .app-row .app-role,.editorial-resume .app-row .app-url,.editorial-resume .arr{display:none}.editorial-resume .edu-grid{grid-template-columns:1fr}.editorial-resume .dj-row{grid-template-columns:1fr 80px;row-gap:4px}.editorial-resume .dj-row .dj-role,.editorial-resume .dj-row .dj-year{grid-column:1/2;font-size:10px}.editorial-resume .dj-row .dj-tag-wrap{grid-area:1/2/3/3}}
