@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@300;400;500;700&display=swap');

*{margin:0;padding:0;box-sizing:border-box}

:root{
  --bg:#050508;
  --bg2:#08080d;
  --surface:#0d0d14;
  --surface2:#111119;
  --border:rgba(255,255,255,0.06);
  --border-h:rgba(255,255,255,0.10);
  --accent:#00e88f;
  --accent-dim:#00c478;
  --accent-bg:rgba(0,232,143,0.05);
  --accent-bg2:rgba(0,232,143,0.08);
  --cyan:#22d3ee;
  --amber:#f59e0b;
  --amber-bg:rgba(245,158,11,0.06);
  --violet:#8b5cf6;
  --rose:#f43f5e;
  --white:#f0f0f5;
  --text:#a1a1b5;
  --text-dim:#5a5a72;
  --mono:'JetBrains Mono',monospace;
  --sans:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;

  /* Layout. Five containers (nav, hero, divider, section, footer) shared the
     same hardcoded 1000px/40px; changing the desktop width meant editing five
     rules and was easy to do incompletely. They read these instead, so a
     breakpoint only has to override :root. The mobile block below still sets
     its own padding — it also needs env(safe-area-inset-*), which does not
     compose into a single custom property. */
  --maxw:1000px;
  --gut:40px;
  /* Width of the prose column. Measured 2026-08-04: the timeline bullets ran
     111 characters per line at 1280px and up, well past the readable 45-85
     range (.hero-desc was already capped at 660px; these were not).
     This caps the *card*, not the text inside it — capping the text left the
     card's border and background running 200px past where the copy stopped,
     which read as a rendering fault rather than a choice. */
  --measure:660px;
}

/* --- LIGHT MODE --- */
[data-theme="light"]{
  --bg:#f8f9fa;
  --bg2:#f0f1f3;
  --surface:#ffffff;
  --surface2:#f5f6f8;
  --border:rgba(0,0,0,0.08);
  --border-h:rgba(0,0,0,0.15);
  --accent:#059669;
  --accent-dim:#047857;
  --accent-bg:rgba(5,150,105,0.06);
  --accent-bg2:rgba(5,150,105,0.10);
  --cyan:#0891b2;
  --amber:#d97706;
  --amber-bg:rgba(217,119,6,0.06);
  --violet:#7c3aed;
  --rose:#e11d48;
  --white:#111827;
  --text:#4b5563;
  --text-dim:#9ca3af;
}

[data-theme="light"] .grain{opacity:0.008}
[data-theme="light"] nav{background:rgba(248,249,250,0.85)}
[data-theme="light"] .glow{background:radial-gradient(circle,rgba(5,150,105,0.05) 0%,transparent 70%)}
[data-theme="light"] .cert-card:hover{box-shadow:0 12px 32px rgba(0,0,0,0.08),0 0 20px rgba(5,150,105,0.08)}
/* White surface on a near-white page reads as nothing; a hairline shadow
   gives the contact buttons an edge without darkening the palette. */
[data-theme="light"] .h-link,
[data-theme="light"] .pdf-btn{box-shadow:0 1px 2px rgba(16,24,40,0.05),0 0 0 1px rgba(16,24,40,0.03)}
[data-theme="light"] .scroll-progress{background:linear-gradient(90deg,#059669,#0891b2)}

html{
  scroll-behavior:smooth;
  /* iOS Safari inflates text on rotation without this. */
  -webkit-text-size-adjust:100%;
  text-size-adjust:100%;
  /* .reveal-right parks full-width sections at translateX(14px) until they
     animate in, which pushed the page 14px wider than the viewport and gave
     every screen under ~1030px a horizontal scrollbar on load. `clip` is used
     over `hidden` because it does not turn the element into a scroll
     container; `hidden` is left first as the fallback for older engines. */
  overflow-x:hidden;
  overflow-x:clip;
}

@keyframes page-fade{
  from{opacity:0}
  to{opacity:1}
}

body{
  /* Pairs with the rule on html; on the root element alone the horizontal
     clip is defeated by the visible vertical axis. */
  overflow-x:hidden;
  overflow-x:clip;
  animation:page-fade 0.6s ease;
  background:var(--bg);
  color:var(--text);
  font-family:var(--sans);
  min-height:100vh;
  -webkit-font-smoothing:antialiased;
  transition:background 0.4s,color 0.4s;
}

::selection{background:rgba(0,232,143,0.15);color:var(--accent)}

/* --- SCROLL PROGRESS --- */
.scroll-progress{
  position:fixed;top:0;left:0;
  height:3px;width:0%;
  background:linear-gradient(90deg,var(--accent),var(--cyan));
  z-index:1001;
  transition:width 0.05s linear;
  border-radius:0 2px 2px 0;
}

/* --- GRAIN OVERLAY --- */
.grain{
  position:fixed;inset:0;pointer-events:none;z-index:1000;
  opacity:0.025;
  background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  background-repeat:repeat;
  transition:opacity 0.4s;
}

/* --- GLOW BLOB --- */
.glow{
  position:fixed;
  width:600px;height:600px;
  border-radius:50%;
  background:radial-gradient(circle,rgba(0,232,143,0.04) 0%,transparent 70%);
  pointer-events:none;
  z-index:0;
  transition:transform 0.3s ease-out;
  top:-300px;left:-300px;
}

/* --- NAV --- */
nav{
  position:fixed;top:0;left:0;right:0;z-index:100;
  background:rgba(5,5,8,0.8);
  backdrop-filter:blur(20px) saturate(1.2);
  border-bottom:1px solid var(--border);
  transition:background 0.4s;
}

.nav-inner{
  max-width:var(--maxw);margin:0 auto;
  display:flex;align-items:center;justify-content:space-between;
  height:60px;padding:0 var(--gut);
}

.nav-brand{
  font-family:var(--mono);font-size:0.82rem;font-weight:700;
  color:var(--accent);text-decoration:none;
  display:flex;align-items:center;gap:8px;
}

.nav-brand .bar{
  width:3px;height:16px;background:var(--accent);border-radius:2px;
  animation:nav-pulse 2s ease-in-out infinite;
}

@keyframes nav-pulse{
  0%,100%{opacity:1}
  50%{opacity:0.3}
}

.nav-right{display:flex;align-items:center;gap:16px}

.nav-links{display:flex;gap:8px;list-style:none}

.nav-links a{
  font-size:0.8rem;color:var(--text);text-decoration:none;
  padding:8px 14px;border-radius:6px;
  transition:all 0.2s;letter-spacing:0.3px;
}

.nav-links a:hover{color:var(--white);background:rgba(255,255,255,0.04)}

.nav-links a.active{
  color:var(--accent);
  background:var(--accent-bg);
}

/* --- TOGGLE BUTTONS --- */
.nav-toggles{
  display:flex;align-items:center;gap:4px;
}

.toggle-btn{
  font-family:var(--mono);font-size:0.68rem;
  color:var(--text);
  background:none;border:1px solid var(--border);
  border-radius:6px;padding:5px 10px;
  cursor:pointer;transition:all 0.25s;
  letter-spacing:0.3px;line-height:1;
}

.toggle-btn:hover{
  color:var(--accent);border-color:var(--accent);
  background:var(--accent-bg);
}

.toggle-btn.active{
  color:var(--accent);border-color:rgba(0,232,143,0.25);
  background:var(--accent-bg);
}

.toggle-btn svg{
  width:14px;height:14px;stroke:currentColor;fill:none;
  stroke-width:2;stroke-linecap:round;stroke-linejoin:round;
  vertical-align:-2px;
}

/* Only exists below the responsive breakpoint; the links sit in the bar
   itself on wider screens. */
.menu-btn{display:none}

/* --- HERO --- */
.hero{
  max-width:var(--maxw);margin:0 auto;
  padding:160px var(--gut) 100px;
  position:relative;z-index:1;
}

.hero-tag{
  font-family:var(--mono);font-size:0.78rem;
  color:var(--accent);letter-spacing:3px;text-transform:uppercase;
  margin-bottom:28px;
  display:flex;align-items:center;gap:10px;
}

.hero-tag .dot{
  width:6px;height:6px;background:var(--accent);border-radius:50%;
  box-shadow:0 0 12px rgba(0,232,143,0.4);
  animation:dot-glow 2.5s ease-in-out infinite;
}

@keyframes dot-glow{
  0%,100%{box-shadow:0 0 12px rgba(0,232,143,0.4)}
  50%{box-shadow:0 0 24px rgba(0,232,143,0.15)}
}

.hero-row{
  display:flex;align-items:center;gap:28px;
  margin-bottom:28px;
}

.avatar{
  width:128px;height:128px;
  border-radius:50%;
  border:2.5px solid var(--accent);
  object-fit:cover;
  flex-shrink:0;
  box-shadow:0 0 30px rgba(0,232,143,0.15),0 0 60px rgba(0,232,143,0.05);
}

.hero h1{
  font-size:clamp(3rem,7vw,4.5rem);font-weight:800;
  color:var(--white);letter-spacing:-2.5px;line-height:1.05;
  margin-bottom:0;
  min-height:1.1em;
}

/* --- TYPEWRITER --- */
.typewriter-cursor{
  display:inline-block;
  width:3px;height:0.9em;
  background:var(--accent);
  margin-left:4px;
  vertical-align:baseline;
  animation:blink-cursor 0.75s step-end infinite;
}

@keyframes blink-cursor{
  0%,100%{opacity:1}
  50%{opacity:0}
}

.hero-desc{
  font-size:1.18rem;color:var(--text);line-height:1.8;
  max-width:660px;font-weight:300;
}

.hero-contacts{
  margin-top:36px;display:flex;flex-wrap:wrap;gap:10px;
}

.h-link{
  display:inline-flex;align-items:center;gap:9px;
  font-family:var(--mono);font-size:0.82rem;
  color:var(--text);text-decoration:none;
  padding:12px 22px;
  border:1px solid var(--border);border-radius:10px;
  transition:all 0.25s;
  background:var(--surface);
}

.h-link:hover{
  border-color:var(--accent);color:var(--accent);
  background:var(--accent-bg);
  box-shadow:0 0 20px rgba(0,232,143,0.06);
  transform:translateY(-1px);
}

.h-link svg,.pdf-btn svg{
  width:17px;height:17px;flex-shrink:0;
  fill:currentColor;stroke:none;
}

/* --- DIVIDER --- */
.divider{
  max-width:var(--maxw);margin:0 auto;padding:0 var(--gut);
}

.divider-line{
  height:1px;
  background:linear-gradient(90deg,transparent,var(--border-h),transparent);
}

/* --- SECTIONS --- */
.section{
  max-width:var(--maxw);margin:0 auto;
  padding:80px var(--gut);
  position:relative;z-index:1;
}

.section-head{
  margin-bottom:44px;
  display:flex;align-items:center;gap:18px;
}

.section-num{
  font-family:var(--mono);font-size:0.78rem;
  color:var(--accent);font-weight:600;
  padding:6px 14px;
  border:1px solid rgba(0,232,143,0.2);border-radius:8px;
  background:var(--accent-bg);
}

.section-title{
  font-size:0.82rem;text-transform:uppercase;letter-spacing:4px;
  color:var(--text-dim);font-weight:500;
}

.section-line{flex:1;height:1px;background:var(--border)}

/* --- TIMELINE CARDS --- */
.timeline{position:relative;padding-left:28px}

.timeline::before{
  content:'';position:absolute;left:0;top:8px;bottom:8px;
  width:1px;
  background:linear-gradient(180deg,var(--accent),var(--border),transparent);
}

.t-card{
  background:var(--surface);
  border:1px solid var(--border);border-radius:14px;
  padding:32px;margin-bottom:20px;
  transition:all 0.3s;position:relative;
  box-shadow:0 2px 8px rgba(0,0,0,0.1);
  /* Only binds above ~740px viewport; below that the card is already
     narrower than this and the mobile padding governs. */
  max-width:var(--measure);
}

.t-card::before{
  content:'';position:absolute;
  left:-32px;top:36px;
  width:10px;height:10px;border-radius:50%;
  background:var(--bg);border:2px solid var(--accent);
  transition:all 0.3s;
}

.t-card:hover{
  border-color:var(--border-h);
  background:var(--surface2);
  transform:translateX(4px);
}

.t-card:hover::before{
  background:var(--accent);
  box-shadow:0 0 12px rgba(0,232,143,0.3);
}

.t-top{
  display:flex;justify-content:space-between;align-items:flex-start;
  gap:16px;margin-bottom:6px;flex-wrap:wrap;
}

.t-title{font-size:1.15rem;font-weight:600;color:var(--white)}

.t-date{
  font-family:var(--mono);font-size:0.75rem;
  color:var(--text-dim);white-space:nowrap;
  padding:5px 12px;border-radius:6px;
  background:rgba(255,255,255,0.03);
}

.t-org{font-size:0.9rem;color:var(--text-dim);margin-bottom:18px}

.t-items{list-style:none;padding:0}

.t-items li{
  font-size:0.92rem;color:var(--text);line-height:1.75;
  padding:6px 0 6px 22px;position:relative;font-weight:300;
}

.t-items li::before{
  content:'';position:absolute;left:2px;top:13px;
  width:6px;height:1px;background:var(--accent);
}

/* --- BADGES --- */
.badge{
  display:inline-flex;align-items:center;gap:6px;
  font-family:var(--mono);font-size:0.74rem;
  padding:6px 14px;border-radius:20px;
  letter-spacing:0.3px;font-weight:500;
}

/* The distinction line inside a timeline card ("top 20 out of ...").
   It was a grey stadium pill: 20px radius, white-on-white, hollow outline
   star. At one line that passes; the moment it wrapped to two on a phone the
   rounded ends and flat fill read as a disabled text input, not an award.

   Amber is not a new colour here — .cert-issuer.garanti already uses
   var(--amber), so this is the palette the "gold" class name was always
   pointing at and never actually used. */
.badge.gold{
  align-items:flex-start;
  gap:9px;
  padding:10px 15px 10px 13px;
  /* 10px, not 20px: a stadium shape only reads as intentional while the
     content is one line. This wraps to two on every phone. */
  border-radius:10px;
  border:1px solid rgba(245,158,11,0.22);
  border-left:2px solid var(--amber);
  background:linear-gradient(90deg,rgba(245,158,11,0.11),rgba(245,158,11,0.02));
  color:#fbbf24;
  line-height:1.55;
  text-wrap:pretty;
}
[data-theme="light"] .badge.gold{
  color:#92400e;
  border:1px solid rgba(180,83,9,0.22);
  border-left:2px solid #b45309;
  background:linear-gradient(90deg,rgba(245,158,11,0.16),rgba(245,158,11,0.03));
}
.badge.green{background:var(--accent-bg);color:var(--accent);border:1px solid rgba(0,232,143,0.15)}

.badge svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2}
/* Solid, and pinned to the first line rather than the centre of the box —
   centred, it floated beside the gap between two wrapped lines. */
.badge.gold svg{
  width:13px;height:13px;
  fill:var(--amber);stroke:none;
  flex:0 0 auto;margin-top:3px;
}
[data-theme="light"] .badge.gold svg{fill:#b45309}

/* The badge is the whole content of its <li>, so the list's own dash sat to
   its left as a second marker. Drop it and keep the indent, so the badge
   still lines up with the text of the bullets around it. */
.t-items li:has(> .badge)::before{display:none}

/* --- PROJECT CARD --- */
.proj-card{
  background:var(--surface);
  border:1px solid var(--border);border-radius:14px;
  padding:36px;transition:all 0.3s;
  position:relative;overflow:hidden;
  box-shadow:0 2px 8px rgba(0,0,0,0.1);
}

/* The section holds more than one card now, and .proj-card carries no margin
   of its own — without this the cards would sit flush against each other. */
.proj-card + .proj-card{margin-top:16px}

.proj-card::after{
  content:'';position:absolute;top:0;left:0;right:0;
  height:2px;
  background:linear-gradient(90deg,var(--accent),var(--cyan),var(--accent));
  background-size:200% 100%;
  animation:shimmer 4s linear infinite;
  opacity:0;transition:opacity 0.3s;
}

.proj-card:hover::after{opacity:1}

.proj-card:hover{
  border-color:var(--border-h);
  background:var(--surface2);
}

@keyframes shimmer{
  0%{background-position:-200% 0}
  100%{background-position:200% 0}
}

.proj-badges{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 16px}

.proj-links{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}

.proj-link{
  font-family:var(--mono);font-size:0.72rem;
  color:var(--accent);text-decoration:none;
  padding:6px 14px;
  border:1px solid rgba(0,232,143,0.15);border-radius:8px;
  transition:all 0.25s;display:inline-flex;align-items:center;gap:6px;
}

.proj-link:hover{
  background:var(--accent-bg);border-color:var(--accent);
  transform:translateY(-1px);
  box-shadow:0 4px 12px rgba(0,232,143,0.08);
}

.proj-link svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2}

/* --- CERTS GRID --- */
.certs-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(260px,1fr));
  gap:12px;
}

.cert-card{
  background:var(--surface);
  border:1px solid var(--border);border-radius:14px;
  padding:24px 26px;
  transition:all 0.35s cubic-bezier(0.25,0.46,0.45,0.94);
  display:flex;flex-direction:column;gap:12px;
  position:relative;overflow:hidden;
  box-shadow:0 2px 8px rgba(0,0,0,0.1);
}

.cert-card:hover{
  border-color:var(--border-h);background:var(--surface2);
  transform:translateY(-6px) scale(1.02);
  box-shadow:0 16px 40px rgba(0,0,0,0.3),0 0 24px rgba(0,232,143,0.06);
}

.cert-card::before{
  content:'';position:absolute;top:0;left:0;
  width:100%;height:2px;
  background:var(--border);
  transition:background 0.3s;
}

.cert-card:hover::before{
  background:linear-gradient(90deg,var(--accent),var(--cyan));
}

.cert-issuer{
  font-family:var(--mono);font-size:0.72rem;
  text-transform:uppercase;letter-spacing:2px;
  font-weight:500;
}

.cert-issuer.wiz{color:var(--accent)}
.cert-issuer.udemy{color:var(--violet)}
.cert-issuer.cisco{color:var(--cyan)}
.cert-issuer.thm{color:var(--rose)}
.cert-issuer.garanti{color:var(--amber)}

.cert-name{
  font-size:0.95rem;font-weight:500;color:var(--white);
  line-height:1.45;
}

.cert-date{
  font-family:var(--mono);font-size:0.74rem;
  color:var(--text-dim);
}

.cert-skills{
  display:flex;flex-wrap:wrap;gap:4px;margin-top:2px;
}

.cert-skill{
  font-size:0.74rem;color:var(--text-dim);
  padding:3px 10px;
  border:1px solid var(--border);border-radius:5px;
  font-weight:300;
}

/* --- SKILLS --- */
.skills-grid{
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:12px;
}

.sk-card{
  background:var(--surface);
  border:1px solid var(--border);border-radius:14px;
  padding:28px;transition:all 0.3s;
  box-shadow:0 2px 8px rgba(0,0,0,0.1);
}

.sk-card:hover{border-color:var(--border-h);background:var(--surface2)}

.sk-label{
  font-family:var(--mono);font-size:0.76rem;
  text-transform:uppercase;letter-spacing:2.5px;
  margin-bottom:16px;font-weight:500;
}

.sk-label.sec{color:var(--accent)}
.sk-label.tool{color:var(--cyan)}
.sk-label.sys{color:var(--violet)}
.sk-label.prog{color:var(--amber)}

.sk-tags{display:flex;flex-wrap:wrap;gap:6px}

.sk-tag{
  font-size:0.86rem;color:var(--text);
  padding:7px 16px;
  border:1px solid var(--border);border-radius:8px;
  font-weight:300;transition:all 0.2s;
  background:rgba(255,255,255,0.01);
}

.sk-tag:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-bg);box-shadow:0 0 12px rgba(0,232,143,0.06)}

/* --- FOOTER --- */
footer{
  max-width:var(--maxw);margin:0 auto;
  padding:56px var(--gut) 72px;
  text-align:center;
  position:relative;z-index:1;
}

.footer-line{
  height:1px;margin-bottom:40px;
  background:linear-gradient(90deg,transparent,var(--border-h),transparent);
}

.footer-name{
  font-family:var(--mono);font-size:0.85rem;
  color:var(--text-dim);margin-bottom:14px;
}

.footer-copy{
  font-size:0.76rem;color:var(--text-dim);
  opacity:0.5;
}

.footer-copy a{color:var(--accent);text-decoration:none;border-bottom:1px dashed rgba(0,232,143,0.3)}
.footer-copy a:hover{border-bottom-color:var(--accent)}

/* --- BACK TO TOP --- */
.back-to-top{
  position:fixed;bottom:32px;right:32px;
  width:44px;height:44px;
  border-radius:50%;border:1px solid var(--border);
  background:var(--surface);
  color:var(--text-dim);
  cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  z-index:99;
  opacity:0;pointer-events:none;
  transform:translateY(10px);
  transition:all 0.3s;
}

.back-to-top.visible{
  opacity:1;pointer-events:auto;
  transform:translateY(0);
}

.back-to-top:hover{
  border-color:var(--accent);color:var(--accent);
  background:var(--accent-bg);
  box-shadow:0 0 20px rgba(0,232,143,0.08);
}

.back-to-top svg{
  width:18px;height:18px;stroke:currentColor;fill:none;
  stroke-width:2;stroke-linecap:round;stroke-linejoin:round;
}

/* --- PDF DOWNLOAD --- */
.pdf-btn{
  display:inline-flex;align-items:center;gap:9px;
  font-family:var(--mono);font-size:0.82rem;
  color:var(--text);text-decoration:none;
  padding:12px 22px;
  border:1px solid var(--border);border-radius:10px;
  transition:all 0.25s;
  background:var(--surface);
  cursor:pointer;
}

.pdf-btn:hover{
  border-color:var(--accent);color:var(--accent);
  background:var(--accent-bg);
  box-shadow:0 0 20px rgba(0,232,143,0.06);
  transform:translateY(-1px);
}

/* Icon sizing and fill live in the shared .h-link svg,.pdf-btn svg rule. */

/* --- SCROLL REVEAL --- */
.reveal{
  opacity:0;transform:translateY(12px);
  transition:opacity 0.5s ease,transform 0.5s ease;
}

.reveal-left{
  opacity:0;transform:translateX(-14px);
  transition:opacity 0.5s ease,transform 0.5s ease;
}

.reveal-right{
  opacity:0;transform:translateX(14px);
  transition:opacity 0.5s ease,transform 0.5s ease;
}

.reveal-scale{
  opacity:0;transform:scale(0.97);
  transition:opacity 0.5s ease,transform 0.5s ease;
}

.reveal.visible,
.reveal-left.visible,
.reveal-right.visible,
.reveal-scale.visible{
  opacity:1;transform:none;
}

.stagger-1{transition-delay:0.03s}
.stagger-2{transition-delay:0.06s}
.stagger-3{transition-delay:0.09s}
.stagger-4{transition-delay:0.12s}
.stagger-5{transition-delay:0.15s}
.stagger-6{transition-delay:0.18s}
.stagger-7{transition-delay:0.21s}

/* --- HACKER TERMINAL EASTER EGG --- */
.hacker-terminal{
  position:fixed;inset:0;z-index:9999;
  background:rgba(0,0,0,0);
  display:flex;align-items:center;justify-content:center;
  opacity:0;transition:all 0.5s;
}

.hacker-terminal.active{
  background:rgba(0,0,0,0.95);
  opacity:1;
}

.ht-screen{
  width:min(700px,90vw);
  max-height:80vh;
  overflow-y:auto;
  padding:32px;
  font-family:'JetBrains Mono',monospace;
  font-size:clamp(0.72rem,2vw,0.88rem);
  line-height:1.8;
  color:#00e88f;
  text-shadow:0 0 8px rgba(0,232,143,0.4);
  border:1px solid rgba(0,232,143,0.15);
  border-radius:12px;
  background:rgba(5,5,8,0.9);
  box-shadow:0 0 60px rgba(0,232,143,0.08),inset 0 0 60px rgba(0,0,0,0.5);
}

.ht-screen::-webkit-scrollbar{width:4px}
.ht-screen::-webkit-scrollbar-thumb{background:rgba(0,232,143,0.2);border-radius:2px}

.ht-line{white-space:pre;min-height:1.8em}

/* --- TOUCH / MOBILE BASE --- */
/* Applies on any touch device, not just narrow ones. */
@media(hover:none){
  /* Kill the grey flash iOS/Android paint over tapped links. */
  *{-webkit-tap-highlight-color:transparent}

  /* A tap fires :hover and it stays latched until something else is tapped —
     the menu button sat lit green after being used. Neutralise the hover
     styling back to each element's resting state and show the press through
     :active instead. :not(.active) keeps the section indicator working. */
  .toggle-btn:not(.active):hover{
    color:var(--text-dim);border-color:var(--border);background:none;
  }
  .nav-links a:not(.active):hover{
    color:var(--text-dim);background:none;
  }
  .h-link:hover,.pdf-btn:hover{
    color:var(--text-dim);border-color:var(--border);
    background:var(--surface);box-shadow:none;transform:none;
  }
  .sk-tag:hover{
    color:var(--text);border-color:var(--border);
    background:rgba(255,255,255,0.01);box-shadow:none;
  }
  .proj-link:hover{
    color:var(--accent);border-color:rgba(0,232,143,0.15);background:none;
  }
  .h-link:active,.pdf-btn:active,.toggle-btn:active{transform:scale(0.97)}
}

/* --- TOUCH ABOVE THE PHONE BREAKPOINT --- */
/* Every tap target on this site was sized inside max-width:768px, so the
   moment a touch device got wider than that it fell back to the desktop
   controls. Measured 2026-08-04 at 769/820/834/1024px: toggle buttons 36x23
   and nav links 31px tall — that is every iPad, in both orientations, plus
   touch laptops. WCAG 2.5.5 and Apple's HIG both want 44px.

   Keyed on hover:none rather than width, because the thing that decides
   whether 44px is needed is the input device, not the viewport. A 1280px
   touchscreen laptop needs it; an 800px desktop window does not. */
@media(hover:none) and (min-width:769px){
  .toggle-btn{
    display:inline-flex;align-items:center;justify-content:center;
    min-width:44px;min-height:44px;
  }
  .toggle-btn svg{width:17px;height:17px;vertical-align:0}
  /* The bar is 60px tall, so 44px sits inside it without changing nav height. */
  .nav-links a{display:flex;align-items:center;min-height:44px}
  .h-link,.pdf-btn{min-height:44px}
}

/* --- TABLET / SMALL LAPTOP --- */
/* 769-1023px had no rules of its own: at 769px the mobile block switched off
   all at once and the layout jumped straight to full desktop gutters. This
   only softens the gutter step (20 -> 28 -> 40) so the jump is not abrupt. */
@media(min-width:769px) and (max-width:1023px){
  :root{--gut:28px}
  .hero{padding:130px var(--gut) 76px}
  .section{padding:64px var(--gut);scroll-margin-top:76px}
}

/* --- LARGE DESKTOP --- */
/* Below this the 1000px container is the right call for line length. Past
   1440px it just leaves 460px+ of dead space either side, so the container
   widens while the text column stays capped by --measure. */
@media(min-width:1440px){
  :root{--maxw:1180px}
}

/* --- RESPONSIVE --- */
@media(max-width:768px){
  .nav-inner{
    height:64px;
    padding:0 max(14px,env(safe-area-inset-right)) 0 max(14px,env(safe-area-inset-left));
  }
  .nav-brand{font-size:0.9rem;gap:9px}
  .nav-brand .bar{width:3px;height:19px}
  .nav-right{gap:9px}
  .nav-toggles{gap:6px}
  /* 44px is the minimum comfortable tap target; these were ~30px. */
  .toggle-btn{
    display:inline-flex;align-items:center;justify-content:center;
    min-width:44px;min-height:44px;
    padding:0 12px;font-size:0.75rem;border-radius:9px;
  }
  .toggle-btn svg{width:18px;height:18px;vertical-align:0}
  .menu-btn{padding:0 11px}

  /* The section links become a panel that drops out of the nav bar.
     nav is fixed, so absolute positioning here is relative to it. */
  .nav-links{
    position:absolute;top:100%;left:0;right:0;
    flex-direction:column;gap:2px;
    padding:8px max(12px,env(safe-area-inset-left))
            calc(10px + env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left));
    /* Opaque, not translucent: at 0.97 the hero still read through it.
       --surface rather than --bg so the panel reads as raised off the page,
       and both follow the theme so no light-mode override is needed. */
    background:var(--surface);
    border-bottom:1px solid var(--border);
    box-shadow:0 12px 24px rgba(0,0,0,0.35);
    opacity:0;visibility:hidden;transform:translateY(-8px);
    transition:opacity 0.22s ease,transform 0.22s ease,visibility 0.22s;
  }
  nav.menu-open .nav-links{opacity:1;visibility:visible;transform:none}
  .nav-links a{
    display:flex;align-items:center;
    padding:12px 14px;min-height:46px;
    font-size:0.86rem;border-radius:8px;
  }

  .hero{padding:112px 20px 30px}
  /* Without this, tapping a nav link lands the section heading under the
     fixed bar. */
  .section{padding:48px 20px;scroll-margin-top:80px}

  .hero-row{flex-direction:column;align-items:flex-start;gap:16px}
  .avatar{width:120px;height:120px}
  .hero h1{font-size:clamp(2rem,10vw,3rem);letter-spacing:-1px;text-wrap:balance}
  .hero-desc{font-size:1rem;line-height:1.7;text-wrap:pretty}
  .hero-tag{font-size:0.7rem;letter-spacing:2px;margin-bottom:20px}

  /* Four identical full-width bars read as a form, not as links. The two
     profile links shrink to their marks; the address keeps its text so it can
     be read and copied, and the PDF button takes the row below.
     Row 1: [H1] [in] [ address ]     Row 2: [ Save as PDF ] */
  .hero-contacts{
    display:flex;flex-wrap:wrap;gap:9px;margin-top:30px;
  }
  .h-link,.pdf-btn{
    justify-content:center;
    font-size:0.78rem;padding:0 14px;
    min-height:52px;border-radius:14px;
  }
  .icon-only{
    flex:0 0 auto;width:52px;padding:0;
  }
  /* Label stays in the DOM for assistive tech; the anchor also carries
     aria-label. */
  .icon-only span{
    position:absolute;width:1px;height:1px;overflow:hidden;
    clip-path:inset(50%);white-space:nowrap;
  }
  .icon-only svg{width:21px;height:21px}
  /* The address gets its own row. Sharing row 1 truncated it at 390px and
     360px — the two commonest iPhone widths — because the label is 180px
     wide and only ~172px was left beside the marks. */
  .pdf-btn{flex:1 1 140px}
  .h-mail{flex:1 1 100%;min-width:0}
  .h-mail span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

  .skills-grid{grid-template-columns:1fr}
  .certs-grid{grid-template-columns:1fr}
  .t-top{flex-direction:column;gap:6px}
  .t-card{padding:22px;margin-bottom:14px}
  .t-title{font-size:1rem;text-wrap:balance}
  .t-items li{font-size:0.88rem;line-height:1.72;padding:5px 0 5px 18px}
  .timeline{padding-left:18px}
  .t-card::before{left:-22px;width:8px;height:8px;top:28px}
  .section-head{gap:12px;margin-bottom:32px}
  .section-num{font-size:0.72rem;padding:5px 10px}
  .section-title{font-size:0.75rem;letter-spacing:3px}
  .cert-card{padding:20px}
  .cert-name{font-size:0.9rem;text-wrap:balance}
  .proj-card{padding:24px}
  .sk-card{padding:22px}
  .sk-tag{font-size:0.82rem;padding:6px 12px}
  footer{padding:40px 20px calc(56px + env(safe-area-inset-bottom))}
  /* Clear of the iPhone home indicator. */
  .back-to-top{
    bottom:calc(20px + env(safe-area-inset-bottom));
    right:calc(16px + env(safe-area-inset-right));
    width:42px;height:42px;
  }
  .glow{display:none}
  .divider{padding:0 20px}
}

@media(max-width:380px){
  .hero{padding:106px 16px 26px}
  .section{padding:40px 16px}
  .hero h1{font-size:2rem}
  .hero-desc{font-size:0.92rem}
  .t-card{padding:18px}
  /* Narrower, but the tap targets stay at 44px. */
  .toggle-btn{padding:0 9px;font-size:0.7rem;min-width:42px}
  .nav-brand{font-size:0.8rem}
  .h-link,.pdf-btn{font-size:0.74rem;min-height:46px}
  .icon-only{width:46px}   /* keep them square when min-height drops */
  footer{padding:32px 16px calc(48px + env(safe-area-inset-bottom))}
  .divider{padding:0 16px}
}

/* --- REDUCED MOTION --- */
/* The page leans on scroll reveals; honour the OS setting instead of
   animating regardless. Elements must still end up visible. */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:0.01ms!important;
    animation-iteration-count:1!important;
    transition-duration:0.01ms!important;
    scroll-behavior:auto!important;
  }
  .reveal,.reveal-left,.reveal-right,.reveal-scale{
    opacity:1!important;transform:none!important;
  }
}

/* --- PRINT / PDF --- */
@media print{
  *{transition:none!important;animation:none!important}

  .grain,.glow,.scroll-progress,.back-to-top,nav,.pdf-btn,.footer-copy,.divider{display:none!important}

  .reveal,.reveal-left,.reveal-right,.reveal-scale{opacity:1!important;transform:none!important;transition-delay:0s!important}

  html{font-size:11pt}

  body{
    background:#fff!important;color:#222!important;
    -webkit-print-color-adjust:exact;print-color-adjust:exact;
    font-family:'Inter',Helvetica,Arial,sans-serif;
  }

  .hero{padding:20px 0 16px!important;max-width:100%!important}
  .section{padding:20px 0!important;max-width:100%!important}
  footer{padding:16px 0!important;max-width:100%!important}

  .hero h1{
    font-size:28pt!important;color:#111!important;letter-spacing:-1px!important;
  }

  .hero-tag{
    color:#059669!important;font-size:8pt!important;margin-bottom:12px!important;
  }

  .hero-tag .dot{
    background:#059669!important;box-shadow:none!important;
  }

  .hero-row{margin-bottom:12px!important;gap:16px!important}

  .avatar{
    width:72px!important;height:72px!important;
    border-color:#059669!important;box-shadow:none!important;
  }

  .hero-desc{
    font-size:10pt!important;color:#444!important;line-height:1.6!important;
    max-width:100%!important;
  }

  .hero-contacts{margin-top:14px!important;gap:8px!important}

  .h-link{
    font-size:8pt!important;padding:6px 12px!important;
    border-color:#ddd!important;background:#f9f9f9!important;
    color:#333!important;box-shadow:none!important;
  }

  .h-link svg{width:12px!important;height:12px!important}

  .section-head{margin-bottom:18px!important;gap:10px!important}

  .section-num{
    font-size:7pt!important;padding:3px 8px!important;
    color:#059669!important;border-color:#059669!important;
    background:rgba(5,150,105,0.06)!important;
  }

  .section-title{
    font-size:8pt!important;color:#666!important;letter-spacing:3px!important;
  }

  .section-line{background:#ddd!important}

  .timeline{padding-left:16px!important}
  .timeline::before{background:#059669!important;width:1px!important}

  .t-card{
    padding:16px 18px!important;margin-bottom:10px!important;
    border:1px solid #e5e5e5!important;border-radius:8px!important;
    background:#fafafa!important;box-shadow:none!important;
    break-inside:avoid;page-break-inside:avoid;
    /* --measure caps the card on screen to keep the line length readable.
       On paper the page box already does that, so let it use the full width
       — otherwise the printed CV wastes the right third of every page. */
    max-width:100%!important;
  }

  .t-card::before{
    border-color:#059669!important;background:#fff!important;
    left:-20px!important;top:20px!important;
    width:7px!important;height:7px!important;
  }

  .t-card:hover{transform:none!important}

  .t-title{font-size:11pt!important;color:#111!important}
  .t-date{font-size:7.5pt!important;background:#f0f0f0!important;color:#555!important}
  .t-org{font-size:8.5pt!important;color:#666!important;margin-bottom:10px!important}

  .t-items li{
    font-size:9pt!important;color:#333!important;
    line-height:1.6!important;padding:3px 0 3px 16px!important;
  }

  .t-items li::before{background:#059669!important;top:11px!important}

  .badge{font-size:7pt!important;padding:3px 8px!important}
  .badge.green{color:#059669!important;border-color:#059669!important;background:rgba(5,150,105,0.06)!important}
  /* Amber does not survive a greyscale printer, but the emphasis should:
     keep the left bar and the solid star, drop the tint. Without the explicit
     border-left the screen rule's 2px amber edge prints as a 2px amber edge. */
  .badge.gold{
    color:#444!important;border-color:#ccc!important;background:#f5f5f5!important;
    border-left:2px solid #999!important;border-radius:6px!important;
    padding:5px 10px!important;
  }
  .badge.gold svg{fill:#666!important;stroke:none!important;margin-top:2px!important}
  .badge svg{width:10px!important;height:10px!important}

  .certs-grid{
    grid-template-columns:repeat(3,1fr)!important;
    gap:8px!important;
  }

  .cert-card{
    padding:12px 14px!important;
    border:1px solid #e5e5e5!important;border-radius:6px!important;
    background:#fafafa!important;box-shadow:none!important;
    gap:6px!important;
    break-inside:avoid;page-break-inside:avoid;
  }

  .cert-card::before{display:none!important}
  .cert-card:hover{transform:none!important;box-shadow:none!important}

  .cert-issuer{font-size:6.5pt!important}
  .cert-issuer.wiz{color:#059669!important}
  .cert-issuer.udemy{color:#7c3aed!important}
  .cert-issuer.cisco{color:#0891b2!important}
  .cert-issuer.thm{color:#e11d48!important}
  .cert-issuer.garanti{color:#d97706!important}

  .cert-name{font-size:8.5pt!important;color:#111!important}
  .cert-date{font-size:7pt!important;color:#777!important}
  .cert-skill{font-size:6.5pt!important;padding:1px 6px!important;border-color:#ddd!important}

  .proj-card{
    padding:18px 20px!important;
    border:1px solid #e5e5e5!important;border-radius:8px!important;
    background:#fafafa!important;box-shadow:none!important;
    break-inside:avoid;page-break-inside:avoid;
  }

  .proj-card + .proj-card{margin-top:12px!important}
  .proj-card::after{display:none!important}
  .proj-card:hover{transform:none!important}

  .proj-link{
    font-size:7.5pt!important;color:#059669!important;
    border-color:#059669!important;padding:4px 10px!important;
  }

  .skills-grid{gap:8px!important}

  .sk-card{
    padding:14px 18px!important;
    border:1px solid #e5e5e5!important;border-radius:6px!important;
    background:#fafafa!important;box-shadow:none!important;
    break-inside:avoid;page-break-inside:avoid;
  }

  .sk-label{font-size:7pt!important;margin-bottom:10px!important}
  .sk-label.sec{color:#059669!important}
  .sk-label.tool{color:#0891b2!important}
  .sk-label.sys{color:#7c3aed!important}
  .sk-label.prog{color:#d97706!important}

  .sk-tags{gap:4px!important}
  .sk-tag{font-size:8pt!important;padding:4px 10px!important;border-color:#ddd!important;color:#333!important}

  .footer-name{font-size:8pt!important;color:#999!important}

  @page{margin:1.5cm 2cm}
}
