/* Mission · 07 · Building the mandate, what it takes: the keynote's six-disc rosette (graphic "ms-mandate-rosette").
   Light only: pastel token tints, multiplied; a white core with an ink keyline. Both gradient sets the talk had are
   now one: the JS writes the stops as token mixes, CSS picks them with fill:url(#…). */

/* per-track hue (site tokens): --ros-c the ink (labels), --ros-m a mid-tone (leaders) */
.ms-ros-k1{--ros-t:var(--p-propose)} .ms-ros-k2{--ros-t:var(--gold)} .ms-ros-k3{--ros-t:var(--qi-shape)}
.ms-ros-k4{--ros-t:var(--venn-ai-ring)} .ms-ros-k5{--ros-t:var(--qi-improve)} .ms-ros-k6{--ros-t:var(--violet)}
.ms-ros-d,.ms-ros-trk,.ms-ros-leg{--ros-c:color-mix(in oklab,var(--ros-t) 70%,var(--ink));--ros-m:color-mix(in oklab,var(--ros-t) 82%,var(--ground))}
/* the build staggers inside each band: 01 and 04 first, then 02 and 05, then 03 and 06 */
.ms-ros-k2,.ms-ros-k5{--ros-dl:.14s}
.ms-ros-k3,.ms-ros-k6{--ros-dl:.28s}

.ms-ros-svg{-webkit-user-select:none;user-select:none}
.ms-ros-svg .ms-ros-narrow{display:none}
.ms-ros-svg.is-narrow .ms-ros-narrow{display:inline}
.ms-ros-svg.is-narrow .ms-ros-wide{display:none}

/* ---- states: every mark of a track carries .is-on when its step has lit it */
.ms-ros-d{transition:opacity .5s var(--ms-ease),transform .7s var(--ms-ease),fill-opacity .3s ease,stroke-opacity .3s ease}
.ms-ros-d.is-on{transition:opacity .9s var(--ms-ease) var(--ros-dl,0s),transform 1.1s var(--ms-ease) var(--ros-dl,0s),fill-opacity .3s ease,stroke-opacity .3s ease}
.ms-ros-f:not(.is-on),.ms-ros-r:not(.is-on){opacity:0;transform:translate(var(--ros-ix,0),var(--ros-iy,0))}
.ms-ros-ico:not(.is-on),.ms-ros-num:not(.is-on),.ms-ros-trk:not(.is-on),.ms-ros-leg:not(.is-on),.ms-ros-head:not(.is-on){opacity:0}
.ms-ros-head{transition:opacity .8s var(--ms-ease)}
.ms-ros-trk:not(.is-on),.ms-ros-leg:not(.is-on){pointer-events:none}

/* ---- the discs */
.ms-ros-fills{isolation:isolate}
.ms-ros-r{fill:none;stroke-width:2}
.ms-ros-ghost{fill:none;stroke:var(--ms-rule-strong);stroke-width:1.3;stroke-dasharray:2 7;stroke-linecap:round;opacity:.55;transition:opacity .6s var(--ms-ease)}
.ms-ros-ghost.is-on{opacity:0}

/* ---- the centre, where all six meet */
.ms-ros-core{opacity:0;transition:opacity .9s var(--ms-ease) .15s;pointer-events:none}
.ms-ros-core.is-on{opacity:1}
.ms-ros-core-fill{fill:var(--ground)}
.ms-ros-core-line{fill:none;stroke:var(--ink);stroke-width:1.6;stroke-linejoin:round}
.ms-ros-core-t{font-family:var(--f-name);font-weight:700;font-size:22px;letter-spacing:-.005em;fill:var(--ink)}
.ms-ros-svg.is-hl .ms-ros-core.is-on{opacity:.35}

/* ---- icons (wide) and numbers (narrow) in the lobes */
.ms-ros-ico{fill:none;stroke:var(--ros-c);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}
.ms-ros-num{font-family:var(--f-name);font-weight:700;font-size:27px;letter-spacing:.02em;fill:var(--ros-c);pointer-events:none}

/* ---- labels with leader lines (wide) */
.ms-ros-h{font-family:var(--f-label);font-weight:500;font-size:13px;letter-spacing:.12em;fill:var(--ms-label)}
.ms-ros-hb{fill:var(--ink)}
.ms-ros-gov .ms-ros-sq{fill:color-mix(in oklab,var(--p-propose) 70%,var(--ink))} .ms-ros-tech .ms-ros-sq{fill:color-mix(in oklab,var(--venn-ai-ring) 70%,var(--ink))}
.ms-ros-trk,.ms-ros-leg{cursor:default;outline:none}
.ms-ros-lhit{fill:none;stroke:none;pointer-events:all}
.ms-ros-trk:focus-visible .ms-ros-lhit,.ms-ros-leg:focus-visible .ms-ros-lhit{stroke:var(--focus);stroke-width:1.5}
.ms-ros-lead{fill:none;stroke:var(--ros-m);stroke-width:1.6;stroke-dasharray:var(--ros-len);stroke-dashoffset:var(--ros-len);transition:stroke-dashoffset .5s var(--ms-ease)}
.ms-ros-trk.is-on .ms-ros-lead{stroke-dashoffset:0;transition:stroke-dashoffset 1s var(--ms-ease) var(--ros-dl,0s)}
.ms-ros-dot{fill:var(--ros-m)}
.ms-ros-t{font-family:var(--f-name);font-weight:600;font-size:28px;letter-spacing:-.005em;fill:var(--ros-c)}
.ms-ros-s{font-family:var(--f-label);font-weight:500;font-size:13.5px;letter-spacing:.08em;fill:var(--ms-label)}
.ms-ros-sn{fill:var(--ink)}

/* ---- legend (narrow) */
.ms-ros-lt{font-family:var(--f-name);font-weight:600;font-size:20px;fill:var(--ros-c)}
.ms-ros-ln{font-family:var(--f-label);font-weight:500;font-size:15px;fill:var(--ms-label)}

/* ---- hover, focus, tap: one track lights, the others dim */
.ms-ros-hit{fill:none;pointer-events:all}
.ms-ros-svg.is-hl .ms-ros-f:not(.is-hl){fill-opacity:.2}
.ms-ros-svg.is-hl .ms-ros-r:not(.is-hl),.ms-ros-svg.is-hl .ms-ros-ico:not(.is-hl){stroke-opacity:.25}
.ms-ros-svg.is-hl .ms-ros-num:not(.is-hl){fill-opacity:.3}
.ms-ros-svg.is-hl .ms-ros-trk:not(.is-hl),.ms-ros-svg.is-hl .ms-ros-leg:not(.is-hl){fill-opacity:.32;stroke-opacity:.32}
.ms-ros-r.is-hl{stroke-width:3}

/* static mode and print: the finished state, no motion */
.ms-static .ms-ros-svg *{transition:none!important}

/* the discs: pastel tints, multiplied */
.ms-ros-f{mix-blend-mode:multiply}
.ms-ros-f.ms-ros-k1{fill:url(#ms-ros-fl1)} .ms-ros-f.ms-ros-k2{fill:url(#ms-ros-fl2)} .ms-ros-f.ms-ros-k3{fill:url(#ms-ros-fl3)}
.ms-ros-f.ms-ros-k4{fill:url(#ms-ros-fl4)} .ms-ros-f.ms-ros-k5{fill:url(#ms-ros-fl5)} .ms-ros-f.ms-ros-k6{fill:url(#ms-ros-fl6)}
.ms-ros-r.ms-ros-k1{stroke:url(#ms-ros-rl1)} .ms-ros-r.ms-ros-k2{stroke:url(#ms-ros-rl2)} .ms-ros-r.ms-ros-k3{stroke:url(#ms-ros-rl3)}
.ms-ros-r.ms-ros-k4{stroke:url(#ms-ros-rl4)} .ms-ros-r.ms-ros-k5{stroke:url(#ms-ros-rl5)} .ms-ros-r.ms-ros-k6{stroke:url(#ms-ros-rl6)}
.ms-ros-r{stroke-width:1.6}
.ms-ros-r.is-hl{stroke-width:2.6}
