/* Final lighting pass. No trophy selectors or trophy timelines are changed. */
:root { --v-live-blue:#007aff; --v-live-cyan:#42dcff; }
.v-section > .wrap { max-width:1240px; }
.v-section { padding-block:clamp(48px,5vw,76px)!important; }
.v-section h2 {font-size:var(--ds-title);}
.v-section h3 {line-height:1.15;}
.v-ecosystem {height:470px}
.v-eco-node {padding:20px;gap:14px;width:28%}
.v-eco-node h3 {font-size:var(--ds-card);}
.v-eco-0 {left:36%}
.v-eco-node p {font-size:14px}
.v-four-steps {gap:40px;margin-top:38px;grid-template-columns:repeat(4,minmax(0,1fr));align-items:stretch}
.v-big-step {display:flex;flex-direction:column;align-items:stretch;gap:22px;min-width:0}
.v-big-step > div:first-child {flex:1}
.v-big-step h3 {font-size:var(--ds-card);min-height:2.2em;}
.v-big-step p {font-size:1rem;line-height:1.5;}
.v-big-step .v-outline-number {font-size:68px;margin-bottom:12px}
.v-big-step .v-panel {transform:none;min-height:218px;padding:19px 16px;overflow:visible}
.v-big-step .v-panel .v-tag {font-size:10px;letter-spacing:.1em}
.v-big-step .v-screen-list li {font-size:13px;gap:8px}
.v-big-step .v-screen-list .icon {width:22px;height:22px}
.v-big-step .v-screen-list .icon:last-child {width:12px}
.v-big-step .v-bars {height:122px}
.v-big-step .v-screen-tabs {font-size:12px}
.v-big-step .v-panel::before {border-radius:inherit}
.v-ownership {grid-template-columns:1fr 1fr;max-height:none;gap:45px}
.v-ownership-art > img {height:580px;width:100%;object-fit:contain}
.v-ownership li {padding:19px 0}
.v-ownership li h3 {font-size:var(--ds-card);}
.v-ownership li .v-outline-number {font-size:54px}
.v-ch-path {min-height:490px}
.v-ch-path .wrap {min-height:350px}
.v-path-panel {height:220px;gap:18px}
.v-path-panels {position:relative;gap:24px}
.v-allocation {grid-template-columns:1fr 1.45fr;gap:14%;min-height:370px}
.v-balanced-teams {grid-template-columns:1fr;gap:20px}
.v-team-glass {transform:none;padding:16px 20px;background:#f7fbff}
.v-team-glass > .v-tag {margin-bottom:12px}
.v-team-glass h3 {font-size:var(--ds-card);margin-bottom:12px;}
.v-team-role {padding:8px 0;position:relative}
.v-team-role > div {display:flex;align-items:center;gap:8px}
.v-team-role .icon {width:19px;height:19px}
.v-team-role strong {font-size:16px}
.v-ranked-pool > ol {gap:24px}
.v-ranked-pool li {min-height:45px}
/* The Brands network on /players is the one place .v-network is used,
   and it is drawn as five plain labels orbiting a tilted court. Four
   rules here used to restyle it into boxed cards on a flat court:
   `.v-network-node{background;border;padding;border-radius}` put a
   white card round every label, and `.v-orbit-court{transform:none}`
   cancelled the `rotateX(12deg)` in visual-system.css that gives the
   ground its perspective. Removed so the section reads as designed.
   The icon colour is kept — it is the blue the section was drawn with. */
.v-network-node .icon {color:#008cff}
.v-graph {position:relative;isolation:isolate}
/* Geometry is measured in the same coordinate system as these surfaces. */
/* Wired nodes hold still so the measured connectors stay on them —
   but only at rest. The hover lift is allowed through now that
   visual-motion.js re-measures the graph for the length of the
   transition; without the :not() guards this !important was what
   silently swallowed the lift on every tile that is also a graph
   endpoint (the championship path panels, the prize tiles). */
.v-graph[data-v-reveal],.v-graph .v-wired-node,.v-big-step[data-v-reveal] {animation:none!important}
.v-graph[data-v-reveal],.v-big-step[data-v-reveal],
.v-graph .v-wired-node:not(:hover):not(:focus-within):not(.v-hover-lit) {translate:none!important}
.v-wired-node[data-v-tilt] {transform:none!important}
.v-live-wire,.v-court-wire {position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;fill:none;z-index:1}
.v-court-wire {inset:auto;z-index:1}
.v-live-wire path,.v-court-wire path {vector-effect:non-scaling-stroke;stroke-linejoin:round;stroke-linecap:round}
.v-link-track {stroke:#007aff;stroke-width:1.3;opacity:.24}
.v-link-light {stroke:#0087ff;stroke-width:1.8;stroke-dasharray:1;stroke-dashoffset:calc(1px - var(--v-link,var(--v-energy,1))*1px);filter:drop-shadow(0 0 3px #008cff);opacity:.9}
.dark .v-link-light {stroke:#54d7ff;filter:drop-shadow(0 0 4px #008cff)}
.v-link-pulse {stroke:#83edff;stroke-width:2.6;stroke-dasharray:.055 .945;filter:drop-shadow(0 0 4px #009dff);animation:v-current 2.8s linear infinite;animation-play-state:paused;opacity:0}
.v-graph-visible .v-link-on .v-link-pulse,.v-scroll-active .v-court-wire .v-link-pulse {animation-play-state:running;opacity:1}
.v-link-port {fill:#0098ff;stroke:#b3f2ff;stroke-width:1;opacity:calc(.25 + var(--v-link,1)*.75)}
.v-link-on .v-link-port {filter:drop-shadow(0 0 4px #007fff)}
.v-electric {--v-charge:var(--v-energy,0);
  /* This sheet loads after polish.css, so its own transition list
     used to replace the card hover's — leaving transform with no
     transition at all on every .card/.tier that is also electric,
     which is why the lift snapped. Same list as everywhere else. */
  transition:var(--surface-transition);}
.v-scroll-lit .v-electric {border-color:#078cee;box-shadow:0 8px 24px #03182b22,0 0 0 1px #008cff22,0 0 18px #007fff28,inset 0 0 16px #008cff0c}
.v-scroll-lit .v-electric.v-charged,.v-scroll-lit .v-charged > .v-panel {border-color:#00caff;box-shadow:0 10px 28px #0b1f3830,0 0 3px #00bfff99,0 0 22px #007fff38,inset 0 0 18px #0098ff15}
.v-electric:hover,.v-electric:focus-visible,.v-electric:focus-within,.v-electric[aria-pressed=true],.v-electric.v-hover-lit {border-color:#83edff!important;box-shadow:0 12px 28px #031a3630,0 0 3px #57e7ff,0 0 18px #009dff80,0 0 40px #007aff38,inset 0 0 24px #008cff25!important}
.v-electric:focus-visible {outline:2px solid #007aff;outline-offset:5px}

/* ---- card-like surfaces float on hover ----------------------------
   The electric edge above lights the border and shadow. These lift as
   well, so a panel reads as floating toward the reader rather than
   just changing colour.

   `translate`, not `transform`: the sponsor app screens are fanned
   with a matrix3d, and several surfaces carry their own tilt, so a
   transform here would replace the angle instead of adding to it.
   `translate` is a separate property and composes with whatever
   transform the surface already has.

   .v-wired-node is excluded. visual-motion.js tags every connector
   endpoint with that class, and the connectors are drawn from measured
   element geometry — lifting an endpoint pulls it away from the line
   that points at it. */
@media (hover: hover) and (prefers-reduced-motion: no-preference) {
  .v-panel:not(.v-wired-node):hover,
  .v-panel:not(.v-wired-node):focus-within,
  .v-app-screen:hover,
  .v-app-screen:focus-within {
    translate: 0 -6px;
  }
  /* A panel nested in another surface rides with its parent instead of
     lifting a second time on top of it. */
  .v-panel .v-panel:hover,
  .v-app-screen .v-panel:hover,
  .v-panel .v-panel:focus-within,
  .v-app-screen .v-panel:focus-within {
    translate: none;
  }
}
.v-electric:hover > .icon,.v-electric:focus-visible > .icon {filter:drop-shadow(0 0 5px #00b7ff)}
.v-scroll-scene {--v-energy:0}
.v-scroll-scene::after {content:"";position:absolute;left:6%;right:6%;bottom:0;height:1px;pointer-events:none;background:linear-gradient(90deg,transparent,#008cff,#42dcff,transparent);opacity:var(--v-energy);box-shadow:0 0 12px #007fff50}
.v-sequence-item {--v-charge:0}
.v-sequence-item .v-outline-number,.ch-stage-num,.pl-step-n {transition:color .3s,filter .3s}
.v-charged > .v-outline-number,.v-charged > div > .v-outline-number,.ch-stage.v-charged .ch-stage-num,.pl-step.v-charged .pl-step-n {color:#007fff30;-webkit-text-stroke-color:#008cff;filter:drop-shadow(0 0 7px #008cff4d)}
.ch-stage.v-charged .ch-stage-mark,.v-audience .v-charged .icon,.v-network-node.v-charged .icon,.v-charged .v-prize-number {filter:drop-shadow(0 0 7px #009dff);color:#00b7ff}
.v-bars i {animation:none!important;transform-origin:bottom;transform:scaleY(calc(.2 + var(--v-charge,var(--v-energy,1))*.8));transition:transform .16s linear;box-shadow:0 0 10px #008cff28}
.v-scroll-lit .v-stat-lines i::after,.v-scroll-lit .v-ranked-pool li b {filter:drop-shadow(0 0 5px #00aaff)}
.v-sequence-item.v-charged .v-activity,.v-activity.v-charged {background:#009dff0a}
.v-activity.v-charged i.lit {box-shadow:0 0 7px #00d5ff}
.v-path-panel {opacity:1;translate:0 calc((1 - var(--v-charge,1))*18px);filter:brightness(calc(.72 + var(--v-charge,1)*.28));transition:translate .12s linear,filter .12s linear,box-shadow .2s}
.v-path-panel.v-charged {background:linear-gradient(145deg,#037ef552,#064b8333)}
.v-ownership li.v-charged {border-bottom-color:#008cff;box-shadow:0 7px 12px -12px #008cff}
.v-art-halo {position:relative}
.v-art-halo::after {content:"";position:absolute;inset:15% 10%;border-radius:50%;background:radial-gradient(ellipse,#009dff33,transparent 68%);opacity:var(--v-energy,.5);mix-blend-mode:screen;pointer-events:none;transition:opacity .25s}
.sponsor-panel:hover .v-art-halo::after,.sponsor-panel[aria-pressed=true] .v-art-halo::after {opacity:1;filter:brightness(1.6)}
.v-city-art .v-live-wire {z-index:2}
.v-city-art .v-link-light {stroke:#40cfff;stroke-width:2;filter:drop-shadow(0 0 6px #007fff)}
.v-product-label.v-charged {background:#05344ce8;border-color:#57e7ff;box-shadow:0 0 14px #008cff60}
.v-equipment-art::after,.v-ad-game::after {content:"";position:absolute;inset:0;border-radius:inherit;border:1px solid #54d7ff;box-shadow:inset 0 0 22px #008cff44;opacity:var(--v-energy,0);pointer-events:none}
.pl-feeds::before,.pl-feeds li::before,.pl-feeds li::after {display:none!important}
.pl-ppi-grid > .v-live-wire {z-index:0}
.pl-ppi-hub,.pl-feeds {position:relative;z-index:2}
.pl-ppi-hub {filter:drop-shadow(0 0 calc(var(--v-energy,0)*18px) #008cff66)}
.pl-step-dot {box-shadow:0 0 10px #00bfff!important}
.v-bracket-grid {gap:28px}
.v-bracket .v-groups > div {font-size:15px;gap:6px;background:var(--v-bracket-bg,#f7fbff);position:relative;z-index:2}
.v-sponsor-art .v-bracket {--v-bracket-bg:#0b1f38}
.v-sponsor-art .v-bracket .v-groups > div {color:#99daff}
.v-bracket .v-round > span {position:relative;z-index:2}
.v-bracket .v-final {position:relative;z-index:2}
.v-ad-muted {background:linear-gradient(145deg,#d7e4ee,#edf6ff);border:1px solid #bccbd5}
.v-video-placeholder {background:linear-gradient(135deg,#c9d5e1,#edf6ff)}
.v-ad-muted::after {content:"";display:block;height:3px;width:70%;background:#8fa3b5;margin:16px auto 0}
.v-ad-game {position:relative;border-radius:12px;overflow:hidden}
@keyframes v-current {to{stroke-dashoffset:-1}}
@media(min-width:901px){
 .v-selection-hub {gap:50px}
 .v-split {gap:5%}
 .v-player-selection {gap:55px}
}
@media(max-width:1100px) and (min-width:601px){
 .v-four-steps {grid-template-columns:repeat(2,minmax(0,1fr));gap:44px 50px}
 .v-big-step {display:grid;grid-template-columns:1fr 1fr;gap:18px}
 .v-big-step .v-panel {min-height:220px}
}
@media(max-width:900px){
 .v-section > .wrap {width:88%}
 .v-ownership-art > img {height:500px}
 .v-allocation {gap:10%;grid-template-columns:1fr 1.25fr}
 .v-team-role > span .icon {width:14px}
 .v-bracket-grid {gap:18px}
 .v-ecosystem {height:440px}
 .v-eco-node {padding:14px;gap:10px}
 .v-eco-node h3 {font-size:var(--ds-card);}
 .v-eco-node p {font-size:12px}
 .v-eco-node > .icon {width:27px;height:27px}
}
@media(max-width:600px){
 .v-section {padding-block:46px!important}
 .v-section > .wrap {width:88%}
 .v-ecosystem {height:auto;display:grid;grid-template-columns:1fr;gap:16px;padding-top:260px}
 .v-eco-court {left:10%;top:0;width:80%;height:250px}
 .v-eco-node {position:relative;inset:auto;width:100%;padding:17px;min-height:86px}
 .v-eco-node h3 {font-size:var(--ds-card);}
 .v-eco-node p {font-size:14px}
 .v-ecosystem > .v-live-wire {display:none}
 .v-four-steps {grid-template-columns:1fr;gap:42px;margin-top:26px}
 .v-big-step {display:grid;grid-template-columns:1fr;gap:14px}
 .v-big-step h3 {min-height:0;font-size:var(--ds-card);}
 .v-big-step .v-outline-number {font-size:52px;margin-bottom:10px}
 .v-big-step .v-panel {min-height:190px;padding:20px}
 .v-big-step .v-screen-list li {font-size:15px}
 .v-four-steps > .v-live-wire {display:none}
 .v-ownership {display:flex;flex-direction:column;gap:20px}
 .v-ownership > ol {order:2}
 .v-ownership-art {width:100%;max-width:310px}
 .v-ownership-art > img {height:410px}
 .v-allocation {grid-template-columns:1fr;gap:30px}
 .v-balanced-teams {grid-template-columns:1fr 1fr;gap:12px}
 .v-ranked-pool > ol {gap:8px}
 .v-team-glass {padding:14px 10px}
 .v-team-role {flex-wrap:wrap}
 .v-allocation > .v-live-wire,.v-player-selection > .v-live-wire,.v-membership > .v-live-wire,.v-fixture-group > .v-live-wire,.pl-ppi-grid > .v-live-wire {display:none}
 .v-path-panels {gap:14px}
 .v-path-panel {height:190px;padding:10px 6px}
 .v-path-panel strong {font-size:17px}
 .v-ch-path {min-height:500px}
 /* visual-system.css already narrows the nodes to 105px and the
    network to 300px at this breakpoint; no card padding to restate. */
 .v-network-node {font-size:14px}
 .v-bracket-grid {gap:12px;grid-template-columns:1.3fr .7fr .7fr .8fr}
 .v-bracket .v-round > span {width:32px;height:32px}
 .v-bracket .v-groups > div {font-size:12px;gap:3px}
 .v-bracket .v-groups .icon {width:16px}
 .v-bracket .v-groups i {display:none}
 .v-bracket .v-final {width:52px;height:52px;font-size:18px}
}
.motion-paused .v-link-pulse,.v-tab-hidden .v-link-pulse {animation-play-state:paused!important}
.motion-paused .v-path-panel {translate:none!important}
@media(prefers-reduced-motion:reduce){
 .v-link-pulse {animation:none!important;opacity:0!important}
 .v-link-light {stroke-dashoffset:0!important}
 .v-path-panel {translate:none!important;filter:none!important}
 .v-electric {transition:none!important}
 .v-bars i {transform:none!important;transition:none!important}
}
.v-city-art.v-graph {position:absolute;isolation:auto}
.v-scroll-scene {position:relative}
/* Copy is never held invisible while decorative animation catches up. */
.v-scroll-scene .reveal {opacity:1!important;transform:none;visibility:visible}
.v-scroll-scene .reveal .icon > * {stroke-dasharray:none;stroke-dashoffset:0;animation:none}
.v-transform-divider {transform-origin:top;scale:1 var(--v-energy,1);transition:scale .15s linear}
.v-transform-record {translate:0 calc((1 - var(--v-energy,1))*12px);transition:translate .15s linear}
.v-ad-muted {opacity:calc(.8 - var(--v-energy,0)*.3);transition:opacity .2s}
.v-ad-game {translate:0 calc((1 - var(--v-energy,1))*14px);transition:translate .15s}
.v-ad-contrast.v-graph .v-ad-game {translate:none}
.v-sunday .v-panel {filter:brightness(calc(.75 + var(--v-charge,1)*.25));transition:filter .2s}
.v-club-membership .v-member-card {background:radial-gradient(ellipse at 20% 20%,#064775,#03182b 75%)}
.v-scroll-active .v-court-wire {opacity:calc(.25 + var(--v-energy,0)*.75)}
.v-court-wire {opacity:.25;transition:opacity .2s}
.motion-paused .v-transform-divider {scale:1}
.motion-paused .v-transform-record {translate:none}
@media(prefers-reduced-motion:reduce){.v-transform-divider{scale:1}.v-transform-record,.v-ad-game{translate:none}}
.v-mobile-allocation-wire {display:none}
.v-scroll-scene .cards > *,.v-scroll-scene .features > * {opacity:1}
.v-choreography .ch-stage,.v-choreography .ch-sheet,.v-choreography .ch-sheet-row {animation:none!important}
.v-inventory-path li.v-charged .icon {color:#42dcff;filter:drop-shadow(0 0 7px #008cff)}
@media(max-width:600px){.v-allocation > .v-mobile-allocation-wire{display:block}}
@media(min-width:901px){
 .v-city {min-height:580px}
 .v-city-copy {width:34%;max-width:400px}
 .v-city::before {content:"";position:absolute;inset:0;z-index:0;pointer-events:none;background:linear-gradient(90deg,#fff 0%,#f7fbffef 21%,#f7fbffb0 29%,transparent 47%)}
}
main > section:not(.pl-ladder):not(.tr-cups):not(.trophy-story) .reveal,
main > section:not(.pl-ladder):not(.tr-cups):not(.trophy-story) .cards > *,
main > section:not(.pl-ladder):not(.tr-cups):not(.trophy-story) .features > * {opacity:1;visibility:visible}
body > .motion-control {position:fixed;z-index:110;right:18px;bottom:18px;pointer-events:auto}

/* ===================================================================
   Painted neon: light the tube, do not run a dot along it.

   .v-tube-light is set by courtLight() on the overlays that lie on
   light the artwork already paints -- the championships hero's frame
   and the portrait crop of the closing gate. Everywhere else the three
   layers are a connector between tiles, where a travelling dash reads
   as current moving from one to the next. On a tube that is already
   drawn, the same dash reads as a marker sliding along it.

   So the dash comes off and the tube gets the same treatment as the
   wide gate does in flow.css: a thin bright core with the bloom on the
   container, swinging between a quarter and full strength, so what you
   see is the halo swelling rather than a line being drawn. Matching
   the two matters -- they are the same gate, one photographed from
   outside and one from within.
   =================================================================== */
.v-tube-light .v-link-pulse {
  display: none;
}
.v-tube-light {
  filter: drop-shadow(0 0 7px #00b7ffcc) drop-shadow(0 0 22px #007aff88);
}
.v-tube-light .v-link-track {
  stroke-width: 2.4;
  opacity: 0.14;
}
.v-tube-light .v-link-light {
  stroke: #d8f3ff;
  stroke-width: 2.8;
  stroke-dashoffset: 0;
  filter: none;
  /* tube-flicker is defined in flow.css, where the wide gate's tubes
     use it too -- one strike for both, so the gate photographed from
     outside and the one seen from within behave identically. */
  animation: tube-flicker 6.4s linear infinite;
}
/* Held at full strength once lit: a tube that is on stays on. */
.v-scroll-lit .v-tube-light { opacity: 1; }

@media (prefers-reduced-motion: reduce) {
  .v-tube-light .v-link-light { animation: none; opacity: .8; stroke-dashoffset: 0 !important; }
}
