/* TreeSignal 1.5 — a living margin trail, never a layer over the message. */
.ts-growth-trail{position:fixed;inset:0;z-index:12;pointer-events:none;user-select:none;contain:strict;overflow:hidden;opacity:0;transition:opacity .35s ease}
.ts-growth-trail.is-ready{opacity:1}
.ts-growth-trail[hidden]{display:none!important}
.ts-growth-trail svg{position:absolute;inset:0;display:block;width:100%;height:100%;overflow:hidden}
.ts-trail-track{fill:none;stroke-width:1.1;stroke-linecap:round;opacity:.2}
.ts-trail-grown{fill:none;stroke-width:1.6;stroke-linecap:round;opacity:.83}
.ts-trail-thread{fill:none;stroke-width:5;stroke-linecap:round;opacity:.07}
.ts-trail-vein{fill:none;stroke:currentColor;stroke-width:.8;stroke-linecap:round;opacity:.72}
.ts-trail-leaf{fill:currentColor;stroke:currentColor;stroke-width:.3;opacity:.88}
.ts-trail-bud{fill:currentColor;opacity:.5}
.ts-trail-ring{fill:none;stroke:currentColor;stroke-width:.85;opacity:.2}
.ts-trail-spark{fill:currentColor}
.ts-trail-halo{fill:url(#ts-trail-aura)}
.ts-trail-pulse{fill:none;stroke:currentColor;stroke-width:1;opacity:.5}
/* Clipping geometry is measured from the actual content margins. No reading area is reserved or covered. */
.ts-growth-trail[data-compact=true] .ts-trail-branch,.ts-growth-trail[data-compact=true] .ts-trail-contours{display:none}
.ts-growth-trail[data-compact=true] .ts-trail-grown{stroke-width:1.15;opacity:.65}
.ts-growth-trail[data-quiet=true] .ts-trail-contours{opacity:.15}
.ts-growth-trail[data-quiet=true] .ts-trail-branch{opacity:.55}
.ts-growth-trail[data-quiet=true] .ts-trail-pulse{opacity:.2}
.ts-growth-trail[data-state=resting] .ts-trail-pulse{opacity:.2}
html.motion-paused .ts-growth-trail{display:none!important}
@media(prefers-reduced-motion:reduce){.ts-growth-trail{display:none!important}}
@media(forced-colors:active){.ts-growth-trail{display:none!important}}
@media print{.ts-growth-trail{display:none!important}}

/* TreeSignal 1.6 — visible, reserved-space growth ribbon. */
.ts-journey-ribbon{border-top:1px solid #d0ef941e;background:#102b22;color:#eaf3dd;position:relative;isolation:isolate}
.ts-journey-ribbon .ts-ribbon-inner{height:58px;display:flex;align-items:center;gap:22px;min-width:0}
.ts-ribbon-tree{width:38px;height:45px;flex:none;color:#c6ef6b;overflow:visible}
.ts-ribbon-copy{min-width:0;width:220px;flex:none;line-height:1.4}
.ts-ribbon-copy>span{display:block;font-size:8px;letter-spacing:.17em;color:#b9cc9e;font-weight:600}
.ts-ribbon-copy>strong{display:block;font-size:13px;line-height:1.5;letter-spacing:-.015em;font-weight:500;color:#f0f7e4;white-space:nowrap}
.ts-ribbon-visual{flex:1;min-width:45px;height:46px;position:relative;overflow:hidden;color:#c6ef6b}
.ts-ribbon-vine{position:absolute;inset:0;width:100%;height:100%;overflow:hidden}
.ts-ribbon-stem{fill:none;stroke:currentColor;stroke-width:2.6;stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:100}
.ts-ribbon-track{fill:none;stroke:#b0c99440;stroke-width:1;stroke-linecap:round}
.ts-ribbon-growth{transform-origin:0 30px}.ts-ribbon-spark{fill:#eefecb}.ts-ribbon-money-stem{fill:none;stroke:#a7cc6e;stroke-width:1.3;stroke-linecap:round}.ts-ribbon-money-coin{fill:#d8f48c;stroke:#f3ffd2;stroke-width:.9}.ts-ribbon-money-mark{fill:#173320;font:700 4.6px Arial,sans-serif;letter-spacing:.01em}.ts-ribbon-leaf{fill:#c6ef6b}
.ts-ribbon-percent{font-size:11px;line-height:1.1;color:#d8ecb9;flex:none;min-width:32px;text-align:right;font-variant-numeric:tabular-nums}
.ts-ribbon-motion{width:38px;height:38px;border:1px solid #c6ef6b50;border-radius:50%;background:#0a2019;color:#d8f19b;display:grid;place-items:center;flex:none;padding:0;transition:background .15s,border-color .15s;font-size:16px;line-height:1}
.ts-ribbon-motion:hover{background:#31482a;border-color:#c6ef6b}.ts-ribbon-motion:focus-visible{outline:2px solid #d5f88c;outline-offset:4px}
.ts-ribbon-motion:disabled{cursor:default;opacity:.7}.ts-ribbon-motion svg{width:15px;height:15px;display:block}
.ts-ribbon-status{display:none;font-size:9px;color:#d0dfba;white-space:nowrap}
.ts-journey-ribbon[data-motion=paused] .ts-ribbon-status{display:inline}
.ts-has-journey-header .mobile-nav{top:100%}
html.ts-has-page-journey{scroll-padding-top:calc(var(--ts-nav-height,152px) + 16px)}
html.ts-has-page-journey .ts-reading-progress{display:none}
/* Small branches remain visible on tablets and phones, safely inside the margin. */
.ts-growth-trail[data-compact=true] .ts-trail-branch{display:block}
.ts-growth-trail[data-compact=true] .ts-trail-contours{display:none}
.ts-trail-grown{stroke-width:2.5;opacity:1}.ts-trail-thread{stroke-width:9;opacity:.13}
.ts-growth-trail[data-compact=true] .ts-trail-grown{stroke-width:1.9;opacity:.98}
.ts-trail-vein{stroke-width:1.4;opacity:.95}.ts-trail-leaf{opacity:1}.ts-trail-spark{r:3.5px}
@media(max-width:1100px){.ts-ribbon-copy{width:207px}.ts-journey-ribbon .ts-ribbon-inner{gap:15px}}
@media(max-width:700px){.ts-journey-ribbon .ts-ribbon-inner{height:56px;gap:10px}.ts-ribbon-tree{width:29px;height:37px}.ts-ribbon-copy{width:161px}.ts-ribbon-copy>span{font-size:6.7px;letter-spacing:.12em}.ts-ribbon-copy>strong{font-size:10.5px}.ts-ribbon-percent{display:none}.ts-ribbon-motion{width:34px;height:34px}.ts-ribbon-status{display:none!important}.ts-ribbon-visual{height:42px;min-width:35px}}
@media(max-width:360px){.ts-journey-ribbon .ts-ribbon-inner{gap:7px}.ts-ribbon-tree{width:24px}.ts-ribbon-copy{width:151px}.ts-ribbon-copy>strong{font-size:10px}.ts-ribbon-visual{min-width:25px}.ts-ribbon-motion{width:32px;height:32px}}
@media(prefers-reduced-motion:reduce){.ts-journey-ribbon *{transition:none!important}.ts-ribbon-tree-growth{transform:none!important}}
@media(forced-colors:active){.ts-journey-ribbon{background:Canvas;color:CanvasText;border-color:CanvasText}.ts-ribbon-copy>span,.ts-ribbon-copy>strong,.ts-ribbon-percent{color:CanvasText}.ts-ribbon-motion{color:ButtonText;border-color:ButtonText}.ts-ribbon-visual,.ts-ribbon-tree{display:none}}
@media print{.ts-journey-ribbon{display:none!important}}
