/* App-level CSS served from same-origin (CSP style-src 'self'-safe).
   Keep this tiny; Tailwind owns the design system. */

/* Hide Alpine-controlled elements until Alpine initializes, so modals and
   other x-cloak nodes don't flash on first paint. */
[x-cloak] {
    display: none !important;
}

/* --- Coach calendar grid (task 0110) -----------------------------------------
   CSP style-src is 'self' only, so tiles cannot carry inline `style` — the
   handler maps Warsaw wall-clock times onto 5-minute grid rows instead
   (06:00-22:00 -> 192 rows x 4px = 768px; 1h = 48px) and templates use the
   generated .cal-rs-N / .cal-re-N utilities below. Hour rules are painted
   with a repeating gradient off the DS border token. */
.cal-col {
    display: grid;
    grid-template-rows: repeat(192, 4px);
    position: relative;
}
/* Mobile day header = date jump (task #360). The native picker normally opens
   only from its small calendar indicator; stretching that indicator over the
   whole (transparent) input makes a tap anywhere on the day header open it.
   Pure CSS: no JS to reach showPicker(), so it survives CSP and works with
   scripting off, where the input degrades to a plain GET form field. */
.cal-datejump::-webkit-calendar-picker-indicator {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    opacity: 0;
    cursor: pointer;
}

.cal-hourlines {
    background-image: repeating-linear-gradient(
        to bottom,
        var(--border-subtle) 0,
        var(--border-subtle) 1px,
        transparent 1px,
        transparent 48px
    );
}

.cal-rs-1{grid-row-start:1} .cal-rs-2{grid-row-start:2} .cal-rs-3{grid-row-start:3} .cal-rs-4{grid-row-start:4} .cal-rs-5{grid-row-start:5} .cal-rs-6{grid-row-start:6} .cal-rs-7{grid-row-start:7} .cal-rs-8{grid-row-start:8} .cal-rs-9{grid-row-start:9} .cal-rs-10{grid-row-start:10} .cal-rs-11{grid-row-start:11} .cal-rs-12{grid-row-start:12} .cal-rs-13{grid-row-start:13} .cal-rs-14{grid-row-start:14} .cal-rs-15{grid-row-start:15} .cal-rs-16{grid-row-start:16} .cal-rs-17{grid-row-start:17} .cal-rs-18{grid-row-start:18} .cal-rs-19{grid-row-start:19} .cal-rs-20{grid-row-start:20} .cal-rs-21{grid-row-start:21} .cal-rs-22{grid-row-start:22} .cal-rs-23{grid-row-start:23} .cal-rs-24{grid-row-start:24} .cal-rs-25{grid-row-start:25} .cal-rs-26{grid-row-start:26} .cal-rs-27{grid-row-start:27} .cal-rs-28{grid-row-start:28} .cal-rs-29{grid-row-start:29} .cal-rs-30{grid-row-start:30} .cal-rs-31{grid-row-start:31} .cal-rs-32{grid-row-start:32} .cal-rs-33{grid-row-start:33} .cal-rs-34{grid-row-start:34} .cal-rs-35{grid-row-start:35} .cal-rs-36{grid-row-start:36} .cal-rs-37{grid-row-start:37} .cal-rs-38{grid-row-start:38} .cal-rs-39{grid-row-start:39} .cal-rs-40{grid-row-start:40} .cal-rs-41{grid-row-start:41} .cal-rs-42{grid-row-start:42} .cal-rs-43{grid-row-start:43} .cal-rs-44{grid-row-start:44} .cal-rs-45{grid-row-start:45} .cal-rs-46{grid-row-start:46} .cal-rs-47{grid-row-start:47} .cal-rs-48{grid-row-start:48} .cal-rs-49{grid-row-start:49} .cal-rs-50{grid-row-start:50} .cal-rs-51{grid-row-start:51} .cal-rs-52{grid-row-start:52} .cal-rs-53{grid-row-start:53} .cal-rs-54{grid-row-start:54} .cal-rs-55{grid-row-start:55} .cal-rs-56{grid-row-start:56} .cal-rs-57{grid-row-start:57} .cal-rs-58{grid-row-start:58} .cal-rs-59{grid-row-start:59} .cal-rs-60{grid-row-start:60} .cal-rs-61{grid-row-start:61} .cal-rs-62{grid-row-start:62} .cal-rs-63{grid-row-start:63} .cal-rs-64{grid-row-start:64} .cal-rs-65{grid-row-start:65} .cal-rs-66{grid-row-start:66} .cal-rs-67{grid-row-start:67} .cal-rs-68{grid-row-start:68} .cal-rs-69{grid-row-start:69} .cal-rs-70{grid-row-start:70} .cal-rs-71{grid-row-start:71} .cal-rs-72{grid-row-start:72} .cal-rs-73{grid-row-start:73} .cal-rs-74{grid-row-start:74} .cal-rs-75{grid-row-start:75} .cal-rs-76{grid-row-start:76} .cal-rs-77{grid-row-start:77} .cal-rs-78{grid-row-start:78} .cal-rs-79{grid-row-start:79} .cal-rs-80{grid-row-start:80} .cal-rs-81{grid-row-start:81} .cal-rs-82{grid-row-start:82} .cal-rs-83{grid-row-start:83} .cal-rs-84{grid-row-start:84} .cal-rs-85{grid-row-start:85} .cal-rs-86{grid-row-start:86} .cal-rs-87{grid-row-start:87} .cal-rs-88{grid-row-start:88} .cal-rs-89{grid-row-start:89} .cal-rs-90{grid-row-start:90} .cal-rs-91{grid-row-start:91} .cal-rs-92{grid-row-start:92} .cal-rs-93{grid-row-start:93} .cal-rs-94{grid-row-start:94} .cal-rs-95{grid-row-start:95} .cal-rs-96{grid-row-start:96} .cal-rs-97{grid-row-start:97} .cal-rs-98{grid-row-start:98} .cal-rs-99{grid-row-start:99} .cal-rs-100{grid-row-start:100} .cal-rs-101{grid-row-start:101} .cal-rs-102{grid-row-start:102} .cal-rs-103{grid-row-start:103} .cal-rs-104{grid-row-start:104} .cal-rs-105{grid-row-start:105} .cal-rs-106{grid-row-start:106} .cal-rs-107{grid-row-start:107} .cal-rs-108{grid-row-start:108} .cal-rs-109{grid-row-start:109} .cal-rs-110{grid-row-start:110} .cal-rs-111{grid-row-start:111} .cal-rs-112{grid-row-start:112} .cal-rs-113{grid-row-start:113} .cal-rs-114{grid-row-start:114} .cal-rs-115{grid-row-start:115} .cal-rs-116{grid-row-start:116} .cal-rs-117{grid-row-start:117} .cal-rs-118{grid-row-start:118} .cal-rs-119{grid-row-start:119} .cal-rs-120{grid-row-start:120} .cal-rs-121{grid-row-start:121} .cal-rs-122{grid-row-start:122} .cal-rs-123{grid-row-start:123} .cal-rs-124{grid-row-start:124} .cal-rs-125{grid-row-start:125} .cal-rs-126{grid-row-start:126} .cal-rs-127{grid-row-start:127} .cal-rs-128{grid-row-start:128} .cal-rs-129{grid-row-start:129} .cal-rs-130{grid-row-start:130} .cal-rs-131{grid-row-start:131} .cal-rs-132{grid-row-start:132} .cal-rs-133{grid-row-start:133} .cal-rs-134{grid-row-start:134} .cal-rs-135{grid-row-start:135} .cal-rs-136{grid-row-start:136} .cal-rs-137{grid-row-start:137} .cal-rs-138{grid-row-start:138} .cal-rs-139{grid-row-start:139} .cal-rs-140{grid-row-start:140} .cal-rs-141{grid-row-start:141} .cal-rs-142{grid-row-start:142} .cal-rs-143{grid-row-start:143} .cal-rs-144{grid-row-start:144} .cal-rs-145{grid-row-start:145} .cal-rs-146{grid-row-start:146} .cal-rs-147{grid-row-start:147} .cal-rs-148{grid-row-start:148} .cal-rs-149{grid-row-start:149} .cal-rs-150{grid-row-start:150} .cal-rs-151{grid-row-start:151} .cal-rs-152{grid-row-start:152} .cal-rs-153{grid-row-start:153} .cal-rs-154{grid-row-start:154} .cal-rs-155{grid-row-start:155} .cal-rs-156{grid-row-start:156} .cal-rs-157{grid-row-start:157} .cal-rs-158{grid-row-start:158} .cal-rs-159{grid-row-start:159} .cal-rs-160{grid-row-start:160} .cal-rs-161{grid-row-start:161} .cal-rs-162{grid-row-start:162} .cal-rs-163{grid-row-start:163} .cal-rs-164{grid-row-start:164} .cal-rs-165{grid-row-start:165} .cal-rs-166{grid-row-start:166} .cal-rs-167{grid-row-start:167} .cal-rs-168{grid-row-start:168} .cal-rs-169{grid-row-start:169} .cal-rs-170{grid-row-start:170} .cal-rs-171{grid-row-start:171} .cal-rs-172{grid-row-start:172} .cal-rs-173{grid-row-start:173} .cal-rs-174{grid-row-start:174} .cal-rs-175{grid-row-start:175} .cal-rs-176{grid-row-start:176} .cal-rs-177{grid-row-start:177} .cal-rs-178{grid-row-start:178} .cal-rs-179{grid-row-start:179} .cal-rs-180{grid-row-start:180} .cal-rs-181{grid-row-start:181} .cal-rs-182{grid-row-start:182} .cal-rs-183{grid-row-start:183} .cal-rs-184{grid-row-start:184} .cal-rs-185{grid-row-start:185} .cal-rs-186{grid-row-start:186} .cal-rs-187{grid-row-start:187} .cal-rs-188{grid-row-start:188} .cal-rs-189{grid-row-start:189} .cal-rs-190{grid-row-start:190} .cal-rs-191{grid-row-start:191} .cal-rs-192{grid-row-start:192} .cal-rs-193{grid-row-start:193}
.cal-re-2{grid-row-end:2} .cal-re-3{grid-row-end:3} .cal-re-4{grid-row-end:4} .cal-re-5{grid-row-end:5} .cal-re-6{grid-row-end:6} .cal-re-7{grid-row-end:7} .cal-re-8{grid-row-end:8} .cal-re-9{grid-row-end:9} .cal-re-10{grid-row-end:10} .cal-re-11{grid-row-end:11} .cal-re-12{grid-row-end:12} .cal-re-13{grid-row-end:13} .cal-re-14{grid-row-end:14} .cal-re-15{grid-row-end:15} .cal-re-16{grid-row-end:16} .cal-re-17{grid-row-end:17} .cal-re-18{grid-row-end:18} .cal-re-19{grid-row-end:19} .cal-re-20{grid-row-end:20} .cal-re-21{grid-row-end:21} .cal-re-22{grid-row-end:22} .cal-re-23{grid-row-end:23} .cal-re-24{grid-row-end:24} .cal-re-25{grid-row-end:25} .cal-re-26{grid-row-end:26} .cal-re-27{grid-row-end:27} .cal-re-28{grid-row-end:28} .cal-re-29{grid-row-end:29} .cal-re-30{grid-row-end:30} .cal-re-31{grid-row-end:31} .cal-re-32{grid-row-end:32} .cal-re-33{grid-row-end:33} .cal-re-34{grid-row-end:34} .cal-re-35{grid-row-end:35} .cal-re-36{grid-row-end:36} .cal-re-37{grid-row-end:37} .cal-re-38{grid-row-end:38} .cal-re-39{grid-row-end:39} .cal-re-40{grid-row-end:40} .cal-re-41{grid-row-end:41} .cal-re-42{grid-row-end:42} .cal-re-43{grid-row-end:43} .cal-re-44{grid-row-end:44} .cal-re-45{grid-row-end:45} .cal-re-46{grid-row-end:46} .cal-re-47{grid-row-end:47} .cal-re-48{grid-row-end:48} .cal-re-49{grid-row-end:49} .cal-re-50{grid-row-end:50} .cal-re-51{grid-row-end:51} .cal-re-52{grid-row-end:52} .cal-re-53{grid-row-end:53} .cal-re-54{grid-row-end:54} .cal-re-55{grid-row-end:55} .cal-re-56{grid-row-end:56} .cal-re-57{grid-row-end:57} .cal-re-58{grid-row-end:58} .cal-re-59{grid-row-end:59} .cal-re-60{grid-row-end:60} .cal-re-61{grid-row-end:61} .cal-re-62{grid-row-end:62} .cal-re-63{grid-row-end:63} .cal-re-64{grid-row-end:64} .cal-re-65{grid-row-end:65} .cal-re-66{grid-row-end:66} .cal-re-67{grid-row-end:67} .cal-re-68{grid-row-end:68} .cal-re-69{grid-row-end:69} .cal-re-70{grid-row-end:70} .cal-re-71{grid-row-end:71} .cal-re-72{grid-row-end:72} .cal-re-73{grid-row-end:73} .cal-re-74{grid-row-end:74} .cal-re-75{grid-row-end:75} .cal-re-76{grid-row-end:76} .cal-re-77{grid-row-end:77} .cal-re-78{grid-row-end:78} .cal-re-79{grid-row-end:79} .cal-re-80{grid-row-end:80} .cal-re-81{grid-row-end:81} .cal-re-82{grid-row-end:82} .cal-re-83{grid-row-end:83} .cal-re-84{grid-row-end:84} .cal-re-85{grid-row-end:85} .cal-re-86{grid-row-end:86} .cal-re-87{grid-row-end:87} .cal-re-88{grid-row-end:88} .cal-re-89{grid-row-end:89} .cal-re-90{grid-row-end:90} .cal-re-91{grid-row-end:91} .cal-re-92{grid-row-end:92} .cal-re-93{grid-row-end:93} .cal-re-94{grid-row-end:94} .cal-re-95{grid-row-end:95} .cal-re-96{grid-row-end:96} .cal-re-97{grid-row-end:97} .cal-re-98{grid-row-end:98} .cal-re-99{grid-row-end:99} .cal-re-100{grid-row-end:100} .cal-re-101{grid-row-end:101} .cal-re-102{grid-row-end:102} .cal-re-103{grid-row-end:103} .cal-re-104{grid-row-end:104} .cal-re-105{grid-row-end:105} .cal-re-106{grid-row-end:106} .cal-re-107{grid-row-end:107} .cal-re-108{grid-row-end:108} .cal-re-109{grid-row-end:109} .cal-re-110{grid-row-end:110} .cal-re-111{grid-row-end:111} .cal-re-112{grid-row-end:112} .cal-re-113{grid-row-end:113} .cal-re-114{grid-row-end:114} .cal-re-115{grid-row-end:115} .cal-re-116{grid-row-end:116} .cal-re-117{grid-row-end:117} .cal-re-118{grid-row-end:118} .cal-re-119{grid-row-end:119} .cal-re-120{grid-row-end:120} .cal-re-121{grid-row-end:121} .cal-re-122{grid-row-end:122} .cal-re-123{grid-row-end:123} .cal-re-124{grid-row-end:124} .cal-re-125{grid-row-end:125} .cal-re-126{grid-row-end:126} .cal-re-127{grid-row-end:127} .cal-re-128{grid-row-end:128} .cal-re-129{grid-row-end:129} .cal-re-130{grid-row-end:130} .cal-re-131{grid-row-end:131} .cal-re-132{grid-row-end:132} .cal-re-133{grid-row-end:133} .cal-re-134{grid-row-end:134} .cal-re-135{grid-row-end:135} .cal-re-136{grid-row-end:136} .cal-re-137{grid-row-end:137} .cal-re-138{grid-row-end:138} .cal-re-139{grid-row-end:139} .cal-re-140{grid-row-end:140} .cal-re-141{grid-row-end:141} .cal-re-142{grid-row-end:142} .cal-re-143{grid-row-end:143} .cal-re-144{grid-row-end:144} .cal-re-145{grid-row-end:145} .cal-re-146{grid-row-end:146} .cal-re-147{grid-row-end:147} .cal-re-148{grid-row-end:148} .cal-re-149{grid-row-end:149} .cal-re-150{grid-row-end:150} .cal-re-151{grid-row-end:151} .cal-re-152{grid-row-end:152} .cal-re-153{grid-row-end:153} .cal-re-154{grid-row-end:154} .cal-re-155{grid-row-end:155} .cal-re-156{grid-row-end:156} .cal-re-157{grid-row-end:157} .cal-re-158{grid-row-end:158} .cal-re-159{grid-row-end:159} .cal-re-160{grid-row-end:160} .cal-re-161{grid-row-end:161} .cal-re-162{grid-row-end:162} .cal-re-163{grid-row-end:163} .cal-re-164{grid-row-end:164} .cal-re-165{grid-row-end:165} .cal-re-166{grid-row-end:166} .cal-re-167{grid-row-end:167} .cal-re-168{grid-row-end:168} .cal-re-169{grid-row-end:169} .cal-re-170{grid-row-end:170} .cal-re-171{grid-row-end:171} .cal-re-172{grid-row-end:172} .cal-re-173{grid-row-end:173} .cal-re-174{grid-row-end:174} .cal-re-175{grid-row-end:175} .cal-re-176{grid-row-end:176} .cal-re-177{grid-row-end:177} .cal-re-178{grid-row-end:178} .cal-re-179{grid-row-end:179} .cal-re-180{grid-row-end:180} .cal-re-181{grid-row-end:181} .cal-re-182{grid-row-end:182} .cal-re-183{grid-row-end:183} .cal-re-184{grid-row-end:184} .cal-re-185{grid-row-end:185} .cal-re-186{grid-row-end:186} .cal-re-187{grid-row-end:187} .cal-re-188{grid-row-end:188} .cal-re-189{grid-row-end:189} .cal-re-190{grid-row-end:190} .cal-re-191{grid-row-end:191} .cal-re-192{grid-row-end:192} .cal-re-193{grid-row-end:193} .cal-re-194{grid-row-end:194}

/* --- Marketing reveal-on-scroll (tasks 0145/0146) ----------------------------
   Both mockups shipped an IntersectionObserver IIFE. CSP is script-src 'self'
   (no inline <script>), the effect is purely decorative, and Alpine's
   x-intersect plugin is not vendored — so this is done with CSS scroll-driven
   animations instead: zero JS, zero new dependencies, nothing to vendor.

   Guarded twice, because content must NEVER be left invisible:
   - @supports (animation-timeline: view()) — browsers without scroll-driven
     animations (today Safari and Firefox) never apply opacity:0 at all, they
     simply render the content statically.
   - prefers-reduced-motion: reduce — motion-sensitive users get it static too.
   Both fallbacks degrade to "just visible", never to a blank section. */
@media (prefers-reduced-motion: no-preference) {
    @supports (animation-timeline: view()) {
        .ds-reveal {
            animation: ds-reveal-in linear both;
            animation-timeline: view();
            animation-range: entry 0% entry 60%;
        }
    }
}

@keyframes ds-reveal-in {
    from {
        opacity: 0;
        transform: translateY(22px);
    }
    to {
        opacity: 1;
        transform: none;
    }
}
