/* ==========================================================================
   GSKordeven Orbit 9.0 - services, navigation dropdown and footer
   --------------------------------------------------------------------------
   Everything here is an addition. Nothing in styles.css or three-d.css was
   changed, so removing this one file returns the site to how version 8 looked.

     1. Services dropdown in the header
     2. The service card grid on the services page
     3. Service page sections
     4. The rebuilt footer
     5. A wider carousel with fuller cards
     6. The service photograph

   Built from the theme's own custom properties, so it inherits the live
   palette rather than restating it.

   A note on the dropdown selectors: WordPress marks a menu parent with
   .menu-item-has-children, while the theme's own fallback menu marks it with
   .has-sub. Both are matched, so the dropdown works whether the owner is using
   a menu built in Appearance -> Menus or the fallback the theme prints when no
   menu has been assigned.
   ========================================================================== */

/* ============ 1. SERVICES DROPDOWN ============ */

.primary-menu .has-sub,
.primary-menu .menu-item-has-children{position:relative}

.primary-menu .has-sub > a,
.primary-menu .menu-item-has-children > a{display:inline-flex;align-items:center;gap:6px}

/* The caret is drawn rather than typed, so it inherits the link colour and
   there is no font dependency. */
.primary-menu .has-sub > a::after,
.primary-menu .menu-item-has-children > a::after{
  content:"";width:7px;height:7px;
  border-right:2px solid currentColor;border-bottom:2px solid currentColor;
  transform:translateY(-2px) rotate(45deg);
  transition:transform .2s ease;
}
.primary-menu .has-sub:hover > a::after,
.primary-menu .has-sub:focus-within > a::after,
.primary-menu .menu-item-has-children:hover > a::after,
.primary-menu .menu-item-has-children:focus-within > a::after{transform:translateY(1px) rotate(225deg)}

.sub-menu{
  position:absolute;left:50%;top:100%;z-index:70;
  margin:0;padding:10px;list-style:none;
  min-width:290px;transform:translateX(-50%) translateY(8px);
  border:1px solid var(--line);border-radius:var(--radius);
  background:rgba(32,36,44,.98);
  box-shadow:var(--shadow-3);
  backdrop-filter:blur(14px);
  opacity:0;visibility:hidden;pointer-events:none;
  transition:opacity .18s ease,transform .18s ease,visibility .18s;
}

/* A gap between the link and the panel would close the menu as the pointer
   crossed it. This bridges that gap without being visible. */
.primary-menu .has-sub::after,
.primary-menu .menu-item-has-children::after{
  content:"";position:absolute;left:0;right:0;top:100%;height:14px;
}

.primary-menu .has-sub:hover .sub-menu,
.primary-menu .has-sub:focus-within .sub-menu,
.primary-menu .menu-item-has-children:hover .sub-menu,
.primary-menu .menu-item-has-children:focus-within .sub-menu{
  opacity:1;visibility:visible;pointer-events:auto;
  transform:translateX(-50%) translateY(0);
}

.sub-menu li{margin:0}
.sub-menu a{
  display:block;padding:9px 13px;border-radius:var(--radius-sm);
  color:var(--text-2);font-size:.9rem;font-weight:600;
  text-decoration:none;letter-spacing:0;text-transform:none;
  transition:background .16s ease,color .16s ease;
}
.sub-menu a:hover,.sub-menu a:focus-visible{
  background:rgba(57,170,255,.14);color:var(--text);
}
.sub-menu .sub-all{
  margin-top:6px;padding-top:10px;
  border-top:1px solid var(--line-soft);
}
.sub-menu .sub-all a{color:var(--cyan)}

/* On a phone the header menu is a stacked panel, so the dropdown becomes an
   ordinary indented list rather than an overlay that would fall off screen. */
@media (max-width:960px){
  .sub-menu{
    position:static;transform:none;min-width:0;
    margin:6px 0 4px 14px;padding:0 0 0 12px;
    border:0;border-left:1px solid var(--line-soft);border-radius:0;
    background:none;box-shadow:none;backdrop-filter:none;
    opacity:1;visibility:visible;pointer-events:auto;
  }
  .primary-menu .has-sub::after,
  .primary-menu .menu-item-has-children::after{display:none}
  .primary-menu .has-sub > a::after,
  .primary-menu .menu-item-has-children > a::after{display:none}
}

/* ============ 2. SERVICE CARD GRID ============ */

.svc-grid{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));
  gap:22px;margin-top:28px;
}

.svc-card{
  position:relative;display:flex;flex-direction:column;
}

/* The flip tile is the theme's own component, unchanged. It sits inside this
   wrapper so a real link can live underneath it: a <button> may not contain an
   <a>, and the link has to be a genuine anchor for search engines to follow
   it to the service page. */
.svc-card .flip-tile{width:100%}

.svc-card-foot{
  margin-top:12px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;
}
.svc-more{
  color:var(--text-2);font-size:.88rem;
  font-weight:700;text-decoration:none;
  border-bottom:1px solid var(--line);padding-bottom:2px;
}

/* The price, sitting on the card.
   .flip-face carries no position of its own, and the only positioned ancestor
   is .flip-tile-inner, which both faces share. Anchoring to that would leave
   the price hovering over the back of the card once it turned. Making the
   front face a positioning context keeps the price attached to it, so it
   turns away with the card as it should. Scoped to .svc-card so the flip
   tiles elsewhere on the site are untouched. */
.svc-card .flip-face{position:relative}
.tile-price{
  position:absolute;top:14px;right:14px;z-index:3;
  padding:6px 13px;border-radius:999px;
  border:1px solid var(--line-strong);
  background:rgba(16,20,26,.86);
  backdrop-filter:blur(6px);
  color:var(--cyan);font-size:.78rem;font-weight:800;
  letter-spacing:.04em;white-space:nowrap;
  box-shadow:var(--shadow-2);
}
.svc-card.is-flagged .tile-price{
  border-color:var(--purple-2);color:var(--purple-2);
}
.svc-more:hover,.svc-more:focus-visible{color:var(--cyan);border-color:var(--cyan)}

/* The flag sits on the wrapper, above the tile, so flipping the card does not
   turn the flag over with it. */
.svc-flag{
  position:absolute;top:-11px;left:18px;z-index:5;
  padding:4px 13px;border-radius:999px;
  background:linear-gradient(100deg,var(--purple),var(--blue-deep));
  color:#fff;font-size:.62rem;font-weight:800;
  letter-spacing:.13em;text-transform:uppercase;
  box-shadow:var(--shadow-2);pointer-events:none;
}
.svc-card.is-flagged .flip-face{border-color:var(--line-strong)}
.svc-card.is-flagged .flip-face.front{box-shadow:var(--shadow-2),var(--glow)}

/* ============ 3. SERVICE PAGE SECTIONS ============ */

.svc-hero-price{margin:22px 0 4px;display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.svc-hero-price span{
  font-size:1.85rem;font-weight:800;letter-spacing:-.02em;
  background:linear-gradient(100deg,var(--cyan),var(--purple-2));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.svc-hero-price em{color:var(--muted-2);font-size:.82rem;font-style:normal}

.svc-cols{
  margin:18px 0 0;padding:0;list-style:none;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:10px 30px;
}
.svc-cols li{
  position:relative;padding:9px 0 9px 22px;
  border-bottom:1px solid var(--line-soft);color:var(--muted);
}
.svc-cols li::before{
  content:"";position:absolute;left:2px;top:16px;
  width:7px;height:7px;border-radius:50%;
  background:linear-gradient(100deg,var(--cyan),var(--purple-2));
}

.svc-groups{
  margin-top:22px;display:grid;
  grid-template-columns:repeat(auto-fit,minmax(255px,1fr));gap:20px;
}
.svc-group{
  padding:20px 22px;border:1px solid var(--line-soft);border-radius:var(--radius);
  background:var(--surface-2);box-shadow:var(--shadow-1);
}
.svc-group h3{
  margin:0 0 10px;color:var(--cyan);
  font-size:.76rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
}
.svc-group ul{margin:0;padding-left:18px;color:var(--muted);font-size:.9rem}
.svc-group li{margin-bottom:6px}

.svc-steps{
  margin:22px 0 0;padding:0;list-style:none;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:18px;
}
.svc-step{
  padding:22px;border:1px solid var(--line-soft);border-radius:var(--radius);
  background:var(--surface-2);position:relative;overflow:hidden;
}
.svc-step::before{
  content:"";position:absolute;left:0;right:0;top:0;height:3px;
  background:linear-gradient(90deg,var(--blue),var(--purple));
}
.svc-step h3{margin:0 0 8px;font-size:1.02rem}
.svc-step p{margin:0;color:var(--muted);font-size:.92rem}

.svc-tiers{
  margin:22px 0 0;display:grid;
  grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:20px;
}
.svc-tier{
  position:relative;padding:26px 24px;
  border:1px solid var(--line-soft);border-radius:var(--radius);
  background:var(--surface-2);box-shadow:var(--shadow-1);
}
.svc-tier-popular{
  border-color:var(--line-strong);
  background:linear-gradient(160deg,var(--raised),var(--surface-2));
  box-shadow:var(--shadow-2),var(--glow);
}
.svc-badge{
  position:absolute;top:-11px;left:24px;padding:4px 12px;border-radius:999px;
  background:linear-gradient(100deg,var(--purple),var(--blue-deep));
  color:#fff;font-size:.62rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
}
.svc-tier h3{margin:0 0 6px;font-size:1.1rem}
.svc-tier-price{
  margin:0 0 14px;font-size:1.5rem;font-weight:800;letter-spacing:-.02em;
  background:linear-gradient(100deg,var(--cyan),var(--purple-2));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.svc-tier ul{margin:0;padding-left:18px;color:var(--muted);font-size:.89rem}
.svc-tier li{margin-bottom:5px}

.svc-disclaimer{
  margin-top:18px;padding:14px 18px;border-radius:var(--radius-sm);
  border:1px solid var(--line-soft);background:var(--band-2);
  color:var(--muted-2);font-size:.85rem;
}

.svc-related{
  margin:18px 0 0;padding:0;list-style:none;
  display:flex;flex-wrap:wrap;gap:10px;
}
.svc-related a{
  display:inline-block;padding:9px 16px;
  border:1px solid var(--line);border-radius:999px;
  background:var(--surface-2);color:var(--text-2);
  font-size:.88rem;text-decoration:none;
}
.svc-related a:hover,.svc-related a:focus-visible{border-color:var(--line-strong);color:var(--text)}

@media (max-width:640px){
  .svc-hero-price span{font-size:1.5rem}
  .svc-more{margin-left:0}
}

@media (prefers-reduced-motion:reduce){
  .sub-menu,.primary-menu .has-sub > a::after{transition:none}
}

/* ============ 4. FOOTER ============ */
/* The theme footer centres a single column and lets it wrap. That worked with
   five links. Eleven services turned it into ragged centred rows with no
   grouping, so this makes it four labelled columns instead. */

.footer{text-align:left}
.footer-inner{max-width:var(--max)}

.footer-cols{
  display:grid;grid-template-columns:1.6fr 1fr 1.5fr 1.3fr;
  gap:44px 36px;align-items:start;
}

.footer-brand .footer-logo{margin:0 0 16px}
.footer-tagline{margin:0 0 10px;max-width:34ch}
.footer-where{margin:0 0 20px;max-width:36ch}
.footer-brand .socials{justify-content:flex-start;margin-top:0}

.footer-col-title{
  margin:0 0 15px;color:var(--cyan);
  font-size:.72rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
}
.footer-col ul{margin:0;padding:0;list-style:none}
.footer-col li{margin-bottom:10px}
.footer-col a{
  color:var(--text-2);font-size:.9rem;font-weight:600;text-decoration:none;
}
.footer-col a:hover,.footer-col a:focus-visible{color:var(--blue);text-decoration:underline}

/* Eleven services in one column would be taller than everything beside it. */
.footer-col-wide ul{columns:2;column-gap:28px}
.footer-col-wide li{break-inside:avoid}

.footer-base{
  margin-top:38px;padding-top:20px;
  border-top:1px solid rgba(126,166,230,.24);
}
.footer-base .footer-legal{margin:0 0 10px}
.footer-base .footer-bottom{
  max-width:none;margin:0;padding-top:0;border-top:0;text-align:left;
}

@media (max-width:1080px){
  .footer-cols{grid-template-columns:1.4fr 1fr 1.4fr;gap:38px 30px}
  .footer-brand{grid-column:1/-1}
  .footer-brand .footer-tagline,.footer-brand .footer-where{max-width:60ch}
}
@media (max-width:760px){
  .footer-cols{grid-template-columns:1fr 1fr}
  .footer-col-wide{grid-column:1/-1}
}
@media (max-width:460px){
  .footer-cols{grid-template-columns:1fr}
  .footer-col-wide ul{columns:1}
}

/* ============ 5. CAROUSEL ============ */
/* Eleven cards on a ring the size that suited five left them overlapping and
   foreshortened. Widening the ring widens the radius with it, because the
   script derives the radius from the ring's own width.

   Scoped above the theme's 640px breakpoint so the phone sizes, which were
   never the problem, are left exactly as they are. */

@media (min-width:641px){
  .csc-carousel{height:540px;perspective:2200px;perspective-origin:50% 46%}
  .csc-ring{width:348px;height:448px}
}
@media (min-width:1081px){
  .csc-ring{width:372px;height:466px}
}

/* ============ 6. SERVICE PAGE HERO AND DETAIL ============ */

.svc-hero-grid{
  display:grid;grid-template-columns:1.65fr 1fr;gap:44px;align-items:start;
}
.svc-hero-copy .svc-lede{max-width:58ch;font-size:1.05rem;color:var(--text-2)}

.svc-glance{
  padding:24px 26px;border:1px solid var(--line);border-radius:var(--radius);
  background:linear-gradient(160deg,rgba(48,58,74,.9),rgba(38,45,56,.95));
  box-shadow:var(--shadow-2);
}
.svc-glance-title{
  margin:0 0 14px;color:var(--cyan);
  font-size:.72rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
}
.svc-glance-list{margin:0}
.svc-glance-row{
  display:flex;justify-content:space-between;align-items:baseline;gap:16px;
  padding:10px 0;border-bottom:1px solid var(--line-soft);
}
.svc-glance-row:last-child{border-bottom:0;padding-bottom:0}
.svc-glance-row dt{margin:0;color:var(--muted-2);font-size:.82rem;flex:0 0 auto}
.svc-glance-row dd{margin:0;color:var(--text-2);font-size:.86rem;font-weight:700;text-align:right}

.svc-exchange{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.svc-exchange-col{
  padding:26px 28px;border-radius:var(--radius);
  border:1px solid var(--line-soft);background:var(--surface-2);
  box-shadow:var(--shadow-1);
}
.svc-exchange-give{border-left:3px solid var(--cyan)}
.svc-exchange-take{border-left:3px solid var(--purple-2)}
.svc-exchange-col h2{margin:0 0 14px;font-size:1.14rem}
.svc-exchange-col ul{margin:0;padding-left:19px;color:var(--muted);font-size:.93rem}
.svc-exchange-col li{margin-bottom:8px}

.svc-guides{
  margin-top:22px;display:grid;
  grid-template-columns:repeat(auto-fit,minmax(258px,1fr));gap:18px;
}
.svc-guide{
  padding:20px 22px;border:1px solid var(--line-soft);
  border-radius:var(--radius);background:var(--surface-2);
}
.svc-guide h3{margin:0 0 8px;font-size:.98rem;color:var(--text)}
.svc-guide p{margin:0;color:var(--muted);font-size:.88rem}
.svc-guide-note{
  margin-top:20px;padding:13px 17px;border-radius:var(--radius-sm);
  border:1px solid var(--line-soft);background:var(--band-2);
  color:var(--muted-2);font-size:.85rem;
}

@media (max-width:960px){
  .svc-hero-grid{grid-template-columns:1fr;gap:30px}
  .svc-exchange{grid-template-columns:1fr}
}

/* ============ 7. FULLER CAROUSEL CARDS ============ */
/* The front face used to be a title, one line, and a tag pinned to the bottom.
   On a card this tall that left the middle empty. Both faces now use it. */

.csc-points{
  margin:0 0 16px;padding:0;list-style:none;
  display:flex;flex-direction:column;gap:8px;
}
.csc-points li{
  position:relative;padding-left:19px;
  color:var(--muted);font-size:.86rem;line-height:1.45;
}
.csc-points li::before{
  content:"";position:absolute;left:0;top:8px;
  width:6px;height:6px;border-radius:50%;
  background:linear-gradient(100deg,var(--cyan),var(--purple-2));
}

.csc-price{
  margin:auto 0 0!important;padding-top:14px;
  color:var(--cyan)!important;
  font-size:1.05rem!important;font-weight:800;letter-spacing:-.01em;
}

/* The tag was the element pinned to the bottom by margin-top:auto. The price
   takes that job now, so the tag becomes an ordinary sibling under it. */
.csc-face.front .csc-tag{
  margin-top:10px;padding-top:12px;
}

.csc-backlede{margin-bottom:16px!important}
.csc-steplist{
  margin:0 0 auto;padding:0;list-style:none;
  display:flex;flex-direction:column;gap:9px;
}
.csc-steplist li{
  position:relative;padding:8px 0 8px 20px;
  border-bottom:1px solid var(--line-soft);
  color:var(--text-2);font-size:.85rem;font-weight:600;
}
.csc-steplist li:last-child{border-bottom:0}
.csc-steplist li::before{
  content:"";position:absolute;left:2px;top:14px;
  width:8px;height:2px;border-radius:2px;background:var(--cyan);
}

@media (max-width:640px){
  .csc-points li,.csc-steplist li{font-size:.8rem}
  .csc-points{gap:6px}
}

/* ============ 8. SERVICE PHOTOGRAPH ============ */
/* Sits between the hero and the body of a service page. Ratio is fixed so the
   page does not jump as the image arrives, which is what the width and height
   attributes on the tag are for as well. */

.svc-figure-band{padding:0 0 8px}
.svc-figure{
  margin:0;border-radius:var(--radius);overflow:hidden;
  border:1px solid var(--line-soft);box-shadow:var(--shadow-2);
  position:relative;
}
.svc-figure img{
  display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;
}
/* A brand-coloured wash, so a stock-looking photograph still reads as part of
   this site rather than dropped in from elsewhere. */
.svc-figure::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(150deg,rgba(57,170,255,.10),transparent 46%,rgba(132,96,217,.14));
}

@media (max-width:640px){
  .svc-figure img{aspect-ratio:16/10}
}

/* ---- carousel card photograph ---- */
/* Sits between the points and the price. The price carries margin-top:auto, so
   the space above it grows and shrinks with how much text a card has; letting
   the picture take that space rather than adding a fixed block means a card
   with a longer lede simply gets a shorter strip instead of overflowing. */
.csc-art{
  display:block;width:100%;margin:0 0 14px;
  min-height:0;max-height:132px;
  flex:1 1 auto;object-fit:cover;
  border-radius:10px;border:1px solid var(--line-soft);
}
@media (max-width:640px){
  .csc-art{max-height:96px;margin-bottom:10px}
}
