*{box-sizing:border-box}html{background:#e8e9e6}body{margin:0;color:#1a1f25;font:14px/1.38 "DejaVu Sans Mono",Consolas,"Liberation Mono",monospace}.desktop{min-height:100dvh;display:flex;flex-direction:column;background:linear-gradient(125deg,#edf0ed,#e3e6e3)}.system-bar,footer{height:39px;flex:none;display:flex;justify-content:space-between;align-items:center;border:1px solid #626968;background:linear-gradient(#e9ebea,#d7d9d8);padding:0 24px;letter-spacing:.04em}.application,.system-right,footer>span{display:flex;align-items:center;gap:20px}.application strong{font-size:16px}.app-icon,.terminal,.icon-box{background:#00180e;color:#41f46a;border:2px outset #45564b;display:grid;place-items:center}.app-icon{font-size:13px;line-height:1;width:29px;height:29px}.status{height:38px;border-left:2px ridge #999;padding-left:18px;display:flex;align-items:center;gap:9px}.status i,footer i{display:inline-block;width:11px;height:11px;background:#28ea44;border:2px solid #222;margin-right:6px}main{width:100%;max-width:1920px;margin:auto;flex:1;min-height:0;padding:20px 24px 10px;display:grid;grid-template-rows:minmax(180px,1.12fr) minmax(390px,2fr) minmax(95px,.43fr);gap:14px}.hero{display:grid;grid-template-columns:3fr 2fr;gap:16px;min-height:0}.window{border:1px solid #606866;background:#f5f6f3;box-shadow:inset 1px 1px #fff,inset -1px -1px #9da2a0;min-width:0;min-height:0;display:flex;flex-direction:column}.titlebar{height:35px;flex:none;background:linear-gradient(90deg,#dbdddc,#cfd2d0);border-bottom:1px solid #7e8481;display:flex;align-items:center;justify-content:space-between;padding:0 6px 0 17px;gap:6px;font-size:17px;font-weight:bold;letter-spacing:.015em}.titlebar h2{font:inherit;margin:0;min-width:0;overflow-wrap:anywhere}.controls{display:flex;gap:4px;flex:none}.controls b{font:21px/19px Arial,sans-serif;text-align:center;width:22px;height:22px;border:2px outset #fff;background:#d7d9d8;color:#1b2224}.profile-content{padding:14px 24px;display:flex;flex-direction:column;justify-content:center;flex:1;min-height:0}.profile h1{margin:0 0 4px;color:#052812;font:bold clamp(25px,3.1vw,58px)/1.05 "DejaVu Sans Mono",monospace;letter-spacing:.02em}.role{margin:0;color:#00220e;font:bold clamp(36px,4.5vw,85px)/.98 "DejaVu Sans Mono",monospace;text-transform:uppercase;letter-spacing:-.055em;overflow-wrap:anywhere}.identity-tagline{margin:10px 0 0;font-size:clamp(14px,1.35vw,23px);letter-spacing:.06em;text-transform:uppercase}.summary>p{margin:auto;padding:20px 24px;font-size:clamp(14px,1.13vw,19px);line-height:1.65}.tiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr));gap:14px;min-height:0}.tile .titlebar{font-size:15px}.tile-body{padding:8px 14px;min-height:0;flex:1;display:flex;flex-direction:column}.tile-intro{display:flex;align-items:center;gap:14px;min-height:72px;border-bottom:1px solid #8a918d;padding-bottom:6px}.icon-box{width:62px;height:62px;flex:none;border-radius:3px}.icon-box svg{width:45px;height:45px;fill:#46eb70;color:#46eb70}.tile-intro p{margin:0;text-transform:uppercase;font-size:14px;line-height:1.3;overflow-wrap:anywhere}.tile ul{padding:7px 0 0;margin:0;list-style:none;display:grid;align-content:start;gap:3px}.tile li{position:relative;padding-left:18px;line-height:1.27;overflow-wrap:anywhere}.tile li:before{content:'›';position:absolute;left:0;top:-2px;color:#00bd3b;font:bold 21px/1 monospace}.contact-body{display:flex;align-items:center;gap:28px;flex:1;padding:7px 18px}.terminal{width:57px;height:53px;flex:none;font:bold 30px/1 monospace}.contact-list{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px;width:100%;max-width:1200px;margin:auto}.contact{color:inherit;text-decoration:none;text-align:center;border:1px solid #a0a5a2;border-radius:3px;min-height:57px;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#f6f7f4;font-size:13px}.contact svg{width:28px;height:28px}.contact:hover{background:#e2f1df}.contact:focus-visible{outline:3px solid #087846;outline-offset:2px}.unavailable{opacity:.55}footer{height:28px;font-size:13px}footer>span{gap:0}footer i{margin-right:7px}
@media(max-height:850px) and (min-width:1000px){main{padding:12px 24px 7px;gap:9px;grid-template-rows:minmax(160px,1fr) minmax(390px,2.13fr) minmax(80px,.42fr)}.hero,.tiles{gap:9px}.titlebar{height:30px}.profile-content{padding:7px 20px}.profile h1{font-size:clamp(24px,2.8vw,42px)}.role{font-size:clamp(34px,4vw,61px)}.identity-tagline{margin-top:5px}.tile-body{padding:5px 12px}.tile-intro{min-height:54px;padding-bottom:4px;gap:10px}.icon-box{width:45px;height:45px}.icon-box svg{width:33px;height:33px}.tile ul{gap:1px;padding-top:5px}.contact-body{padding:4px 15px}.terminal{height:48px}.contact{min-height:48px}.contact svg{width:24px;height:24px}}
@media(max-width:1100px){.tiles{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:auto}main{display:flex;flex-direction:column}.tile{min-height:210px}.hero{min-height:250px}.contacts{min-height:100px}}
@media(max-width:700px){.hero{display:flex;flex-direction:column}.profile,.summary{min-height:210px}.tiles{grid-template-columns:1fr}.system-bar{height:auto;min-height:39px;flex-wrap:wrap;gap:4px;padding:5px 12px}.system-right{flex-wrap:wrap;gap:5px}.status{height:auto;border:0;padding:0}main{padding:12px;gap:12px}.contact-body{gap:10px}.contact-list{grid-template-columns:repeat(3,minmax(0,1fr))}.terminal{align-self:start}.role{font-size:clamp(30px,8vw,60px)}.identity-tagline{font-size:14px}footer{padding:0 9px;font-size:11px}}
@media(min-width:1101px){main{flex:1 1 0;grid-template-rows:minmax(0,1fr) minmax(0,2.45fr) minmax(0,.45fr)}.tiles{grid-template-rows:repeat(2,minmax(0,1fr))}.tile .titlebar{height:42px}.tile-intro{min-height:45px}.tile li{line-height:1.15}.tile ul{gap:0}.tile-body{padding-top:3px;padding-bottom:3px}.summary>p{line-height:1.35;padding:10px 20px}.contact-body{padding-top:2px;padding-bottom:2px}.contact{min-height:38px}.contact svg{width:19px;height:19px}.terminal{height:39px;width:43px;font-size:23px}}
@media(min-width:1101px){.role{line-height:1.27}.summary>p{padding:6px 20px}}
@media(min-width:1101px){.profile-content{padding-top:6px;padding-bottom:6px}}
@media (min-width:1101px) and (max-height:850px){main{grid-template-rows:minmax(0,1.1fr) minmax(0,2.43fr) minmax(0,.45fr)}.profile h1{font-size:clamp(24px,2.5vw,38px)}.role{font-size:clamp(34px,3vw,46px)}}
@media (min-width:1101px) and (min-height:851px){.role{font-size:clamp(36px,4.3vw,82px)}}
@media (min-width:1101px) and (min-height:851px){main{grid-template-rows:minmax(0,1.08fr) minmax(0,2.38fr) minmax(0,.45fr)}}
@media (min-width:1101px) and (max-height:850px){.summary>p{padding-top:2px;padding-bottom:2px}.tile-body{padding-top:1px;padding-bottom:1px}}
@media (min-width:1101px) and (max-height:850px){.tile ul{padding-top:1px}}
@media (min-width:1101px) and (max-height:850px){.profile-content{padding-top:3px;padding-bottom:3px}.profile h1{font-size:clamp(24px,2.3vw,34px)}.role{font-size:clamp(32px,2.9vw,44px)}}
.hero{grid-template-columns:repeat(2,minmax(0,1fr))}
.icon-box{width:38px;height:38px}.icon-box svg{width:27px;height:27px}
.tile-intro{gap:10px;min-height:44px}
@media (min-width:1101px) and (max-height:850px){.icon-box{width:36px;height:36px}.icon-box svg{width:25px;height:25px}.tile-intro{min-height:42px}}
@media (min-width:1600px) and (min-height:980px){
  main{flex:0 0 auto;width:min(100%,1740px);height:auto;max-width:none;margin:auto;padding:0 24px;grid-template-rows:220px clamp(410px,31vh,430px) 92px;gap:14px}
  .hero{gap:14px}
  .profile h1{font-size:36px;line-height:1.05;margin-bottom:4px}
  .role{font-size:52px;line-height:1.22;letter-spacing:-.045em}
  .identity-tagline{font-size:16px;margin-top:8px}
  .summary>p{font-size:15px;line-height:1.45;padding:12px 18px}
  .tile .titlebar{height:39px}
  .tile-body{padding:5px 13px}
  .tile-intro{min-height:43px;padding-bottom:3px}
  .tile ul{padding-top:5px}
  .contact-body{padding:5px 16px}
  .contact{min-height:43px}
  .contact svg{width:21px;height:21px}
}

/* A flat early-desktop palette: every edge is the same single-pixel stroke. */
:root{color-scheme:light;--canvas:#e9ebe8;--bar:#dfe2df;--panel:#f5f6f3;--edge:#68716d;--text:#1b2623;--display:#082d19;--accent:#008f39;--icon-bg:#00190d;--icon-ink:#4aee70;--contact:#f5f6f3;--hover:#e2f0e5}
@media(prefers-color-scheme:dark){:root{color-scheme:dark;--canvas:#151d1a;--bar:#26332c;--panel:#1d2922;--edge:#83988a;--text:#e5eee7;--display:#a0e7ad;--accent:#64e28c;--icon-bg:#07160d;--icon-ink:#56f27b;--contact:#243229;--hover:#304836}}
:root:not([data-theme]):has(#theme-toggle:checked){color-scheme:dark;--canvas:#151d1a;--bar:#26332c;--panel:#1d2922;--edge:#83988a;--text:#e5eee7;--display:#a0e7ad;--accent:#64e28c;--icon-bg:#07160d;--icon-ink:#56f27b;--contact:#243229;--hover:#304836}
@media(prefers-color-scheme:dark){:root:not([data-theme]):has(#theme-toggle:checked){color-scheme:light;--canvas:#e9ebe8;--bar:#dfe2df;--panel:#f5f6f3;--edge:#68716d;--text:#1b2623;--display:#082d19;--accent:#008f39;--icon-bg:#00190d;--icon-ink:#4aee70;--contact:#f5f6f3;--hover:#e2f0e5}}
:root[data-theme=dark]{color-scheme:dark;--canvas:#151d1a;--bar:#26332c;--panel:#1d2922;--edge:#83988a;--text:#e5eee7;--display:#a0e7ad;--accent:#64e28c;--icon-bg:#07160d;--icon-ink:#56f27b;--contact:#243229;--hover:#304836}
:root[data-theme=light]{color-scheme:light;--canvas:#e9ebe8;--bar:#dfe2df;--panel:#f5f6f3;--edge:#68716d;--text:#1b2623;--display:#082d19;--accent:#008f39;--icon-bg:#00190d;--icon-ink:#4aee70;--contact:#f5f6f3;--hover:#e2f0e5}
html{background:var(--canvas)}body,.desktop{color:var(--text)}.desktop{background:var(--canvas)}
.system-bar,footer{background:var(--bar);border:1px solid var(--edge)}
.status{border-left:1px solid var(--edge)}.status i,footer i{border:1px solid var(--text)}
.window{border:1px solid var(--edge);background:var(--panel);box-shadow:none}
.titlebar{background:var(--bar);border-bottom:1px solid var(--edge)}
.tile-intro{border-bottom:1px solid var(--edge)}
.profile h1,.role{color:var(--display)}.tile li:before{color:var(--accent)}
.app-icon,.terminal,.icon-box{border:1px solid var(--edge);border-radius:0;background:var(--icon-bg);color:var(--icon-ink)}
.icon-box svg{color:var(--icon-ink);fill:var(--icon-ink)}
.contact{border:1px solid var(--edge);border-radius:0;background:var(--contact);color:var(--text)}.contact:hover{background:var(--hover)}
.controls b{width:22px;height:22px;flex:none;display:block;border:1px solid var(--edge);background:var(--panel);color:var(--text);font-size:0;position:relative}
.controls b::before,.controls b::after{content:"";position:absolute;left:50%;top:50%;background:currentColor}
.controls b:first-child::before{width:10px;height:2px;transform:translate(-50%,-50%)}
.controls b:nth-child(2)::before{width:10px;height:10px;background:none;border:2px solid currentColor;transform:translate(-50%,-50%)}
.controls b:last-child::before,.controls b:last-child::after{width:12px;height:2px}
.controls b:last-child::before{transform:translate(-50%,-50%) rotate(45deg)}
.controls b:last-child::after{transform:translate(-50%,-50%) rotate(-45deg)}
.controls b:not(:last-child)::after{content:none}
.theme-toggle{position:absolute;width:1px;height:1px;opacity:0}
.theme-switch{width:30px;height:26px;flex:none;border:1px solid var(--edge);background:var(--panel);color:var(--text);display:grid;place-items:center;cursor:pointer}
.theme-switch:hover{background:var(--hover)}.theme-switch svg{width:18px;height:18px}.theme-switch .theme-sun{display:none}
@media(prefers-color-scheme:dark){.theme-switch .theme-moon{display:none}.theme-switch .theme-sun{display:block}}
:root:not([data-theme]):has(#theme-toggle:checked) .theme-switch .theme-moon{display:none}
:root:not([data-theme]):has(#theme-toggle:checked) .theme-switch .theme-sun{display:block}
@media(prefers-color-scheme:dark){:root:not([data-theme]):has(#theme-toggle:checked) .theme-switch .theme-moon{display:block}:root:not([data-theme]):has(#theme-toggle:checked) .theme-switch .theme-sun{display:none}}
:root[data-theme=dark] .theme-switch .theme-moon{display:none}
:root[data-theme=dark] .theme-switch .theme-sun{display:block}
:root[data-theme=light] .theme-switch .theme-moon{display:block}
:root[data-theme=light] .theme-switch .theme-sun{display:none}
.theme-toggle:focus-visible+.theme-switch,.contact:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
@media(min-width:2200px) and (min-height:980px){.tile li{font-size:15px}.tile .titlebar{font-size:16px}.contact{font-size:14px}}

/* Theme-toned artwork is drawn directly on the canvas, without a filtered overlay. */
@media(min-width:1360px){
  .desktop{background-image:url('/backgrounds/circuit_bg.webp');background-position:center;background-repeat:no-repeat;background-size:cover}
  :root[data-theme=dark] .desktop{background-image:url('/backgrounds/circuit_bg_dark.webp')}
}
@media(min-width:1360px) and (prefers-color-scheme:dark){
  :root:not([data-theme]) .desktop{background-image:url('/backgrounds/circuit_bg_dark.webp')}
  :root:not([data-theme]):has(#theme-toggle:checked) .desktop{background-image:url('/backgrounds/circuit_bg.webp')}
}
@media(min-width:1360px) and (prefers-color-scheme:light){
  :root:not([data-theme]):has(#theme-toggle:checked) .desktop{background-image:url('/backgrounds/circuit_bg_dark.webp')}
}
@media(min-width:2200px){
  .desktop{background-image:url('/backgrounds/circuit_bg_ultrawide.webp')}
  :root[data-theme=dark] .desktop{background-image:url('/backgrounds/circuit_bg_ultrawide_dark.webp')}
}
@media(min-width:2200px) and (prefers-color-scheme:dark){
  :root:not([data-theme]) .desktop{background-image:url('/backgrounds/circuit_bg_ultrawide_dark.webp')}
  :root:not([data-theme]):has(#theme-toggle:checked) .desktop{background-image:url('/backgrounds/circuit_bg_ultrawide.webp')}
}
@media(min-width:2200px) and (prefers-color-scheme:light){
  :root:not([data-theme]):has(#theme-toggle:checked) .desktop{background-image:url('/backgrounds/circuit_bg_ultrawide_dark.webp')}
}

/* Multiword phrases move as units; very narrow reflow can split one phrase. */
.identity-tagline{line-height:1.45;text-wrap:pretty}
.tagline-part{display:inline-block;white-space:nowrap}
@media(max-width:700px){.tagline-part{white-space:normal;overflow-wrap:anywhere}}

/* Use the whole contact window, rather than the former 1200px inner cap. */
.contact-body{gap:12px;padding-inline:8px}
.app-icon{font-size:17px;font-weight:bold;letter-spacing:-.12em;padding-right:2px}
.terminal svg{width:28px;height:28px}
.tile .titlebar h2{display:flex;align-items:center;gap:7px;line-height:1.12;font-size:clamp(12px,1vw,16px);overflow-wrap:normal}
.tile .titlebar h2>span:last-child{min-width:0;overflow-wrap:anywhere}
.tile .titlebar .icon-box{width:26px;height:26px;flex:none}
.tile .titlebar .icon-box svg{width:20px;height:20px}
.contact-list{max-width:none;min-width:0;margin:0}
@media(min-width:1101px){
  main{--cv-body-size:clamp(15px,1vw,18px)}
  .contact-body{padding:4px 8px 8px;gap:10px}
  .contact{min-height:48px;font-size:14px}
  .contact svg{width:25px;height:25px}
  .terminal{height:48px;width:48px}
  .summary>p{font-size:var(--cv-body-size);line-height:1.47}
  .tile li{font-size:var(--cv-body-size);line-height:1.15}
  .tile-intro p{font-size:var(--cv-body-size)}
  .tile .titlebar{height:38px}
  .tile ul{padding-top:2px}
}
@media(min-width:1600px){
  main{width:min(2100px,calc(100% - 120px));max-width:none;padding-inline:0}
  .role{font-size:clamp(46px,2.9vw,66px);line-height:1.22}
}
@media(min-width:1600px) and (min-height:1040px){
  main{--cv-body-size:clamp(16px,1vw,19px);height:min(1180px,calc(100dvh - 115px));flex:0 0 auto;padding:8px 0;grid-template-rows:minmax(0,1.16fr) minmax(0,2.64fr) minmax(104px,.5fr);gap:12px}
  .summary>p{font-size:var(--cv-body-size)}
  .tile ul{flex:1;align-content:space-evenly}
  .contact{min-height:54px}
  .contact svg{width:28px;height:28px}
  .terminal{height:54px}
}
@media(min-width:1600px) and (min-height:851px) and (max-height:979px){
  main{grid-template-rows:minmax(0,1fr) minmax(0,2.36fr) minmax(0,.5fr)}
  .profile h1{font-size:clamp(28px,2vw,38px)}
  .role{font-size:clamp(42px,2.6vw,52px)}
  .identity-tagline{font-size:clamp(14px,.9vw,18px);line-height:1.3;margin-top:4px}
}
@media(min-width:1101px) and (max-width:1599px){
  .contact-body{padding-bottom:6px}
  .contact{min-height:43px}
  .terminal{height:43px}
  .tile .titlebar{height:42px}
}
@media(min-width:1101px) and (max-width:1599px) and (min-height:851px){
  main{grid-template-rows:minmax(0,1.04fr) minmax(0,2.4fr) minmax(0,.48fr)}
  .profile-content{padding-block:2px}
  .role{font-size:clamp(40px,3.3vw,52px);line-height:1.2}
  .identity-tagline{line-height:1.3}
}
@media(min-width:1101px) and (max-height:850px){
  main{grid-template-rows:minmax(0,1.06fr) minmax(0,2.47fr) minmax(96px,.55fr);padding-top:9px;gap:7px}
  .profile-content{padding-block:1px}
  .profile h1{font-size:clamp(24px,2vw,30px)}
  .role{font-size:clamp(34px,2.6vw,40px);line-height:1.2}
  .identity-tagline{margin-top:2px;line-height:1.3}
  .tile ul{padding-top:0}
}
@media(min-width:1600px) and (max-height:850px){main{--cv-body-size:clamp(15px,.85vw,16px)}.identity-tagline{line-height:1.25}}
/* Short four-column desktops need room for every fact without clipping. */
@media(min-width:1101px) and (max-width:1599px) and (max-height:850px){
  main{--cv-body-size:14px}
  .tile-intro{min-height:30px}
  .icon-box{width:28px;height:28px}
  .icon-box svg{width:22px;height:22px}
  .tile li{line-height:1.1}
}
@media(min-width:1600px) and (max-width:2199px) and (min-height:851px){main{--cv-body-size:clamp(15px,.9vw,17px)}}
@media(min-width:1101px) and (max-width:1359px){
  main{display:flex;flex-direction:column;flex:none;height:auto;min-height:calc(100dvh - 67px)}
  .hero{min-height:250px}
  .tiles{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:auto}
  .tile{min-height:210px}
  .contacts{min-height:100px}
}
.tile .titlebar h2{font-size:clamp(14px,1vw,16px)}
@media(min-width:1101px){.summary>p{font-size:calc(var(--cv-body-size) + 1px)}}
.terminal{background:var(--contact);color:var(--accent)}

/* Leave empty space below short lists instead of centering their facts. */
@media(min-width:1101px){.tile ul{align-content:start}}
.profile-location{display:flex;align-items:center;gap:8px;margin:3px 0 0;color:var(--accent);font-size:14px;line-height:1.25}
.profile-location svg{flex:none;width:18px;height:18px}
@media(min-width:1600px) and (min-height:980px){
  main{--cv-body-size:15px}
  .tile li{line-height:1.17}
  .tile-body{padding-block:3px}
  .tile ul{padding-top:2px}
}
/* On shorter desktops the accepted CV takes more space than the fixed grid.
   Grow the page rather than hiding facts or reducing body copy below 14px. */
@media(min-width:1360px) and (max-height:1039px){
  main{display:flex;flex-direction:column;justify-content:center;flex:1 0 auto;height:auto;min-height:0;margin:0 auto}
  .hero{min-height:0}
  .profile-content{min-height:max-content}
  .summary>p{margin:0}
  .tiles{grid-template-rows:repeat(2,max-content)}
  .tile{min-height:max-content}
  .tile-body{min-height:max-content;padding-bottom:9px}
  .contacts{min-height:96px}
}
@media(min-width:1600px){.role{font-size:clamp(40px,2.3vw,52px)}}

/* Seven ordered windows reuse the space of the two former security panels. */
@media(min-width:1360px){.tile[data-section=cybersecurity]{grid-column:span 2}}
@media(min-width:701px) and (max-width:1359px){.tile[data-section=embedded]{grid-column:span 2}}
