:root {
  --navy:#061733;
  --navy-2:#0a2856;
  --blue:#096cff;
  --blue-2:#00a8ff;
  --ink:#0b234b;
  --muted:#5d6d86;
  --paper:#f6f3eb;
  --paper-2:#eef5fb;
  --white:#fff;
  --line:rgba(11,35,75,.12);
  --shadow:0 22px 60px rgba(21,57,102,.13);
}

*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--ink);background:linear-gradient(180deg,#f8fbff 0%,var(--paper) 100%);line-height:1.55}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}
.shell{width:min(1180px,calc(100% - 40px));margin:auto}
.glass{background:linear-gradient(145deg,rgba(255,255,255,.13),rgba(255,255,255,.04));border:1px solid rgba(255,255,255,.19);box-shadow:0 20px 70px rgba(0,0,0,.25);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.glass-light{background:linear-gradient(145deg,rgba(255,255,255,.85),rgba(255,255,255,.54));border:1px solid rgba(255,255,255,.9);box-shadow:var(--shadow);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}

.site-header{position:absolute;z-index:20;left:0;right:0;top:0;color:#fff;border-bottom:1px solid rgba(255,255,255,.12)}
.nav-wrap{display:flex;align-items:center;justify-content:space-between;min-height:88px;gap:24px}
.brand{display:flex;flex-direction:column;min-width:260px}
.signature{font-family:"Segoe Script","Lucida Handwriting","Brush Script MT",cursive;font-size:2.25rem;line-height:1;color:#fff;letter-spacing:-.04em}
.brand-sub{font-size:.68rem;text-transform:uppercase;letter-spacing:.24em;margin-top:9px;color:#9fc3e9}
.nav{display:flex;align-items:center;gap:28px;font-size:.92rem}
.nav a{color:#e7f1ff;opacity:.88}.nav a:hover{opacity:1;color:#fff}
.nav-cta{padding:12px 18px;border:1px solid rgba(255,255,255,.3);border-radius:13px;background:rgba(255,255,255,.09);box-shadow:0 0 25px rgba(0,133,255,.25)}
.nav-toggle{display:none}

.hero{position:relative;overflow:hidden;background:radial-gradient(circle at 70% 25%,#0c4f96 0%,#082a5a 24%,#061c3b 54%,#041329 100%);color:white;padding:145px 0 42px;min-height:690px}
.hero:after{content:"";position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.018) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.018) 1px,transparent 1px);background-size:48px 48px;mask-image:linear-gradient(to bottom,#000 0%,transparent 82%)}
.hero-glow{position:absolute;border-radius:999px;filter:blur(50px);opacity:.35}.hero-glow-a{width:400px;height:400px;background:#0078ff;left:-120px;top:180px}.hero-glow-b{width:360px;height:360px;background:#00b7ff;right:-140px;top:-20px}
.hero-grid{position:relative;z-index:2;display:grid;grid-template-columns:1.05fr .95fr;gap:62px;align-items:center}
.eyebrow{text-transform:uppercase;letter-spacing:.25em;font-size:.72rem;font-weight:700;color:#9bcfff;margin:0 0 18px}.eyebrow.dark{color:#3974bb}
.hero h1{font-size:clamp(3.2rem,6vw,5.45rem);line-height:.98;letter-spacing:-.055em;margin:0 0 22px;max-width:670px}.hero h1 span{color:#15a4ff}
.hero-intro{font-size:1.15rem;max-width:660px;color:#d5e3f5;margin:0 0 30px}
.hero-actions,.inline-actions{display:flex;gap:14px;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:48px;padding:0 24px;border-radius:14px;font-weight:700;transition:.2s ease;border:1px solid transparent}.btn:hover{transform:translateY(-2px)}
.btn-primary{background:linear-gradient(135deg,#0870ff,#00a7ff);color:#fff;box-shadow:0 12px 30px rgba(0,121,255,.28)}
.btn-ghost{border-color:rgba(255,255,255,.5);color:#fff;background:rgba(255,255,255,.03)}
.btn-light{background:#fff;border-color:#d9e5f2;color:#1660b5}.btn-white{background:#fff;color:#0a4c95;padding:0 22px;align-self:flex-start}.btn-small{min-height:42px;padding:0 18px;font-size:.9rem}
.hero-points{display:flex;gap:25px;flex-wrap:wrap;margin-top:48px}.hero-points div{display:flex;align-items:center;gap:10px;color:#d8e8fb;font-size:.82rem}.hero-points span{width:34px;height:34px;display:grid;place-items:center;border-radius:10px;background:rgba(38,145,255,.16);border:1px solid rgba(84,174,255,.25);color:#55c3ff}.hero-points strong{font-weight:600}
.portrait-panel{position:relative;border-radius:30px;overflow:hidden;min-height:520px}.portrait-panel>img{width:100%;height:100%;min-height:520px;object-fit:cover;object-position:center 30%}.portrait-panel:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(4,19,41,.25),transparent 46%,rgba(4,19,41,.12)),linear-gradient(0deg,rgba(4,19,41,.25),transparent 45%)}
.portrait-overlay{position:absolute;z-index:2;right:24px;top:28px;width:190px;text-align:right}.hand-note{font-family:"Segoe Script","Lucida Handwriting",cursive;font-size:1.15rem;line-height:1.45;color:#e4f1ff;margin:0}.portrait-name{font-size:.78rem;color:#bcd8f4}.portrait-meta{position:absolute;z-index:3;right:20px;bottom:20px;border-radius:18px;padding:15px 18px;display:grid;gap:8px;font-size:.78rem;color:#eef7ff}.portrait-meta span:before{content:"•";color:#2dc1ff;margin-right:8px}

.section{padding:70px 0}.section-head{display:flex;justify-content:space-between;gap:40px;align-items:flex-end;margin-bottom:28px}.section-head h2,.profile-card h2,.contact-card h2{font-size:clamp(2rem,4vw,3rem);line-height:1.05;letter-spacing:-.045em;margin:0}.section-head>p{max-width:480px;color:var(--muted);margin:0 0 4px}
.case-card{border-radius:28px;padding:26px;margin-top:24px}.case-title{display:grid;grid-template-columns:auto 1fr auto;gap:16px;align-items:center}.case-icon{width:52px;height:52px;border-radius:14px;display:grid;place-items:center;background:linear-gradient(135deg,#0a67fa,#06a8ff);color:#fff;font-size:1.5rem;box-shadow:0 10px 25px rgba(0,110,255,.2)}.case-title h3{font-size:1.55rem;margin:0}.case-title p{margin:3px 0 0;color:var(--muted)}.tags{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}.tags span{padding:7px 12px;border-radius:999px;background:#eef7ff;border:1px solid #cae2fa;color:#1763b6;font-size:.74rem}
.comparison-grid{display:grid;grid-template-columns:1fr 58px 1fr 1.18fr;gap:20px;align-items:center;margin-top:24px}.compare-side{text-align:center;position:relative}.pill{display:inline-block;background:linear-gradient(135deg,#0870ff,#00a8ff);color:#fff;border-radius:999px;padding:5px 14px;font-size:.72rem;margin-bottom:10px}.pill-muted{background:#9ca7b5}.browser-card{border-radius:12px;background:#fff;border:7px solid #202a34;box-shadow:0 12px 24px rgba(10,33,65,.16);overflow:hidden;text-align:left;aspect-ratio:1.5/1}.browser-bar{height:18px;background:#eef1f4;padding:5px 8px}.browser-bar i{display:inline-block;width:5px;height:5px;border-radius:50%;background:#b9c3cc;margin-right:3px}.browser-copy{padding:14px;font-family:Georgia,serif;color:#333;height:calc(100% - 18px);background:#f6f2e9}.browser-copy strong{display:block;font-size:1rem}.browser-copy small{font-size:.56rem}.mini-lines{height:42px;margin-top:12px;background:repeating-linear-gradient(to bottom,#b9b5ac 0 2px,transparent 2px 8px);opacity:.45}.mini-image{height:34%;margin-top:8px;background:linear-gradient(145deg,#7f8a92,#c9d0d6);border-radius:2px}.church-old{background:linear-gradient(135deg,#818d98 0 40%,#394754 40% 46%,#a7b1b7 46%)}.modern{border-color:#1e2f3f}.modern-style{font-family:Inter,ui-sans-serif,system-ui;background:linear-gradient(180deg,#f8fbff,#eaf5ff);color:#0c2a50}.modern-style small{letter-spacing:.08em;color:#477db9}.modern-style strong{font-size:.9rem;margin-top:8px}.modern-hero{height:48%;margin-top:13px;border-radius:5px;background:linear-gradient(135deg,#0c427a 0 43%,#2f6d99 43% 47%,#7c9ba8 47% 65%,#2e3b46 65%)}.bill-old .mini-banner{height:32%;margin:10px 0;background:linear-gradient(135deg,#171717,#4c4c4c);border-radius:2px}.bill-modern .bill-hero{background:linear-gradient(160deg,#e8f3fa 0 22%,#1f6bb2 22% 27%,#9eaf9e 27% 55%,#4d6b55 55% 70%,#3e5261 70%)}.compare-side>a{display:inline-block;margin-top:12px;font-weight:700;color:#0e4f9a;font-size:.86rem}.compare-arrow{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:#e8f6ff;border:1px solid #b9dfff;color:#0b7eff;font-size:1.35rem;font-weight:800}.case-result{background:rgba(255,255,255,.72);border:1px solid rgba(208,225,243,.9);border-radius:18px;padding:20px}.case-result h4{margin:0 0 12px;font-size:1rem}.case-result ul{margin:0 0 18px;padding:0;list-style:none;color:#36516e;font-size:.87rem}.case-result li{margin:7px 0}.case-result li:before{content:"✓";display:inline-grid;place-items:center;width:17px;height:17px;border-radius:50%;background:#0b7eff;color:white;margin-right:7px;font-size:.68rem}.archive-note{font-size:.72rem!important;line-height:1.4;color:#6e7784!important;text-align:left;margin:12px 0 0!important;background:#fff5e5;padding:10px 12px;border-radius:10px;border:1px solid #f2d7a9}

.profile{padding-top:20px}.profile-grid{display:grid;grid-template-columns:1.3fr .9fr 1fr;gap:20px}.profile-card,.contact-card{border-radius:24px;padding:24px}.profile-card h2{font-size:1.8rem;margin-bottom:14px}.about-layout{display:grid;grid-template-columns:130px 1fr;gap:20px}.about-photo{width:130px;height:165px;object-fit:cover;object-position:center top;border-radius:18px}.about-layout p{color:#526984;margin-top:0}.skills-list{list-style:none;padding:0;margin:17px 0 0;display:grid;gap:10px}.skills-list li{display:flex;align-items:center;gap:12px;padding-bottom:9px;border-bottom:1px solid #e4edf5}.skills-list span{width:30px;height:30px;display:grid;place-items:center;border-radius:8px;background:#edf7ff;color:#0874e8}.contact-card{color:white;background:radial-gradient(circle at 85% 15%,#1676c9 0,#0b4b94 35%,#082d62 70%,#061f48 100%);box-shadow:var(--shadow);display:flex;flex-direction:column;justify-content:space-between;min-height:100%}.contact-card p{color:#d4e7f8}.contact-card h2{color:#fff;margin-bottom:12px}.contact-meta{display:grid;gap:7px;font-size:.82rem;color:#d9e9f9;margin-top:20px}

footer{background:#041329;color:#fff;padding:30px 0;margin-top:50px}.footer-wrap{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:30px}.footer-brand .signature{font-size:1.9rem}.footer-wrap nav{display:flex;gap:22px;font-size:.82rem;color:#b8cee4}.footer-note{text-align:right;font-family:"Segoe Script","Lucida Handwriting",cursive;color:#7ea6c8;margin:0}

@media (max-width:980px){
  .nav-toggle{display:inline-flex;background:transparent;border:1px solid rgba(255,255,255,.35);color:#fff;border-radius:10px;padding:9px 12px}.nav{position:absolute;top:76px;right:20px;display:none;flex-direction:column;align-items:stretch;width:min(300px,calc(100vw - 40px));padding:18px;border-radius:16px;background:rgba(4,19,41,.96);border:1px solid rgba(255,255,255,.16)}.nav.open{display:flex}.nav a{padding:8px 6px}.nav-cta{text-align:center}.hero-grid{grid-template-columns:1fr}.portrait-panel{max-width:680px}.comparison-grid{grid-template-columns:1fr 44px 1fr}.case-result{grid-column:1/-1}.profile-grid{grid-template-columns:1fr 1fr}.contact-card{grid-column:1/-1}.case-title{grid-template-columns:auto 1fr}.tags{grid-column:1/-1;justify-content:flex-start}.section-head{align-items:flex-start;flex-direction:column}.footer-wrap{grid-template-columns:1fr;text-align:center}.footer-wrap nav{justify-content:center}.footer-note{text-align:center}}
@media (max-width:650px){
  .shell{width:min(100% - 28px,1180px)}.site-header{position:absolute}.brand{min-width:0}.signature{font-size:1.7rem}.brand-sub{font-size:.52rem;letter-spacing:.16em}.hero{padding-top:125px}.hero h1{font-size:3.25rem}.hero-grid{gap:28px}.hero-points{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:30px}.portrait-overlay{display:none}.portrait-meta{left:14px;right:14px;bottom:14px}.comparison-grid{grid-template-columns:1fr}.compare-arrow{transform:rotate(90deg);margin:auto}.case-title{grid-template-columns:auto 1fr}.case-card{padding:18px}.profile-grid{grid-template-columns:1fr}.about-layout{grid-template-columns:1fr}.about-photo{width:100%;height:260px}.inline-actions{flex-direction:column}.footer-wrap nav{flex-wrap:wrap}}


/* ===== Portfolio refinement 2026-09-04 ===== */
.signature-mark{
  display:block;
  width:clamp(190px,19vw,300px);
  height:auto;
  object-fit:contain;
  filter:drop-shadow(0 0 10px rgba(25,150,255,.20));
}
.brand .signature-mark{margin-bottom:2px}
.footer-brand .signature-mark{width:220px;margin-inline:auto 0}
.brand-sub{margin-top:0}

.portrait-panel{
  position:relative;
  min-height:540px;
  overflow:hidden;
  border:0;
  border-radius:34px;
  background:transparent;
  box-shadow:none;
  isolation:isolate;
}
.portrait-panel:before{
  content:"";
  position:absolute;
  inset:0;
  z-index:2;
  pointer-events:none;
  background:
    linear-gradient(90deg, var(--navy) 0%, rgba(4,19,41,.58) 8%, transparent 28%),
    linear-gradient(0deg, rgba(4,19,41,.48) 0%, transparent 32%),
    linear-gradient(180deg, rgba(4,19,41,.12), transparent 28%);
}
.portrait-panel:after{
  content:"";
  position:absolute;
  inset:0;
  z-index:2;
  pointer-events:none;
  border-radius:inherit;
  box-shadow:inset 0 0 70px rgba(3,18,39,.35);
}
.portrait-panel>img{
  display:block;
  width:100%;
  height:540px;
  min-height:0;
  object-fit:cover;
  object-position:center 35%;
  border-radius:inherit;
  filter:saturate(.94) contrast(1.02);
}
.hero-affiliation{
  position:absolute;
  z-index:4;
  right:20px;
  bottom:20px;
  display:flex;
  align-items:center;
  gap:10px;
  padding:11px 14px;
  border-radius:15px;
  font-size:.78rem;
}
.affiliation-label{color:#b9d3ec}
.hero-affiliation a{color:#fff;font-weight:800;letter-spacing:.01em}
.hero-affiliation a:hover{color:#5bc8ff}

.text-link{
  color:#0879e8;
  font-weight:750;
  text-decoration:underline;
  text-decoration-color:rgba(8,121,232,.28);
  text-underline-offset:3px;
}
.text-link:hover{color:#045bb3}

.archive-link-row{
  display:flex;
  justify-content:center;
  align-items:center;
  gap:7px;
  margin-top:12px;
}
.archive-link-row>a{
  font-weight:700;
  color:#0e4f9a;
  font-size:.86rem;
}
.archive-tip{
  position:relative;
  width:19px;
  height:19px;
  display:inline-grid;
  place-items:center;
  border-radius:50%;
  background:#e8f4ff;
  border:1px solid #a8d5fb;
  color:#0876df;
  font-size:.72rem;
  font-weight:900;
  font-family:Georgia,serif;
  cursor:help;
  outline:none;
}
.archive-tooltip{
  position:absolute;
  left:50%;
  bottom:calc(100% + 10px);
  width:285px;
  transform:translate(-50%,8px);
  background:#071b3b;
  color:#eef7ff;
  border:1px solid rgba(126,197,255,.28);
  border-radius:12px;
  padding:11px 12px;
  text-align:left;
  font-family:Inter,ui-sans-serif,system-ui,sans-serif;
  font-size:.75rem;
  font-weight:500;
  line-height:1.45;
  box-shadow:0 14px 34px rgba(3,20,43,.28);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:.18s ease;
  z-index:30;
}
.archive-tooltip:after{
  content:"";
  position:absolute;
  top:100%;
  left:50%;
  transform:translateX(-50%);
  border:7px solid transparent;
  border-top-color:#071b3b;
}
.archive-tip:hover .archive-tooltip,
.archive-tip:focus .archive-tooltip{
  opacity:1;
  visibility:visible;
  transform:translate(-50%,0);
}
.archive-note{display:none!important}

@media (max-width:980px){
  .portrait-panel{max-width:none;min-height:500px}
  .portrait-panel>img{height:500px}
  .footer-brand .signature-mark{margin-inline:auto}
}
@media (max-width:650px){
  .signature-mark{width:190px}
  .portrait-panel{min-height:410px;border-radius:24px}
  .portrait-panel>img{height:410px;object-position:center 25%}
  .hero-affiliation{right:12px;bottom:12px}
  .archive-tooltip{width:230px;left:auto;right:-12px;transform:translateY(8px)}
  .archive-tip:hover .archive-tooltip,
  .archive-tip:focus .archive-tooltip{transform:translateY(0)}
  .archive-tooltip:after{left:auto;right:14px}
}


/* ===== FINAL PERSONAL PORTFOLIO OVERRIDES ===== */

/* The portfolio sells John Ferguson first. MeshaByte appears only as a small
   contextual link in the About section. */
.hero-affiliation,
.affiliation-label{
  display:none !important;
}

/* Signature is the primary identity in both header and footer. */
.signature-mark{
  width:clamp(210px,20vw,315px);
  max-height:74px;
}
.footer-brand .signature-mark{
  width:230px;
  max-height:58px;
}

/* Make the portrait feel like part of the hero rather than a separate promo card. */
.hero-grid{
  grid-template-columns:1.03fr .97fr;
  gap:48px;
}
.portrait-panel{
  border-radius:28px;
  min-height:535px;
  box-shadow:none;
  overflow:hidden;
}
.portrait-panel>img{
  height:535px;
  object-fit:cover;
  object-position:center 34%;
}
.portrait-panel:before{
  background:
    linear-gradient(90deg, rgba(4,19,41,.72) 0%, rgba(4,19,41,.22) 16%, transparent 40%),
    linear-gradient(0deg, rgba(4,19,41,.34) 0%, transparent 34%);
}
.portrait-panel:after{
  box-shadow:
    inset 40px 0 65px rgba(4,19,41,.18),
    inset 0 -25px 55px rgba(4,19,41,.20);
}

/* Keep the Bill archive note on one baseline and reveal the warning only on demand. */
.archive-link-row{
  min-height:30px;
  margin-top:10px;
}
.archive-tip{
  flex:0 0 auto;
}

/* Keep the MeshaByte reference understated. */
.text-link{
  font-weight:700;
  white-space:nowrap;
}

/* Mobile refinements */
@media (max-width:980px){
  .hero-grid{gap:26px}
  .portrait-panel{min-height:500px}
  .portrait-panel>img{height:500px}
}
@media (max-width:650px){
  .signature-mark{
    width:190px;
    max-height:56px;
  }
  .brand-sub{
    font-size:.49rem;
    letter-spacing:.14em;
  }
  .portrait-panel{
    min-height:405px;
    border-radius:22px;
  }
  .portrait-panel>img{
    height:405px;
    object-position:center 27%;
  }
}


/* ===== Footer signature refinement ===== */

/* Keep the footer identity aligned to the left edge of its own column. */
.footer-brand{
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  justify-content:center;
  text-align:left;
}

/* Give the signature a deliberate branded plate that matches the site's
   dark header/footer palette, rather than leaving it floating in the bar. */
.footer-brand .signature-mark{
  display:block;
  width:230px;
  height:auto;
  margin:0;
  padding:10px 16px;
  border-radius:14px;
  background:
    linear-gradient(135deg, rgba(7,37,78,.98) 0%, rgba(5,66,124,.96) 58%, rgba(5,91,158,.90) 100%);
  border:1px solid rgba(76,174,255,.22);
  box-shadow:
    0 10px 26px rgba(0,0,0,.18),
    inset 0 1px 0 rgba(255,255,255,.05);

  /* Force the existing transparent signature artwork to pure white. */
  filter:brightness(0) invert(1) drop-shadow(0 0 8px rgba(255,255,255,.12));
}

/* Keep the small descriptor under the plate aligned with it. */
.footer-brand .brand-sub{
  margin-top:8px;
  margin-left:2px;
  color:#d9e7f6;
  text-align:left;
}

/* Ensure footer columns don't re-center the brand at desktop widths. */
.site-footer .container,
.site-footer .footer-inner{
  align-items:center;
}

@media (max-width:980px){
  .footer-brand{
    align-items:flex-start;
    text-align:left;
  }
  .footer-brand .signature-mark{
    margin:0;
  }
}

@media (max-width:650px){
  .footer-brand{
    width:100%;
    align-items:flex-start;
  }
  .footer-brand .signature-mark{
    width:205px;
    padding:9px 13px;
  }
}


/* ===== Corrected footer signature treatment ===== */
.footer-brand{
  align-items:flex-start !important;
  text-align:left !important;
}

.footer-brand .footer-signature-mark{
  display:block;
  width:235px;
  height:auto;
  margin:0 0 8px 0 !important;
  padding:10px 14px;
  border-radius:14px;

  /* Dark brand plate that blends with the footer/header family. */
  background:
    linear-gradient(135deg, rgba(7,31,66,.96) 0%, rgba(8,55,104,.96) 58%, rgba(7,77,135,.92) 100%);
  border:1px solid rgba(69,163,246,.22);
  box-shadow:
    0 10px 24px rgba(0,0,0,.20),
    inset 0 1px 0 rgba(255,255,255,.05);

  /* The image itself is already pure white + transparent. */
  filter:drop-shadow(0 0 7px rgba(255,255,255,.08)) !important;
}

.footer-brand .brand-sub{
  margin-left:2px !important;
  margin-top:0 !important;
  text-align:left !important;
  color:#d9e8f7 !important;
}

@media (max-width:650px){
  .footer-brand .footer-signature-mark{
    width:205px;
    padding:9px 12px;
  }
}


/* ===== Birthstone wordmark refinement ===== */

/* Use the supplied Birthstone lettering as an image asset in both header and footer. */
.signature-mark{
  display:block !important;
  width:clamp(220px,21vw,330px) !important;
  height:auto !important;
  max-height:none !important;
  object-fit:contain !important;
  margin:0 !important;
  padding:0 !important;
  border:0 !important;
  border-radius:0 !important;
  background:transparent !important;
  box-shadow:none !important;
  filter:none !important;
}

/* Header keeps the wordmark visually strong against the dark bar. */
.brand{
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  justify-content:center;
}
.brand .signature-mark{
  width:clamp(235px,22vw,345px) !important;
}
.brand-sub{
  margin-top:4px !important;
}

/* Footer uses the same asset, smaller and left aligned. */
.footer-brand{
  display:flex !important;
  flex-direction:column !important;
  align-items:flex-start !important;
  justify-content:center !important;
  text-align:left !important;
}
.footer-brand .signature-mark{
  width:235px !important;
  margin:0 0 7px 0 !important;
  padding:0 !important;
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
  filter:none !important;
}
.footer-brand .brand-sub{
  margin:0 !important;
  color:#dbe8f6 !important;
  text-align:left !important;
}

/* Retire any previous footer signature plate treatment. */
.footer-signature-mark{
  background:transparent !important;
  border:0 !important;
  box-shadow:none !important;
  filter:none !important;
  padding:0 !important;
}

@media (max-width:650px){
  .brand .signature-mark{
    width:205px !important;
  }
  .footer-brand .signature-mark{
    width:190px !important;
  }
}


/* ===== Real Alloa before / after screenshots ===== */
.case-shot{
  display:block;
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:top center;
  border-radius:inherit;
}

/* Keep before/after screenshots visually comparable even though the source captures differ in height. */
.project-screen,
.screen-frame,
.browser-frame,
.site-preview,
.case-preview{
  overflow:hidden;
}

.project-screen img,
.screen-frame img,
.browser-frame img,
.site-preview img,
.case-preview img{
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:top center;
}


/* ===== Real Bill before / after screenshots ===== */
.project-screen img,
.screen-frame img,
.browser-frame img,
.site-preview img,
.case-preview img,
.case-shot{
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:top center;
}


/* ===== Actual portfolio screenshots, replacing coded holding mockups ===== */
.browser-card.screenshot-card{
  position:relative;
  width:100%;
  aspect-ratio:16/10;
  padding:0 !important;
  overflow:hidden;
  border-radius:12px;
  background:#0c1c2e;
  border:6px solid #283746;
  box-shadow:0 10px 22px rgba(11,31,51,.16);
}
.browser-card.screenshot-card.modern{
  border-color:#22384a;
}
.case-screenshot{
  display:block;
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:top center;
  border:0;
}

/* ===== Click-to-enlarge comparison screenshots ===== */
.lightbox-trigger{position:relative;display:block;width:100%;height:100%;padding:0;border:0;background:transparent;cursor:zoom-in;border-radius:inherit;overflow:hidden}
.lightbox-trigger .case-screenshot{transition:transform .2s ease,filter .2s ease}
.lightbox-trigger:hover .case-screenshot,.lightbox-trigger:focus-visible .case-screenshot{transform:scale(1.015);filter:brightness(.94)}
.zoom-hint{position:absolute;right:10px;bottom:10px;padding:7px 10px;border-radius:999px;background:rgba(5,24,50,.88);border:1px solid rgba(255,255,255,.2);color:#fff;font-size:.68rem;font-weight:800;opacity:0;transform:translateY(4px);transition:.18s ease;pointer-events:none}
.lightbox-trigger:hover .zoom-hint,.lightbox-trigger:focus-visible .zoom-hint{opacity:1;transform:translateY(0)}
.image-lightbox{position:fixed;inset:0;z-index:9999;display:grid;place-items:center;padding:28px;opacity:0;visibility:hidden;transition:.18s ease}
.image-lightbox.is-open{opacity:1;visibility:visible}
.lightbox-backdrop{position:absolute;inset:0;background:rgba(2,10,22,.92);backdrop-filter:blur(8px)}
.lightbox-figure{position:relative;z-index:2;margin:0;width:min(95vw,1800px);height:min(90vh,1200px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px}
.lightbox-figure img{display:block;max-width:100%;max-height:calc(90vh - 48px);width:auto;height:auto;object-fit:contain;border-radius:12px;box-shadow:0 24px 70px rgba(0,0,0,.46);background:#fff}
.lightbox-figure figcaption{color:#dceafb;font-size:.8rem;text-align:center}
.lightbox-close{position:fixed;z-index:10001;top:18px;right:22px;width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,255,255,.25);background:rgba(7,27,56,.88);color:#fff;font-size:1.8rem;cursor:pointer}
.lightbox-close:hover{background:#0b58a8}
body.lightbox-open{overflow:hidden}
@media (max-width:650px){.image-lightbox{padding:14px}.zoom-hint{opacity:1;font-size:.62rem;padding:6px 8px}}


/* ===== Expanded About / How I Work ===== */
.approach{
  background:linear-gradient(180deg,#f8fbff 0%,#f3f7fc 100%);
}
.approach-head{margin-bottom:26px}
.approach-grid{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:16px;
}
.approach-card{
  padding:24px;
  min-height:245px;
}
.approach-number{
  display:inline-grid;
  place-items:center;
  width:42px;
  height:42px;
  margin-bottom:18px;
  border-radius:12px;
  background:#e8f4ff;
  color:#0879e8;
  font-size:.78rem;
  font-weight:900;
  letter-spacing:.08em;
}
.approach-card h3,.dev-environment h3{
  margin:0 0 10px;
  color:#09294d;
  font-size:1.08rem;
}
.approach-card p,.dev-environment p{
  color:#5a7088;
  line-height:1.65;
}
.dev-environment{
  display:grid;
  grid-template-columns:auto 1fr;
  gap:20px;
  align-items:center;
  margin-top:18px;
  padding:24px 28px;
}
.dev-icon{
  display:grid;
  place-items:center;
  width:62px;
  height:62px;
  border-radius:18px;
  background:linear-gradient(145deg,#087ff2,#0a56b5);
  color:#fff;
  font-size:1.5rem;
  box-shadow:0 12px 30px rgba(0,111,225,.22);
}

/* ===== CV page ===== */
.cv-page{background:#f5f8fc}
.cv-hero{
  position:relative;
  overflow:hidden;
  padding:74px 0 66px;
  background:
    radial-gradient(circle at 82% 22%,rgba(12,135,255,.24),transparent 28%),
    linear-gradient(135deg,#061a39,#0b376b);
  color:#fff;
}
.cv-hero-grid{
  display:grid;
  grid-template-columns:1fr 330px;
  gap:60px;
  align-items:center;
}
.cv-hero h1{font-size:clamp(3rem,6vw,5rem);margin:8px 0 10px}
.cv-lead{font-size:1.28rem;color:#d7e8fa;max-width:720px}
.cv-hero p:not(.eyebrow):not(.cv-lead){max-width:760px;color:#bcd2e9;line-height:1.7}
.cv-photo{
  width:100%;
  aspect-ratio:4/5;
  object-fit:cover;
  object-position:center 20%;
  border-radius:26px;
  border:1px solid rgba(255,255,255,.18);
  box-shadow:0 24px 60px rgba(0,0,0,.28);
}
.cv-grid{
  display:grid;
  grid-template-columns:minmax(0,1fr) 340px;
  gap:22px;
  align-items:start;
}
.cv-main,.cv-side{display:grid;gap:20px}
.cv-card{padding:28px}
.cv-card h2{margin:6px 0 18px;color:#09294d}
.cv-card h3{color:#0a3765}
.cv-card p{color:#5a7088;line-height:1.68}
.cv-skills{display:flex;flex-wrap:wrap;gap:9px}
.cv-skills span{
  padding:9px 12px;
  border-radius:999px;
  background:#edf6ff;
  border:1px solid #cfe6fb;
  color:#0b569f;
  font-size:.8rem;
  font-weight:750;
}
.cv-project{padding:18px 0;border-top:1px solid #dbe7f2}
.cv-project:first-of-type{border-top:0;padding-top:0}
.cv-project a{color:#0879e8;font-weight:800}
.cv-contact{padding:28px}
.cv-contact h2{color:#fff}
.cv-contact p{color:#e1effc}

@media (max-width:1050px){
  .approach-grid{grid-template-columns:repeat(2,1fr)}
  .cv-grid{grid-template-columns:1fr}
  .cv-side{grid-template-columns:repeat(2,1fr)}
  .cv-contact{grid-column:1/-1}
}
@media (max-width:760px){
  .approach-grid{grid-template-columns:1fr}
  .dev-environment{grid-template-columns:1fr}
  .cv-hero-grid{grid-template-columns:1fr}
  .cv-photo{max-width:320px}
  .cv-side{grid-template-columns:1fr}
}


/* ===== About card: text wraps around portrait ===== */
.profile-card .about-flow{
  display:block;
}

.profile-card .about-flow::after{
  content:"";
  display:block;
  clear:both;
}

.profile-card .about-flow .about-photo{
  float:left;
  width:130px;
  height:165px;
  object-fit:cover;
  object-position:center 18%;
  margin:0 18px 12px 0;
  border-radius:18px;
}

.profile-card .about-flow h2{
  margin-top:0;
  margin-bottom:10px;
}

.profile-card .about-flow p{
  margin-top:0;
  line-height:1.68;
}

.profile-card .about-flow .inline-actions{
  clear:both;
  padding-top:6px;
}

@media (max-width:620px){
  .profile-card .about-flow .about-photo{
    width:112px;
    height:142px;
    margin:0 14px 10px 0;
  }
}

@media (max-width:430px){
  .profile-card .about-flow .about-photo{
    float:none;
    display:block;
    width:126px;
    height:158px;
    margin:0 0 14px 0;
  }
}


/* ===== Compact How I Work cards ===== */
.approach-card{
  padding:22px 24px !important;
  min-height:0 !important;
}

.approach-title{
  display:flex;
  align-items:center;
  gap:10px;
  margin-bottom:14px;
}

.approach-title .approach-number{
  flex:0 0 auto;
  width:auto !important;
  height:auto !important;
  margin:0 !important;
  padding:5px 8px;
  border-radius:9px;
  font-size:.72rem;
  line-height:1;
}

.approach-title h3{
  margin:0 !important;
  line-height:1.35;
}

.approach-card p{
  margin:0 0 12px !important;
}

.approach-card p:last-child{
  margin-bottom:0 !important;
}

.dev-environment p{
  margin:0 0 12px !important;
}

.dev-environment p:last-child{
  margin-bottom:0 !important;
}

/* More even visual spacing across the row. */
.approach-grid{
  align-items:stretch;
}

.approach-card{
  display:flex;
  flex-direction:column;
}


/* ===== CV header / hero spacing fix ===== */

/* Give the CV header a definite height and keep all nav items inside it. */










/* Keep the navigation on one clean baseline and away from the portrait. */






/* Push hero content clear of the header and stop portrait/header collisions. */
.cv-page .cv-hero{
  padding-top:72px;
}

.cv-page .cv-hero-grid{
  align-items:center;
}

/* Professional Profile label belongs to hero content only. */
.cv-page .cv-hero .eyebrow{
  display:block;
  margin:0 0 18px;
  line-height:1.2;
}

/* Portrait starts well below header controls. */
.cv-page .cv-photo{
  margin-top:0;
  align-self:center;
}

/* Prevent the top button from visually overlapping portrait on medium screens. */
@media (max-width:1100px){
  

  

  

  .cv-page .cv-hero-grid{
    grid-template-columns:minmax(0,1fr) 300px;
    gap:40px;
  }
}

@media (max-width:860px){
  

  

  

  .cv-page .cv-hero{
    padding-top:54px;
  }

  .cv-page .cv-hero-grid{
    grid-template-columns:1fr;
  }

  .cv-page .cv-photo{
    max-width:320px;
  }
}


/* ===== Remove divider under personal brand subtitle ===== */
.brand,
.brand-sub{
  border-bottom:0 !important;
  box-shadow:none !important;
}

.brand::after,
.brand-sub::after,
.brand::before,
.brand-sub::before{
  content:none !important;
  display:none !important;
  border:0 !important;
  background:none !important;
}

.site-header .brand,
.site-header .brand-sub,



/* ===== Definitive shared header fix ===== */

/* The visible divider was on the header itself, not the brand text. */
.site-header{
  border-bottom:0 !important;
}

/* CV page gets its own proper dark header bar instead of a transparent
   header sitting over the light page background. */


/* Keep the CV header content contained entirely inside the bar. */






/* Make the CV CTA readable and keep it visually separate from the hero image. */




/* Since the CV header is now in normal document flow, the hero does not need
   compensating top space for an overlapping absolute header. */
.cv-page .cv-hero{
  padding-top:64px !important;
}


/* ===== CV header merges into hero background ===== */

/* Make header and hero read as one continuous surface. */
.cv-page{
  --cv-deep:#061a39;
  --cv-mid:#0a376b;
  --cv-bright:#075991;
}



/* Remove any visual seam between the two areas. */


.cv-page .cv-hero{
  margin-top:-1px;
  border-top:0 !important;
  box-shadow:none !important;
}

/* Keep nav and branding legible against the merged dark surface. */







/* ===== v8: CV header inherits homepage header exactly ===== */

/* Do not restyle the shared header on CV. */


/* Same header sizing/spacing as the homepage. */






/* Same nav treatment as homepage. */






/* Make CV header and hero one continuous dark surface,
   while leaving homepage completely untouched. */
.cv-page{
  background:#061a39;
}



.cv-page .cv-hero{
  margin-top:-1px !important;
  border-top:0 !important;
  padding-top:64px !important;
}


/* ===== Back to top control ===== */
.back-to-top{
  position:fixed;
  right:24px;
  bottom:24px;
  z-index:9000;
  width:46px;
  height:46px;
  display:grid;
  place-items:center;
  border-radius:50%;
  border:1px solid rgba(120,196,255,.32);
  background:linear-gradient(145deg,rgba(5,48,96,.92),rgba(5,103,183,.94));
  color:#fff;
  box-shadow:
    0 14px 34px rgba(0,34,72,.28),
    inset 0 1px 0 rgba(255,255,255,.08);
  backdrop-filter:blur(10px);
  font-size:1.25rem;
  font-weight:800;
  cursor:pointer;
  opacity:0;
  visibility:hidden;
  transform:translateY(10px);
  transition:opacity .18s ease,transform .18s ease,visibility .18s ease,background .18s ease;
}

.back-to-top.is-visible{
  opacity:1;
  visibility:visible;
  transform:translateY(0);
}

.back-to-top:hover,
.back-to-top:focus-visible{
  background:linear-gradient(145deg,#087ff2,#0759b3);
  outline:none;
}

@media (max-width:650px){
  .back-to-top{
    right:16px;
    bottom:16px;
    width:42px;
    height:42px;
  }
}


/* ===== v11 definitive CV header parity ===== */

/* Same absolute header placement as homepage. */


/* Re-establish the exact homepage shell width after older CV overrides. */


/* Brand matches homepage exactly. */






/* Navigation matches homepage exactly. */








/* CV hero begins beneath the absolute header, exactly like homepage hero. */
.cv-page .cv-hero{
  padding-top:145px !important;
  margin-top:0 !important;
  min-height:625px;
  background:
    radial-gradient(circle at 70% 25%,#0c4f96 0%,#082a5a 24%,#061c3b 54%,#041329 100%) !important;
}

/* Restore light content background below the CV hero. */
.cv-page{
  background:linear-gradient(180deg,#f8fbff 0%,#f6f3eb 100%) !important;
}

.cv-page .cv-content{
  background:#f5f8fc !important;
}

/* Same responsive nav behaviour as homepage. */
@media (max-width:980px){
  

  

  

  

  
}

@media (max-width:650px){
  

  

  

  

  .cv-page .cv-hero{
    padding-top:125px !important;
  }
}


/* ===== v12 CV content restoration ===== */

/* Keep the working dark header/hero, but return the document below to the light portfolio surface. */
.cv-page{
  background:#f5f8fc !important;
}

.cv-page .cv-content{
  background:
    linear-gradient(180deg,#f7faff 0%,#f3f6fb 100%) !important;
  padding-top:58px !important;
  padding-bottom:70px !important;
}

/* Main CV layout spacing. */
.cv-page .cv-grid{
  display:grid !important;
  grid-template-columns:minmax(0,1fr) 340px !important;
  gap:22px !important;
  align-items:start !important;
}

.cv-page .cv-main,
.cv-page .cv-side{
  display:grid !important;
  gap:20px !important;
}

/* Restore cards to the same visual language as the homepage. */
.cv-page .cv-card,
.cv-page .glass-light{
  background:rgba(255,255,255,.88) !important;
  border:1px solid rgba(145,174,204,.20) !important;
  border-radius:22px !important;
  box-shadow:
    0 16px 36px rgba(29,63,101,.10),
    inset 0 1px 0 rgba(255,255,255,.82) !important;
  backdrop-filter:blur(14px) !important;
}

.cv-page .cv-card{
  padding:28px !important;
}

.cv-page .cv-card h2,
.cv-page .cv-card h3{
  color:#09294d !important;
}

.cv-page .cv-card p{
  color:#5a7088 !important;
}

.cv-page .cv-card .eyebrow.dark{
  color:#2774bf !important;
}

/* Project rows get subtle separators rather than harsh box edges. */
.cv-page .cv-project{
  padding:18px 0 !important;
  border-top:1px solid #dbe7f2 !important;
}

.cv-page .cv-project:first-of-type{
  border-top:0 !important;
  padding-top:0 !important;
}

.cv-page .cv-project a{
  color:#0879e8 !important;
  font-weight:800 !important;
}

/* Capability pills. */
.cv-page .cv-skills{
  display:flex !important;
  flex-wrap:wrap !important;
  gap:9px !important;
}

.cv-page .cv-skills span{
  padding:9px 12px !important;
  border-radius:999px !important;
  background:#edf6ff !important;
  border:1px solid #cfe6fb !important;
  color:#0b569f !important;
  font-size:.8rem !important;
  font-weight:750 !important;
}

/* Contact card remains the deliberate blue accent. */
.cv-page .cv-contact{
  background:
    linear-gradient(155deg,#0d4b8f 0%,#1676c6 58%,#0a376b 100%) !important;
  border:1px solid rgba(255,255,255,.10) !important;
  border-radius:22px !important;
  box-shadow:0 18px 40px rgba(9,55,104,.18) !important;
  color:#fff !important;
}

.cv-page .cv-contact .eyebrow,
.cv-page .cv-contact h2{
  color:#fff !important;
}

.cv-page .cv-contact p{
  color:#e4f0fb !important;
}

.cv-page .cv-contact .btn-white{
  background:#fff !important;
  color:#0b4c91 !important;
  border-color:#fff !important;
}

/* Keep side cards consistent with the main column. */
.cv-page .cv-side .glass-light{
  background:rgba(255,255,255,.90) !important;
}

/* Responsive CV content. */
@media (max-width:1050px){
  .cv-page .cv-grid{
    grid-template-columns:1fr !important;
  }

  .cv-page .cv-side{
    grid-template-columns:repeat(2,1fr) !important;
  }

  .cv-page .cv-contact{
    grid-column:1/-1 !important;
  }
}

@media (max-width:760px){
  .cv-page .cv-side{
    grid-template-columns:1fr !important;
  }

  .cv-page .cv-card{
    padding:22px !important;
    border-radius:18px !important;
  }
}


/* ===== v13: CV uses the exact homepage header ===== */
/* No CV-specific header styling exists below this point. */

/* The CV hero simply provides enough top room beneath the shared header. */
.cv-page .cv-hero{
  padding-top:145px !important;
  margin-top:0 !important;
}

/* Keep the header-to-hero transition continuous on CV without changing the header. */
.cv-page .cv-hero{
  background:
    radial-gradient(circle at 70% 25%,#0c4f96 0%,#082a5a 24%,#061c3b 54%,#041329 100%) !important;
}


/* ===== v14: CV uses the exact homepage footer ===== */
/* No CV-specific footer styling. Footer structure and presentation are shared. */


/* ===== Auto-updating copyright ===== */
.footer-copyright{
  width:100%;
  margin:14px 0 0;
  padding-top:12px;
  border-top:1px solid rgba(255,255,255,.08);
  color:#8fb0cf;
  font-size:.72rem;
  line-height:1.4;
  text-align:center;
  letter-spacing:.02em;
}

/* ===== Footer copyright position ===== */
.footer-right{
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  justify-content:center;
  gap:8px;
  text-align:right;
}
.footer-right .footer-note{margin:0!important}
.footer-right .footer-copyright{
  width:auto!important;
  margin:0!important;
  padding:0!important;
  border:0!important;
  color:#8fb0cf!important;
  font-size:.70rem!important;
  line-height:1.3!important;
  text-align:right!important;
  letter-spacing:.02em!important;
}
@media (max-width:900px){
  .footer-right{align-items:center;text-align:center}
  .footer-right .footer-copyright{text-align:center!important}
}


/* ===== v17 approved mock-faithful header + hero ===== */
.jf-header{
  position:absolute!important;
  inset:0 0 auto 0!important;
  z-index:100!important;
  width:100%!important;
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
}
.jf-header .jf-header-inner{
  width:min(1240px,calc(100% - 48px))!important;
  margin:0 auto!important;
  min-height:132px!important;
  padding:18px 0 8px!important;
  display:grid!important;
  grid-template-columns:minmax(390px,1fr) auto!important;
  align-items:start!important;
  gap:50px!important;
}
.jf-brand{
  display:flex!important;
  flex-direction:column!important;
  align-items:flex-start!important;
  text-decoration:none!important;
  max-width:440px!important;
}
.jf-wordmark{
  width:390px!important;
  max-width:100%!important;
  height:auto!important;
  margin:0!important;
  padding:0!important;
  border:0!important;
  background:transparent!important;
  box-shadow:none!important;
  filter:none!important;
}
.jf-brand-sub{
  margin:2px 0 0 40px!important;
  color:#d8ebff!important;
  font-size:.69rem!important;
  font-weight:600!important;
  line-height:1.2!important;
  letter-spacing:.31em!important;
  white-space:nowrap!important;
}
.jf-nav{
  display:flex!important;
  align-items:center!important;
  justify-content:flex-end!important;
  gap:37px!important;
  margin-top:24px!important;
}
.jf-nav a{
  position:relative!important;
  display:inline-flex!important;
  align-items:center!important;
  min-height:46px!important;
  color:rgba(255,255,255,.83)!important;
  font-size:.92rem!important;
  font-weight:500!important;
  text-decoration:none!important;
  white-space:nowrap!important;
}
.jf-nav a:hover,.jf-nav a.is-active{color:#fff!important}
.jf-nav a.is-active:not(.jf-cta)::after{
  content:""!important;
  position:absolute!important;
  left:0!important;
  right:0!important;
  bottom:1px!important;
  height:2px!important;
  background:#18a8ff!important;
  box-shadow:0 0 12px rgba(24,168,255,.55)!important;
}
.jf-nav .jf-cta{
  min-width:150px!important;
  justify-content:center!important;
  gap:9px!important;
  padding:0 20px!important;
  margin-left:4px!important;
  border:1px solid rgba(113,210,255,.65)!important;
  border-radius:14px!important;
  background:linear-gradient(145deg,rgba(9,110,232,.88),rgba(0,184,255,.88))!important;
  color:#fff!important;
  box-shadow:0 0 24px rgba(0,151,255,.26)!important;
}
.jf-nav .jf-cta:hover{
  filter:brightness(1.08)!important;
}
.jf-menu-toggle{display:none!important}

.jf-hero{
  position:relative!important;
  overflow:hidden!important;
  min-height:770px!important;
  padding:154px 0 52px!important;
  background:
    radial-gradient(circle at 12% 0%,rgba(11,100,202,.46),transparent 30%),
    radial-gradient(circle at 88% 18%,rgba(5,83,155,.42),transparent 34%),
    linear-gradient(135deg,#03142d 0%,#072754 47%,#061f44 100%)!important;
  color:#fff!important;
}
.jf-hero::after{
  content:""!important;
  position:absolute!important;
  inset:0!important;
  pointer-events:none!important;
  background:linear-gradient(90deg,rgba(2,13,28,.08),transparent 44%,rgba(0,10,25,.10))!important;
}
.jf-hero-grid{
  position:relative!important;
  z-index:2!important;
  width:min(1240px,calc(100% - 48px))!important;
  margin:0 auto!important;
  display:grid!important;
  grid-template-columns:.95fr 1.15fr!important;
  gap:52px!important;
  align-items:center!important;
}
.jf-hero-copy{padding-top:22px!important}
.jf-brand-rule{
  width:520px!important;
  max-width:88%!important;
  height:1px!important;
  margin:0 0 28px!important;
  background:linear-gradient(90deg,rgba(33,170,255,.45),rgba(33,170,255,.04))!important;
}
.jf-hero .eyebrow{
  margin:0 0 18px!important;
  color:#9fd7ff!important;
  font-size:.78rem!important;
  letter-spacing:.27em!important;
  font-weight:800!important;
}
.jf-hero h1{
  margin:0 0 20px!important;
  font-size:clamp(3.45rem,5vw,5.05rem)!important;
  line-height:.99!important;
  letter-spacing:-.045em!important;
  color:#fff!important;
}
.jf-hero h1 span{color:#12a9ff!important}
.jf-hero-lead{
  max-width:590px!important;
  margin:0 0 26px!important;
  color:#d6e4f3!important;
  font-size:1.06rem!important;
  line-height:1.62!important;
}
.jf-hero .hero-actions{display:flex!important;gap:18px!important;margin:0 0 30px!important}
.jf-primary{
  min-width:190px!important;
  justify-content:center!important;
  border-radius:16px!important;
  background:linear-gradient(145deg,#0879f2,#0ab9ff)!important;
  box-shadow:0 0 28px rgba(0,149,255,.30)!important;
}
.jf-secondary{
  min-width:160px!important;
  justify-content:center!important;
  border-color:rgba(204,229,255,.48)!important;
}
.jf-strengths{
  display:grid!important;
  grid-template-columns:repeat(4,1fr)!important;
  gap:18px!important;
  max-width:680px!important;
}
.jf-strengths>div{
  display:flex!important;
  align-items:center!important;
  gap:10px!important;
  color:#e5f2ff!important;
  font-size:.78rem!important;
  line-height:1.25!important;
}
.jf-strengths span{
  width:48px!important;
  height:48px!important;
  flex:0 0 48px!important;
  display:grid!important;
  place-items:center!important;
  border-radius:50%!important;
  background:rgba(7,90,167,.35)!important;
  border:1px solid rgba(38,171,255,.34)!important;
  color:#95d8ff!important;
  font-size:1.15rem!important;
  box-shadow:inset 0 0 18px rgba(22,143,255,.12)!important;
}
.jf-hero-visual{
  position:relative!important;
  min-height:590px!important;
}
.jf-hero-photo{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  object-fit:cover!important;
  object-position:center 28%!important;
  border-radius:26px!important;
  border:0!important;
  box-shadow:none!important;
}
.jf-hero-visual::before{
  content:""!important;
  position:absolute!important;
  inset:0!important;
  z-index:2!important;
  pointer-events:none!important;
  border-radius:26px!important;
  background:
    linear-gradient(90deg,rgba(3,20,43,.58) 0%,transparent 18%),
    linear-gradient(0deg,rgba(3,20,43,.28) 0%,transparent 28%)!important;
}
.jf-quote{
  position:absolute!important;
  z-index:4!important;
  top:92px!important;
  right:28px!important;
  width:220px!important;
  text-align:left!important;
  color:#d8ecff!important;
}
.jf-quote p{
  margin:0 0 8px!important;
  font-family:"Segoe Print","Bradley Hand",cursive!important;
  font-size:1.18rem!important;
  line-height:1.42!important;
  font-style:italic!important;
}
.jf-quote span{
  display:block!important;
  text-align:right!important;
  color:#b9cde1!important;
  font-size:.78rem!important;
}
.jf-info-card{
  position:absolute!important;
  z-index:5!important;
  right:22px!important;
  bottom:24px!important;
  width:248px!important;
  padding:18px 18px!important;
  border-radius:18px!important;
  background:rgba(5,28,58,.80)!important;
  border:1px solid rgba(150,206,255,.28)!important;
  box-shadow:0 20px 44px rgba(0,0,0,.28)!important;
  backdrop-filter:blur(13px)!important;
}
.jf-info-card>div{
  display:flex!important;
  align-items:center!important;
  gap:12px!important;
  min-height:36px!important;
  color:#e5f2ff!important;
  font-size:.82rem!important;
}
.jf-info-card span{
  width:24px!important;
  color:#8fd5ff!important;
  font-size:1.05rem!important;
}

@media (max-width:1100px){
  .jf-header .jf-header-inner{grid-template-columns:minmax(320px,1fr) auto!important}
  .jf-wordmark{width:325px!important}
  .jf-brand-sub{margin-left:18px!important;font-size:.60rem!important}
  .jf-nav{gap:24px!important}
  .jf-hero-grid{grid-template-columns:1fr 1fr!important}
  .jf-quote{display:none!important}
}
@media (max-width:900px){
  .jf-header .jf-header-inner{
    min-height:96px!important;
    grid-template-columns:1fr auto!important;
    align-items:center!important;
    padding:10px 0!important;
  }
  .jf-wordmark{width:245px!important}
  .jf-brand-sub{margin-left:5px!important;font-size:.50rem!important;letter-spacing:.22em!important}
  .jf-menu-toggle{
    display:inline-grid!important;
    place-items:center!important;
    width:44px!important;
    height:44px!important;
    border:1px solid rgba(255,255,255,.30)!important;
    border-radius:12px!important;
    background:rgba(255,255,255,.07)!important;
    color:#fff!important;
    font-size:1.15rem!important;
  }
  .jf-nav{
    position:absolute!important;
    top:84px!important;
    right:20px!important;
    display:none!important;
    width:min(300px,calc(100vw - 40px))!important;
    padding:16px!important;
    flex-direction:column!important;
    align-items:stretch!important;
    gap:0!important;
    margin:0!important;
    border-radius:16px!important;
    background:rgba(3,18,40,.97)!important;
    border:1px solid rgba(255,255,255,.14)!important;
    box-shadow:0 18px 48px rgba(0,0,0,.30)!important;
  }
  .jf-nav.is-open{display:flex!important}
  .jf-nav a{justify-content:flex-start!important;padding:0 8px!important}
  .jf-nav a.is-active:not(.jf-cta)::after{display:none!important}
  .jf-nav .jf-cta{justify-content:center!important;margin:8px 0 0!important}
  .jf-hero{padding-top:120px!important}
  .jf-hero-grid{grid-template-columns:1fr!important}
  .jf-hero-visual{min-height:500px!important}
}
@media (max-width:560px){
  .jf-header .jf-header-inner,
  .jf-hero-grid{width:min(100% - 28px,1240px)!important}
  .jf-wordmark{width:205px!important}
  .jf-brand-sub{display:none!important}
  .jf-hero h1{font-size:3.05rem!important}
  .jf-strengths{grid-template-columns:repeat(2,1fr)!important}
  .jf-hero-visual{min-height:420px!important}
  .jf-info-card{width:210px!important;padding:14px!important}
}


/* ===== v18 hero/cv refinements ===== */

/* Give the homepage copy more width so the headline stays on two intentional lines. */
.jf-hero-grid{
  grid-template-columns:1.08fr 1fr!important;
  gap:38px!important;
}

.jf-hero-copy{
  min-width:0!important;
}

.jf-hero h1{
  max-width:700px!important;
  font-size:clamp(3.35rem,4.7vw,4.95rem)!important;
}

.jf-hero h1 .hero-line{
  display:block!important;
  white-space:nowrap!important;
}

.jf-hero h1 em{
  color:#12a9ff!important;
  font-style:normal!important;
}

/* Crop the hero photo so the PLAN/BUILD/DEPLOY board is not visible.
   The quote/card stay as HTML overlays, not text baked into the image. */
.jf-hero-photo{
  object-position:32% 28%!important;
  transform:scale(1.10)!important;
  transform-origin:center center!important;
}

/* Add a subtle right-side fade where the board used to sit. */
.jf-hero-visual::after{
  content:""!important;
  position:absolute!important;
  z-index:3!important;
  top:0!important;
  right:0!important;
  bottom:0!important;
  width:28%!important;
  pointer-events:none!important;
  border-radius:0 26px 26px 0!important;
  background:linear-gradient(90deg,transparent 0%,rgba(3,20,43,.48) 56%,rgba(3,20,43,.82) 100%)!important;
}

/* Keep overlay content above the crop/fade. */
.jf-quote,
.jf-info-card{
  z-index:6!important;
}

/* CV profile hero: no duplicate personal-name billboard. */
.cv-profile-heading{
  max-width:780px!important;
  margin:4px 0 20px!important;
  color:#fff!important;
  font-size:clamp(2.45rem,4.2vw,4rem)!important;
  line-height:1.04!important;
  letter-spacing:-.035em!important;
}

.cv-profile-copy{
  max-width:800px!important;
  color:#d5e5f5!important;
  font-size:1rem!important;
  line-height:1.75!important;
}

.cv-page .cv-lead{
  max-width:800px!important;
  color:#f0f7ff!important;
  font-size:1.16rem!important;
  line-height:1.55!important;
}

/* Crop the CV portrait too so the background board disappears. */
.cv-page .cv-photo{
  object-position:32% 20%!important;
  transform:scale(1.08)!important;
}

/* ByteSight hook has no visual footprint; config is intentionally disabled until
   the non-WordPress tracker/API contract is ready. */


/* ===== v19 headline + quote positioning ===== */

/* White part of hero headline becomes lighter/regular weight.
   Blue "difference." remains the emphasis. */
.jf-hero h1{
  font-weight:400 !important;
}

.jf-hero h1 .hero-line{
  font-weight:400 !important;
}

.jf-hero h1 em{
  color:#12a9ff !important;
  font-style:normal !important;
  font-weight:700 !important;
}

/* Quote overlay is now sized/positioned relative to the hero-image panel itself. */
.jf-hero-visual{
  position:relative !important;
}

.jf-quote{
  top:12% !important;
  right:4% !important;
  width:30% !important;
  max-width:220px !important;
  min-width:165px !important;
  text-align:left !important;
}

.jf-quote p{
  font-size:clamp(.95rem,1.25vw,1.18rem) !important;
  line-height:1.42 !important;
}

.jf-quote span{
  text-align:right !important;
  font-size:.76rem !important;
}

/* Give the script a little extra separation from the portrait itself. */
.jf-quote{
  padding-left:10px !important;
}

@media (max-width:1100px){
  .jf-quote{
    right:3% !important;
    width:28% !important;
  }
}


/* ===== v20 corrected hero headline markup ===== */
.jf-hero .hero-title{
  margin:0 0 20px !important;
  max-width:760px !important;
  font-size:clamp(3.35rem,4.7vw,4.95rem) !important;
  line-height:.99 !important;
  letter-spacing:-.045em !important;
  font-weight:400 !important;
}

.jf-hero .hero-title-white{
  display:block !important;
  color:#ffffff !important;
  font-weight:400 !important;
  white-space:nowrap !important;
}

.jf-hero .hero-title-blue{
  color:#12a9ff !important;
  font-weight:700 !important;
}


/* =========================================================
   v21 — MOBILE-FIRST REFINEMENT
   Desktop/tablet remain unchanged. These rules only reshape
   the layout below 700px.
   ========================================================= */

@media (max-width:700px){

  /* ---------- shared page width ---------- */
  .shell,
  .jf-header .jf-header-inner,
  .jf-hero-grid{
    width:min(100% - 28px,1240px) !important;
    margin-left:auto !important;
    margin-right:auto !important;
  }

  /* ---------- header ---------- */
  .jf-header .jf-header-inner{
    min-height:86px !important;
    padding:10px 0 !important;
    align-items:center !important;
  }

  .jf-wordmark{
    width:210px !important;
  }

  .jf-brand-sub{
    display:none !important;
  }

  .jf-menu-toggle{
    width:44px !important;
    height:44px !important;
    border-radius:13px !important;
  }

  .jf-nav{
    top:76px !important;
    right:14px !important;
    width:min(300px,calc(100vw - 28px)) !important;
  }

  /* ---------- homepage hero ---------- */
  .jf-hero{
    min-height:0 !important;
    padding:108px 0 42px !important;
  }

  .jf-hero-grid{
    display:flex !important;
    flex-direction:column !important;
    gap:28px !important;
    align-items:stretch !important;
  }

  .jf-hero-copy{
    width:100% !important;
    padding:0 !important;
  }

  .jf-brand-rule{
    width:100% !important;
    max-width:none !important;
    margin:12px 0 20px !important;
  }

  .jf-hero .eyebrow{
    margin-bottom:14px !important;
    font-size:.68rem !important;
    line-height:1.55 !important;
    letter-spacing:.24em !important;
  }

  /* Mobile headline gets its own sensible scale.
     It may wrap naturally, but never underneath the portrait. */
  .jf-hero .hero-title{
    max-width:100% !important;
    margin:0 0 18px !important;
    font-size:clamp(2.7rem,13vw,3.7rem) !important;
    line-height:1.02 !important;
    letter-spacing:-.04em !important;
  }

  .jf-hero .hero-title-white{
    white-space:normal !important;
  }

  .jf-hero-lead{
    max-width:100% !important;
    margin-bottom:22px !important;
    font-size:1rem !important;
    line-height:1.62 !important;
  }

  .jf-hero .hero-actions{
    display:grid !important;
    grid-template-columns:1fr 1fr !important;
    gap:12px !important;
    margin-bottom:24px !important;
  }

  .jf-primary,
  .jf-secondary{
    width:100% !important;
    min-width:0 !important;
    min-height:48px !important;
    padding:0 14px !important;
  }

  /* Move strengths ABOVE the portrait and keep them compact. */
  .jf-strengths{
    order:2 !important;
    width:100% !important;
    max-width:none !important;
    grid-template-columns:1fr 1fr !important;
    gap:14px 12px !important;
    margin-top:2px !important;
  }

  .jf-strengths>div{
    gap:10px !important;
    font-size:.75rem !important;
  }

  .jf-strengths span{
    width:42px !important;
    height:42px !important;
    flex-basis:42px !important;
    font-size:1rem !important;
  }

  /* Portrait becomes a normal block. No overlap with copy. */
  .jf-hero-visual{
    order:3 !important;
    position:relative !important;
    width:100% !important;
    min-height:0 !important;
    height:auto !important;
    aspect-ratio:4/5 !important;
    margin-top:4px !important;
    overflow:hidden !important;
    border-radius:24px !important;
  }

  .jf-hero-photo{
    position:absolute !important;
    inset:0 !important;
    width:100% !important;
    height:100% !important;
    object-fit:cover !important;
    object-position:35% 22% !important;
    transform:scale(1.06) !important;
    border-radius:24px !important;
  }

  .jf-hero-visual::before{
    border-radius:24px !important;
    background:
      linear-gradient(0deg,rgba(3,20,43,.52) 0%,transparent 34%),
      linear-gradient(90deg,rgba(3,20,43,.10),transparent 35%) !important;
  }

  .jf-hero-visual::after{
    width:22% !important;
    border-radius:0 24px 24px 0 !important;
  }

  /* Keep quote inside the photograph, clear of the face. */
  .jf-quote{
    display:block !important;
    top:7% !important;
    right:5% !important;
    width:38% !important;
    min-width:0 !important;
    max-width:145px !important;
    padding:0 !important;
  }

  .jf-quote p{
    font-size:.78rem !important;
    line-height:1.38 !important;
  }

  .jf-quote span{
    font-size:.58rem !important;
  }

  /* On mobile the info card belongs at the bottom of the image,
     not halfway across the user's face. */
  .jf-info-card{
    left:14px !important;
    right:14px !important;
    bottom:14px !important;
    width:auto !important;
    padding:12px 14px !important;
    display:grid !important;
    grid-template-columns:1fr 1fr !important;
    gap:4px 10px !important;
    border-radius:16px !important;
  }

  .jf-info-card>div{
    min-height:30px !important;
    gap:8px !important;
    font-size:.68rem !important;
  }

  .jf-info-card span{
    width:18px !important;
    font-size:.85rem !important;
  }

  /* ---------- work / sections ---------- */
  .section{
    padding-top:46px !important;
    padding-bottom:46px !important;
  }

  .section-head{
    gap:14px !important;
    margin-bottom:24px !important;
  }

  .section-head h2{
    font-size:2rem !important;
    line-height:1.08 !important;
  }

  /* ---------- About card ---------- */
  .profile-grid{
    gap:16px !important;
  }

  .profile-card{
    padding:22px !important;
    border-radius:22px !important;
  }

  /* Stop text wrapping around the image on narrow mobile.
     It is cleaner as a compact portrait + content stack. */
  .profile-card .about-flow .about-photo{
    float:none !important;
    display:block !important;
    width:112px !important;
    height:140px !important;
    margin:0 0 14px !important;
    border-radius:16px !important;
  }

  .profile-card .about-flow h2{
    margin:0 0 12px !important;
    font-size:1.75rem !important;
    line-height:1.08 !important;
  }

  .profile-card .about-flow p{
    font-size:.98rem !important;
    line-height:1.64 !important;
    margin-bottom:16px !important;
  }

  .profile-card .about-flow .inline-actions{
    display:grid !important;
    grid-template-columns:1fr !important;
    gap:10px !important;
    clear:both !important;
    padding-top:4px !important;
  }

  .profile-card .inline-actions .btn{
    width:100% !important;
    justify-content:center !important;
  }

  /* ---------- approach cards ---------- */
  .approach-grid{
    grid-template-columns:1fr !important;
    gap:12px !important;
  }

  .approach-card{
    padding:20px !important;
  }

  .approach-title{
    align-items:flex-start !important;
  }

  /* ---------- CV mobile ---------- */
  .cv-page .cv-hero{
    padding:108px 0 38px !important;
    min-height:0 !important;
  }

  .cv-page .cv-hero-grid{
    grid-template-columns:1fr !important;
    gap:24px !important;
  }

  .cv-profile-heading{
    font-size:2.15rem !important;
    line-height:1.08 !important;
  }

  .cv-page .cv-lead{
    font-size:1rem !important;
  }

  .cv-profile-copy{
    font-size:.94rem !important;
    line-height:1.66 !important;
  }

  .cv-page .cv-photo{
    display:block !important;
    width:min(100%,290px) !important;
    margin:0 auto !important;
    transform:none !important;
    object-position:34% 18% !important;
  }

  .cv-page .hero-actions{
    display:grid !important;
    grid-template-columns:1fr !important;
    gap:10px !important;
  }

  .cv-page .hero-actions .btn{
    width:100% !important;
    justify-content:center !important;
  }

  .cv-page .cv-content{
    padding-top:40px !important;
  }

  .cv-page .cv-grid{
    gap:16px !important;
  }

  .cv-page .cv-card{
    padding:20px !important;
  }

  /* ---------- footer ---------- */
  .footer-wrap{
    gap:22px !important;
    text-align:center !important;
  }

  .footer-brand,
  .footer-right{
    align-items:center !important;
    text-align:center !important;
  }

  .footer-brand .signature-mark{
    margin-left:auto !important;
    margin-right:auto !important;
  }

  .footer-right .footer-copyright{
    text-align:center !important;
  }

  /* Back-to-top doesn't cover primary CTA buttons. */
  .back-to-top{
    right:12px !important;
    bottom:12px !important;
    width:40px !important;
    height:40px !important;
  }
}

/* Extra-small phones */
@media (max-width:380px){
  .jf-hero .hero-title{
    font-size:2.5rem !important;
  }

  .jf-hero .hero-actions{
    grid-template-columns:1fr !important;
  }

  .jf-info-card{
    grid-template-columns:1fr !important;
  }

  .jf-hero-visual{
    aspect-ratio:3/4 !important;
  }
}


/* =========================================================
   v22 — portrait quote refinement
   ========================================================= */

/* Desktop/tablet: keep quote in the safe right-hand area of the photo. */
.jf-quote{
  top:10% !important;
  right:3.5% !important;
  width:27% !important;
  max-width:205px !important;
  min-width:155px !important;
  padding:0 !important;
  text-align:left !important;
}

.jf-quote p{
  margin:0 0 7px !important;
  font-size:clamp(.90rem,1.05vw,1.08rem) !important;
  line-height:1.34 !important;
  letter-spacing:.005em !important;
}

.jf-quote span{
  display:block !important;
  margin-top:5px !important;
  padding-right:2px !important;
  text-align:right !important;
  font-size:.68rem !important;
  line-height:1.2 !important;
  color:#c5d8ea !important;
}

/* Mobile: push the quote farther right and keep it clear of the face/hairline. */
@media (max-width:700px){
  .jf-quote{
    top:6% !important;
    right:4.5% !important;
    width:36% !important;
    max-width:132px !important;
    min-width:0 !important;
    padding:0 !important;
  }

  .jf-quote p{
    font-size:.70rem !important;
    line-height:1.32 !important;
    margin-bottom:5px !important;
  }

  .jf-quote span{
    margin-top:3px !important;
    font-size:.52rem !important;
    text-align:right !important;
  }
}

@media (max-width:420px){
  .jf-quote{
    top:5% !important;
    right:4% !important;
    width:34% !important;
    max-width:118px !important;
  }

  .jf-quote p{
    font-size:.64rem !important;
    line-height:1.30 !important;
  }

  .jf-quote span{
    font-size:.48rem !important;
  }
}
