/* NIVO Group homepage (ring design). Built 2026-10-06 from the approved
   prototype (website-next/design/home-2026-10, Codex, approved by Alin 4 Oct)
   plus the ring revision Alin directed on 5 Oct (design/home-2026-10-ring).
   Only the homepage loads this file; account, privacy and 404 keep styles.css. */
@font-face{font-family:Alexandria;src:url('/fonts/alexandria-lat.woff2') format('woff2');font-weight:100 900;font-display:swap;unicode-range:U+0000-00FF,U+00B7,U+2013-2014,U+2018-201D,U+2026,U+2192}
@font-face{font-family:Alexandria;src:url('/fonts/alexandria-ar.woff2') format('woff2');font-weight:100 900;font-display:swap;unicode-range:U+0600-06FF,U+0750-077F,U+FB50-FDFF,U+FE70-FEFF,U+200C-200E}
/* Palette: "Iris & graphite", the same as NIVO IT's page (2026-10-20), so the colour
   does not change when a visitor clicks through. --brand is the text-safe iris (links,
   the accent line); --button is the brighter iris for filled surfaces. The aliases let
   guide.css (shared tokens) read it. */
:root{--bg:#f6f6fa;--paper:#fff;--ink:#15151c;--muted:#55556a;--line:#e0e0ea;--brand:#4a32c4;--soft:#eeebfb;--art:#ebe8f7;color-scheme:light}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0f0f15;--paper:#1a1a23;--ink:#f2f2f8;--muted:#ababbd;--line:#2c2c38;--brand:#a99bff;--soft:#24213a;--art:#221f33;color-scheme:dark}}
:root[data-theme=dark]{--bg:#0f0f15;--paper:#1a1a23;--ink:#f2f2f8;--muted:#ababbd;--line:#2c2c38;--brand:#a99bff;--soft:#24213a;--art:#221f33;color-scheme:dark}
:root{--surface:var(--paper);--accent-text:var(--brand);--button:#5a3fe0;--button-ink:#fff}
:root[data-theme=dark]{--button:var(--brand);--button-ink:#121525}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--button:var(--brand);--button-ink:#121525}}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.9 Alexandria,Arial,sans-serif}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;background:none;border:0}button,a,summary{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--brand);outline-offset:4px}img{display:block;max-width:100%;height:auto}svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.6}h1,h2,h3,p{margin:0}h1,h2,h3{text-wrap:balance}h2{font-size:28px;line-height:1.6;font-weight:600}h3{font-size:25px;font-weight:600}[hidden]{display:none!important}.wrap{max-width:1160px;margin-inline:auto;width:calc(100% - 96px)}.skip{position:fixed;top:-90px;z-index:30;padding:12px;background:var(--paper)}.skip:focus{top:8px}.preview-note{display:flex;justify-content:space-between;gap:15px;padding:7px 24px;font-size:10px;line-height:1.6;color:var(--muted)}.preview-note span:last-child{font-family:monospace;letter-spacing:.08em}
.header-shell{position:sticky;top:0;z-index:10;background:var(--bg);border-bottom:1px solid var(--line)}.header{height:82px;display:flex;align-items:center;gap:28px}.brand{display:flex;gap:9px;align-items:center;font-size:23px;font-weight:750;line-height:1.1;letter-spacing:-1px;direction:ltr}.brand-small{display:block;font-size:9px;letter-spacing:4px;font-weight:500;margin-top:7px}.header nav{display:flex;gap:25px;margin-inline-start:auto;font-size:12px}.header nav a,.header nav button{display:flex;align-items:center;min-height:44px;padding:0}.desk-shortcut{display:flex;align-items:center;justify-content:center;gap:15px;min-height:48px;padding:10px 20px;border-radius:9px;background:#5a3fe0;color:#fff;font-size:13px;white-space:nowrap}.desk-shortcut:hover,.primary:hover{background:#4a32c4}.header-options{position:relative}.header-options summary{display:grid;place-items:center;list-style:none;width:44px;height:44px;border:1px solid var(--line);border-radius:9px;cursor:pointer}.header-options summary::-webkit-details-marker{display:none}.header-options[open] summary{background:var(--soft)}.header-tools{position:absolute;inset-inline-end:0;top:56px;width:210px;display:grid;padding:8px;background:var(--paper);border:1px solid var(--line);border-radius:12px;box-shadow:0 14px 40px #0002}.header-tools a,.header-tools button{display:flex;align-items:center;justify-content:space-between;min-height:48px;padding:10px 14px;text-align:start;border-radius:6px;font-size:13px}.header-tools a:hover,.header-tools button:hover{background:var(--soft)}.header-tools button[aria-pressed=true]{background:var(--soft);color:var(--brand)}
.hero{display:grid;grid-template-columns:1.08fr 1fr;align-items:center;gap:55px;min-height:500px;padding-block:36px 45px}.eyebrow{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:10px}.tiny-mark{width:7px;height:7px;background:var(--brand);display:inline-block;border-radius:2px;transform:rotate(45deg)}h1{font-size:clamp(37px,4.2vw,60px);line-height:1.6;letter-spacing:-1.5px;font-weight:650;margin:18px 0}.accent{color:var(--brand)}.hero-description{color:var(--muted);font-size:16px;line-height:2;max-width:450px;margin-bottom:22px}.discover-link{display:inline-flex;align-items:center;gap:26px;min-height:48px;border-bottom:1px solid var(--line);font-size:14px}.discover-link:hover{border-color:var(--brand);color:var(--brand)}.direction-arrow{font-family:Arial,sans-serif;font-size:23px;font-weight:400}[dir=ltr] .direction-arrow{transform:scaleX(-1)}.hero-art{height:405px;position:relative;direction:ltr;isolation:isolate}.art-outline{position:absolute;inset:20px 0 40px 20px;border:1px solid var(--line);border-radius:180px 180px 24px 24px;transform:rotate(-7deg)}.art-orbit{position:absolute;inset:25px 25px 40px;border-radius:180px 180px 24px 24px;background:var(--art)}.hero-mascot{position:absolute;width:350px;max-width:none;right:50%;top:25px;transform:translateX(50%);transition:transform .35s}.hero-art:hover .hero-mascot{transform:translateX(50%) translateY(-6px)}.art-caption{position:absolute;bottom:0;left:0;right:0;text-align:center;font-size:12px;color:var(--muted)}
.guide-invitation{display:flex;align-items:center;gap:20px;width:100%;text-align:start;background:var(--paper);padding:20px 24px;border:1px solid var(--line);border-radius:12px}.guide-invitation:hover{border-color:var(--brand)}.guide-invitation strong{display:block;font-size:14px;font-weight:550}.guide-invitation span span{font-size:12px;color:var(--muted)}.guide-invitation-end{font-size:12px;margin-inline-start:auto;white-space:nowrap}.guide-invitation>.direction-arrow{color:var(--brand)}
.services{padding-block:64px}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:25px}.section-heading h2{margin-top:8px}.service-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.service-card{display:flex;flex-direction:column;gap:22px;border:1px solid var(--line);border-radius:18px;padding:26px;background:var(--paper);min-width:0}.card-heading{display:grid;grid-template-columns:minmax(0,1fr) 76px;align-items:center;gap:8px}.card-heading h3{font-size:21px;line-height:1.6}.card-heading img{width:76px;height:76px;object-fit:contain}.status{display:block;font-size:11px;color:var(--muted);margin-top:7px}.service-card>p{color:var(--muted);font-size:13px;line-height:1.95}.card-action{display:flex;align-items:center;justify-content:space-between;gap:20px;width:100%;min-height:48px;border-top:1px solid var(--line);padding:14px 0 0;margin-top:auto;text-align:start;font-size:13px}.card-action:hover{color:var(--brand)}.desk-card{background:#15151c;border-color:#15151c;color:#fff}.desk-card .status,.desk-card>p{color:#d6d4e4}.desk-card .card-action{border-color:#ffffff30}.desk-card .card-action:hover{color:#b9adff}.desk-card button:focus-visible{outline-color:#b9adff}
.contact{display:flex;align-items:center;justify-content:space-between;gap:24px;padding-block:44px;border-top:1px solid var(--line)}.contact h2{margin-top:9px}.contact-link{display:flex;align-items:center;gap:25px;font-size:14px;border-bottom:1px solid var(--ink);padding-block:10px;min-height:48px}.endnote{display:flex;align-items:center;justify-content:space-between;gap:20px;padding-block:20px 30px;font-size:11px;color:var(--muted);border-top:1px solid var(--line)}.endnote a{display:flex;align-items:center;min-height:44px}
#service-dialog{width:min(520px,calc(100% - 32px));max-height:90dvh;overflow-y:auto;padding:28px;border:1px solid var(--line);border-radius:18px;background:var(--paper);color:var(--ink);box-shadow:0 30px 100px #0003}#service-dialog::backdrop{background:#14142288;backdrop-filter:blur(5px)}.dialog-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.close-dialog{height:44px;width:44px;border:1px solid var(--line);border-radius:50%;font:26px Arial}.dialog-head+h2{font-size:27px;margin-bottom:8px}#service-dialog>p{color:var(--muted);font-size:12px}.guide-options{margin-top:22px;display:grid;gap:10px}.guide-options button,.guide-options a{display:flex;justify-content:space-between;align-items:center;gap:15px;text-align:start;min-height:50px;padding:12px 15px;border:1px solid var(--line);border-radius:8px;font-size:13px}.guide-options button:hover,.guide-options a:hover{border-color:var(--brand);background:var(--soft)}.dialog-note{margin-top:18px;font-size:12px}#service-dialog .contact-link{margin-top:22px;width:fit-content}
@media(max-width:1050px){.wrap{width:calc(100% - 56px)}.header{gap:18px}.header nav{gap:18px}.hero{gap:20px}.hero-mascot{width:300px;top:55px}.service-card{padding:20px;gap:18px}.card-heading{grid-template-columns:minmax(0,1fr) 60px}.card-heading img{width:60px;height:60px}.card-heading h3{font-size:18px}.task-panel{gap:30px}}
@media(max-width:760px){.wrap{width:calc(100% - 32px)}.preview-note{padding:6px 16px;font-size:9px}.header{height:72px;gap:10px}.header nav{display:none}.brand{font-size:18px;gap:6px}.brand img{width:26px;height:26px}.brand-small{display:none}.desk-shortcut{margin-inline-start:auto;font-size:12px;min-height:44px;padding:9px 12px;gap:9px}.header-options summary{width:44px;height:44px}.header-tools{top:52px}.hero{display:flex;flex-direction:column;gap:0;padding:28px 0;min-height:0;align-items:stretch}.eyebrow{font-size:12px}h1{font-size:clamp(31px,8.6vw,45px);line-height:1.55;letter-spacing:-1px;margin:15px 0}.hero-description{font-size:14px;max-width:430px;margin-bottom:14px}.hero-art{height:215px;width:270px;max-width:100%;align-self:center;margin-top:15px}.hero-mascot{width:215px;top:0}.art-outline{inset:18px 16px 10px}.art-orbit{inset:26px 26px 15px}.art-caption{display:none}.guide-invitation{gap:12px;padding:16px}.guide-invitation>img{width:26px;height:26px}.guide-invitation strong{font-size:13px}.guide-invitation span span{font-size:12px;line-height:1.8;display:block;margin-top:3px}.guide-invitation-end{display:none}.guide-invitation>.direction-arrow{margin-inline-start:auto}.services{padding-block:36px}.section-heading{margin-bottom:20px;align-items:start;gap:12px;flex-wrap:wrap}h2{font-size:24px}.service-grid{grid-template-columns:1fr;gap:14px}.service-card{padding:22px;gap:16px}.card-heading{grid-template-columns:minmax(0,1fr) 68px;gap:14px}.card-heading img{width:68px;height:68px}.card-heading h3{font-size:22px}.status{font-size:12px;margin-top:4px}.service-card>p{font-size:14px}.card-action{font-size:13px;padding-top:12px}.desk-section{padding:30px 0}.desk-section,.services,#main{scroll-margin-top:90px}.area-tabs{gap:6px}.area-tabs button{flex:1;padding:10px 8px;font-size:12px}.task-tabs{gap:0;padding-inline:8px;justify-content:space-between}.task-tabs button{font-size:11px;padding-inline:5px;min-height:56px}.task-panel{padding:24px 20px;grid-template-columns:1fr;gap:24px}.task-copy h3{font-size:23px}.task-copy .primary{width:100%}.task-steps{padding-inline-start:0;border:0}.task-step{font-size:13px;padding:10px 0}.contact{align-items:start;flex-direction:column;padding-block:32px;gap:18px}.contact h2{font-size:24px}.endnote{align-items:start;gap:15px}.endnote>span{max-width:210px}dialog{padding:22px}.dialog-head+h2{font-size:24px}}
@media(max-width:350px){.header{gap:8px}.brand{font-size:17px;gap:4px}.brand img{width:24px;height:24px}.desk-shortcut{padding-inline:9px;gap:6px;font-size:11px}.service-card{padding:20px}.card-heading h3{font-size:20px}}
.brand{min-height:44px;min-width:44px}
/* ---- Ring revision ---- */
/* Hero service ring probe — layered on the approved preview.css, never replacing it.
   Geometry: cards ride an orbit whose centre is in front of the mascot, so at rest
   all three cards sit in front of the mark and only a card in transit through the
   far point passes behind it. Cards always face the viewer (billboarded): a true
   cylinder would show the two rear cards backwards, which for Arabic is unreadable.
   Positions come from --x/--y/--s/--z. The data-pos defaults below are the no-JS and
   reduced-motion arrangement; ring.js only writes the same variables. */
.visually-hidden{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

.hero{min-height:0;padding-block:28px 36px}
.hero-art{height:auto;--card-w:340px;--rx:172px;--ry:176px}
.art-layers{position:absolute;inset:0 0 auto;height:380px}
.art-layers .art-outline{inset:10px 10px 0 30px}
.art-layers .art-orbit{inset:16px 40px 0}
.hero-mascot{width:300px;top:8px;z-index:2}
.art-layers .art-orbit{z-index:0}.art-layers .art-outline{z-index:1}

.ring{position:relative;height:560px;scroll-margin-top:100px}
[dir=rtl] .ring{direction:rtl}[dir=ltr] .ring{direction:ltr}
.ring:focus{outline:none}
.ring-stage{position:absolute;inset:0;touch-action:pan-y;-webkit-user-select:none;user-select:none}

.ring .service-card{
  position:absolute;bottom:0;left:50%;width:var(--card-w);margin-left:calc(var(--card-w) / -2);
  transform-origin:50% 100%;
  transform:translate3d(var(--x,0px),var(--y,0px),0) scale(var(--s,1));
  z-index:var(--z,3);
  box-shadow:0 calc(18px * var(--lift,1)) calc(46px * var(--lift,1)) #1d1c3a26;
  will-change:transform;
}
.ring .service-card:not(.desk-card){box-shadow:0 calc(14px * var(--lift,1)) calc(40px * var(--lift,1)) #1d1c3a1f}
:root[data-theme=dark] .ring .service-card{box-shadow:0 calc(18px * var(--lift,1)) calc(46px * var(--lift,1)) #0008}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .ring .service-card{box-shadow:0 calc(18px * var(--lift,1)) calc(46px * var(--lift,1)) #0008}}
/* Rest positions. "next" follows the reading direction: inline-end of the front card. */
.ring [data-pos=front]{--x:0px;--y:0px;--s:1;--z:30;--lift:1}
.ring [data-pos=next]{--x:calc(var(--rx) * .866);--y:calc(var(--ry) * -.75);--s:.84;--z:12;--lift:.35}
.ring [data-pos=previous]{--x:calc(var(--rx) * -.866);--y:calc(var(--ry) * -.75);--s:.84;--z:12;--lift:.35}
[dir=rtl] .ring [data-pos=next]{--x:calc(var(--rx) * -.866)}
[dir=rtl] .ring [data-pos=previous]{--x:calc(var(--rx) * .866)}
/* Inactive cards remain for the spring animation, but home.js makes them inert.
   The labelled service controls select the card before its action is available. */
.ring .service-card>p,.ring .service-card>.card-action{opacity:var(--body,1)}
.ring [data-pos=next],.ring [data-pos=previous]{--body:0}
.ring .status{font-size:12px}
/* Name + status must clear the card in front even when a name wraps ("Information
   technology" does in English). */
.ring .card-heading{align-items:start}.ring .card-heading h3{line-height:1.4}
/* A rear card is one tap from the front: whole card is the target for a pointer. */
.ring.is-live .service-card:not([data-pos=front]){cursor:pointer}
.ring.is-dragging .service-card{cursor:grabbing}

/* The ring replaces the section the discover link pointed at, and sits beside it. */
.discover-link{display:none}
.services{display:none}

/* Ring or stack is chosen by the width the art cell actually has, not by device:
   below 460px three cards cannot form a ring without leaving the page (measured
   at 768px: the rear card started at x = -54). ring.js reads the same width. */
.hero-art{container:ring-cell / inline-size}
@media(max-width:760px){.hero{padding-block:22px 18px}.hero-art{width:100%;margin-top:6px}}

/* Narrow: the same ring, scaled down to the characters. The main NIVO mark stands
   in the middle; the three service characters orbit it (selected one in front, at
   its feet); ONE card below always shows the service in front. Replaces the edge-on
   stack, where the first thing a phone visitor read was the last service. */
.orbit-picks{display:none}
@container ring-cell (min-width: 0px){
  .art-layers{position:relative;height:200px;width:100%}
  .art-layers .art-orbit{inset:10px calc(50% - 96px) 52px}
  .art-layers .art-outline{inset:2px calc(50% - 108px) 46px}
  .hero-mascot{width:128px;top:6px}
  .orbit-picks{display:block;position:absolute;inset:0 0 auto;height:200px}
  .orbit-pick{position:absolute;left:50%;top:var(--cy,78px);width:96px;margin-left:-48px;display:grid;justify-items:center;gap:2px;
    transform:translate3d(var(--x,0px),var(--y,0px),0) scale(var(--s,1));z-index:var(--z,3);will-change:transform}
  .orbit-pick img{width:68px;height:68px;object-fit:contain}
  /* Name only on the side characters; the card below names the one in front. */
  .orbit-pick span{font-size:11px;line-height:1.5;white-space:nowrap;color:var(--muted);opacity:var(--label,0)}
  .ring{height:auto;margin-top:4px}
  .ring-stage{position:relative;inset:auto;display:grid}
  .ring .service-card{position:relative;grid-area:1/1;left:auto;bottom:auto;width:auto;margin:0;align-self:stretch;opacity:var(--o,1)}
  .ring .service-card>p,.ring .service-card>.card-action{opacity:1}
  /* The character is already standing above the card. */
  .ring .card-heading{grid-template-columns:minmax(0,1fr)}.ring .card-heading img{display:none}
  .ring [data-pos=next],.ring [data-pos=previous]{--o:0;--x:0px;--y:0px;--s:1;pointer-events:none}
  [dir=rtl] .ring [data-pos=next],[dir=rtl] .ring [data-pos=previous]{--x:0px}
  /* Without the script: no orbit, all three cards in reading order. */
  .ring:not(.is-live) .ring-stage{gap:14px}
  .ring:not(.is-live) .service-card{grid-area:auto;--o:1;pointer-events:auto}
}
.hero-art:not(:has(.ring.is-live)) .orbit-picks{display:none}

/* Header: wordmark centred, language and theme as the two ends. */
.header-centered{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center}
.header-centered .brand{justify-self:center}
.header-centered .header-start{justify-self:start;display:flex;align-items:center;gap:6px}
@media(max-width:360px){.header-centered{gap:6px}.header-centered #language{padding:0 9px}}
.header-centered .theme-toggle{justify-self:end}
.header-toggle{display:inline-flex;align-items:center;justify-content:center;min-height:44px;min-width:44px;padding:0 16px;border:1px solid var(--line);border-radius:22px;font-size:13px}
.header-toggle:hover{background:var(--soft)}
.theme-toggle{width:44px;padding:0;border-radius:50%}
.theme-toggle[aria-pressed=true]{background:var(--soft);color:var(--brand)}

/* Reduced motion: preview.css already removes transitions. ring.js also skips the
   spring and jumps between rest positions, so the static arrangement above is what
   this audience sees — all three cards present, Desk in front. */

@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
/* ---- Production header: the live account link and balance (account.js) ---- */
.header-account{display:inline-flex;align-items:center;gap:8px}
.header-account a{display:inline-flex;align-items:center;min-height:44px;padding-inline:8px;font-size:13px;white-space:nowrap}
.header-account a:hover{color:var(--brand)}
.header-account [data-account-balance]{font-size:12px;color:var(--muted);white-space:nowrap}
.theme-toggle[aria-checked=true]{background:var(--soft);color:var(--brand)}
/* Every width (Alin, 6 Oct: the desktop header matches the phone): the account is a
   round person icon. account.js rewrites the link's text (Sign in / Account), so the
   icon is drawn in CSS and the text stays as the accessible name. The balance is
   shown on the account page and inside Desk, not in this header. */
.header-account [data-account-balance]{display:none!important}
.header-centered .brand-small{display:none}
.header-account a{position:relative;width:44px;height:44px;padding:0;border:1px solid var(--line);border-radius:50%;font-size:0;color:var(--ink);overflow:hidden}
.header-account a::before{content:'';position:absolute;left:50%;top:11px;width:9px;height:9px;margin-left:-4.5px;border:1.6px solid currentColor;border-radius:50%}
.header-account a::after{content:'';position:absolute;left:50%;top:23px;width:16px;height:12px;margin-left:-8px;border:1.6px solid currentColor;border-radius:9px 9px 0 0;border-bottom:0}
/* The approved sheet hides header <nav> on phones (its old link row); the account
   nav must stay, so it is addressed with higher specificity. */
.header .header-account{display:inline-flex;margin-inline-start:0;gap:8px;font-size:13px}

/* ---- 2026-10-06 quality pass (grade fixes) ---- */
/* Readable rear text: rear cards render at .84, so 14px status shows at ~12px. */
.ring .status{font-size:14px}
/* Dark theme: the Desk card must still stand apart from the other cards. */
:root[data-theme=dark] .desk-card{background:#251f4d;border-color:#8f80ff}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .desk-card{background:#251f4d;border-color:#8f80ff}}
.desk-card a:focus-visible{outline-color:#b9adff}
@container ring-cell (min-width: 0px){
  /* Character names: readable, and allowed to wrap rather than leave the cell. */
  .orbit-pick span{font-size:12.5px;line-height:1.35;white-space:normal;max-width:112px;text-align:center}
  /* Cards slide in from the side while turning; the slide may not widen the page. */
  .ring-stage{overflow:clip;overflow-clip-margin:16px}
}

/* Desktop (Alin, 6 Oct): the phone composition at every width — NIVO stands clear
   in the middle with the characters orbiting it and one card below, instead of
   cards in front of the mark. Same behaviour, larger sizes. */
@container ring-cell (min-width: 421px){
  /* Alin, 6 Oct: bigger characters (main NIVO most of all) and a compact stack, so
     the whole Desk card fits on the first screen of a ~650px-tall laptop window. */
  .art-layers{height:300px}
  .art-layers .art-orbit{inset:8px calc(50% - 160px) 54px}
  .art-layers .art-outline{inset:0 calc(50% - 178px) 48px}
  /* Up to 250px; slightly smaller in narrower columns so the side characters stay clear. */
  .hero-mascot{width:min(250px,52cqw);top:0}
  .orbit-picks{height:300px}
  .orbit-pick{top:112px;width:130px;margin-left:-65px}
  .orbit-pick img{width:104px;height:104px}
  .orbit-pick span{font-size:13px;max-width:130px}
  /* The card tucks up under the front character's feet. */
  .ring{max-width:420px;margin-inline:auto;margin-top:-8px}
  .ring .service-card{padding:18px 24px;gap:10px}
  .ring .card-heading h3{line-height:1.35}
  .ring .status{margin-top:2px}
  .ring .service-card>p{line-height:1.8}
  .ring .card-action{padding-top:8px}
  /* The art cell is wider than the card, so clip the side slide there and leave
     the card's shadow whole (clipping the stage cut it into a hard band). */
  .ring-stage{overflow:visible}
}
/* Desktop: a tighter opening so the art and its card sit higher on the page. */
@media(min-width:761px){
  .header{height:72px}
  .hero{padding-block:8px 24px}
}
/* Outside the query: a container cannot style itself. Clips the sideways slide of
   hidden cards so the page never widens (phones also clip at the stage). */
.hero-art{overflow-x:clip}

/* ---- Colour orbit (Alin, 2026-10-20: direction B of design/home-2026-10-ring-v2) ----
   Each service keeps its character's colour: Desk teal, IT magenta, Logistics rust.
   The service in front (data-front on .hero-art, written by home.js) colours the halo
   behind NIVO, the dashed track the characters ride, its own disc and the card's edge,
   so turning the ring visibly changes the choice. One 0.6 s colour change; nothing
   moves for decoration. The tones are text-safe on the page and on white. */
:root{--desk:#076a62;--desk-soft:#dcefeb;--it:#8a2a9c;--it-soft:#f3e3f6;--logistics:#a0350a;--logistics-soft:#f8e6dc}
:root[data-theme=dark]{--desk:#5fc9b8;--desk-soft:#173430;--it:#e2a6ef;--it-soft:#35213b;--logistics:#ffb18b;--logistics-soft:#3b2619}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--desk:#5fc9b8;--desk-soft:#173430;--it:#e2a6ef;--it-soft:#35213b;--logistics:#ffb18b;--logistics-soft:#3b2619}}
[data-tone=desk]{--tone:var(--desk);--tone-soft:var(--desk-soft)}
[data-tone=it]{--tone:var(--it);--tone-soft:var(--it-soft)}
[data-tone=logistics]{--tone:var(--logistics);--tone-soft:var(--logistics-soft)}
.hero-art[data-front=desk]{--front:var(--desk);--front-soft:var(--desk-soft)}
.hero-art[data-front=it]{--front:var(--it);--front-soft:var(--it-soft)}
.hero-art[data-front=logistics]{--front:var(--logistics);--front-soft:var(--logistics-soft)}
/* The halo: a round light behind NIVO in the soft colour of the service in front. */
.art-layers .art-orbit{inset:auto;left:50%;transform:translateX(-50%);border-radius:50%;
  background:radial-gradient(circle at 50% 40%,var(--front-soft,var(--art)),color-mix(in srgb,var(--front-soft,var(--art)) 40%,transparent) 70%);transition:background .6s ease}
/* The track: the path the characters ride, under their feet (home.js's orbit, restated:
   half-width orx, half-height ory, centred on the characters' resting feet). */
.orbit-track{position:absolute;left:50%;transform:translate(-50%,-50%);border-radius:50%;pointer-events:none;z-index:0;
  border:1.5px dashed color-mix(in srgb,var(--front,var(--brand)) 45%,transparent);transition:border-color .6s ease}
@container ring-cell (min-width:0px){
  .art-layers .art-orbit{top:0;width:190px;height:190px}
  .orbit-track{top:146px;width:calc(2 * min(124px,50cqw - 62px));height:96px}
  /* Each character stands in front of a disc in its own colour, so it reads at a glance. */
  .orbit-pick img{position:relative;z-index:1}
  .orbit-pick::before{content:'';position:absolute;left:50%;top:6px;width:62px;height:62px;transform:translateX(-50%);border-radius:50%;
    background:var(--tone-soft);border:2px solid color-mix(in srgb,var(--tone) 35%,transparent);transition:border-color .3s ease-out,box-shadow .3s ease-out}
  .orbit-pick[data-front]::before{border-color:var(--tone);box-shadow:0 0 0 5px color-mix(in srgb,var(--tone) 14%,transparent)}
  /* Names in the service's own colour (they were pale grey). */
  .orbit-pick span{color:var(--tone);font-weight:600}
}
@container ring-cell (min-width:421px){
  .art-layers .art-orbit{top:-6px;width:300px;height:300px}
  .orbit-track{top:216px;width:calc(2 * min(205px,50cqw - 60px));height:160px}
  .orbit-pick::before{top:10px;width:92px;height:92px}
  .orbit-pick[data-front]::before{box-shadow:0 0 0 6px color-mix(in srgb,var(--tone) 14%,transparent)}
}
/* The card wears the same colour, so character, halo and card read as one choice. */
.ring .service-card{border-inline-start:4px solid var(--front,var(--brand));transition:border-color .6s ease}
.ring .service-card:not(.desk-card) .status{color:var(--tone,var(--muted));font-weight:500}

/* ---- Turn controls (Alin, 19 Oct): previous / next and one button per service ----
   Static: the only motion is the ring's existing spring. Hidden until home.js has the
   ring live, like the orbit characters; without it all three cards are already listed. */
.ring-controls{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:14px}
/* The art cell is laid out left to right (.hero-art{direction:ltr}); the controls must
   follow the page instead (Alin, 2026-10-20: "fix the navigation controls in the arabic
   version"). In Arabic: Previous (→) on the right, then Desk, IT, Logistics reading
   right to left, Next (←) on the left, the side the next card comes from. */
[dir=rtl] .ring-controls{direction:rtl}
.hero-art:not(:has(.ring.is-live)) .ring-controls{display:none}
.ring-controls button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-width:44px;min-height:44px;padding:0 14px;border:1px solid var(--line);border-radius:22px;background:var(--paper);color:var(--ink);font-size:13px;white-space:nowrap}
.ring-controls button:hover{border-color:var(--brand)}
.ring-step{width:44px;padding:0!important}
.ring-step .direction-arrow{font-size:19px}
/* Each service button carries its character's colour as a dot. The colour is extra:
   the pressed one also gets its colour's border, a soft fill and a heavier weight. */
.ring-dot::before{content:'';width:8px;height:8px;border-radius:50%;background:var(--tone);flex:none}
.ring-dot[aria-pressed=true]{border-color:var(--tone);background:var(--tone-soft);font-weight:600}
/* Names fit only in a wide art cell; narrower, the dots stay and the names are kept
   for screen readers. */
@container ring-cell (max-width:479px){
  .ring-dot{padding:0!important;width:44px}
  .ring-dot span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
}

/* ---- Footer (2026-10-20): the group, its services, and the NIVO IT credit ---- */
.site-foot{border-top:1px solid var(--line);padding-block:40px 20px;font-size:13px;color:var(--muted)}
.site-foot__in{display:grid;grid-template-columns:minmax(0,1.6fr) repeat(2,minmax(0,1fr));gap:16px 40px;align-items:start}
.site-foot__word{display:inline-block;font-size:20px;font-weight:750;letter-spacing:-.5px;color:var(--ink);direction:ltr}
.site-foot__brand p{margin-top:8px;max-width:34ch}
.site-foot__links{display:flex;flex-direction:column;align-items:flex-start}
.site-foot__links a{display:inline-flex;align-items:center;gap:10px;min-height:44px;color:var(--ink);font-weight:550}
.site-foot__links a:hover{color:var(--brand)}
.site-foot__links a[data-tone]::before{content:'';width:8px;height:8px;border-radius:50%;background:var(--tone);flex:none}
.site-foot__base{display:flex;justify-content:flex-end;margin-top:22px;padding-top:10px;border-top:1px solid var(--line)}
.site-builtby{display:inline-flex;align-items:center;gap:8px;min-height:44px;color:var(--muted)}
.site-builtby:hover{color:var(--ink)}
/* The character keeps a light circle behind it so it stays visible in the dark theme. */
.site-builtby img{width:30px;height:30px;border-radius:50%;background:#f3e3f6;padding:2px}
@media(max-width:760px){.site-foot__in{grid-template-columns:repeat(2,minmax(0,1fr))}.site-foot__brand{grid-column:1 / -1}.site-foot__base{justify-content:flex-start}}

/* HOME — a framed stage for the existing orbit, with its controls labelled. */
body:has(.hero-art){background:var(--bg)}
.hero.wrap{width:min(1280px,calc(100% - 64px));gap:56px;padding:44px 0 46px;align-items:center}
.hero-copy{padding-inline:12px}
.hero-copy h1{font-size:clamp(38px,4.35vw,66px);line-height:1.48;letter-spacing:-1.8px;margin:25px 0}
.hero-copy .eyebrow{color:var(--brand);font-weight:550}
.hero-copy .hero-description{font-size:16px;line-height:2;max-width:39ch}
.hero-art{padding:20px 24px 22px;border:1px solid color-mix(in srgb,var(--brand) 12%,var(--line));border-radius:32px;background:linear-gradient(150deg,color-mix(in srgb,var(--brand) 7%,var(--paper)),var(--paper) 62%);box-shadow:0 24px 70px color-mix(in srgb,var(--brand) 7%,transparent)}
.hero-art .ring .service-card{border-radius:20px;padding:22px 24px;gap:13px;box-shadow:0 12px 30px #15151c12}
.hero-art .ring .card-heading h3{font-size:24px}
.hero-art .ring .service-card>p{font-size:15px;line-height:1.8}
.hero-art .ring .card-action{min-height:48px;font-weight:600;margin-top:2px}
.hero-art .ring .desk-card{background:#20202e}
.hero-art .ring .desk-card .card-action{border:0;border-radius:10px;background:#f4f2ff;color:#262037;padding:9px 15px}
.hero-art .ring-controls{display:grid;grid-template-columns:44px 1fr 1fr 1fr 44px;gap:4px}
.hero-art .ring-controls .ring-dot{width:auto;padding:4px 7px!important;gap:5px;border:0;background:transparent;border-radius:8px;font-size:13px}
.hero-art .ring-controls .ring-dot span{position:static;width:auto;height:auto;clip:auto;overflow:visible;white-space:normal}
.hero-art .ring-controls .ring-dot[aria-pressed=true]{background:var(--tone-soft);box-shadow:inset 0 -2px var(--tone)}
.hero-art .ring-controls .ring-step{border:none;background:transparent}
.hero-art .ring-dot::before{width:5px;height:5px}
.guide-invitation{border-radius:16px;box-shadow:0 5px 25px #15151c04;padding-block:22px}
@media(max-width:1050px) and (min-width:761px){
 .hero.wrap{gap:20px;width:calc(100% - 40px)}.hero-art{padding:14px}.hero-copy h1{font-size:40px}
}
@media(max-width:760px){
 .hero.wrap{width:calc(100% - 32px);padding:27px 0 24px;gap:17px}
 .hero-copy{padding:0}.hero-copy h1{font-size:clamp(29px,7.7vw,42px);line-height:1.5;margin:12px 0}
 .hero-copy .hero-description{font-size:16px;line-height:1.85;margin-bottom:0;max-width:45ch}
 .hero-copy .eyebrow{font-size:13px}
 .hero-art{margin:0;padding:10px 12px 12px;border-radius:24px}
 .hero-art .ring .service-card{padding:16px 18px;border-radius:16px;gap:7px}
 .hero-art .ring .card-heading h3{font-size:20px}
 .hero-art .ring .status{font-size:13px}
 .hero-art .ring .service-card>p{font-size:15px;line-height:1.8}
 .hero-art .ring-controls{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:8px;gap:2px}
 .hero-art .ring-controls button{min-width:0}
 .hero-art .ring-controls .ring-step{display:none}
 .hero-art .ring-controls .ring-dot{font-size:13px;padding-inline:5px!important;min-height:48px}
 .guide-invitation{padding:16px}
 /* Label the choice before its illustration/card. The ring remains rAF-driven. */
 .hero-art:has(.ring.is-live){padding-top:66px}
 .hero-art .ring-controls{position:absolute;inset:6px 12px auto;margin:0}
 .hero-art .orbit-picks{top:56px}
}
@media(max-width:360px){
 .hero.wrap{padding-top:18px;gap:12px}
 .hero-copy h1{line-height:1.4;margin-block:8px}
 .hero-copy .hero-description{font-size:15px;line-height:1.75}
 .hero-art .art-layers{height:174px}
 .hero-art .orbit-pick{--cy:62px}
}
