/* IRFAN CLOUD — clean professional system v11 */
:root,body.portfolio-v10{--paper:#f4f7fb;--paper2:#edf2f8;--white:#fff;--ink:#101828;--ink2:#26354a;--muted:#5d6b7f;--faint:#8794a6;--line:#d8e0ea;--line2:#bcc8d7;--blue:#1457d9;--blue2:#0c46ba;--blue-soft:#e8f0ff;--navy:#0c1728;--navy2:#14243a;--green:#168557;--shell:min(1180px,calc(100vw - 64px));--radius:12px;--shadow:0 18px 50px rgba(21,39,67,.08);--shadow2:0 24px 64px rgba(21,39,67,.13);--ease:cubic-bezier(.22,1,.36,1)}
*{box-sizing:border-box}html{background:var(--paper);scroll-behavior:smooth}body.portfolio-v10{margin:0;overflow-x:hidden;color:var(--ink);background:var(--paper);font-family:"Manrope",system-ui,sans-serif;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}.portfolio-v10 a{color:inherit;text-decoration:none}.portfolio-v10 button,.portfolio-v10 input{font:inherit}.portfolio-v10 button{color:inherit}.portfolio-v10 ::selection{color:#fff;background:var(--blue)}
.portfolio-v10 .cursor,.portfolio-v10 .cursor-ring,.portfolio-v10 .environment-control,.portfolio-v10 .region-readout,.portfolio-v10 .return-cloud,.portfolio-v10 .hero-metadata,.portfolio-v10 .infra-grid{display:none!important}.portfolio-v10 .skip-link{position:fixed;z-index:2000;top:10px;left:10px;padding:10px 14px;color:#fff;background:var(--blue);border-radius:8px;transform:translateY(-150%)}.portfolio-v10 .skip-link:focus{transform:none}.portfolio-v10 .scroll-meter{position:fixed;z-index:1000;top:0;left:0;width:100%;height:3px;pointer-events:none}.portfolio-v10 .scroll-meter i{display:block;width:0;height:100%;background:var(--blue);box-shadow:0 0 14px rgba(20,87,217,.4)}
/* Fast page-change motion */
.portfolio-v10 .route-transition{position:fixed;z-index:1200;inset:0;display:grid;place-items:center;pointer-events:none;opacity:0;background:rgba(244,247,251,.96);backdrop-filter:blur(14px);transition:opacity .28s ease}.portfolio-v10 .route-transition::before{content:"";position:absolute;top:0;left:0;width:100%;height:4px;background:var(--blue);transform:scaleX(0);transform-origin:left}.portfolio-v10 .route-transition::after{content:"IRFAN / CLOUD PORTFOLIO";color:var(--faint);font:500 10px/1 "IBM Plex Mono",monospace;letter-spacing:.08em}.portfolio-v10 .route-transition.active{opacity:1;pointer-events:auto}.portfolio-v10 .route-transition.active::before{animation:route-line .72s var(--ease) both}.portfolio-v10 .route-transition.reveal{opacity:0}.portfolio-v10 .route-transition>i,.portfolio-v10 .transition-copy ul,.portfolio-v10 .transition-copy>span{display:none!important}.portfolio-v10 .transition-copy{position:absolute;bottom:42px;left:50%;transform:translateX(-50%)}.portfolio-v10 .transition-copy strong{color:var(--blue);font:600 10px/1 "IBM Plex Mono",monospace;letter-spacing:.09em;white-space:nowrap}
/* Navigation */
.portfolio-v10 .navbar{position:fixed;z-index:900;top:0;left:0;width:100%;height:68px;display:grid;grid-template-columns:auto 1fr auto;align-items:center;padding:0 30px;color:var(--ink);background:rgba(255,255,255,.9);border-bottom:1px solid rgba(16,24,40,.08);backdrop-filter:blur(18px) saturate(1.2);animation:nav-enter .7s var(--ease) both;transition:color .25s,background .25s,border-color .25s}html[data-page=landing] .portfolio-v10 .navbar:not(.scrolled){color:#fff;background:linear-gradient(180deg,rgba(7,16,30,.58),rgba(7,16,30,0));border-bottom-color:transparent;backdrop-filter:none}.portfolio-v10 .brand{display:inline-flex;align-items:center;font:800 20px/1 "Manrope",sans-serif;letter-spacing:-.055em}.portfolio-v10 .brand::before{content:"";width:20px;height:3px;margin-right:10px;background:var(--blue);border-radius:20px;transition:width .3s var(--ease)}.portfolio-v10 .brand:hover::before{width:30px}.portfolio-v10 .brand span{color:#4c82ef}.portfolio-v10 .nav-links{position:relative;display:flex;justify-self:center;align-items:center;gap:clamp(16px,1.6vw,26px)}.portfolio-v10 .nav-links a{position:relative;padding:25px 0 23px;color:currentColor;font-size:12px;font-weight:650;letter-spacing:-.015em;opacity:.66;transition:opacity .2s,transform .2s var(--ease)}.portfolio-v10 .nav-links a:hover,.portfolio-v10 .nav-links a.active{opacity:1;transform:translateY(-1px)}.portfolio-v10 .nav-links a::after{display:none}.portfolio-v10 .nav-indicator{position:absolute;bottom:0;left:0;height:2px;background:var(--blue);transition:transform .4s var(--ease),width .4s var(--ease)}.portfolio-v10 .nav-tools{display:flex;align-items:center;gap:14px}.portfolio-v10 .command-trigger{height:34px;padding:0 10px;color:currentColor;background:transparent;border:1px solid currentColor;border-radius:7px;font:500 10px "IBM Plex Mono",monospace;opacity:.55;cursor:pointer;transition:opacity .2s,background .2s}.portfolio-v10 .command-trigger:hover{opacity:1;background:rgba(127,144,166,.1)}.portfolio-v10 .command-trigger span{margin-right:4px}.portfolio-v10 .online{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:650;white-space:nowrap}.portfolio-v10 .online i{width:7px;height:7px;border-radius:50%;background:#24a26a;box-shadow:0 0 0 5px rgba(36,162,106,.13);animation:status-pulse 2.8s ease-in-out infinite}.portfolio-v10 .menu-toggle{display:none;width:42px;height:42px;padding:9px;border:0;background:transparent;cursor:pointer}.portfolio-v10 .menu-toggle i{display:block;width:22px;height:1px;margin:6px auto;background:currentColor;transition:transform .25s}
/* Landing */
.portfolio-v10 .hero{position:relative;min-height:100svh;display:flex;align-items:flex-end;overflow:hidden;color:#fff;background:var(--navy)}.portfolio-v10 .hero-sky{position:absolute;inset:-4%;background:url("asset/cloudspace-hero-v1.webp") center 54%/cover no-repeat;filter:saturate(.72) contrast(1.04) brightness(.72);transform:translate3d(var(--parallax-x,0),var(--parallax-y,0),0) scale(1.06);animation:sky-breathe 18s ease-in-out infinite alternate;will-change:transform}.portfolio-v10 .hero::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(7,16,29,.88) 0%,rgba(7,16,29,.57) 48%,rgba(7,16,29,.12) 78%),linear-gradient(0deg,rgba(7,16,29,.7),transparent 60%)}.portfolio-v10 .atmosphere,.portfolio-v10 .hero-haze{opacity:.1}.portfolio-v10 .hero-cloud{opacity:.13;transform:translate3d(var(--parallax-x,0),var(--parallax-y,0),0);animation:cloud-drift 15s ease-in-out infinite alternate}.portfolio-v10 .cloud-mid{animation-duration:21s;animation-direction:alternate-reverse}.portfolio-v10 .cloud-near{animation-duration:12s}.portfolio-v10 .hero-content{position:relative;z-index:3;width:var(--shell);margin:0 auto;padding:136px 0 clamp(62px,8vh,88px);transform:translate3d(var(--parallax-x,0),var(--parallax-y,0),0)}.portfolio-v10 .hero-greeting,.portfolio-v10 .hero h1,.portfolio-v10 .hero-role,.portfolio-v10 .hero-discipline,.portfolio-v10 .hero-summary,.portfolio-v10 .hero-actions,.portfolio-v10 .hero-quicklinks{opacity:0;animation:hero-in .9s var(--ease) both}.portfolio-v10 .hero-greeting{animation-delay:.12s}.portfolio-v10 .hero h1{animation-delay:.2s}.portfolio-v10 .hero-role{animation-delay:.31s}.portfolio-v10 .hero-discipline{animation-delay:.38s}.portfolio-v10 .hero-summary{animation-delay:.46s}.portfolio-v10 .hero-actions{animation-delay:.55s}.portfolio-v10 .hero-quicklinks{animation-delay:.64s}.portfolio-v10 .hero-greeting{display:flex;align-items:center;gap:12px;margin:0 0 24px;font:500 11px/1.4 "IBM Plex Mono",monospace;letter-spacing:.03em}.portfolio-v10 .hero-greeting::before{content:"";width:30px;height:1px;background:rgba(255,255,255,.68)}.portfolio-v10 .hero-greeting b{color:#acc8ff;font-weight:500}.portfolio-v10 .hero h1{max-width:920px;margin:0;font:620 clamp(4.4rem,7.6vw,7.6rem)/.9 "Manrope",sans-serif;letter-spacing:-.075em;text-wrap:balance}.portfolio-v10 .hero h1 em{color:inherit;font-style:normal;-webkit-text-stroke:0}.portfolio-v10 .hero-role{margin:26px 0 0;font-size:clamp(1.08rem,1.4vw,1.3rem);font-weight:650;letter-spacing:-.025em}.portfolio-v10 .hero-discipline{margin:10px 0 0;color:rgba(255,255,255,.72);font:500 11px/1.7 "IBM Plex Mono",monospace}.portfolio-v10 .hero-discipline b{padding:0 7px;color:#8fb2fb}.portfolio-v10 .hero h2{display:none}.portfolio-v10 .hero-summary{max-width:610px;margin:22px 0 0;color:rgba(255,255,255,.8);font-size:16px;line-height:1.7}.portfolio-v10 .hero-actions{display:flex;align-items:center;gap:24px;margin-top:30px}.portfolio-v10 .button{min-height:46px;display:inline-flex;align-items:center;justify-content:center;gap:16px;padding:0 19px;border:1px solid transparent;border-radius:9px;font-family:"Manrope",sans-serif;font-size:12px;font-weight:750;letter-spacing:-.01em;text-transform:none;transition:transform .28s var(--ease),background .22s,border-color .22s,box-shadow .28s}.portfolio-v10 .button span{transition:transform .28s var(--ease)}.portfolio-v10 .button:hover{transform:translateY(-3px);box-shadow:0 14px 30px rgba(10,25,50,.18)}.portfolio-v10 .button:hover span{transform:translate(3px,-2px)}.portfolio-v10 .hero .button-dark{color:var(--ink);background:#fff;border-color:#fff}.portfolio-v10 .hero .button-dark:hover{background:#edf3ff}.portfolio-v10 .button-light{color:#fff;background:var(--blue);border-color:var(--blue)}.portfolio-v10 .button-light:hover{background:var(--blue2);border-color:var(--blue2)}.portfolio-v10 .text-link{display:inline-flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid currentColor;font-size:12px;font-weight:700}.portfolio-v10 .text-link span{transition:transform .25s var(--ease)}.portfolio-v10 .text-link:hover span{transform:translate(3px,-2px)}.portfolio-v10 .hero .text-link{color:#fff}.portfolio-v10 .hero-quicklinks{display:flex;gap:22px;margin-top:28px}.portfolio-v10 .hero-quicklinks a{color:rgba(255,255,255,.62);font-size:11px;font-weight:650;transition:color .2s,transform .2s}.portfolio-v10 .hero-quicklinks a:hover{color:#fff;transform:translateY(-2px)}.portfolio-v10 .scroll-cue{position:absolute;z-index:3;right:30px;bottom:34px;display:flex;align-items:center;gap:10px;color:rgba(255,255,255,.62);font:500 9px "IBM Plex Mono",monospace;letter-spacing:.08em}.portfolio-v10 .scroll-cue i{width:22px;height:34px;border:1px solid rgba(255,255,255,.32);border-radius:20px}.portfolio-v10 .scroll-cue i::after{content:"";display:block;width:3px;height:7px;margin:7px auto 0;border-radius:3px;background:#fff;animation:cue-drop 1.8s ease-in-out infinite}
/* Bright cloud transition */
.portfolio-v10 .cloud-entry{position:relative;height:170svh;color:var(--ink);background:#eaf5fb}.portfolio-v10 .cloud-entry-sticky{position:sticky;top:0;height:100svh;overflow:hidden;display:grid;place-items:center;background:linear-gradient(180deg,#bfe0f2 0%,#e9f5fb 58%,#fff 100%)}.portfolio-v10 .cloud-entry-sticky::after{content:"ENTERING CLOUD";position:absolute;z-index:4;bottom:38px;left:50%;color:rgba(22,56,84,.56);font:600 9px "IBM Plex Mono",monospace;letter-spacing:.16em;transform:translateX(-50%)}.portfolio-v10 .entry-cloud{position:absolute;inset:-24%;display:block!important;background:url("asset/cloudspace-hero-v1.webp") center/cover no-repeat;filter:brightness(var(--entry-bg-brightness,1.32)) contrast(.68) blur(var(--entry-bg-blur,5px));opacity:var(--entry-bg-opacity,.58);animation:cloud-breathe 10s ease-in-out infinite alternate;will-change:transform,opacity}.portfolio-v10 .entry-cloud-a{transform:scale(1.18)}.portfolio-v10 .entry-cloud-b{transform:scale(1.58) rotate(180deg);mix-blend-mode:screen;opacity:.38;animation-direction:alternate-reverse}.portfolio-v10 .entry-depth,.portfolio-v10 .entry-whiteout{position:absolute;inset:0;display:block!important;pointer-events:none}.portfolio-v10 .entry-depth{background:radial-gradient(circle,transparent 24%,rgba(27,78,113,.17))}.portfolio-v10 .entry-whiteout{background:#fff;opacity:0}.portfolio-v10 .entry-boot{display:none!important}
/* Route visibility */
html:not([data-page=landing]):not([data-page=cloud]) .portfolio-v10 .hero,html:not([data-page=landing]):not([data-page=cloud]) .portfolio-v10 .cloud-entry,html[data-page=cloud] .portfolio-v10 .hero,html[data-page=cloud] .portfolio-v10 .cloud-entry{display:none}html[data-page=landing] .portfolio-v10 .infrastructure>.section-shell,html[data-page=cloud] .portfolio-v10 .infrastructure>.section-shell,html:not([data-page=landing]):not([data-page=cloud]) .portfolio-v10 .infrastructure>.section-shell{display:none}html[data-page=landing] .portfolio-v10 #cloud-hub,html[data-page=cloud] .portfolio-v10 #cloud-hub,html[data-page=about] .portfolio-v10 #identity,html[data-page=about] .portfolio-v10 #principles,html[data-page=experience] .portfolio-v10 #experience,html[data-page=projects] .portfolio-v10 #deployments,html[data-page^=project-] .portfolio-v10 #deployments,html[data-page=stack] .portfolio-v10 #stack,html[data-page=security] .portfolio-v10 #security,html[data-page=journey] .portfolio-v10 #journey,html[data-page=certifications] .portfolio-v10 #credentials,html[data-page=lab] .portfolio-v10 #lab,html[data-page=contact] .portfolio-v10 #contact{display:block}
/* Shared system */
.portfolio-v10 .infrastructure{position:relative;min-height:100vh;color:var(--ink);background:var(--paper)}html:not([data-page=landing]) .portfolio-v10 .infrastructure{padding-top:68px}.portfolio-v10 .section-shell{position:relative;z-index:1;width:var(--shell);margin:0 auto;padding:clamp(72px,7.5vw,104px) 0}.portfolio-v10 .section-code,.portfolio-v10 .page-heading>p,.portfolio-v10 .identity-copy section>span,.portfolio-v10 .role-main>p:first-child,.portfolio-v10 .project-copy>p:first-child,.portfolio-v10 .project-card>p:first-child,.portfolio-v10 .project-small>span,.portfolio-v10 .stack-context>span,.portfolio-v10 .security-explanation>span,.portfolio-v10 .lab-grid article>span,.portfolio-v10 .contact-copy>span,.portfolio-v10 .resume-card span{color:var(--blue);font:550 10px/1.5 "IBM Plex Mono",monospace;letter-spacing:.06em;text-transform:uppercase}.portfolio-v10 .page-heading{position:relative;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,360px);grid-template-rows:auto auto;gap:30px 54px;align-items:end;padding:10px 0 46px;border-bottom:1px solid var(--line2)}.portfolio-v10 .page-heading::before{content:"";position:absolute;bottom:-1px;left:0;width:90px;height:3px;background:var(--blue);transform:scaleX(0);transform-origin:left;transition:transform .9s .15s var(--ease)}.portfolio-v10 .page-heading.visible::before{transform:scaleX(1)}.portfolio-v10 .page-heading::after{content:attr(data-index);grid-column:2;grid-row:1;justify-self:end;color:var(--faint);font:500 10px "IBM Plex Mono",monospace}.portfolio-v10 .page-heading>p{grid-column:1;grid-row:1;margin:0}.portfolio-v10 .page-heading h2{grid-column:1;grid-row:2;margin:0;color:var(--ink);font:620 clamp(3.4rem,5.6vw,5.4rem)/.96 "Manrope",sans-serif;letter-spacing:-.065em;text-transform:none;text-wrap:balance}.portfolio-v10 .page-heading h2 br{display:none}.portfolio-v10 .page-heading>span{grid-column:2;grid-row:2;max-width:34ch;color:var(--muted);font-size:16px;line-height:1.6}.portfolio-v10 .reveal{opacity:0;filter:blur(4px);transform:translateY(30px);transition:opacity .75s,transform .8s var(--ease),filter .7s;transition-delay:calc(var(--reveal-order,0)*65ms)}.portfolio-v10 .reveal.visible{opacity:1;filter:none;transform:none}
/* Hub */
.portfolio-v10 .cloud-hub{padding-top:clamp(92px,10vw,132px)}.portfolio-v10 .hub-person{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(310px,.65fr);gap:70px;align-items:end;padding-bottom:48px;border-bottom:1px solid var(--line2)}.portfolio-v10 .hub-person>div:first-child>span{display:block;margin:14px 0 20px;color:var(--muted);font-size:13px}.portfolio-v10 .hub-person h2{margin:0;font:620 clamp(4rem,6.7vw,6.6rem)/.9 "Manrope",sans-serif;letter-spacing:-.075em;text-transform:none}.portfolio-v10 .hub-person>div:last-child>p{margin:0 0 10px;color:var(--ink);font-size:20px;font-weight:680;line-height:1.35}.portfolio-v10 .hub-person>div:last-child>b{color:var(--muted);font-size:12px;font-weight:550}.portfolio-v10 .hub-person ul{display:flex;flex-wrap:wrap;gap:7px;margin:24px 0 20px;padding:0;list-style:none}.portfolio-v10 .hub-person li,.portfolio-v10 .tags li,.portfolio-v10 .focus-list b{padding:7px 10px;color:var(--ink2);background:var(--white);border:1px solid var(--line);border-radius:7px;font-size:10px;font-weight:650}.portfolio-v10 .hub-person small{display:flex;align-items:center;gap:9px;color:var(--green);font-size:11px;font-weight:700}.portfolio-v10 .hub-person small i{width:7px;height:7px;border-radius:50%;background:#20a464}.portfolio-v10 .service-grid.hub-v3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:24px}.portfolio-v10 .hub-v3 .service-module{position:relative;min-height:210px;display:flex;flex-direction:column;align-items:flex-start;padding:26px;overflow:hidden;color:var(--ink);background:var(--white);border:1px solid var(--line);border-radius:var(--radius);transition:transform .34s var(--ease),border-color .25s,box-shadow .34s}.portfolio-v10 .hub-v3 .service-module::before{content:"";position:absolute;top:0;left:0;width:0;height:3px;background:var(--blue);transition:width .45s var(--ease)}.portfolio-v10 .hub-v3 .service-module::after{display:none}.portfolio-v10 .hub-v3 .service-module:hover{transform:translateY(-6px);border-color:#b6c5d8;box-shadow:var(--shadow2)}.portfolio-v10 .hub-v3 .service-module:hover::before{width:100%}.portfolio-v10 .hub-v3 .service-module>span{color:var(--faint);font:500 9px "IBM Plex Mono",monospace;text-transform:uppercase}.portfolio-v10 .hub-v3 .service-module h3{margin:auto 0 8px;font:650 clamp(1.8rem,2.7vw,2.7rem)/1 "Manrope",sans-serif;letter-spacing:-.055em;text-transform:none}.portfolio-v10 .hub-v3 .service-module p{max-width:42ch;margin:0;color:var(--muted);font-size:13px;line-height:1.6}.portfolio-v10 .hub-v3 .service-module em{margin-top:20px;color:var(--blue);font-size:11px;font-style:normal;font-weight:750;transition:transform .25s var(--ease)}.portfolio-v10 .hub-v3 .service-module:hover em{transform:translateX(5px)}.portfolio-v10 .hub-v3 .module-projects{grid-column:span 2;min-height:300px;color:#fff;background:var(--navy);border-color:var(--navy)}.portfolio-v10 .hub-v3 .module-projects::before{background:#78a3ff}.portfolio-v10 .hub-v3 .module-projects>span,.portfolio-v10 .hub-v3 .module-projects p{color:rgba(255,255,255,.64)}.portfolio-v10 .hub-v3 .module-projects em{color:#a9c5ff}.portfolio-v10 .hub-project-lines,.portfolio-v10 .module-orbit,.portfolio-v10 .module-altitude{display:none}
/* About */
.portfolio-v10 .identity-layout.about-v3{display:grid;grid-template-columns:minmax(270px,320px) minmax(0,1fr);gap:58px;align-items:start;margin-top:48px}.portfolio-v10 .identity-card{position:sticky;top:96px;overflow:hidden;background:var(--white);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.portfolio-v10 .identity-card-top{display:flex;justify-content:space-between;gap:12px;padding:16px 18px;border-bottom:1px solid var(--line);font:500 8px/1.5 "IBM Plex Mono",monospace}.portfolio-v10 .identity-card-top span:last-child{display:flex;align-items:center;gap:7px;color:var(--green)}.portfolio-v10 .identity-card-top i{width:6px;height:6px;border-radius:50%;background:#20a464}.portfolio-v10 .identity-card-no-photo .identity-name{min-height:220px;display:flex;flex-direction:column;justify-content:flex-end;padding:26px;color:#fff;background:var(--navy)}.portfolio-v10 .identity-name span{margin-bottom:9px;color:rgba(255,255,255,.6);font:500 9px "IBM Plex Mono",monospace}.portfolio-v10 .identity-name strong{font:630 54px/.92 "Manrope",sans-serif;letter-spacing:-.07em}.portfolio-v10 .identity-card dl{display:grid;grid-template-columns:1fr 1fr;margin:0}.portfolio-v10 .identity-card dl div{padding:15px 18px;border-top:1px solid var(--line)}.portfolio-v10 .identity-card dl div:nth-child(odd){border-right:1px solid var(--line)}.portfolio-v10 .identity-card dt{color:var(--faint);font:500 8px "IBM Plex Mono",monospace}.portfolio-v10 .identity-card dd{margin:6px 0 0;font-size:11px;font-weight:700}.portfolio-v10 .identity-card::after{display:none}.portfolio-v10 .identity-copy section{display:grid;grid-template-columns:132px minmax(0,1fr);gap:28px;padding:25px 0;border-top:1px solid var(--line2)}.portfolio-v10 .identity-copy section:first-child{padding-top:0;border-top:0}.portfolio-v10 .identity-copy section>span{margin-top:5px}.portfolio-v10 .identity-copy p{max-width:65ch;margin:0;color:var(--muted);font-size:14px;line-height:1.78}.portfolio-v10 .identity-copy .large-copy{max-width:31ch;color:var(--ink);font-size:clamp(1.45rem,2vw,2rem);font-weight:560;line-height:1.3;letter-spacing:-.035em}.portfolio-v10 .focus-list{display:flex;flex-wrap:wrap;gap:7px}.portfolio-v10 .identity-copy>.button{margin:26px 0 0 160px}.portfolio-v10 .section-intro{margin-bottom:38px}.portfolio-v10 .section-intro h2{margin:18px 0 0;font:620 clamp(2.8rem,4.6vw,4.6rem)/.98 "Manrope",sans-serif;letter-spacing:-.06em;text-transform:none}.portfolio-v10 .section-intro h2 br{display:none}.portfolio-v10 .principles{padding-top:18px}.portfolio-v10 .principle-list{margin:0;padding:0;border-top:1px solid var(--line2);list-style:none}.portfolio-v10 .principle-list li{display:grid;grid-template-columns:54px minmax(190px,.55fr) minmax(0,1fr);gap:24px;align-items:center;padding:23px 0;border-bottom:1px solid var(--line2)}.portfolio-v10 .principle-list li>span{color:var(--blue);font:550 10px "IBM Plex Mono",monospace}.portfolio-v10 .principle-list h3{margin:0;font-size:clamp(1.3rem,1.8vw,1.8rem);font-weight:650;letter-spacing:-.04em;text-transform:none}.portfolio-v10 .principle-list p{max-width:54ch;margin:0;color:var(--muted);font-size:14px;line-height:1.65}
/* Experience */
.portfolio-v10 .experience-timeline{margin-top:46px}.portfolio-v10 .role{display:grid!important;grid-template-columns:160px minmax(0,1fr);color:var(--ink);border-top:1px solid var(--line2)}.portfolio-v10 .role:last-child{border-bottom:1px solid var(--line2)}.portfolio-v10 .role-rail{position:relative;padding:30px 24px 30px 0;color:var(--blue)}.portfolio-v10 .role-rail::after{content:"";position:absolute;top:0;right:0;width:1px;height:0;background:var(--blue);transition:height 1s .2s var(--ease)}.portfolio-v10 .role.visible .role-rail::after{height:100%}.portfolio-v10 .role-rail time{color:inherit!important;font:550 10px/1.5 "IBM Plex Mono",monospace}.portfolio-v10 .role-rail i{display:block;position:absolute;top:34px;right:-5px;width:10px;height:10px;border:2px solid var(--blue);border-radius:50%;background:var(--paper);box-shadow:0 0 0 5px var(--blue-soft)}.portfolio-v10 .role-main{padding:30px 0 34px 40px}.portfolio-v10 .role-main>p:first-child{margin:0 0 14px}.portfolio-v10 .role-main h3{max-width:900px;margin:0 0 8px;font:630 clamp(1.9rem,3.2vw,3rem)/1.08 "Manrope",sans-serif;letter-spacing:-.05em;text-transform:none}.portfolio-v10 .role-main>span{display:block;color:var(--faint);font:500 10px "IBM Plex Mono",monospace}.portfolio-v10 .role-main>p:not(:first-child){max-width:760px;margin:20px 0 0;color:var(--muted);font-size:14px;line-height:1.75}.portfolio-v10 .impact-grid{display:grid;grid-template-columns:repeat(2,minmax(0,190px));gap:10px;margin-top:24px}.portfolio-v10 .impact-grid.four{grid-template-columns:repeat(4,minmax(0,1fr));max-width:800px}.portfolio-v10 .impact-grid div{padding:16px;background:var(--white);border:1px solid var(--line);border-radius:9px}.portfolio-v10 .impact-grid strong{display:block;color:var(--blue);font-size:25px;line-height:1;letter-spacing:-.05em}.portfolio-v10 .impact-grid span{display:block;margin-top:8px;color:var(--muted);font-size:10px;line-height:1.5}.portfolio-v10 .role-main>ul{display:flex;flex-wrap:wrap;gap:7px;margin:22px 0 0;padding:0;list-style:none}.portfolio-v10 .role-main>ul li{padding:7px 10px;color:var(--ink2);background:var(--white);border:1px solid var(--line);border-radius:7px;font-size:10px;font-weight:650}.portfolio-v10 .experience-secondary{display:grid;grid-template-columns:.8fr 1.2fr;gap:14px;margin-top:24px}.portfolio-v10 .achievement,.portfolio-v10 .leadership{padding:28px;background:var(--white);border:1px solid var(--line);border-radius:var(--radius)}.portfolio-v10 .achievement>span,.portfolio-v10 .leadership>span{color:var(--blue);font:550 9px "IBM Plex Mono",monospace}.portfolio-v10 .achievement strong{display:block;margin-top:48px;color:var(--blue);font-size:clamp(2.5rem,4vw,4rem);letter-spacing:-.06em}.portfolio-v10 .achievement h3{margin:8px 0 4px;font-size:18px}.portfolio-v10 .achievement p{margin:0;color:var(--muted);font-size:13px}.portfolio-v10 .leadership ul{display:grid;grid-template-columns:1fr 1fr;gap:0 24px;margin:20px 0 0;padding:0;list-style:none}.portfolio-v10 .leadership li{padding:11px 0;color:var(--muted);border-bottom:1px solid var(--line);font-size:12px}.portfolio-v10 .leadership b{color:var(--ink)}
/* Projects */
.portfolio-v10 .projects-v3{margin-top:46px}.portfolio-v10 .project-featured{display:grid;grid-template-columns:1.05fr .95fr;overflow:hidden;color:#fff;background:var(--navy);border-radius:var(--radius);box-shadow:0 26px 70px rgba(12,23,40,.18)}.portfolio-v10 .project-copy{padding:clamp(34px,5vw,60px)}.portfolio-v10 .project-copy>p:first-child{margin:0 0 42px;color:#88aefa}.portfolio-v10 .project-copy h3{margin:0;font:640 clamp(3rem,5.3vw,5.2rem)/.92 "Manrope",sans-serif;letter-spacing:-.07em;text-transform:none}.portfolio-v10 .project-copy h4{max-width:28ch;margin:14px 0 0;color:#dce7fa;font-size:18px;line-height:1.4}.portfolio-v10 .project-copy>p:not(:first-child){max-width:55ch;margin:22px 0 0;color:#aebed2;font-size:14px;line-height:1.75}.portfolio-v10 .tags{display:flex;flex-wrap:wrap;gap:7px;margin:24px 0 0;padding:0;list-style:none}.portfolio-v10 .project-copy .tags li{color:#dce7fa;background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.15)}.portfolio-v10 .project-copy .button{margin-top:28px}.portfolio-v10 .threat-map{position:relative;display:grid;place-items:center;padding:44px;background:#101f34;border-left:1px solid rgba(255,255,255,.1)}.portfolio-v10 .threat-map::before{content:"LIVE RESPONSE FLOW";position:absolute;top:24px;left:28px;color:#6f8fbf;font:500 8px "IBM Plex Mono",monospace;letter-spacing:.08em}.portfolio-v10 .threat-map ol{width:min(100%,340px);display:grid;gap:9px;margin:0;padding:0;list-style:none;counter-reset:threat}.portfolio-v10 .threat-map li{position:relative;padding:12px 14px 12px 42px;color:#dce7fa;border:1px solid #344b68;border-radius:7px;font:550 9px "IBM Plex Mono",monospace;counter-increment:threat;transition:border-color .3s,transform .3s var(--ease)}.portfolio-v10 .threat-map li::before{content:"0" counter(threat);position:absolute;left:13px;color:#6f98de}.portfolio-v10 .threat-map li:not(:last-child)::after{content:"";position:absolute;bottom:-10px;left:50%;width:1px;height:9px;background:#4e79be}.portfolio-v10 .project-featured:hover .threat-map li{border-color:#4f76a7;transform:translateX(3px)}.portfolio-v10 .threat-map aside{margin-top:18px;color:#7da1d5;text-align:center;font:500 8px/1.8 "IBM Plex Mono",monospace}.portfolio-v10 .threat-map aside b{color:#fff}.portfolio-v10 .project-priority-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:14px}.portfolio-v10 .project-card{min-height:350px;display:flex;flex-direction:column;align-items:flex-start;padding:28px;background:var(--white);border:1px solid var(--line);border-radius:var(--radius);transition:transform .34s var(--ease),border-color .25s,box-shadow .34s}.portfolio-v10 .project-card:hover{transform:translateY(-6px);border-color:#b6c5d8;box-shadow:var(--shadow2)}.portfolio-v10 .project-card>p:first-child{margin:0}.portfolio-v10 .project-card h3{margin:46px 0 7px;font:640 clamp(1.9rem,3vw,2.8rem)/1 "Manrope",sans-serif;letter-spacing:-.055em;text-transform:none}.portfolio-v10 .project-card h3 br{display:none}.portfolio-v10 .project-card h4{max-width:34ch;margin:0 0 16px;color:var(--ink2);font-size:14px;line-height:1.45}.portfolio-v10 .project-card>p:not(:first-child){max-width:57ch;margin:0;color:var(--muted);font-size:12px;line-height:1.7}.portfolio-v10 .project-card .tags{margin-top:18px}.portfolio-v10 .project-card>a{margin-top:auto;padding-top:22px;color:var(--blue);font-size:10px;font-weight:800;transition:transform .25s var(--ease)}.portfolio-v10 .project-card:hover>a{transform:translateX(5px)}.portfolio-v10 .measured{display:grid;grid-template-columns:auto auto auto;align-items:center;gap:10px;margin:0 0 18px}.portfolio-v10 .measured strong{color:var(--blue);font-size:28px;letter-spacing:-.06em}.portfolio-v10 .measured i{color:var(--faint);font-style:normal}.portfolio-v10 .measured span{grid-column:1/-1;color:var(--faint);font:500 8px "IBM Plex Mono",monospace}.portfolio-v10 .governance-flow{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin:0 0 18px}.portfolio-v10 .governance-flow span{padding:6px 8px;color:var(--blue);background:var(--blue-soft);border-radius:5px;font:600 8px "IBM Plex Mono",monospace}.portfolio-v10 .governance-flow i{color:var(--faint);font-style:normal}.portfolio-v10 .project-secondary-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-top:14px}.portfolio-v10 .project-small{min-height:225px;display:flex;flex-direction:column;padding:24px;background:var(--white);border:1px solid var(--line);border-radius:var(--radius);transition:transform .32s var(--ease),box-shadow .32s}.portfolio-v10 .project-small:hover{transform:translateY(-5px);box-shadow:var(--shadow)}.portfolio-v10 .project-small h3{margin:auto 0 6px;font-size:22px;letter-spacing:-.045em}.portfolio-v10 .project-small p{margin:0;color:var(--ink2);font-size:12px;line-height:1.5}.portfolio-v10 .project-small small{margin-top:9px;color:var(--faint);font-size:9px;line-height:1.55}.portfolio-v10 .project-small a{margin-top:18px;color:var(--blue);font-size:9px;font-weight:800}
/* Stack */
.portfolio-v10 .stack-console{display:grid;grid-template-columns:190px minmax(0,1fr) 300px;min-height:520px;margin-top:46px;overflow:hidden;background:var(--white);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.portfolio-v10 .stack-categories{display:flex;flex-direction:column;border-right:1px solid var(--line)}.portfolio-v10 .stack-categories button{min-height:84px;display:flex;align-items:center;gap:12px;padding:0 18px;text-align:left;background:transparent;border:0;border-bottom:1px solid var(--line);font:600 10px "IBM Plex Mono",monospace;cursor:pointer;transition:color .2s,background .2s,padding .25s var(--ease)}.portfolio-v10 .stack-categories button span{color:var(--blue);font-size:8px}.portfolio-v10 .stack-categories button.active{padding-left:23px;color:var(--blue);background:var(--blue-soft);box-shadow:inset 3px 0 var(--blue)}.portfolio-v10 .stack-explorer{padding:24px;background:#f8fafc}.portfolio-v10 .stack-nodes{display:grid;grid-template-columns:1fr 1fr;gap:10px}.portfolio-v10 .stack-tech{min-height:108px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding:16px;text-align:left;background:#fff;border:1px solid var(--line);border-radius:8px;cursor:pointer;transition:transform .25s var(--ease),border-color .2s,box-shadow .25s}.portfolio-v10 .stack-tech:hover{transform:translateY(-3px);box-shadow:var(--shadow)}.portfolio-v10 .stack-tech.active{border-color:var(--blue);box-shadow:inset 0 0 0 1px var(--blue)}.portfolio-v10 .stack-tech b{color:var(--ink);font-size:13px}.portfolio-v10 .stack-tech span{margin-top:7px;color:var(--muted);font-size:9px;line-height:1.5}.portfolio-v10 .stack-context{padding:28px;border-left:1px solid var(--line)}.portfolio-v10 .stack-context.updated{animation:context-in .4s var(--ease)}.portfolio-v10 .stack-context h3{margin:54px 0 12px;font:640 clamp(2rem,3vw,3rem)/1 "Manrope",sans-serif;letter-spacing:-.055em}.portfolio-v10 .stack-context>p{margin:0;color:var(--muted);font-size:13px;line-height:1.7}.portfolio-v10 .tech-detail{margin:28px 0 0}.portfolio-v10 .tech-detail div{padding:15px 0;border-top:1px solid var(--line)}.portfolio-v10 .tech-detail dt{color:var(--faint);font:500 8px "IBM Plex Mono",monospace}.portfolio-v10 .tech-detail dd{margin:7px 0 0;color:var(--ink2);font-size:11px;line-height:1.55}
/* Security */
.portfolio-v10 .security-clarity{display:grid;grid-template-columns:390px minmax(0,1fr);min-height:480px;margin-top:46px;overflow:hidden;background:var(--white);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.portfolio-v10 .security-path{display:flex;flex-direction:column;border-right:1px solid var(--line)}.portfolio-v10 .security-path button{position:relative;flex:1;display:grid;grid-template-columns:34px 1fr;gap:3px 14px;align-content:center;padding:20px 24px;text-align:left;background:transparent;border:0;border-bottom:1px solid var(--line);cursor:pointer;transition:color .22s,background .22s,padding .3s var(--ease)}.portfolio-v10 .security-path button:last-child{border-bottom:0}.portfolio-v10 .security-path button::before{content:"";position:absolute;left:0;top:0;width:3px;height:100%;background:var(--blue);transform:scaleY(0);transition:transform .3s var(--ease)}.portfolio-v10 .security-path button.active{padding-left:30px;color:var(--blue);background:var(--blue-soft)}.portfolio-v10 .security-path button.active::before{transform:scaleY(1)}.portfolio-v10 .security-path button span{grid-row:1/3;color:var(--blue);font:550 9px "IBM Plex Mono",monospace}.portfolio-v10 .security-path button b{font-size:12px}.portfolio-v10 .security-path button small{color:var(--faint);font:500 8px/1.5 "IBM Plex Mono",monospace}.portfolio-v10 .security-explanation{display:flex;flex-direction:column;justify-content:center;padding:clamp(34px,5vw,64px)}.portfolio-v10 .security-explanation h3{max-width:680px;margin:24px 0 16px;font:620 clamp(2.7rem,4.7vw,4.7rem)/1 "Manrope",sans-serif;letter-spacing:-.065em}.portfolio-v10 .security-explanation>p{max-width:630px;margin:0;color:var(--muted);font-size:14px;line-height:1.75}.portfolio-v10 .security-flow{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:38px}.portfolio-v10 .security-flow i{padding:7px 9px;color:var(--blue);background:var(--blue-soft);border-radius:5px;font:600 8px "IBM Plex Mono",monospace;font-style:normal}.portfolio-v10 .security-flow b{color:var(--faint);font-weight:500}
/* Journey */
.portfolio-v10 .journey-v3{display:grid;grid-template-columns:92px minmax(0,1fr);margin-top:46px}.portfolio-v10 .altitude-column{position:relative;display:flex;flex-direction:column;justify-content:space-between;padding:12px 20px 12px 0;color:var(--faint);border-right:1px solid var(--line2);font:500 8px "IBM Plex Mono",monospace}.portfolio-v10 .altitude-column i{position:absolute;top:0;right:-2px;width:3px;height:var(--altitude,62%);background:var(--blue);transition:height .5s}.portfolio-v10 .journey-v3 ol{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:0;padding:0;list-style:none}.portfolio-v10 .journey-v3 li{min-height:390px;display:flex;flex-direction:column;padding:25px;background:var(--white);border-top:1px solid var(--line);border-right:1px solid var(--line);border-bottom:1px solid var(--line);transition:transform .3s var(--ease),box-shadow .3s}.portfolio-v10 .journey-v3 li:hover{position:relative;z-index:2;transform:translateY(-5px);box-shadow:var(--shadow)}.portfolio-v10 .journey-v3 li.next{color:#fff;background:var(--navy)}.portfolio-v10 .journey-v3 time,.portfolio-v10 .journey-v3 li>span{color:var(--blue);font:550 8px "IBM Plex Mono",monospace}.portfolio-v10 .journey-v3 li>span{margin-top:12px}.portfolio-v10 .journey-v3 li.next time,.portfolio-v10 .journey-v3 li.next>span{color:#8fb2f7}.portfolio-v10 .journey-v3 h3{margin:auto 0 12px;font:620 clamp(1.45rem,2vw,2rem)/1.08 "Manrope",sans-serif;letter-spacing:-.045em}.portfolio-v10 .journey-v3 p{margin:0;color:var(--muted);font-size:11px;line-height:1.65}.portfolio-v10 .journey-v3 li.next p{color:#aebed2}.portfolio-v10 .journey-v3 dl{display:flex;gap:20px;margin:22px 0 0}.portfolio-v10 .journey-v3 dt{color:var(--faint);font:500 8px "IBM Plex Mono",monospace}.portfolio-v10 .journey-v3 dd{margin:5px 0 0;color:var(--ink);font-size:18px;font-weight:750}
/* Credentials */
.portfolio-v10 .credential-groups{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:46px}.portfolio-v10 .credential-group{overflow:hidden;background:var(--white);border:1px solid var(--line);border-radius:var(--radius)}.portfolio-v10 .credential-group.wide{grid-column:1/-1}.portfolio-v10 .credential-group header{display:flex;align-items:center;gap:16px;padding:20px 24px;border-bottom:1px solid var(--line)}.portfolio-v10 .credential-group header span{color:var(--blue);font:550 9px "IBM Plex Mono",monospace}.portfolio-v10 .credential-group h3{margin:0;font-size:18px;letter-spacing:-.035em}.portfolio-v10 .credential-group ul{margin:0;padding:0;list-style:none}.portfolio-v10 .credential-group li{display:grid;grid-template-columns:1fr auto;gap:18px;align-items:center;padding:17px 24px;border-bottom:1px solid var(--line);transition:color .2s,background .2s,padding .25s var(--ease)}.portfolio-v10 .credential-group li:last-child{border-bottom:0}.portfolio-v10 .credential-group li:hover{padding-left:29px;color:var(--blue);background:#f8faff}.portfolio-v10 .credential-group li b{font-size:11px;line-height:1.5}.portfolio-v10 .credential-group time{color:var(--faint);font:500 9px "IBM Plex Mono",monospace}.portfolio-v10 .resume-card{display:flex;justify-content:space-between;align-items:center;gap:28px;margin-top:14px;padding:30px;color:#fff;background:var(--navy);border-radius:var(--radius)}.portfolio-v10 .resume-card h3{margin:14px 0 5px;font-size:23px;letter-spacing:-.045em}.portfolio-v10 .resume-card p{margin:0;color:#aebed2;font-size:12px}
/* Lab */
.portfolio-v10 .lab-toolbar{display:flex;flex-wrap:wrap;gap:8px;margin-top:38px}.portfolio-v10 .lab-toolbar button{padding:9px 12px;color:var(--muted);background:var(--white);border:1px solid var(--line);border-radius:7px;font:550 9px "IBM Plex Mono",monospace;cursor:pointer;transition:color .2s,background .2s,transform .2s var(--ease)}.portfolio-v10 .lab-toolbar button:hover{transform:translateY(-2px)}.portfolio-v10 .lab-toolbar button.active{color:#fff;background:var(--blue);border-color:var(--blue)}.portfolio-v10 .lab-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:18px}.portfolio-v10 .lab-grid article{min-height:240px;display:flex;flex-direction:column;padding:25px;background:var(--white);border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;transition:transform .32s var(--ease),border-color .25s,box-shadow .32s}.portfolio-v10 .lab-grid article[hidden]{display:none!important}.portfolio-v10 .lab-grid article:hover{transform:translateY(-5px);border-color:#b6c5d8;box-shadow:var(--shadow)}.portfolio-v10 .lab-grid h3{margin:auto 0 9px;font-size:20px;letter-spacing:-.04em}.portfolio-v10 .lab-grid p{margin:0;color:var(--muted);font-size:12px;line-height:1.65}.portfolio-v10 .lab-grid small{margin-top:16px;color:var(--faint);font:500 8px/1.5 "IBM Plex Mono",monospace}
/* Contact/footer */
.portfolio-v10 .contact-v3{width:100%;min-height:calc(100svh - 68px);display:flex!important;align-items:center;padding:96px max(32px,calc((100vw - 1180px)/2));overflow:hidden;color:#fff;background:var(--navy)}.portfolio-v10 .contact-sky{position:absolute;inset:0;opacity:.16;background:url("asset/cloudspace-hero-v1.webp") center/cover no-repeat;filter:grayscale(1) contrast(1.1);transform:scale(1.04);animation:sky-breathe 18s ease-in-out infinite alternate}.portfolio-v10 .contact-v3::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(12,23,40,.98) 15%,rgba(12,23,40,.8) 70%,rgba(12,23,40,.55))}.portfolio-v10 .contact-copy{position:relative;z-index:2;width:min(100%,900px)}.portfolio-v10 .contact-copy>span{display:block;margin-top:26px;color:#8fb2fa}.portfolio-v10 .contact-copy h2{max-width:800px;margin:20px 0 18px;font:620 clamp(3.8rem,7vw,7rem)/.92 "Manrope",sans-serif;letter-spacing:-.075em;text-transform:none}.portfolio-v10 .contact-copy>p:not(.section-code){max-width:620px;margin:0;color:#b7c3d2;font-size:16px;line-height:1.7}.portfolio-v10 .contact-details{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));max-width:760px;gap:0 36px;margin-top:38px}.portfolio-v10 .contact-details>*{display:flex;justify-content:space-between;gap:20px;padding:14px 0;border-top:1px solid rgba(255,255,255,.16)}.portfolio-v10 .contact-details b{font-size:11px}.portfolio-v10 .contact-details span{color:#9eafc3;font-size:11px;text-align:right}.portfolio-v10 .contact-actions{display:flex;flex-wrap:wrap;align-items:center;gap:20px;margin-top:34px}.portfolio-v10 .contact-actions .button-dark{color:var(--ink);background:#fff}.portfolio-v10 .contact-actions .text-link{color:#fff}.portfolio-v10 .site-footer{min-height:92px;display:flex;justify-content:space-between;align-items:center;gap:24px;padding:22px max(32px,calc((100vw - 1180px)/2));color:var(--muted);background:var(--white);border-top:1px solid var(--line)}.portfolio-v10 .site-footer>div{display:flex;flex-direction:column;gap:4px}.portfolio-v10 .site-footer>div:last-child{align-items:flex-end}.portfolio-v10 .site-footer strong{color:var(--ink);font-size:12px}.portfolio-v10 .site-footer span,.portfolio-v10 .site-footer small{font-size:10px}.portfolio-v10 .privacy-trigger{padding:0;color:var(--blue);background:none;border:0;cursor:pointer}
/* Dialogs */
.portfolio-v10 dialog{color:var(--ink);background:var(--white);border:1px solid var(--line);border-radius:14px;box-shadow:0 30px 100px rgba(10,23,42,.25)}.portfolio-v10 dialog::backdrop{background:rgba(8,16,29,.62);backdrop-filter:blur(8px)}.portfolio-v10 .command-palette{width:min(620px,calc(100vw - 28px));padding:0}.portfolio-v10 .command-search{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:12px;padding:18px;border-bottom:1px solid var(--line)}.portfolio-v10 .command-search input{width:100%;padding:4px;background:transparent;border:0;outline:0;font-size:15px}.portfolio-v10 .command-search kbd{padding:5px 7px;color:var(--faint);border:1px solid var(--line);border-radius:5px;font-size:9px}.portfolio-v10 .command-palette>p{padding:0 18px;color:var(--blue);font:500 9px "IBM Plex Mono",monospace}.portfolio-v10 .command-palette ul{max-height:420px;margin:0;padding:0 10px 10px;overflow:auto;list-style:none}.portfolio-v10 .command-palette li button{width:100%;display:flex;justify-content:space-between;padding:12px;text-align:left;background:transparent;border:0;border-radius:7px;cursor:pointer}.portfolio-v10 .command-palette li button:hover,.portfolio-v10 .command-palette li button.active{background:var(--blue-soft)}.portfolio-v10 .command-footer{display:flex;gap:18px;padding:12px 18px;color:var(--faint);background:#f8fafc;border-top:1px solid var(--line);font:500 8px "IBM Plex Mono",monospace}.portfolio-v10 .case-study,.portfolio-v10 .lab-panel{width:min(1120px,calc(100vw - 28px));max-height:calc(100svh - 28px);padding:0;overflow:auto}.portfolio-v10 .case-close{position:sticky;z-index:5;top:14px;float:right;margin:14px;padding:9px 12px;color:var(--ink);background:rgba(255,255,255,.92);border:1px solid var(--line);border-radius:7px;font:600 9px "IBM Plex Mono",monospace;cursor:pointer}.portfolio-v10 .case-study>header,.portfolio-v10 .lab-panel>header{clear:both;padding:38px clamp(24px,5vw,60px) 42px;border-bottom:1px solid var(--line)}.portfolio-v10 .case-study>header>p:first-child,.portfolio-v10 .lab-panel>header>p:first-child{color:var(--blue);font:550 9px "IBM Plex Mono",monospace}.portfolio-v10 .case-study>header h2,.portfolio-v10 .lab-panel>header h2{margin:18px 0 10px;font:630 clamp(3rem,6vw,6rem)/.94 "Manrope",sans-serif;letter-spacing:-.07em}.portfolio-v10 .case-study>header>p:not(:first-child),.portfolio-v10 .lab-panel>header>p:not(:first-child){max-width:680px;color:var(--muted);font-size:15px;line-height:1.6}.portfolio-v10 #caseTags{display:flex;flex-wrap:wrap;gap:7px;margin-top:22px}.portfolio-v10 #caseTags span{padding:7px 9px;background:var(--blue-soft);border-radius:6px;color:var(--blue);font-size:9px;font-weight:650}.portfolio-v10 .case-architecture,.portfolio-v10 .incident-replay{margin:0;padding:34px clamp(24px,5vw,60px);border-bottom:1px solid var(--line)}.portfolio-v10 .case-architecture>span,.portfolio-v10 .incident-heading span{color:var(--blue);font:550 9px "IBM Plex Mono",monospace}.portfolio-v10 .case-architecture h3,.portfolio-v10 .incident-heading h3{margin:10px 0 20px;font-size:22px}.portfolio-v10 .case-architecture ol,.portfolio-v10 #incidentNodes{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}.portfolio-v10 .case-architecture li,.portfolio-v10 #incidentNodes li{padding:9px 11px;color:var(--ink2);background:#f8fafc;border:1px solid var(--line);border-radius:7px;font:550 9px "IBM Plex Mono",monospace}.portfolio-v10 #incidentNodes li.active{color:#fff;background:var(--blue);border-color:var(--blue)}.portfolio-v10 #incidentNodes li.done{color:var(--green);border-color:#7fc5a7}.portfolio-v10 .incident-heading{display:flex;justify-content:space-between;gap:20px}.portfolio-v10 .incident-heading button{padding:8px 10px;background:#fff;border:1px solid var(--line);border-radius:6px;font-size:9px;cursor:pointer}.portfolio-v10 .incident-body pre{min-height:150px;margin-top:18px;padding:18px;overflow:auto;color:#a9c5ff;background:var(--navy);border-radius:8px;font:500 10px/1.65 "IBM Plex Mono",monospace}.portfolio-v10 .case-grid,.portfolio-v10 .lab-detail-grid{display:grid;grid-template-columns:repeat(2,1fr)}.portfolio-v10 .case-grid article,.portfolio-v10 .lab-detail-grid article{padding:30px clamp(24px,4vw,48px);border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.portfolio-v10 .case-grid article:nth-child(even),.portfolio-v10 .lab-detail-grid article:nth-child(even){border-right:0}.portfolio-v10 .case-grid article>span,.portfolio-v10 .lab-detail-grid article>span{color:var(--blue);font:550 9px "IBM Plex Mono",monospace}.portfolio-v10 .case-grid h3,.portfolio-v10 .lab-detail-grid h3{margin:24px 0 10px;font-size:20px}.portfolio-v10 .case-grid p,.portfolio-v10 .lab-detail-grid p{margin:0;color:var(--muted);font-size:13px;line-height:1.7}.portfolio-v10 .case-study>footer{display:flex;justify-content:space-between;align-items:center;padding:24px clamp(24px,5vw,60px)}.portfolio-v10 .case-study>footer a,.portfolio-v10 .case-study>footer button{color:var(--blue);background:transparent;border:0;font-size:10px;font-weight:800;cursor:pointer}
/* Motion */
@keyframes nav-enter{from{opacity:0;transform:translateY(-16px)}to{opacity:1;transform:none}}@keyframes hero-in{from{opacity:0;filter:blur(6px);transform:translateY(28px)}to{opacity:1;filter:none;transform:none}}@keyframes sky-breathe{from{transform:translate3d(var(--parallax-x,0),var(--parallax-y,0),0) scale(1.06)}to{transform:translate3d(var(--parallax-x,0),var(--parallax-y,0),0) scale(1.11)}}@keyframes cloud-drift{from{translate:-1.5% 0}to{translate:1.5% -1%}}@keyframes cloud-breathe{from{filter:brightness(1.28) contrast(.68) blur(5px)}to{filter:brightness(1.45) contrast(.62) blur(8px)}}@keyframes cue-drop{0%{opacity:0;transform:translateY(0)}40%{opacity:1}100%{opacity:0;transform:translateY(12px)}}@keyframes status-pulse{0%,100%{box-shadow:0 0 0 4px rgba(36,162,106,.12)}50%{box-shadow:0 0 0 7px rgba(36,162,106,.04)}}@keyframes route-line{0%{transform:scaleX(0)}58%{transform:scaleX(1);transform-origin:left}59%{transform-origin:right}100%{transform:scaleX(0);transform-origin:right}}@keyframes context-in{from{opacity:.2;transform:translateY(8px)}to{opacity:1;transform:none}}
@media(max-width:1180px){body.portfolio-v10{--shell:min(100% - 48px,1040px)}.portfolio-v10 .nav-links{position:fixed;top:68px;right:0;width:min(430px,100vw);height:calc(100svh - 68px);display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:0;padding:26px 28px;color:var(--ink);background:rgba(255,255,255,.98);border-left:1px solid var(--line);transform:translateX(102%);transition:transform .42s var(--ease);overflow:auto}.portfolio-v10 .nav-links.open{transform:none}.portfolio-v10 .nav-links a{padding:15px 0;border-bottom:1px solid var(--line);font-size:17px;opacity:1}.portfolio-v10 .nav-indicator{display:none}.portfolio-v10 .menu-toggle{display:block}.portfolio-v10 .command-trigger{display:none}.portfolio-v10 .stack-console{grid-template-columns:170px 1fr}.portfolio-v10 .stack-context{grid-column:1/-1;border-top:1px solid var(--line);border-left:0}.portfolio-v10 .project-secondary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.portfolio-v10 .journey-v3 ol{grid-template-columns:repeat(2,minmax(0,1fr))}.portfolio-v10 .lab-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){body.portfolio-v10{--shell:calc(100% - 32px);--radius:10px}.portfolio-v10 .navbar{height:64px;padding:0 16px}.portfolio-v10 .brand{font-size:18px}.portfolio-v10 .brand::before{width:14px;margin-right:8px}.portfolio-v10 .nav-links{top:64px;width:100vw;height:calc(100svh - 64px);padding:18px 20px 30px;border-left:0}.portfolio-v10 .online{display:none}html:not([data-page=landing]) .portfolio-v10 .infrastructure{padding-top:64px}.portfolio-v10 .hero{min-height:100svh}.portfolio-v10 .hero-sky{inset:-2%;background-position:58% center;filter:saturate(.72) contrast(1.04) brightness(.62)}.portfolio-v10 .hero::after{background:linear-gradient(0deg,rgba(7,16,29,.9) 0%,rgba(7,16,29,.56) 72%,rgba(7,16,29,.28))}.portfolio-v10 .hero-content{width:calc(100% - 32px);padding:128px 0 44px}.portfolio-v10 .hero-greeting{margin-bottom:22px;font-size:9px}.portfolio-v10 .hero h1{max-width:100%;font-size:clamp(3.25rem,14.2vw,4.25rem);line-height:.91;letter-spacing:-.072em}.portfolio-v10 .hero-role{margin-top:23px;font-size:16px;line-height:1.35}.portfolio-v10 .hero-discipline{font-size:9px;line-height:1.8}.portfolio-v10 .hero-summary{margin-top:20px;font-size:14px;line-height:1.65}.portfolio-v10 .hero-actions{align-items:stretch;flex-direction:column;gap:10px;margin-top:25px}.portfolio-v10 .hero-actions .button{width:100%}.portfolio-v10 .hero-actions .text-link{align-self:flex-start}.portfolio-v10 .hero-quicklinks{gap:16px;margin-top:22px}.portfolio-v10 .hero-quicklinks a{font-size:10px}.portfolio-v10 .scroll-cue{display:none}.portfolio-v10 .cloud-entry{height:190svh}.portfolio-v10 .cloud-entry-sticky{background:linear-gradient(180deg,#b8dcef 0%,#e9f6fc 55%,#fff 100%)}.portfolio-v10 .entry-cloud{inset:-34%;display:block!important;opacity:var(--entry-bg-opacity,.62)}.portfolio-v10 .section-shell{padding:60px 0}.portfolio-v10 .page-heading{display:block;padding:4px 0 34px}.portfolio-v10 .page-heading::after{position:absolute;top:4px;right:0}.portfolio-v10 .page-heading h2{margin-top:30px;font-size:clamp(2.7rem,12vw,4rem);line-height:.98}.portfolio-v10 .page-heading>span{display:block;max-width:30ch;margin-top:17px;font-size:14px}.portfolio-v10 .cloud-hub{padding-top:72px}.portfolio-v10 .hub-person{display:block;padding-bottom:34px}.portfolio-v10 .hub-person h2{font-size:clamp(3.35rem,15vw,4.8rem)}.portfolio-v10 .hub-person>div:last-child{margin-top:34px}.portfolio-v10 .hub-person>div:last-child>p{font-size:18px}.portfolio-v10 .service-grid.hub-v3{grid-template-columns:1fr}.portfolio-v10 .hub-v3 .service-module,.portfolio-v10 .hub-v3 .module-projects{grid-column:auto;min-height:190px;padding:23px}.portfolio-v10 .hub-v3 .module-projects{min-height:240px}.portfolio-v10 .identity-layout.about-v3{display:block;margin-top:34px}.portfolio-v10 .identity-card{position:relative;top:auto;max-width:none}.portfolio-v10 .identity-card-no-photo .identity-name{min-height:190px}.portfolio-v10 .identity-copy{margin-top:38px}.portfolio-v10 .identity-copy section{display:block;padding:22px 0}.portfolio-v10 .identity-copy section>span{display:block;margin-bottom:14px}.portfolio-v10 .identity-copy .large-copy{max-width:none;font-size:22px}.portfolio-v10 .identity-copy>.button{width:100%;margin:24px 0 0}.portfolio-v10 .principles{padding-top:8px}.portfolio-v10 .principle-list li{grid-template-columns:34px 1fr;gap:12px}.portfolio-v10 .principle-list p{grid-column:2}.portfolio-v10 .role{display:block!important}.portfolio-v10 .role-rail{padding:22px 0 15px}.portfolio-v10 .role-rail::after{top:auto;bottom:0;width:0;height:2px!important;transition:width 1s .2s var(--ease)}.portfolio-v10 .role.visible .role-rail::after{width:100%}.portfolio-v10 .role-rail i{top:auto;right:0;bottom:-4px}.portfolio-v10 .role-main{padding:24px 0 30px}.portfolio-v10 .role-main h3{font-size:27px}.portfolio-v10 .impact-grid,.portfolio-v10 .impact-grid.four{grid-template-columns:repeat(2,minmax(0,1fr));max-width:none}.portfolio-v10 .experience-secondary{grid-template-columns:1fr}.portfolio-v10 .leadership ul{grid-template-columns:1fr}.portfolio-v10 .project-featured{grid-template-columns:1fr}.portfolio-v10 .project-copy{padding:28px 23px 32px}.portfolio-v10 .project-copy>p:first-child{margin-bottom:30px}.portfolio-v10 .project-copy h3{font-size:42px}.portfolio-v10 .threat-map{min-height:460px;padding:56px 23px 32px;border-top:1px solid rgba(255,255,255,.1);border-left:0}.portfolio-v10 .project-priority-grid,.portfolio-v10 .project-secondary-grid{grid-template-columns:1fr}.portfolio-v10 .project-card{min-height:320px;padding:24px}.portfolio-v10 .project-card h3{margin-top:38px;font-size:34px}.portfolio-v10 .project-small{min-height:200px}.portfolio-v10 .stack-console{display:block;min-height:0}.portfolio-v10 .stack-categories{display:grid;grid-template-columns:1fr 1fr;border-right:0}.portfolio-v10 .stack-categories button{min-height:64px;padding:0 14px;border-right:1px solid var(--line)}.portfolio-v10 .stack-categories button.active{padding-left:17px;box-shadow:inset 3px 0 var(--blue)}.portfolio-v10 .stack-explorer{padding:16px}.portfolio-v10 .stack-nodes{grid-template-columns:1fr}.portfolio-v10 .stack-context{padding:24px}.portfolio-v10 .stack-context h3{margin-top:34px}.portfolio-v10 .security-clarity{display:block;min-height:0}.portfolio-v10 .security-path{border-right:0;border-bottom:1px solid var(--line)}.portfolio-v10 .security-path button{min-height:86px}.portfolio-v10 .security-explanation{padding:34px 24px}.portfolio-v10 .security-explanation h3{font-size:36px}.portfolio-v10 .journey-v3{display:block}.portfolio-v10 .altitude-column{display:none}.portfolio-v10 .journey-v3 ol{grid-template-columns:1fr}.portfolio-v10 .journey-v3 li{min-height:290px;border-left:1px solid var(--line)}.portfolio-v10 .credential-groups{grid-template-columns:1fr}.portfolio-v10 .credential-group.wide{grid-column:auto}.portfolio-v10 .credential-group li{padding:15px 18px}.portfolio-v10 .credential-group li b{font-size:10px}.portfolio-v10 .resume-card{align-items:stretch;flex-direction:column}.portfolio-v10 .lab-grid{grid-template-columns:1fr}.portfolio-v10 .lab-grid article{min-height:215px}.portfolio-v10 .contact-v3{min-height:calc(100svh - 64px);padding:76px 16px}.portfolio-v10 .contact-copy h2{font-size:clamp(3.1rem,14vw,4.6rem)}.portfolio-v10 .contact-details{grid-template-columns:1fr}.portfolio-v10 .contact-details>*{align-items:flex-start;flex-direction:column;gap:6px}.portfolio-v10 .contact-details span{text-align:left;overflow-wrap:anywhere}.portfolio-v10 .contact-actions{align-items:flex-start;flex-direction:column}.portfolio-v10 .contact-actions .button{width:100%}.portfolio-v10 .site-footer{align-items:flex-start;flex-direction:column;padding:24px 16px}.portfolio-v10 .site-footer>div:last-child{align-items:flex-start}.portfolio-v10 .case-grid,.portfolio-v10 .lab-detail-grid{grid-template-columns:1fr}.portfolio-v10 .case-grid article,.portfolio-v10 .lab-detail-grid article{border-right:0}.portfolio-v10 .incident-heading{flex-direction:column}.portfolio-v10 .incident-heading>div:last-child{display:flex;flex-wrap:wrap;gap:6px}.portfolio-v10 .case-study>footer{align-items:flex-start;flex-direction:column;gap:20px}}
@media(max-width:390px){.portfolio-v10 .hero-content{padding-top:112px}.portfolio-v10 .hero h1{font-size:49px}.portfolio-v10 .hero-summary{font-size:13px}.portfolio-v10 .hero-quicklinks{gap:12px}.portfolio-v10 .page-heading h2{font-size:43px}.portfolio-v10 .identity-card-top{flex-direction:column}.portfolio-v10 .impact-grid,.portfolio-v10 .impact-grid.four{grid-template-columns:1fr}.portfolio-v10 .stack-categories{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.portfolio-v10 *,.portfolio-v10 *::before,.portfolio-v10 *::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.portfolio-v10 .reveal{opacity:1;filter:none;transform:none}}

.portfolio-v10 .navbar.over-dark{color:var(--ink);background:rgba(255,255,255,.92);border-bottom-color:rgba(16,24,40,.08)}

.portfolio-v10 .role-main{background:transparent;border:0}.portfolio-v10 .role-main>ul li{font-family:Manrope,sans-serif;font-size:10px}
.portfolio-v10 .cloud-entry-sticky::after{inset:auto auto 38px 50%;width:auto;height:auto;background:none;pointer-events:none}
.portfolio-v10 .entry-whiteout{inset:-25%}
.portfolio-v10 .hub-v3 .service-module em{position:static;left:auto;bottom:auto;font-family:Manrope,sans-serif;font-size:11px;letter-spacing:0}
html[data-page=landing] body.portfolio-v10 .hub-v3 .service-module,html[data-page=cloud] body.portfolio-v10 .hub-v3 .service-module{color:var(--ink);background:var(--white)!important;border-color:var(--line)}
html[data-page=landing] body.portfolio-v10 .hub-v3 .service-module>span,html[data-page=cloud] body.portfolio-v10 .hub-v3 .service-module>span{color:var(--faint)}
html[data-page=landing] body.portfolio-v10 .hub-v3 .service-module p,html[data-page=cloud] body.portfolio-v10 .hub-v3 .service-module p{color:var(--muted)}
html[data-page=landing] body.portfolio-v10 .hub-v3 .service-module em,html[data-page=cloud] body.portfolio-v10 .hub-v3 .service-module em{color:var(--blue)}
html[data-page=landing] body.portfolio-v10 .hub-v3 .module-projects,html[data-page=cloud] body.portfolio-v10 .hub-v3 .module-projects{color:#fff;background:var(--navy)!important;border-color:var(--navy)}
html[data-page=landing] body.portfolio-v10 .hub-v3 .module-projects>span,html[data-page=cloud] body.portfolio-v10 .hub-v3 .module-projects>span,html[data-page=landing] body.portfolio-v10 .hub-v3 .module-projects p,html[data-page=cloud] body.portfolio-v10 .hub-v3 .module-projects p{color:rgba(255,255,255,.64)}
html[data-page=landing] body.portfolio-v10 .hub-v3 .module-projects em,html[data-page=cloud] body.portfolio-v10 .hub-v3 .module-projects em{color:#a9c5ff}
html[data-page=landing] body.portfolio-v10 .infrastructure,html[data-page=cloud] body.portfolio-v10 .infrastructure{color:var(--ink);background:var(--paper)}
.portfolio-v10 .stack-nodes .stack-tech{color:var(--ink);background:var(--white);border-color:var(--line)}
.portfolio-v10 .stack-nodes .stack-tech.active{color:var(--ink);background:var(--blue-soft);border-color:var(--blue)}
.portfolio-v10 .stack-nodes .stack-tech b{color:var(--ink)}
.portfolio-v10 .stack-nodes .stack-tech span{color:var(--muted)}
.portfolio-v10 .stack-context{color:var(--ink);background:var(--white);border-color:var(--line)}
html[data-page=security] body.portfolio-v10 #security{color:var(--ink);background:transparent}
html[data-page=security] body.portfolio-v10 #security .page-heading h2{color:var(--ink)}
.portfolio-v10 .hub-v3 .module-about,.portfolio-v10 .hub-v3 .module-experience,.portfolio-v10 .hub-v3 .module-stack,.portfolio-v10 .hub-v3 .module-security,.portfolio-v10 .hub-v3 .module-journey,.portfolio-v10 .hub-v3 .module-certifications,.portfolio-v10 .hub-v3 .module-lab,.portfolio-v10 .hub-v3 .module-contact{grid-column:auto;grid-row:auto}
.portfolio-v10 .hub-v3 .module-projects{grid-column:span 2;grid-row:span 2}
.portfolio-v10 .hub-person{margin-bottom:0}.portfolio-v10 .hub-v3 .module-projects{grid-row:auto}
.portfolio-v10 .service-grid.hub-v3{grid-auto-rows:minmax(210px,auto)}

/* Keep the document tied to the layout viewport; the legacy layer used 100vw. */
html{max-width:100%;overflow-x:clip}
body.portfolio-v10{width:100%;max-width:100%;overflow-x:clip}

/* Mobile hub hard reset: keep every portfolio module in one explicit column. */
@media(max-width:760px){
  .portfolio-v10 a,.portfolio-v10 button{touch-action:manipulation;-webkit-tap-highlight-color:transparent}
  .portfolio-v10 .cloud-hub{min-width:0}
  .portfolio-v10 .service-grid.hub-v3{
    width:100%;
    min-width:0;
    display:grid;
    grid-template-columns:minmax(0,1fr)!important;
    grid-auto-columns:minmax(0,1fr);
    grid-auto-flow:row;
    grid-auto-rows:auto;
    gap:12px;
  }
  .portfolio-v10 .hub-v3 .service-module,
  .portfolio-v10 .hub-v3 .module-projects,
  .portfolio-v10 .hub-v3 .module-about,
  .portfolio-v10 .hub-v3 .module-experience,
  .portfolio-v10 .hub-v3 .module-stack,
  .portfolio-v10 .hub-v3 .module-security,
  .portfolio-v10 .hub-v3 .module-journey,
  .portfolio-v10 .hub-v3 .module-certifications,
  .portfolio-v10 .hub-v3 .module-lab,
  .portfolio-v10 .hub-v3 .module-contact{
    grid-column:1/-1!important;
    grid-row:auto!important;
    width:100%;
    min-width:0;
    max-width:100%;
    min-height:180px;
    padding:21px;
  }
  .portfolio-v10 .hub-v3 .module-projects{min-height:220px}
  .portfolio-v10 .hub-v3 .service-module h3{margin:40px 0 8px}
  .portfolio-v10 .hub-v3 .service-module em{margin-top:auto;padding-top:18px}
  .portfolio-v10 .service-grid:hover .service-module:not(:hover){opacity:1}
  .portfolio-v10 .hub-v3 .service-module:hover{transform:none;box-shadow:none}
  html[data-page=landing] body.portfolio-v10 .hub-v3 .service-module:hover,
  html[data-page=cloud] body.portfolio-v10 .hub-v3 .service-module:hover{
    color:var(--ink);
    background:var(--white)!important;
    border-color:var(--line);
  }
  html[data-page=landing] body.portfolio-v10 .hub-v3 .module-projects:hover,
  html[data-page=cloud] body.portfolio-v10 .hub-v3 .module-projects:hover{
    color:#fff;
    background:var(--navy)!important;
    border-color:var(--navy);
  }
  .portfolio-v10 .projects-v3{
    width:100%;
    min-width:0;
    grid-template-columns:minmax(0,1fr);
  }
  .portfolio-v10 .project-featured,
  .portfolio-v10 .project-priority-grid,
  .portfolio-v10 .project-secondary-grid,
  .portfolio-v10 .project-copy,
  .portfolio-v10 .threat-map,
  .portfolio-v10 .project-card,
  .portfolio-v10 .project-small{
    width:100%;
    min-width:0;
    max-width:100%;
  }
  .portfolio-v10 .project-card *,
  .portfolio-v10 .project-small *,
  .portfolio-v10 .project-copy *{overflow-wrap:anywhere}
}

@media(hover:none){
  .portfolio-v10 .service-grid:hover .service-module:not(:hover){opacity:1}
  .portfolio-v10 .hub-v3 .service-module:hover{transform:none;box-shadow:none}
}

/* Cloud passage v2: layered, scroll-linked depth with a restrained system readout. */
.portfolio-v10 .cloud-entry{
  height:175svh;
  min-height:0;
  color:#fff;
  background:#dcecf4;
}
.portfolio-v10 .cloud-entry-sticky{
  --entry-progress:0;
  --entry-bg-scale:1.025;
  --entry-bg-opacity:.7;
  --entry-bg-brightness:1.02;
  --entry-bg-blur:0px;
  position:sticky;
  top:0;
  height:100svh;
  min-height:0;
  display:grid;
  place-items:center;
  padding:78px 0 42px;
  overflow:hidden;
  isolation:isolate;
  background:
    radial-gradient(circle at 51% 39%,rgba(255,255,255,.88) 0 8%,rgba(214,235,246,.34) 34%,transparent 58%),
    linear-gradient(180deg,#82b7d3 0%,#bddbea 42%,#e5f0f5 76%,#f4f7fb 100%);
}
.portfolio-v10 .cloud-entry-sticky::before{
  content:"";
  position:absolute;
  z-index:0;
  inset:-8%;
  background:url("asset/cloudspace-hero-v1.webp") center 60%/cover no-repeat;
  filter:brightness(var(--entry-bg-brightness)) saturate(.76) contrast(.9) blur(var(--entry-bg-blur));
  opacity:var(--entry-bg-opacity);
  transform:scale(var(--entry-bg-scale));
  transform-origin:50% 56%;
  will-change:transform,filter,opacity;
}
.portfolio-v10 .cloud-entry-sticky::after{
  content:"";
  position:absolute;
  z-index:2;
  inset:auto 0 0;
  width:auto;
  height:34%;
  pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(224,238,245,.45) 58%,rgba(244,247,251,.94));
  transform:none;
}
.portfolio-v10 .entry-cloud{
  z-index:1;
  inset:-26%;
  display:block!important;
  pointer-events:none;
  background-image:url("asset/cloudspace-hero-v1.webp");
  background-repeat:no-repeat;
  background-size:cover;
  filter:brightness(1.08) saturate(.72) contrast(.84) blur(.6px);
  animation:cloud-pass-drift 11s ease-in-out infinite alternate;
  transform-origin:50% 54%;
  will-change:transform,opacity;
}
.portfolio-v10 .entry-cloud-a{
  background-position:18% 72%;
  mix-blend-mode:screen;
}
.portfolio-v10 .entry-cloud-b{
  background-position:82% 36%;
  mix-blend-mode:soft-light;
  animation-direction:alternate-reverse;
}
.portfolio-v10 .entry-depth,
.portfolio-v10 .entry-whiteout{
  position:absolute;
  inset:-6%;
  display:block!important;
  pointer-events:none;
  will-change:transform,opacity;
}
.portfolio-v10 .entry-depth{
  z-index:3;
  background:
    radial-gradient(circle at 50% 42%,rgba(255,255,255,.98) 0 18%,rgba(225,239,246,.96) 53%,rgba(244,247,251,.98) 82%),
    var(--paper);
  opacity:0;
}
.portfolio-v10 .entry-arrival{
  position:absolute;
  z-index:5;
  top:50%;
  left:50%;
  width:min(360px,calc(100% - 48px));
  display:flex;
  align-items:center;
  flex-direction:column;
  gap:11px;
  color:var(--ink);
  text-align:center;
  opacity:0;
  transform:translate3d(-50%,18px,0);
  will-change:transform,opacity;
}
.portfolio-v10 .entry-arrival span{
  color:var(--blue);
  font:550 9px/1 "IBM Plex Mono",monospace;
  letter-spacing:.12em;
}
.portfolio-v10 .entry-arrival strong{
  font:650 clamp(1.35rem,2.4vw,1.9rem)/1.1 "Manrope",sans-serif;
  letter-spacing:-.04em;
}
.portfolio-v10 .entry-arrival i{width:42px;height:2px;background:var(--blue)}
.portfolio-v10 .entry-whiteout{
  z-index:4;
  background:radial-gradient(ellipse at 50% 48%,rgba(255,255,255,.98) 0 28%,rgba(239,249,253,.76) 56%,rgba(218,237,247,.08) 82%);
  filter:blur(8px);
  opacity:0;
}
.portfolio-v10 .entry-interface{
  position:relative;
  z-index:6;
  width:min(520px,calc(100% - 40px));
  min-height:342px;
  display:flex!important;
  flex-direction:column;
  justify-content:flex-end;
  padding:28px;
  overflow:hidden;
  color:#f8fbff;
  background:rgba(8,24,42,.78);
  border:1px solid rgba(224,240,250,.28);
  border-radius:14px;
  box-shadow:0 28px 80px rgba(12,38,59,.22);
  backdrop-filter:blur(18px) saturate(1.08);
  opacity:0;
  will-change:transform,opacity,filter;
}
.portfolio-v10 .entry-interface::before{
  content:"";
  position:absolute;
  top:0;
  left:0;
  width:100%;
  height:3px;
  background:linear-gradient(90deg,#5a96ff calc(var(--entry-progress)*100%),rgba(255,255,255,.14) 0);
}
.portfolio-v10 .entry-interface-meta{
  position:absolute;
  top:24px;
  left:28px;
  right:28px;
  display:flex;
  justify-content:space-between;
  align-items:center;
  color:rgba(236,246,253,.72);
  font:500 9px/1 "IBM Plex Mono",monospace;
  letter-spacing:.08em;
}
.portfolio-v10 .entry-interface-meta b{
  color:#fff;
  font-weight:600;
}
.portfolio-v10 .entry-interface>p{
  margin:0 0 12px;
  color:#8db5f7;
  font:550 9px/1.4 "IBM Plex Mono",monospace;
  letter-spacing:.09em;
}
.portfolio-v10 .entry-interface h2{
  margin:0;
  color:#fff;
  font:620 clamp(3rem,5.2vw,4.6rem)/.88 "Manrope",sans-serif;
  letter-spacing:-.07em;
  word-spacing:.05em;
  text-wrap:balance;
}
.portfolio-v10 .entry-progress{
  height:1px;
  margin:28px 0 17px;
  overflow:hidden;
  background:rgba(255,255,255,.18);
}
.portfolio-v10 .entry-progress i{
  display:block;
  width:100%;
  height:100%;
  background:#7ca8ff;
  transform:scaleX(var(--entry-progress));
  transform-origin:left;
}
.portfolio-v10 .entry-interface-footer{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:16px;
}
.portfolio-v10 .entry-interface-footer strong,
.portfolio-v10 .entry-interface-footer small{
  font:500 9px/1.4 "IBM Plex Mono",monospace;
}
.portfolio-v10 .entry-interface-footer strong{color:#fff;letter-spacing:.08em}
.portfolio-v10 .entry-interface-footer small{color:rgba(236,246,253,.58);text-align:right}
@keyframes cloud-pass-drift{from{translate:-.7% .3%}to{translate:.7% -.4%}}

@media(max-width:760px){
  .portfolio-v10 .cloud-entry{height:172svh;min-height:0}
  .portfolio-v10 .cloud-entry-sticky{padding:72px 0 30px}
  .portfolio-v10 .entry-cloud{inset:-30%}
  .portfolio-v10 .entry-interface{
    width:calc(100% - 32px);
    min-height:318px;
    padding:23px 21px;
    border-radius:12px;
  }
  .portfolio-v10 .entry-interface-meta{top:21px;left:21px;right:21px}
  .portfolio-v10 .entry-interface h2{font-size:clamp(2.9rem,13vw,4rem)}
  .portfolio-v10 .entry-progress{margin:24px 0 15px}
  .portfolio-v10 .entry-interface-footer{align-items:flex-start;flex-direction:column;gap:6px}
  .portfolio-v10 .entry-interface-footer small{text-align:left}
}

@media(prefers-reduced-motion:reduce){
  .portfolio-v10 .entry-interface{opacity:1!important;transform:none!important;filter:none!important}
  .portfolio-v10 .entry-arrival{display:none!important}
  .portfolio-v10 .entry-cloud{animation:none!important}
}

/* Keep the operating-system cursor available when the decorative cursor is disabled. */
@media (hover:hover) and (pointer:fine){
  body.portfolio-v10{cursor:default!important}
  body.portfolio-v10 a,
  body.portfolio-v10 button,
  body.portfolio-v10 summary,
  body.portfolio-v10 label,
  body.portfolio-v10 [role="button"]{cursor:pointer!important}
  body.portfolio-v10 input,
  body.portfolio-v10 textarea{cursor:text!important}
}

/* Light-surface contract: override legacy dark panels without weakening text contrast. */
body.portfolio-v10 .experience-secondary article{
  color:var(--ink);
  background:var(--white);
  border-color:var(--line);
}
body.portfolio-v10 .projects-v3 article{
  color:var(--ink);
  background:var(--white);
  border-color:var(--line);
}
body.portfolio-v10 .projects-v3 article.project-featured{
  color:#fff;
  border-color:var(--navy);
}
body.portfolio-v10 .project-card h3 br{display:block}
body.portfolio-v10 .project-small small,
body.portfolio-v10 .measured span{color:var(--muted)}
body.portfolio-v10 dialog.case-study{
  color:var(--ink);
  background:var(--white);
  border-color:var(--line);
  font-family:"Manrope",sans-serif;
}
body.portfolio-v10 dialog.case-study .case-architecture,
body.portfolio-v10 dialog.case-study .incident-replay{
  color:var(--ink);
  background:#f8fafc;
  border-color:var(--line);
}
body.portfolio-v10 dialog.case-study .case-architecture h3,
body.portfolio-v10 dialog.case-study .incident-heading h3,
body.portfolio-v10 dialog.case-study .case-grid h3{
  font-family:"Manrope",sans-serif;
}
body.portfolio-v10 dialog.case-study .incident-heading button{
  color:var(--ink);
  background:var(--white);
  border-color:var(--line2);
}
body.portfolio-v10 dialog.case-study .incident-heading button:first-child{
  color:#fff;
  background:var(--blue);
  border-color:var(--blue);
}

/* Professional polish v12: tighter hierarchy, calmer surfaces and stronger reading rhythm. */
body.portfolio-v10{
  --radius:6px;
  --shadow:0 10px 32px rgba(15,23,42,.055);
  --shadow2:0 18px 44px rgba(15,23,42,.085);
}

html:not([data-page="landing"]) body.portfolio-v10 .section-shell{
  padding-top:clamp(54px,5.5vw,76px);
  padding-bottom:clamp(74px,7vw,104px);
}

body.portfolio-v10 .page-heading{
  grid-template-columns:minmax(0,1fr) minmax(250px,330px);
  gap:22px clamp(34px,5vw,72px);
  padding:6px 0 38px;
}

body.portfolio-v10 .page-heading h2{
  max-width:12ch;
  font-size:clamp(3rem,4.8vw,4.7rem);
  line-height:.98;
  letter-spacing:-.06em;
}

body.portfolio-v10 .page-heading>span{
  max-width:31ch;
  font-size:15px;
  line-height:1.62;
}

/* Cloud hub: compact introduction followed by an editorial service index. */
html[data-page="cloud"] body.portfolio-v10 .cloud-hub,
html[data-page="landing"] body.portfolio-v10 .cloud-hub{
  padding-top:clamp(64px,6vw,88px);
}

body.portfolio-v10 .hub-person{
  grid-template-columns:minmax(0,1.2fr) minmax(300px,.62fr);
  gap:clamp(44px,6vw,88px);
  padding-bottom:40px;
}

body.portfolio-v10 .hub-person h2{
  max-width:9ch;
  font-size:clamp(3.8rem,6vw,5.9rem);
  line-height:.91;
}

body.portfolio-v10 .service-grid.hub-v3{
  gap:10px;
  margin-top:18px;
}

body.portfolio-v10 .hub-v3 .service-module{
  min-height:190px;
  padding:24px;
  border-radius:6px;
  box-shadow:none;
}

body.portfolio-v10 .hub-v3 .module-projects{
  min-height:266px;
}

body.portfolio-v10 .hub-v3 .service-module h3{
  font-size:clamp(1.65rem,2.35vw,2.35rem);
}

body.portfolio-v10 .hub-v3 .service-module p{
  font-size:14px;
  line-height:1.58;
}

/* About: a restrained identity dossier with readable supporting evidence. */
body.portfolio-v10 .identity-layout.about-v3{
  grid-template-columns:minmax(250px,292px) minmax(0,1fr);
  gap:clamp(44px,6vw,82px);
  margin-top:40px;
}

body.portfolio-v10 .identity-card{
  border-radius:6px;
  box-shadow:none;
}

body.portfolio-v10 .identity-card-no-photo .identity-name{
  min-height:190px;
  padding:24px;
}

body.portfolio-v10 .identity-name strong{
  font-size:48px;
}

body.portfolio-v10 .identity-copy section{
  grid-template-columns:118px minmax(0,1fr);
  gap:24px;
  padding:22px 0;
}

body.portfolio-v10 .identity-copy p{
  max-width:62ch;
  font-size:15px;
  line-height:1.72;
}

body.portfolio-v10 .identity-copy .large-copy{
  max-width:30ch;
  font-size:clamp(1.55rem,2.3vw,2.3rem);
  line-height:1.24;
}

body.portfolio-v10 .identity-copy>.button{
  margin-left:142px;
}

/* Experience: clearer timeline, denser evidence and fewer dashboard-like boxes. */
body.portfolio-v10 .experience-timeline,
body.portfolio-v10 .projects-v3,
body.portfolio-v10 .credential-groups,
body.portfolio-v10 .stack-console,
body.portfolio-v10 .security-clarity,
body.portfolio-v10 .journey-v3{
  margin-top:38px;
}

body.portfolio-v10 .role{
  grid-template-columns:150px minmax(0,1fr);
}

body.portfolio-v10 .role-main{
  padding:28px 0 32px 36px;
}

body.portfolio-v10 .role-main>p:not(:first-child){
  font-size:15px;
  line-height:1.7;
}

body.portfolio-v10 .impact-grid div,
body.portfolio-v10 .achievement,
body.portfolio-v10 .leadership{
  border-radius:6px;
  box-shadow:none;
}

body.portfolio-v10 .leadership li,
body.portfolio-v10 .achievement p{
  font-size:13px;
  line-height:1.55;
}

/* Projects: one cinematic feature, supporting work presented as an ordered archive. */
body.portfolio-v10 .project-featured{
  border-radius:6px;
  box-shadow:0 18px 48px rgba(12,23,40,.14);
}

body.portfolio-v10 .project-copy{
  padding:clamp(34px,4.2vw,52px);
}

body.portfolio-v10 .project-copy>p:first-child{
  margin-bottom:32px;
}

body.portfolio-v10 .project-copy h3{
  font-size:clamp(2.8rem,4.5vw,4.45rem);
  line-height:.95;
}

body.portfolio-v10 .project-copy>p:not(:first-child){
  font-size:15px;
  line-height:1.68;
}

body.portfolio-v10 .project-priority-grid,
body.portfolio-v10 .project-secondary-grid{
  gap:10px;
  margin-top:10px;
}

body.portfolio-v10 .project-card{
  min-height:328px;
  padding:26px;
  border-radius:6px;
  box-shadow:none;
}

body.portfolio-v10 .project-card h3{
  margin-top:38px;
  font-size:clamp(1.8rem,2.5vw,2.45rem);
}

body.portfolio-v10 .project-card>p:not(:first-child){
  font-size:14px;
  line-height:1.65;
}

body.portfolio-v10 .project-small{
  min-height:210px;
  padding:22px;
  border-radius:6px;
  box-shadow:none;
}

body.portfolio-v10 .project-small p{
  font-size:13px;
}

body.portfolio-v10 .project-small small{
  font-size:10px;
  line-height:1.5;
}

/* Shared tool surfaces use the same quiet geometry. */
body.portfolio-v10 .stack-console,
body.portfolio-v10 .security-clarity,
body.portfolio-v10 .credential-group,
body.portfolio-v10 .lab-grid article,
body.portfolio-v10 .resume-card{
  border-radius:6px;
  box-shadow:none;
}

body.portfolio-v10 .stack-tech{
  border-radius:4px;
}

body.portfolio-v10 .lab-grid p,
body.portfolio-v10 .journey-v3 p,
body.portfolio-v10 .resume-card p{
  font-size:13px;
}

body.portfolio-v10 .credential-group li b{
  font-size:13px;
}

/* Privacy prompt remains clear without taking over the page. */
body.portfolio-v10 .analytics-consent{
  width:min(410px,calc(100vw - 32px));
  gap:18px;
  padding:18px;
  border-radius:6px;
  font-family:"Manrope",sans-serif;
}

body.portfolio-v10 .analytics-consent strong{
  font-family:"Manrope",sans-serif;
}

body.portfolio-v10 .analytics-consent span,
body.portfolio-v10 .analytics-consent button{
  font-family:"IBM Plex Mono",monospace;
}

@media(max-width:760px){
  body.portfolio-v10{--radius:6px}
  html:not([data-page="landing"]) body.portfolio-v10 .section-shell{
    padding-top:44px;
    padding-bottom:68px;
  }
  body.portfolio-v10 .page-heading{
    padding-bottom:28px;
  }
  body.portfolio-v10 .page-heading h2{
    max-width:10ch;
    margin-top:26px;
    font-size:clamp(2.55rem,11vw,3.45rem);
    line-height:1;
  }
  body.portfolio-v10 .page-heading>span{
    max-width:34ch;
    margin-top:14px;
    font-size:14px;
  }
  html[data-page="cloud"] body.portfolio-v10 .cloud-hub,
  html[data-page="landing"] body.portfolio-v10 .cloud-hub{
    padding-top:48px;
  }
  body.portfolio-v10 .hub-person h2{
    max-width:8ch;
    font-size:clamp(3.15rem,14vw,4.2rem);
  }
  body.portfolio-v10 .hub-v3 .service-module,
  body.portfolio-v10 .hub-v3 .module-projects{
    min-height:176px;
    padding:21px;
  }
  body.portfolio-v10 .hub-v3 .module-projects{min-height:210px}
  body.portfolio-v10 .identity-layout.about-v3{margin-top:28px}
  body.portfolio-v10 .identity-card-no-photo .identity-name{min-height:170px}
  body.portfolio-v10 .identity-copy{margin-top:30px}
  body.portfolio-v10 .identity-copy section{padding:20px 0}
  body.portfolio-v10 .identity-copy .large-copy{
    font-size:clamp(1.35rem,6vw,1.75rem);
    line-height:1.3;
  }
  body.portfolio-v10 .identity-copy p{font-size:14px}
  body.portfolio-v10 .project-copy h3{font-size:38px}
  body.portfolio-v10 .project-copy>p:not(:first-child){font-size:14px}
  body.portfolio-v10 .threat-map{min-height:410px}
  body.portfolio-v10 .project-card{
    min-height:292px;
    padding:22px;
  }
  body.portfolio-v10 .project-card h3{
    margin-top:32px;
    font-size:31px;
  }
  body.portfolio-v10 .project-small{min-height:184px}
  body.portfolio-v10 .credential-group li b{font-size:12px}
  body.portfolio-v10 .analytics-consent{
    right:12px;
    bottom:12px;
    width:calc(100vw - 24px);
    gap:13px;
    padding:15px;
  }
  body.portfolio-v10 .analytics-consent>div:last-child{grid-template-columns:1fr 1fr}
}

@media(max-width:390px){
  body.portfolio-v10 .page-heading h2{font-size:40px}
  body.portfolio-v10 .identity-card dl{grid-template-columns:1fr}
  body.portfolio-v10 .identity-card dl div:nth-child(odd){border-right:0}
  body.portfolio-v10 .project-copy h3{font-size:35px}
  body.portfolio-v10 .analytics-consent>div:last-child{grid-template-columns:1fr}
}
