/* ============ Tokens — Corporate Energy: white, navy hero, orange highlights ============ */
:root{
  --bg:#fff; --panel:#f3f6f9; --panel-2:#e6ecf2; --line:#dfe6ee;
  --text:#0b2545; --soft:#34495e; --muted:#6b7c8f;
  --accent:#e8742a; --accent-ink:#fff; --amber:#c98a12;
  --display:"Sora",sans-serif; --body:"Sora",sans-serif; --latin-display:"Sora",sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,monospace;
  --band:linear-gradient(90deg,var(--accent),var(--amber));
  --radius:10px; --shadow:0 1px 2px rgba(11,37,69,.06),0 12px 28px -16px rgba(11,37,69,.25);
  --derrick-op:.14;
}
:lang(ar){--display:"Almarai",sans-serif; --body:"Almarai",sans-serif}
.hero,.contact{--bg:#0b2545; --text:#fff; --soft:#c5d1de; --muted:#8fa3ba; --line:#22416a; --panel:#12315a; --panel-2:#1a3b66; background:var(--bg); color:var(--text)}

/* ============ Layout ============ */
:root{--gut:clamp(16px,5vw,56px)}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{background:var(--bg);color:var(--text);font:400 16px/1.6 var(--body);overflow-x:hidden;position:relative}
a{color:inherit;-webkit-tap-highlight-color:transparent}
.wrap{max-width:1180px;margin:0 auto;padding:0 var(--gut)}
.mono{font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase}
.hazard{height:4px;background:var(--band)}
.en{direction:ltr;unicode-bidi:isolate}
.sub{display:block;color:var(--muted);font-family:var(--mono);font-size:12px;letter-spacing:.06em;margin-top:2px}

/* top bar */
.bar{position:sticky;top:0;z-index:40;background:color-mix(in srgb,var(--bg) 86%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.bar .wrap{display:flex;align-items:center;justify-content:space-between;height:56px}
.bar .id{font-family:var(--latin-display);font-weight:800;font-size:20px;letter-spacing:.04em;text-decoration:none}
.bar .id b{color:var(--accent)}
.bar nav{display:flex;gap:22px}
.bar nav a{text-decoration:none;color:var(--muted)}
.bar .right{display:flex;align-items:center;gap:12px}
.bar .cta{display:none;white-space:nowrap}
.lang{text-decoration:none;border:1px solid var(--line);border-radius:var(--radius);padding:6px 10px;color:var(--text)}
@media (max-width:760px){.bar nav{display:none}.bar .cta{display:inline-flex}}

/* hero */
.hero{position:relative;padding:56px 0 40px;overflow:hidden}
.hero .derrick{position:absolute;inset-inline-end:-70px;top:24px;height:min(110%,560px);opacity:var(--derrick-op);stroke:var(--text);stroke-width:1.2;fill:none}
.hero .derrick .mb{fill:var(--accent);stroke:none}
.hero .derrick .crown{fill:var(--text);stroke:none}
.hero-grid{position:relative;display:grid;gap:36px}
.status{display:inline-flex;align-items:center;gap:10px;padding:8px 12px;border:1px solid var(--line);background:var(--panel);border-radius:999px}
.dot{width:8px;height:8px;border-radius:50%;background:#2fb36b;box-shadow:0 0 0 0 rgba(47,179,107,.6);animation:ping 2.2s infinite}
@keyframes ping{70%{box-shadow:0 0 0 10px rgba(47,179,107,0)}100%{box-shadow:0 0 0 0 rgba(47,179,107,0)}}
h1{font-family:var(--display);font-weight:800;line-height:.92;font-size:clamp(60px,16vw,156px);margin:22px 0 18px}
h1 span{display:block}
h1 .last{color:var(--accent)}
.role{font-family:var(--display);font-weight:700;font-size:clamp(20px,4.6vw,28px);line-height:1.25}
.role em{font-style:normal;color:var(--accent)}
.lede{max-width:36ch;color:var(--soft);font-size:clamp(17px,2.4vw,19px);margin-top:14px}
.ctas{display:flex;flex-wrap:wrap;gap:10px;margin-top:28px}
.btn{display:inline-flex;align-items:center;gap:10px;min-height:48px;padding:0 20px;border-radius:var(--radius);border:1px solid var(--line);background:var(--panel);color:var(--text);text-decoration:none;font-weight:600;transition:transform .15s,border-color .15s,filter .15s}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn svg{width:18px;height:18px}

.photo{position:relative;aspect-ratio:4/5;width:min(100%,380px);justify-self:start;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);display:grid;place-items:center;overflow:hidden}
.photo::after{content:"";position:absolute;left:0;right:0;bottom:0;height:10px;background:var(--band)}
.photo picture{position:absolute;inset:0}
.photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 30%}
@media (min-width:900px){
  .hero{padding:88px 0 64px}
  .hero .derrick{height:min(110%,860px);inset-inline-end:2%}
  .hero-grid{grid-template-columns:minmax(0,1fr) clamp(280px,30vw,380px);align-items:end;gap:48px}
  h1{font-size:clamp(72px,9vw,140px)}
  .photo{justify-self:end}
}

/* gauges */
.gauges{display:grid;grid-template-columns:repeat(2,1fr);border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-top:48px}
.gauge{padding-block:22px;padding-inline:0 4px;border-inline-end:1px solid var(--line)}
.gauge:nth-child(2n){border-inline-end:0;padding-inline-start:18px}
.gauge:nth-child(n+3){border-top:1px solid var(--line)}
.gauge .n{font-family:var(--latin-display);font-weight:800;font-size:clamp(44px,9vw,64px);line-height:1}
.gauge .n sup{font-size:.45em;color:var(--accent);vertical-align:top;margin-inline-start:2px}
.gauge .l{color:var(--muted);margin-top:8px}
@media (min-width:900px){
  .gauges{grid-template-columns:repeat(4,1fr)}
  .gauge{padding:28px 24px!important;border-top:0!important;border-inline-end:1px solid var(--line)!important}
  .gauge:first-child{padding-inline-start:0!important}
  .gauge:last-child{border-inline-end:0!important}
}

/* sections */
section.s{padding:72px 0;border-top:1px solid var(--line)}
.s-head{display:flex;align-items:baseline;gap:16px;margin-bottom:36px}
.s-head .num{color:var(--accent)}
h2{font-family:var(--display);font-weight:800;font-size:clamp(36px,7.5vw,68px);line-height:1}
.s-intro{color:var(--soft);max-width:58ch;margin:-14px 0 36px;font-size:17px}

/* career ladder */
.ladder{position:relative;list-style:none;padding-inline-start:34px}
.ladder::before{content:"";position:absolute;inset-inline-start:9px;top:8px;bottom:8px;width:2px;background:var(--line)}
.rung{position:relative;padding:0 0 30px}
.rung:last-child{padding-bottom:0}
.rung::before{content:"";position:absolute;inset-inline-start:-31px;top:8px;width:16px;height:16px;border-radius:calc(var(--radius)/2);background:var(--bg);border:2px solid var(--muted)}
.rung.done::before{background:var(--muted)}
.rung.now::before{background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 6px color-mix(in srgb,var(--accent) 20%,transparent)}
.rung.next::before{border-style:dashed;border-color:var(--amber)}
.rung .t{font-family:var(--display);font-weight:800;font-size:clamp(26px,5.6vw,38px);line-height:1.1}
.rung .meta{color:var(--muted);margin-top:6px}
.rung.now .meta b{color:var(--accent);font-weight:600}
.rung.next .t{color:var(--amber)}
.rung p{color:var(--soft);max-width:60ch;margin-top:8px}
.pill{display:inline-block;padding:3px 8px;border:1px solid currentColor;border-radius:var(--radius);margin-inline-start:8px;vertical-align:middle}

/* skills */
.skills{display:grid;gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.skill{background:var(--panel);padding:26px 22px;transition:background .2s}
.skill .k{color:var(--accent)}
.skill h3{font-family:var(--display);font-weight:800;font-size:26px;line-height:1.15;margin:10px 0}
.skill p{color:var(--soft)}
.skill .ev{margin-top:14px;color:var(--muted)}
@media (min-width:700px){.skills{grid-template-columns:repeat(2,1fr)}}
@media (min-width:1050px){.skills{grid-template-columns:repeat(3,1fr)}}

/* bridge */
.bridge{display:grid;gap:12px}
.row{display:grid;gap:8px;padding:18px;background:var(--panel);border:1px solid var(--line);border-inline-start:3px solid var(--accent);border-radius:var(--radius);box-shadow:var(--shadow)}
.row .from{color:var(--soft)}
.row .arrow{color:var(--accent);font-family:var(--mono)}
.row .to{font-weight:600}
@media (min-width:860px){.row{grid-template-columns:1fr 40px 1fr;align-items:center}.row .arrow{text-align:center}}
.gap{margin-top:44px;display:grid;gap:12px}
.gap h3{font-family:var(--display);font-weight:800;font-size:28px;margin-bottom:6px}
.gap-item{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:16px 0;border-bottom:1px dashed var(--line)}
.st{flex:none;padding:4px 9px;border-radius:var(--radius)}
.st.prog{background:color-mix(in srgb,var(--amber) 16%,transparent);color:var(--amber)}
.st.next{background:var(--panel-2);color:var(--muted)}

/* certs */
.certs{display:grid;gap:10px}
.cert{display:flex;gap:14px;align-items:flex-start;padding:18px;border:1px solid var(--line);background:var(--panel);border-radius:var(--radius);box-shadow:var(--shadow)}
.cert .ic{flex:none;width:38px;height:38px;display:grid;place-items:center;border:1px solid var(--line);border-radius:var(--radius);color:var(--accent);font-family:var(--mono);font-size:12px}
.cert b{display:block;font-weight:600}
.cert span{color:var(--muted);font-size:14px}
.cert.soon{border-style:dashed;border-color:var(--amber)}
.cert.soon .ic{color:var(--amber);border-color:var(--amber)}
/* cards with a PDF behind them: a persistent "View certificate" cue (works on touch), lift + orange edge on hover */
a.cert{text-decoration:none;color:inherit;cursor:pointer;border-inline-start:3px solid var(--accent);transition:opacity .7s ease,transform .7s ease,translate .15s,scale .12s,border-color .15s,box-shadow .15s,background .12s}
a.cert>div{align-self:stretch;display:flex;flex-direction:column}
a.cert>div>:nth-last-child(2){margin-bottom:12px} /* space above the cue, which sits at the card bottom */
.cert .view{display:inline-flex;align-items:center;align-self:flex-start;gap:6px;margin-top:auto;color:var(--accent);font-size:12px;font-weight:600}
.cert .view svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;transition:translate .15s}
a.cert:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
a.cert:active{scale:.98;border-color:var(--accent);background:var(--panel-2)}
/* no PDF behind it: flat, no shadow or orange edge, so it doesn't read as tappable */
div.cert{background:transparent;box-shadow:none}
/* touch screens get no hover, so the cue becomes a real button */
@media (hover:none){.cert .view{min-height:36px;padding:0 14px;border-radius:999px;background:var(--accent);color:var(--accent-ink)}}
@media (min-width:700px){.certs{grid-template-columns:repeat(2,1fr)}}

/* facts */
.facts{display:grid;border-top:1px solid var(--line)}
.fact{display:flex;justify-content:space-between;gap:16px;padding:16px 0;border-bottom:1px solid var(--line)}
.fact .mono{color:var(--muted);padding-top:3px}
.fact div{text-align:end}
.fact small{color:var(--muted)}
@media (min-width:860px){.facts{grid-template-columns:1fr 1fr;column-gap:48px}}

/* contact */
.contact{padding:88px 0 56px;border-top:1px solid var(--line)}
.contact h2{font-size:clamp(46px,11vw,120px);line-height:.95}
.contact h2 em{font-style:normal;color:var(--accent)}
.contact .ctas{margin-top:34px}
footer{padding:28px 0 calc(28px + env(safe-area-inset-bottom));color:var(--muted);border-top:1px solid var(--line)}
footer .wrap{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}

/* reveal */
.rv{opacity:0;transform:translateY(18px);transition:opacity .7s ease,transform .7s ease}
.rv.in{opacity:1;transform:none}
.load>*{animation:up .8s both}
.load>*:nth-child(2){animation-delay:.08s}.load>*:nth-child(3){animation-delay:.16s}.load>*:nth-child(4){animation-delay:.24s}.load>*:nth-child(5){animation-delay:.32s}
@keyframes up{from{opacity:0;transform:translateY(22px)}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}.rv{opacity:1;transform:none}}

/* hover only where a mouse exists; touch gets a press instead */
@media (hover:hover){
  .bar nav a:hover{color:var(--text)}
  .lang:hover{border-color:var(--accent)}
  .btn:hover{transform:translateY(-2px);border-color:var(--muted)}
  .btn.primary:hover{filter:brightness(1.08)}
  .skill:hover{background:var(--bg)}
  a.cert:hover{translate:0 -3px;border-color:var(--accent);box-shadow:0 1px 2px rgba(11,37,69,.06),0 18px 32px -16px rgba(232,116,42,.45)}
  a.cert:hover .view svg{translate:2px -2px}
  :lang(ar) a.cert:hover .view svg{translate:-2px -2px}
}
.btn:active{transform:scale(.96)}

/* ============ Intro: the rig goes up ============ */
/* Tower erects bottom-up in hot orange, then cools into the background. */
.hero .derrick{animation:rig-cool 2.4s ease-out both}
.hero .derrick g{animation:rig-up 1.3s cubic-bezier(.6,0,.2,1) both}
.hero .derrick line{stroke-dasharray:1;animation:rig-draw 1.1s ease-out both}
.hero .derrick .mb,.hero .derrick .crown{transform-box:fill-box;transform-origin:center}
.hero .derrick .mb{animation:rig-pop .5s 1.1s cubic-bezier(.3,1.6,.5,1) both}
.hero .derrick .crown{animation:rig-drop .5s 1.15s cubic-bezier(.3,1.4,.5,1) both}
@keyframes rig-cool{0%,45%{opacity:.7;stroke:var(--accent)}}
@keyframes rig-up{from{clip-path:inset(100% 0 0 0)}to{clip-path:inset(0)}}
@keyframes rig-draw{from{stroke-dashoffset:1}}
@keyframes rig-pop{from{transform:scale(0)}}
@keyframes rig-drop{from{transform:translateY(-40px);opacity:0}}
/* Photo rises out of the floor, settles from a slight zoom, then the band lands. */
.hero .photo:not(.wait){animation:photo-rise 1s .35s cubic-bezier(.7,0,.2,1) backwards}
.hero .photo:not(.wait) img{animation:photo-zoom 1.8s .35s cubic-bezier(.2,.7,.2,1) both}
.hero .photo::after{transform-origin:left}
.hero .photo:not(.wait)::after{animation:band .6s 1.15s cubic-bezier(.7,0,.2,1) both}
:lang(ar) .hero .photo::after{transform-origin:right}
/* On phones the photo sits below the fold: site.js adds .wait and drops it once the photo scrolls in,
   which starts the animations above. Opt-in from JS, so without (or with stale) JS it just plays.
   Hide with opacity, not clip-path: IntersectionObserver treats a fully clipped target as never visible. */
.hero .photo.wait{opacity:0}
@keyframes photo-rise{from{clip-path:inset(100% 0 0 0 round var(--radius))}to{clip-path:inset(0 round var(--radius))}}
@keyframes photo-zoom{from{transform:scale(1.3)}}
@keyframes band{from{transform:scaleX(0)}}
/* Career ladder fills as you scroll down it (progressive: Chrome/Android, Safari 26+). */
@supports (animation-timeline:view()){@media (prefers-reduced-motion:no-preference){
  .ladder::after{content:"";position:absolute;inset-inline-start:9px;top:8px;bottom:8px;width:2px;background:linear-gradient(var(--amber),var(--accent));transform-origin:top;animation:climb linear both;animation-timeline:view();animation-range:entry 40% exit 60%}
  @keyframes climb{from{transform:scaleY(0)}}
}}

/* ============ Arabic ============ */
:lang(ar) body{line-height:1.85}
:lang(ar) .mono:not(.en){font-family:var(--body);letter-spacing:0;text-transform:none;font-size:13px;font-weight:500}
:lang(ar) h1{line-height:1.25;font-size:clamp(54px,14vw,128px);margin:18px 0 10px}
:lang(ar) h2{line-height:1.35}
:lang(ar) .role,:lang(ar) .rung .t,:lang(ar) .skill h3,:lang(ar) .gap h3{line-height:1.5}
:lang(ar) .contact h2{line-height:1.3;font-size:clamp(40px,10vw,100px)}
:lang(ar) .lede{max-width:40ch}
:lang(ar) .sub{font-family:"Sora","Almarai",sans-serif;letter-spacing:.02em;font-size:13px}
@media (min-width:900px){:lang(ar) h1{font-size:clamp(64px,8vw,120px)}}

:lang(ar) .role,:lang(ar) h1,:lang(ar) h2,:lang(ar) h3,:lang(ar) .rung .t{text-transform:none}
