/*
 * home-v2.css
 *
 * The rebuilt home page: the two hooks, the twelve-context carousel, the
 * workflow beat, the certification plate, the partner strip, the SHR row and
 * the product suite.
 *
 * EVERY selector in this file starts `.su-page .su-main`. .su-page is on
 * <body> and exists only where templates/home-v2.php prints it; .su-main is
 * the page's own <main>. Together they make this file inert on the other 180
 * pages AND unable to reach header.php or footer.php on this one. Nothing at
 * all is declared on <body>.
 *
 * It reverts by deleting one line in inc/enqueue.php.
 */

/*
 * THE TOKENS LIVE ON <main>, NOT ON <body>, AND THIS IS NOT COSMETIC.
 *
 * .su-page sits on <body>, so anything declared there inherits into
 * header.php and footer.php as well as the page. Custom properties inherit
 * too, and --rule COLLIDES: tokens.css declares `--rule: 2px`, a border
 * width, and header.css and footer.css read var(--rule) seven times between
 * them. Declared on <body> this block replaced that width with a COLOUR for
 * the whole chrome.
 *
 * On <main> they reach the page and stop.
 */
.su-page .su-main{
  /*
   * LIGHT, like the rest of sharering.network. Navy is #0A1F44, the value the
   * 2026 media kits use and the value already baked into me-modules and prove
   * in the theme. --ctx is the industry accent as drawn on a dark phone screen;
   * --ctxd is that accent mixed toward navy so it survives on white, which the
   * pastel end of the set does not.
   */
  --ink:#0A1F44; --ink-2:#46586f; --ink-3:#6f8199;
  /*
   * --ink-3-aa IS --ink-3 DARKENED JUST FAR ENOUGH TO CLEAR WCAG AA, AND IT IS
   * A SECOND TOKEN ON PURPOSE.
   *
   * Measured on the rendered page: --ink-3 is 3.68 to 1 on --ground-2 and 3.98
   * to 1 on white, and small text needs 4.5. Eight elements on this page were
   * under it, the two workflow half-labels and the six news dates.
   *
   * Moving --ink-3 itself would have darkened quiet type across the whole site,
   * which is a design change nobody asked for, so the token stays where it is
   * and this one is used by exactly two rules. It is --ink-3 mixed 15 per cent
   * toward navy, which is the smallest step that clears the line with margin:
   * 4.67 to 1 on --ground-2 and 5.05 to 1 on white, against --ink-2 at 6.73 and
   * 7.28. The hierarchy survives, because it is still visibly lighter than
   * --ink-2 beside it in the same row.
   */
  --ink-3-aa:#5e708a;
  --ground:#ffffff; --ground-2:#f4f6fa; --screen:#0b1a2a;
  --rule:rgba(10,31,68,.16); --rule-2:rgba(10,31,68,.08);
  --ctx:#2CE5A7; --ctxd:#12795a; --cta:#010ED0; --draft:#8a9a00; --maxw:1180px;
  --display:"Inter Tight","Inter",system-ui,-apple-system,"Segoe UI",sans-serif;
  --body:"Inter",system-ui,-apple-system,"Segoe UI",sans-serif;
  --phone:clamp(158px,17vw,206px);
  --phoneH:calc(var(--phone) * 2.165);
  --grain:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='.6'/%3E%3C/svg%3E");
}
.su-page .su-main *{box-sizing:border-box}
/*
 * NOTHING IS DECLARED ON <body>, AND THAT IS THE POINT OF THIS FILE'S SCOPE.
 *
 * .su-page sits on <body>, so every declaration made there reaches header.php
 * and footer.php as well as the page. This file used to keep three on it:
 * margin, background and overflow-x. All three are already set by base.css for
 * every page on the site, `body { margin: 0 }` and `html, body { overflow-x:
 * clip }` and `body { background: var(--sr-canvas) }`, which is the same
 * #ffffff, so the page loses nothing by not repeating them and the chrome
 * gains a guarantee: with this file enqueued and dequeued, every computed
 * value outside <main> is identical.
 *
 * The scope for everything here is therefore `.su-page .su-main`, which is
 * also 0-2-0 and beats `.elementor-kit-5` at 0-1-0 and `.elementor-kit-5 a`
 * and `.elementor-kit-5 button` at 0-1-1 wherever the subject is an element
 * rather than a class.
 */
.su-page .su-main{background:var(--ground);color:var(--ink);font-family:var(--body);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}
/*
 * THE ONE THAT ACTUALLY BROKE THE NAV. On <body> this reached all 37 images
 * in the chrome. max-width:100% on .sr-product__word squeezed the DigitalMe
 * menu item from 195px to 166px, so the eye mark and the wordmark overlapped
 * and it read as "Digitalme" with the glyph sitting on the letters.
 */
.su-page .su-main img,.su-page .su-main video{max-width:100%;display:block}
.su-page .su-main .su-wrap{max-width:var(--maxw);margin:0 auto;padding-inline:20px}
.su-page .su-main .su-layer{position:relative;z-index:1}

/*
 * WHY THE SCOPE IS TWO CLASSES AND NOT ONE. Read this before adding a
 * component here, because the next template in this theme will hit both
 * halves of it.
 *
 * HALF ONE, THE ELEMENTOR KIT. Elementor's global kit prints this in
 * post-5.css:
 *
 *   .elementor-kit-5 button,
 *   .elementor-kit-5 input[type="button"],
 *   .elementor-kit-5 input[type="submit"],
 *   .elementor-kit-5 .elementor-button {
 *     background-color: var(--e-global-color-vamtam_accent_1);   #010ED0
 *     color: var(--e-global-color-vamtam_accent_5);
 *     border-radius: 4px; padding: 14px 24px; font-family: ... }
 *
 *   .elementor-kit-5 a { color: var(--e-global-color-vamtam_accent_6); }  #0A0557
 *
 * The body carries elementor-kit-5 on EVERY page of this site, this page
 * included, so both rules reach every bare <button> and every bare <a> here.
 * The effect was four visible faults at once: the twelve phones sat on solid
 * #010ED0, the primary buttons had #0A0557 text on that blue, and the arrows
 * lost their circle to border-radius 4px and their size to padding 14px 24px.
 *
 * ORDERING DOES NOT FIX IT, and this was measured rather than assumed. A rule
 * at `.su-slide`, injected last in the document, still loses. The Elementor
 * selector is one class plus one type, 0-1-1, and a bare `.su-slide` is 0-1-0,
 * so it loses on SPECIFICITY and would keep losing however late this file
 * printed. Changing the enqueue dependency in inc/enqueue.php was the first
 * thing tried and it cannot work.
 *
 * `.su-page .su-main .su-slide` is 0-3-0 and wins on every one of them, and
 * so does every other rule in this file, because they all carry the same two
 * classes in front. There is no longer a short list of rules that win and a
 * long list that only happen not to collide.
 *
 * HALF TWO, THE CHROME. .su-page is on <body>. A rule scoped to it alone
 * reaches header.php and footer.php, and two of them bit: `img { max-width:
 * 100% }` squeezed the DigitalMe wordmark in the Products and Resources
 * dropdowns until the eye mark sat on the letters, and the token block
 * replaced tokens.css's `--rule: 2px`, a border WIDTH, with a colour for the
 * whole chrome, because custom properties inherit. Adding `.su-main` stops
 * every rule here at the page content.
 *
 * Three properties needed adding as well as scoping, because the rules never
 * set them and inheritance cannot win against a value set on the element:
 * padding on .su-arrow, and color on .su-prod and .su-pcard.
 */

.su-page .su-main .su-bgf{position:fixed;inset:-40px;z-index:0;pointer-events:none;background-repeat:repeat;background-size:84px 84px;opacity:0;transition:opacity 900ms ease}
.su-page .su-main .su-bgf[data-on="1"]{opacity:.06}
.su-page .su-main #su-bgveil{position:fixed;inset:0;z-index:0;pointer-events:none;background:radial-gradient(120% 80% at 50% 0%,transparent 22%,rgba(255,255,255,.86) 66%,#ffffff 100%)}

.su-page .su-main .su-pv{position:relative;z-index:95;display:flex;gap:14px;align-items:center;flex-wrap:wrap;
  padding:9px 20px;background:#eef1f6;border-bottom:1px solid var(--rule-2);font-size:12.5px;color:var(--ink-2)}
.su-page .su-main .su-pv b{color:var(--ink);font-weight:600;font-family:var(--display)}
.su-page .su-main .su-pv-sp{flex:1 1 auto}
.su-page .su-main .su-pv button{font:inherit;font-weight:500;color:#fff;background:var(--ink);border:0;border-radius:3px;padding:6px 12px;cursor:pointer}
.su-page .su-main .su-pv button.su-ghost{background:#fff;color:var(--ink-2);border:1px solid var(--rule)}
.su-page .su-main .su-pv button:focus-visible,.su-page .su-main a:focus-visible,.su-page .su-main .su-slide:focus-visible,.su-page .su-main .su-arrow:focus-visible{outline:2px solid var(--cta);outline-offset:3px}

/* ---------- hero ---------- */
.su-page .su-main .su-hero{position:relative;padding-block:30px 18px}
.su-page .su-main .su-kick{font-family:var(--display);font-size:11.5px;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ctxd);margin:0 0 14px;transition:color 600ms ease}
.su-page .su-main .su-hero-acts{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:22px}
.su-page .su-main .su-btn.su-plain{background:transparent;border-color:transparent;color:var(--ink-2)}
.su-page .su-main .su-btn.su-plain:hover{color:var(--ink)}
.su-page .su-main .su-hero-head{text-align:center;max-width:min(760px,92vw);margin:0 auto 26px;
  opacity:0;transform:translateY(10px);transition:opacity 700ms ease,transform 700ms cubic-bezier(.2,.7,.3,1)}
.su-page .su-main .su-hero-head[data-on="1"]{opacity:1;transform:none}
.su-page .su-main h1{font-family:var(--display);font-weight:600;font-size:clamp(29px,4.5vw,49px);line-height:1.04;letter-spacing:-.022em;margin:0 0 12px;text-wrap:balance}
.su-page .su-main h1 .su-hl{color:var(--ctxd);transition:color 600ms ease}
.su-page .su-main .su-lede{font-size:16.5px;color:var(--ink-2);margin:0 auto;max-width:50ch}

.su-page .su-main .su-theatre{position:relative;height:calc(var(--phoneH) + 34px);touch-action:pan-y;cursor:grab;user-select:none;overflow-x:clip}
.su-page .su-main .su-theatre[data-drag="1"]{cursor:grabbing}
.su-page .su-main .su-flow{position:absolute;inset:0}
.su-page .su-main .su-slide{position:absolute;left:50%;top:6px;width:var(--phone);margin-left:calc(var(--phone) / -2);
  border:0;padding:0;background:none;border-radius:25px;cursor:pointer;transform-style:preserve-3d;will-change:transform;
  transition:transform 620ms cubic-bezier(.2,.72,.28,1),opacity 620ms ease}
/*
 * NO HOVER AFFORDANCE ON A PHONE. The phone is front and centre and the
 * click is enough, so hovering one should change nothing at all.
 *
 * What was drawing a square is the same Elementor kit trap section 9 of the
 * parity handoff describes, this time on the hover state:
 *
 *   .elementor-kit-5 button:hover, .elementor-kit-5 button:focus, ...
 *     { background-color: var(--e-global-color-vamtam_accent_6) }   #0A0557
 *
 * That selector is a class, a pseudo-class and a type, 0-2-1, so it beats
 * `.su-main .su-slide` at 0-2-0. Adding the pseudo-class here makes this
 * 0-3-0 and settles it. home-v2 never had a hover rule of its own on a
 * slide, so there is nothing of ours to remove.
 *
 * transform is deliberately NOT touched: the fan position is written inline
 * by home-v2.js and an inline style wins anyway, so naming it here would be
 * dead code that reads like a safeguard.
 */
.su-page .su-main .su-slide:hover,
.su-page .su-main .su-slide:focus{background:none;box-shadow:none}
/*
 * The keyboard ring stays, and follows the phone rather than boxing it. The
 * outline traces the element border-radius, which is why the rule above
 * sets 25px to match .su-dev.
 */
.su-page .su-main .su-slide:focus-visible{outline:2px solid var(--cta);outline-offset:4px}
.su-page .su-main .su-theatre[data-drag="1"] .su-slide{transition:none}
.su-page .su-main .su-slide[data-hidden="1"]{opacity:0;pointer-events:none}
/*
 * display:block IS LOAD BEARING. This is a <span>, and left inline its box has
 * no resolved width, so the absolutely positioned cover inside it collapsed to
 * a sliver down the middle of every phone and the poster showed through.
 */
.su-page .su-main .su-dev{display:block;position:relative;border:8px solid var(--screen);border-radius:25px;background:var(--screen);
  isolation:isolate;
  overflow:hidden;box-shadow:0 22px 44px -20px rgba(10,31,68,.5), 0 2px 6px rgba(10,31,68,.12)}
.su-page .su-main .su-dev video{width:100%;aspect-ratio:400/866;object-fit:cover;border-radius:17px;background:var(--screen);pointer-events:none}

/* Depth veil. Sits over the screen, never under it, so the phone itself stays
   opaque and the background never shows through the glass. */
.su-page .su-main .su-dev::after{content:"";position:absolute;inset:0;border-radius:17px;pointer-events:none;z-index:6;
  background:var(--ground);opacity:var(--dim,0);transition:opacity 520ms cubic-bezier(.2,.7,.2,1)}

/* The ShareRing mark at the head of every tile. Watermark weight on purpose: it
   says whose screen this is without competing with the industry name, which is
   what the tile is actually for. It goes with the cover when the clip starts. */
.su-page .su-main .su-cov-brand{position:absolute;top:18px;left:0;right:0;display:flex;justify-content:center;pointer-events:none}
.su-page .su-main .su-cov-brand img{width:min(150px,74%);height:auto;opacity:.88}

/* the cover: this is what says which industry it is */
.su-page .su-main .su-cover{position:absolute;inset:0;border-radius:17px;overflow:hidden;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:11px;
  text-align:center;padding:16px;transform:scale(1);opacity:1;
  box-shadow:inset 0 0 0 1.5px var(--own);
  transition:opacity 520ms ease,transform 520ms cubic-bezier(.5,0,.2,1)}
.su-page .su-main .su-slide[data-open="1"] .su-cover{opacity:0;transform:scale(1.07);pointer-events:none}
.su-page .su-main .su-cov-ico{width:34%;max-width:76px;height:auto;color:var(--own);display:block}
.su-page .su-main .su-cov-rule{width:26px;height:2px;background:var(--own);border-radius:2px;opacity:.85}
.su-page .su-main .su-cov-name{font-family:var(--display);font-weight:700;font-size:clamp(16px,1.55vw,21px);
  line-height:1.1;letter-spacing:-.012em;color:#fff;text-wrap:balance}
.su-page .su-main .su-cov-place{font-family:var(--display);font-size:9.5px;font-weight:500;letter-spacing:.11em;
  text-transform:uppercase;color:rgba(255,255,255,.66);line-height:1.35}
.su-page .su-main .su-cov-grain{position:absolute;inset:0;background:var(--grain);background-size:160px 160px;opacity:.1;pointer-events:none}
.su-page .su-main .su-cov-go{position:absolute;left:0;right:0;bottom:14px;display:flex;align-items:center;justify-content:center;gap:6px;
  font-family:var(--display);font-size:9.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
  color:rgba(255,255,255,.55);opacity:0;transition:opacity 400ms ease}
.su-page .su-main .su-slide[aria-current="true"] .su-cov-go{opacity:1}
.su-page .su-main .su-cov-go s{width:0;height:0;border-left:6px solid currentColor;border-top:4px solid transparent;border-bottom:4px solid transparent}
/*
 * THE TAG IS WHAT SURVIVES THE COVER. Once a phone is playing its clip the
 * label has gone, and a playing phone still has to say which industry it is.
 * This rides at the foot of the screen from then on.
 */
.su-page .su-main .su-cov-tag{position:absolute;left:0;right:0;bottom:0;z-index:3;display:flex;align-items:center;justify-content:center;gap:7px;
  padding:16px 10px 9px;background:linear-gradient(to top,rgba(3,10,19,.94) 40%,rgba(3,10,19,0));
  font-family:var(--display);font-size:10.5px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;
  color:#fff;opacity:0;transition:opacity 420ms ease 300ms;pointer-events:none}
.su-page .su-main .su-slide[data-open="1"] .su-cov-tag{opacity:1}
.su-page .su-main .su-cov-tag svg{width:13px;height:13px;flex:0 0 auto;color:var(--own)}

.su-page .su-main .su-arrow{position:absolute;top:50%;translate:0 -50%;z-index:70;width:40px;height:40px;border-radius:50%;padding:0;
  border:1px solid var(--rule);background:rgba(255,255,255,.94);color:var(--ink-2);cursor:pointer;
  display:grid;place-items:center;font-size:17px;backdrop-filter:blur(6px);opacity:0;transition:opacity 400ms ease,color 200ms,border-color 200ms}
.su-page .su-main .su-hero[data-ready="1"] .su-arrow{opacity:1}
.su-page .su-main .su-arrow:hover{color:var(--ink);border-color:var(--ctxd)}
.su-page .su-main .su-arrow.su-l{left:max(10px,calc(50% - 480px))}
.su-page .su-main .su-arrow.su-r{right:max(10px,calc(50% - 480px))}

/* below the carousel */
.su-page .su-main .su-now{text-align:center;margin-top:26px;opacity:0;transition:opacity 500ms ease}
.su-page .su-main .su-hero[data-ready="1"] .su-now{opacity:1}
/*
 * THE COLOUR IS SET, NOT INHERITED, AND THAT IS BECAUSE THIS IS A HEADING.
 * As a <p> this caption inherited --ink from .su-page .su-main. As an <h3> it
 * started matching Elementor kit rule .elementor-kit-5 h3, which paints
 * #0A0D31, and a value set on the element beats an inherited one however dark
 * both happen to look. Measured: rgb(10,31,68) before, rgb(10,13,49) after,
 * back to rgb(10,31,68) with this line.
 */
.su-page .su-main .su-now-who{font-family:var(--display);font-weight:600;font-size:clamp(21px,2.5vw,29px);line-height:1.15;letter-spacing:-.016em;color:var(--ink);margin:0 0 6px;
  display:flex;align-items:center;justify-content:center;gap:11px}
/* the industry mark travels with the industry name, wherever the name appears */
.su-page .su-main .su-t-ico{width:.86em;height:.86em;color:var(--ctxd);flex:0 0 auto;transition:color 600ms ease}
.su-page .su-main .su-t-ico.su-sm{width:.8em;height:.8em;margin-right:.32em;vertical-align:-.06em;display:inline-block}
.su-page .su-main .su-now-line{color:var(--ink-2);margin:0 0 16px;font-size:16px;text-align:center}
.su-page .su-main .su-now-acts{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
/*
 * THE NAV IS THE REFERENCE, and these read its tokens rather than copying
 * its numbers, so the two cannot drift. Taken from
 * `.sr-header .sr-btn--primary` in header.css, measured off the rendered
 * button: background #010ED0, colour #FFFFFF, radius 999px, padding
 * 12px 24px, weight 600, size 14px, line-height 17.5px which is 1.25, and a
 * transparent 1px border so the pill matches the ghost variant box for box.
 *
 * header.php is NOT edited. This file reads --sr-cta-surface,
 * --sr-cta-surface-hover, --sr-cta-ink and --radius-pill, which the theme
 * already defines and which resolve inside .su-page.
 */
.su-page .su-main .su-btn{font-family:var(--display);font-weight:600;font-size:14px;line-height:1.25;text-decoration:none;
  padding:12px 24px;border-radius:var(--radius-pill);
  background:var(--sr-cta-surface);color:var(--sr-cta-ink);border:1px solid transparent}
/*
 * The nav hover, same source: --sr-cta-surface-hover plus --shadow-md. At
 * 0-3-0 this also beats the Elementor kit hover rule at 0-2-1, which would
 * otherwise repaint every button on the page on hover.
 */
.su-page .su-main .su-btn:hover,
.su-page .su-main .su-btn:focus-visible{background:var(--sr-cta-surface-hover);color:var(--sr-cta-ink);box-shadow:var(--shadow-md)}
/*
 * THE INDUSTRY BUTTON CARRIES THE INDUSTRY, not the house blue. --ownd is
 * written onto the element by home-v2.js on every context change, and is the
 * industry accent mixed toward navy so it survives on white. Every state is
 * named because the Elementor kit sets hover and focus as well as rest, and
 * because a CTA that changes colour on hover to something unrelated to the
 * industry would undo the point of it.
 */
.su-page .su-main .su-btn.su-ctabtn,
.su-page .su-main .su-btn.su-ctabtn:hover,
.su-page .su-main .su-btn.su-ctabtn:focus,
.su-page .su-main .su-btn.su-ctabtn:focus-visible,
.su-page .su-main .su-btn.su-ctabtn:active{background:var(--ownd);border-color:var(--ownd);color:#fff}
.su-page .su-main .su-btn.su-ctabtn:hover{box-shadow:var(--shadow-md)}
.su-page .su-main .su-btn.su-ghost{background:#fff;color:var(--ink);border-color:var(--rule)}
/*
 * THE GHOST HOVER, and it is a bug this file introduced on 2026-09-14.
 * `.su-main .su-btn:hover` is 0-3-0 and beat `.su-btn.su-ghost` at 0-2-0, so
 * hovering a ghost turned it #1B1464, the primary hover fill, while the <b>
 * inside kept its own var(--ink). Measured on ShareRing Me: navy label on a
 * navy ground, contrast 1.03 to 1, against 16.25 at rest. It read as a dark
 * block with the label gone.
 *
 * 0-4-0 settles it. A ghost stays white and answers the hover with its
 * border and the shared lift instead.
 */
.su-page .su-main .su-btn.su-ghost:hover,
.su-page .su-main .su-btn.su-ghost:focus-visible{background:#fff;color:var(--ink);border-color:var(--ink-3);box-shadow:var(--shadow-md)}
.su-page .su-main .su-btn.su-lock{display:flex;align-items:center;padding:9px 18px;font-size:14px}
.su-page .su-main .su-nowrap{white-space:nowrap}
/*
 * The block whose height is pinned by lockHookHeight() in home-v2.js. Its
 * min-height is written inline at startup from the tallest of the three hook
 * modes, and rewritten on resize and once the web font has landed. Nothing
 * below the hero moves while the carousel turns.
 */
.su-page .su-main .su-hookblock{min-height:0}
/*
 * STARTS INVISIBLE RATHER THAN `hidden`, so its line is reserved in every mode
 * and only the keep mode reveals it. The template no longer carries the hidden
 * attribute; home-v2.js toggles visibility. visibility:hidden also keeps it
 * out of the accessibility tree, so it is not read out in the modes where the
 * Tranche 2 claim it qualifies is not on screen.
 */
.su-page .su-main .su-hook-note{margin:14px 0 24px;font-size:13.5px;color:var(--ink-3);visibility:hidden}
.su-page .su-main .su-hook-in{animation:hookIn 520ms cubic-bezier(.2,.7,.2,1) both}
@keyframes hookIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ---------- product lockup: mark + name, one even size everywhere ---------- */
/*
 * .su-hx: A HEADING THAT HAS TO LOOK EXACTLY LIKE THE <b> IT REPLACED.
 *
 * The card titles on this page are headings, because they are the only thing
 * that names each card and a reader moving by headings needs them. They used to
 * be <b>, which is inline, inherits everything and carries no margin. An <h3>
 * is none of those: base.css gives every h1, h2 and h3 the display font, the
 * tight line-height, the tight tracking, the semibold weight and a bottom
 * margin of var(--space-4), and the user agent gives it a font-size of its own.
 *
 * This rule takes all of that back off, and the component rule for each card
 * then puts back exactly what the <b> had. The font shorthand set to inherit is
 * the whole of the type reset in one declaration, which is what <b> did apart
 * from its bold, and every card rule sets its own weight. display:inline is
 * what <b> specified; where the heading is a flex item it blockifies to the
 * same computed block the <b> had, which was measured on both cards before the
 * change rather than assumed.
 *
 * Proof rather than intent: every affected section was captured at 1440, 768
 * and 390 before and after, and every one came back at 0 differing pixels.
 */
.su-page .su-main .su-hx{display:inline;margin:0;padding:0;font:inherit;color:inherit;letter-spacing:inherit;text-wrap:inherit;text-align:inherit;white-space:inherit}
.su-page .su-main .su-lk{display:inline-flex;align-items:center;gap:.42em;line-height:1;white-space:nowrap;vertical-align:middle}
.su-page .su-main .su-lk>img{height:calc(1.62em * var(--s,1));width:calc(1.62em * var(--s,1));
  object-fit:contain;object-position:center;display:block;flex:0 0 auto}
.su-page .su-main .su-lk>b,.su-page .su-main .su-lk>h3{font-family:var(--display);font-weight:600;font-size:1em;letter-spacing:-.014em;color:var(--ink)}
.su-page .su-main .su-lk[data-m="me"]{--s:1.08}
.su-page .su-main .su-lk[data-m="link"]{--s:.97}
.su-page .su-main .su-lk[data-m="modules"]{--s:.99}
.su-page .su-main .su-lk[data-m="prove"]{--s:.97}
.su-page .su-main .su-lk[data-m="ledger"]{--s:.92}
.su-page .su-main .su-lk[data-m="digitalme"]{--s:1.08}

.su-page .su-main .su-now-in{animation:rise 480ms cubic-bezier(.2,.7,.3,1) both}
@keyframes rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/*
 * The dwell tick sits directly under the theatre and carries its own 20px of
 * top margin. It is the only thing between the phones and the caption.
 */
.su-page .su-main .su-tick{height:2px;width:150px;margin:20px auto 0;background:var(--rule-2);overflow:hidden;opacity:0;transition:opacity 500ms}
.su-page .su-main .su-hero[data-ready="1"] .su-tick{opacity:1}
.su-page .su-main .su-tick i{display:block;height:100%;width:100%;background:var(--ctxd);transform-origin:left;transform:scaleX(0)}
.su-page .su-main .su-tick i.run{animation:fill var(--dwell,4200ms) linear forwards}
@keyframes fill{to{transform:scaleX(1)}}
.su-page .su-main .su-tick[data-mode="browse"] i{animation:none;transform:scaleX(0)}

/* ---------- below the fold ---------- */
.su-page .su-main .su-behind{border-top:1px solid var(--rule-2);padding-block:60px 78px;margin-top:44px;background:var(--ground-2)}
.su-page .su-main .su-behind-head{display:flex;gap:16px;align-items:baseline;justify-content:space-between;flex-wrap:wrap;margin-bottom:28px}
.su-page .su-main .su-behind-head h2{font-family:var(--display);font-weight:600;font-size:clamp(20px,2.3vw,26px);letter-spacing:-.015em;margin:0}
.su-page .su-main .su-behind-head .su-ctxw{color:var(--ctxd);transition:color 600ms ease}
.su-page .su-main .su-behind-head a{font-family:var(--display);font-weight:600;font-size:14px;color:var(--cta);text-decoration:none;border-bottom:1px solid currentColor;padding-bottom:2px}
/*
 * align-items:center, NOT start. The left column is the workflow frame and
 * runs much taller than the right, so starting both left the steps and the
 * two product cards pinned to the top with a large empty gap under them.
 * Centring puts the text beside the video rather than above it. The taller
 * column still fills the row, so only the short one moves. At the
 * single-column breakpoint each is its own row and this does nothing.
 */
.su-page .su-main .su-pair{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:44px;align-items:center}
.su-page .su-main .su-desk{border-radius:12px;overflow:hidden;background:#fff;border:1px solid var(--rule-2);box-shadow:0 30px 60px -34px rgba(10,31,68,.45)}
.su-page .su-main .su-desk-bar{display:flex;align-items:center;gap:7px;padding:10px 13px;background:#eef2f7;border-bottom:1px solid #dde4ec}
.su-page .su-main .su-desk-bar s{width:9px;height:9px;border-radius:50%;background:#cbd5e1;display:block}
.su-page .su-main .su-desk-bar .su-lk{margin-left:9px;font-size:12.5px}
.su-page .su-main .su-desk video{width:100%;aspect-ratio:1146/1000;object-fit:contain;background:#fff}
.su-page .su-main .su-half-label{font-family:var(--display);font-size:11px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-3-aa);margin:0 0 13px}
.su-page .su-main .su-half-label.su-lockrow{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.su-page .su-main .su-half-label.su-lockrow .su-lk{font-size:13.5px;text-transform:none;letter-spacing:normal}
.su-page .su-main .su-steps{counter-reset:s;list-style:none;margin:0;padding:0;display:grid;gap:1px;background:var(--rule-2);border-block:1px solid var(--rule-2)}
.su-page .su-main .su-steps li{background:var(--ground-2);padding:15px 0 15px 42px;position:relative}
.su-page .su-main .su-steps li::before{content:counter(s);counter-increment:s;position:absolute;left:0;top:15px;font-family:var(--display);font-size:12px;font-weight:600;color:var(--ctxd)}
.su-page .su-main .su-steps b{display:block;font-family:var(--display);font-weight:600;font-size:15px;margin-bottom:2px}
.su-page .su-main .su-steps span{font-size:14.5px;color:var(--ink-2)}
.su-page .su-main .su-prods{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:34px}
.su-page .su-main .su-prod{display:block;text-decoration:none;color:var(--ink);border:1px solid var(--rule-2);border-radius:8px;padding:18px;transition:border-color 240ms,background 240ms}
.su-page .su-main .su-prod:hover{border-color:var(--cta);background:#fff}
.su-page .su-main .su-prod .su-lk{font-size:16px;margin-bottom:7px}
.su-page .su-main .su-prod span{font-size:14px;color:var(--ink-2)}

/* ---------- certifications ---------- */
/*
 * THE SEALS SIT ON NAVY ON PURPOSE. The ISO credential is a silver seal,
 * #FEFEFE over #CDCEC8, which measures 1.58 against white. ASSET-INVENTORY.md
 * records an earlier footer that put it on a light plate and was wrong. The
 * GDPR and AUSTRAC house seals are drawn as dark discs to sit beside it.
 */
.su-page .su-main .su-certs{border-top:1px solid var(--rule-2);padding-block:56px 60px;background:var(--ground)}
.su-page .su-main .su-certplate{background:var(--ink);border-radius:14px;padding:34px 30px}
.su-page .su-main .su-certplate b{color:#fff}
.su-page .su-main .su-certplate span{color:rgba(255,255,255,.78)}
.su-page .su-main .su-certnote{color:var(--ink-3)}
.su-page .su-main .su-certlist{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:30px}
/*
 * THE MARK IS CENTRED AGAINST THE TEXT, not hung off its first line.
 * align-items:flex-start put an 80px seal beside a two-line block and left it
 * top-aligned, so the cell read as a seal with a caption hanging off below
 * it. `center` puts the two halves of the cell on one optical line whichever
 * of them is taller, and the taller one is the text at every width measured.
 */
.su-page .su-main .su-certlist li{display:flex;gap:18px;align-items:center}
.su-page .su-main .su-certlist img{width:80px;height:80px;flex:0 0 auto;object-fit:contain}
/*
 * THE DISC IS FOR A LIGHT-ON-DARK SEAL THAT NEEDS A GROUND OF ITS OWN, and
 * inc/certifications.php is the only thing that decides which those are. All
 * three ACTIVE seals carry mount => false today, so this rule matches nothing
 * on the rendered page. It stays because the flag is read rather than assumed:
 * lapsed UK DIATF carries mount => true, and the day that claim is switched
 * back on its disc arrives with it and no code changes.
 */
.su-page .su-main .su-certlist li[data-disc="1"] img{background:#fff;border-radius:50%;padding:9px;box-sizing:border-box}
.su-page .su-main .su-certlist b{display:block;font-family:var(--display);font-size:15.5px;font-weight:600;margin-bottom:4px}
.su-page .su-main .su-certlist span{font-size:14px;line-height:1.5}
.su-page .su-main .su-certplate .su-certlist b{color:#fff}
.su-page .su-main .su-certplate .su-certlist span{color:rgba(255,255,255,.8)}
.su-page .su-main .su-certnote{margin:28px 0 0;font-size:13.5px;color:var(--ink-3);max-width:70ch}

/* ---------- product suite ---------- */
.su-page .su-main .su-suite{border-top:1px solid var(--rule-2);padding-block:62px 70px;background:var(--ground)}
.su-page .su-main .su-suite h2{font-family:var(--display);font-weight:600;font-size:clamp(22px,2.6vw,30px);letter-spacing:-.018em;margin:0 0 8px;text-wrap:balance}
.su-page .su-main .su-suite .su-sub{color:var(--ink-2);margin:0 0 32px;max-width:56ch}
/*
 * THREE ACROSS, NOT FOUR. The registry carries six products since 14 September
 * 2026 and a four-column grid leaves two orphans on a second row. Three by two
 * is the only arrangement of six that fills both rows, and it is what the live
 * page uses. The 880 and 560 breakpoints below are unchanged.
 */
.su-page .su-main .su-prodgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
/*
 * A card that is not a link. "And Much More" has no destination, so it renders
 * as a div and must sit in the row exactly as the cards beside it do. Everything
 * the .su-pcard rule sets already applies; only the pointer affordances are
 * dropped, because there is nothing to point at.
 */
.su-page .su-main .su-pcard--plain{cursor:default}
.su-page .su-main .su-pcard--plain:hover{border-color:var(--rule-2);background:transparent;box-shadow:none;transform:none}
.su-page .su-main .su-pcard{display:flex;flex-direction:column;gap:14px;text-decoration:none;color:var(--ink);border:1px solid var(--rule-2);
  border-radius:10px;padding:22px 20px 20px;transition:border-color 240ms,background 240ms,transform 240ms}
.su-page .su-main .su-pcard:hover{border-color:var(--cta);background:#fff;box-shadow:0 16px 34px -22px rgba(10,31,68,.4);transform:translateY(-2px)}
.su-page .su-main .su-pcard .su-mark{display:flex;align-items:center;height:30px}
.su-page .su-main .su-pcard .su-mark .su-lk{font-size:17px}
.su-page .su-main .su-pcard p{margin:0;font-size:14px;color:var(--ink-2);flex:1 1 auto}
.su-page .su-main .su-pcard .su-more{font-family:var(--display);font-size:13px;font-weight:600;color:var(--cta)}

/* ---------- closer ---------- */
.su-page .su-main .su-closer{border-top:1px solid var(--rule-2);padding-block:64px 78px;text-align:center;background:var(--ground-2)}
.su-page .su-main .su-closer img{height:46px;width:auto;margin:0 auto 22px;opacity:.9}
.su-page .su-main .su-closer h2{font-family:var(--display);font-weight:600;font-size:clamp(24px,3vw,34px);letter-spacing:-.02em;margin:0 0 12px;text-wrap:balance}
.su-page .su-main .su-closer p{color:var(--ink-2);max-width:52ch;margin:0 auto 24px}
.su-page .su-main .su-closer .su-now-acts{margin-top:4px}

@media (max-width:880px){
  .su-page .su-main .su-certlist{grid-template-columns:1fr;gap:22px}
  .su-page .su-main .su-prodgrid{grid-template-columns:1fr 1fr}
}
@media (max-width:560px){ .su-page .su-main .su-prodgrid{grid-template-columns:1fr} }


@media (max-width:880px){
  .su-page .su-main{--phone:clamp(146px,40vw,182px)}
  .su-page .su-main .su-pair{grid-template-columns:1fr;gap:30px}
  .su-page .su-main .su-prods{grid-template-columns:1fr}
  .su-page .su-main .su-arrow{display:none}
  .su-page .su-main .su-behind{padding-block:48px 60px}
}
@media (prefers-reduced-motion:reduce){.su-page .su-main *{animation:none!important;transition:none!important}}


/* ---------- pillars: the four badges under the hero ---------- */
/*
 * A rule-separated row rather than four boxes. They sit directly under the
 * carousel, which is already the busiest thing on the page, so boxing them
 * would put two card grids back to back before the reader has been told
 * anything. The left rule carries the grouping instead.
 */
.su-page .su-main .su-pillars{border-top:1px solid var(--rule-2);padding-block:38px 40px;background:var(--ground)}
.su-page .su-main .su-pillarlist{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,1fr);gap:26px}
.su-page .su-main .su-pillarlist li{padding-left:16px;border-left:2px solid var(--cta)}
.su-page .su-main .su-pillarlist b{display:block;font-family:var(--display);font-size:14.5px;font-weight:600;margin-bottom:5px;letter-spacing:-.008em}
.su-page .su-main .su-pillarlist span{display:block;font-size:13.5px;line-height:1.55;color:var(--ink-2)}

/* ---------- services: the four things it is bought to do ---------- */
.su-page .su-main .su-services{border-top:1px solid var(--rule-2);padding-block:62px 70px;background:var(--ground-2)}
.su-page .su-main .su-services h2{font-family:var(--display);font-weight:600;font-size:clamp(22px,2.6vw,30px);letter-spacing:-.018em;margin:0 0 8px;text-wrap:balance}
.su-page .su-main .su-services .su-sub{color:var(--ink-2);margin:0 0 32px;max-width:56ch}
.su-page .su-main .su-svcgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.su-page .su-main .su-svc{display:flex;flex-direction:column;gap:10px;text-decoration:none;color:inherit;background:#fff;
  border:1px solid var(--rule-2);border-radius:10px;padding:22px 20px 20px;
  transition:border-color 240ms,transform 240ms,box-shadow 240ms}
.su-page .su-main .su-svc:hover{border-color:var(--cta);box-shadow:0 16px 34px -22px rgba(10,31,68,.4);transform:translateY(-2px)}
.su-page .su-main .su-svc b,.su-page .su-main .su-svc h3{font-family:var(--display);font-size:16px;font-weight:600;letter-spacing:-.01em}
.su-page .su-main .su-svc p{margin:0;font-size:14px;color:var(--ink-2);flex:1 1 auto}
.su-page .su-main .su-svc .su-more{font-family:var(--display);font-size:13px;font-weight:600;color:var(--cta)}

@media (max-width:880px){
  .su-page .su-main .su-pillarlist{grid-template-columns:1fr 1fr;gap:22px}
  .su-page .su-main .su-svcgrid{grid-template-columns:1fr 1fr}
  .su-page .su-main .su-services{padding-block:48px 56px}
}
@media (max-width:560px){
  .su-page .su-main .su-pillarlist{grid-template-columns:1fr;gap:18px}
  .su-page .su-main .su-svcgrid{grid-template-columns:1fr}
}

/* ---------- news: the six most recent posts ---------- */
/*
 * Three across, two rows, because six in a row at this width gives a card
 * narrower than its own headline and the live page's own strip is a 3x2.
 * The image is a fixed-ratio box rather than a height, so six different
 * source crops still line their titles up.
 */
.su-page .su-main .su-news{border-top:1px solid var(--rule-2);padding-block:62px 70px;background:var(--ground)}
.su-page .su-main .su-news h2{font-family:var(--display);font-weight:600;font-size:clamp(22px,2.6vw,30px);letter-spacing:-.018em;margin:0 0 8px;text-wrap:balance}
.su-page .su-main .su-news .su-sub{color:var(--ink-2);margin:0 0 32px;max-width:56ch}
.su-page .su-main .su-newsgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px 18px;margin-bottom:30px}
.su-page .su-main .su-ncard{display:flex;flex-direction:column;text-decoration:none;color:inherit;border:1px solid var(--rule-2);
  border-radius:10px;overflow:hidden;background:#fff;transition:border-color 240ms,transform 240ms,box-shadow 240ms}
.su-page .su-main .su-ncard:hover{border-color:var(--cta);box-shadow:0 16px 34px -22px rgba(10,31,68,.4);transform:translateY(-2px)}
.su-page .su-main .su-nshot{display:block;aspect-ratio:16/9;background:var(--ground-2);overflow:hidden}
.su-page .su-main .su-nshot img{width:100%;height:100%;object-fit:cover;display:block}
.su-page .su-main .su-nbody{display:flex;flex-direction:column;gap:10px;padding:18px 18px 20px;flex:1 1 auto}
.su-page .su-main .su-ncard h3{margin:0;font-family:var(--display);font-size:15.5px;font-weight:600;line-height:1.35;letter-spacing:-.01em;flex:1 1 auto}
.su-page .su-main .su-nmeta{display:flex;flex-wrap:wrap;gap:8px;align-items:baseline;font-size:12.5px;color:var(--ink-3)}
.su-page .su-main .su-nmeta b{font-weight:600;color:var(--ink-2)}
/*
 * THE DATE, NOT THE WHOLE META ROW. .su-nmeta sets --ink-3 and the author <b>
 * inside it already sets --ink-2, so the only text that was under AA is the
 * date. Lifting the row instead of the date would have moved a colour that was
 * already passing.
 */
.su-page .su-main .su-nmeta time{color:var(--ink-3-aa)}
.su-page .su-main .su-nmeta time::before{content:"/";margin-right:8px;color:var(--rule)}
.su-page .su-main .su-news .su-now-acts{display:flex;justify-content:center}

@media (max-width:880px){
  .su-page .su-main .su-newsgrid{grid-template-columns:1fr 1fr}
  .su-page .su-main .su-news{padding-block:48px 56px}
}
@media (max-width:560px){
  .su-page .su-main .su-newsgrid{grid-template-columns:1fr}
}

/* ---------- partners and accreditations: baseline item 7 ---------- */
/*
 * ONE ROW OF MARKS ON A COMMON CAP HEIGHT, not six boxes.
 *
 * Six logotypes drawn by six different hands never agree on a bounding box:
 * the ISO credential is a circular seal that carries its own air, the Google
 * Cloud lockup is tight to its ink, and AVPA's tick overshoots its own
 * capline. Sized to one box they read as six pasted pictures. So the height is
 * 34px multiplied by a per-mark optical scale, which srhv2_partners() carries
 * and the template writes onto the <li> as --s. The numbers were set by
 * measuring the rendered row, not by reading the files.
 *
 * NO GREYSCALE AND NO OPACITY. Both are the usual way to make a logo wall look
 * tidy, and both are a change to somebody else's mark. Google Cloud and Hedera
 * are used here in their own colours, as published.
 */
.su-page .su-main .su-partners{border-top:1px solid var(--rule-2);padding-block:58px 62px;background:var(--ground-2)}
.su-page .su-main .su-partners h2{font-family:var(--display);font-weight:600;font-size:clamp(22px,2.6vw,30px);letter-spacing:-.018em;margin:0 0 10px;text-wrap:balance}
.su-page .su-main .su-partners .su-sub{color:var(--ink-2);margin:0 0 36px;max-width:72ch}
/*
 * The hero's kick follows the industry accent and repaints on every turn of
 * the carousel. This one is a section label a long way down the page, so it
 * takes the quiet ink and stays put.
 */
/*
 * --ink-2, not --ink-3. The quieter token is 3.68 to 1 on --ground-2, which is
 * under the 4.5 that 11.5px type needs; --ink-2 measures 6.73 to 1 on the same
 * ground. Measured on the rendered page rather than picked by eye.
 */
.su-page .su-main .su-kick-flat{color:var(--ink-2);transition:none}
.su-page .su-main .su-partnerlist{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:30px 52px}
.su-page .su-main .su-partnerlist li{display:flex;align-items:center;justify-content:center;flex:0 0 auto}
.su-page .su-main .su-partnerlist img{height:calc(38px * var(--s,1));width:auto;max-width:210px;object-fit:contain}
@media (max-width:880px){
  .su-page .su-main .su-partners{padding-block:46px 50px}
  .su-page .su-main .su-partnerlist{gap:26px 34px}
  .su-page .su-main .su-partnerlist img{height:calc(32px * var(--s,1))}
}

/* ---------- SHR on the exchanges: baseline item 9 ---------- */
/*
 * THE HEIGHTS COME FROM tokens.css, NOT FROM NEW NUMBERS HERE.
 * --sr-ex-h-mexc and --sr-ex-h-kucoin are the optical cap heights the footer
 * row already uses, and --sr-ex-b is the baseline correction that puts two
 * marks with different amounts of air on one line. This row is the same two
 * marks at twice the footer size, so it multiplies both rather than inventing
 * a second set, and the two rows cannot drift apart.
 *
 * The artwork is the ON-LIGHT pair, because this section sits on white and the
 * footer sits on #0B0E33. No filter is applied to either: a filter over colour
 * artwork is a guess at what the artwork is.
 */
.su-page .su-main .su-shr{border-top:1px solid var(--rule-2);padding-block:46px 50px;background:var(--ground);text-align:center}
/*
 * LINE-HEIGHT IS STATED FOR THE SAME REASON. As a <p> this line inherited 1.6
 * from .su-page .su-main. As an <h2> it picked up the tight heading leading
 * from base.css and the line lost 7.6px of height, which moved everything
 * under it. The ratio rather than a pixel value, because the font-size is a
 * clamp and has to stay proportional at every width.
 */
.su-page .su-main .su-shr-line{font-family:var(--display);font-weight:600;font-size:clamp(16px,1.8vw,19px);line-height:1.6;letter-spacing:-.012em;color:var(--ink);margin:0 0 24px}
.su-page .su-main .su-exlist{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:center;gap:18px 52px}
.su-page .su-main .su-ex{--su-ex-k:2}
.su-page .su-main .su-ex a{display:flex;align-items:flex-end;text-decoration:none}
.su-page .su-main .su-ex img{display:block;width:auto;
  height:calc(var(--sr-ex-h) * var(--su-ex-k));
  margin-bottom:calc(var(--sr-ex-h) * var(--su-ex-k) * (var(--sr-ex-b) - 1))}
.su-page .su-main .su-ex--mexc{--sr-ex-h:var(--sr-ex-h-mexc);--sr-ex-b:var(--sr-ex-b-mexc)}
.su-page .su-main .su-ex--kucoin{--sr-ex-h:var(--sr-ex-h-kucoin);--sr-ex-b:var(--sr-ex-b-kucoin)}
@media (max-width:560px){
  .su-page .su-main .su-ex{--su-ex-k:1.6}
  .su-page .su-main .su-exlist{gap:16px 34px}
}
