1import{t as e}from"./react-vendor-DdkjEHWj.js";import{c as r,l as t,n as o,u as s}from"./index-BLaD1eTW.js";var a=t` 2 from { opacity: 0; transform: translateY(16px); } 3 to { opacity: 1; transform: translateY(0); } 4`,n=e(),i=[{id:"start",label:"Getting Started"},{id:"story",label:"The Story"},{id:"live",label:"Live Tracking"},{id:"terrain",label:"Terrain & Pace"},{id:"checkpoints",label:"Checkpoints"},{id:"end",label:"End of Line"},{id:"follower",label:"Follower"},{id:"install",label:"Install"}];var l=s(function({className:e}){const[,t]=r();return(0,n.jsxs)("div",{className:e,children:[(0,n.jsxs)("header",{className:"help-header",children:[(0,n.jsx)("button",{className:"back-btn",onClick:()=>{window.history.length>1?window.history.back():t("/")},children:"â Back"}),(0,n.jsx)("nav",{className:"section-nav",children:i.map(e=>(0,n.jsx)("button",{className:"nav-btn",onClick:()=>{return r=e.id,void document.getElementById(r)?.scrollIntoView({behavior:"smooth"});var r},children:e.label},e.id))})]}),(0,n.jsxs)("main",{className:"help-main",children:[(0,n.jsxs)("div",{className:"hero",children:[(0,n.jsx)("p",{className:"hero-eyebrow",children:"Documentation"}),(0,n.jsx)("h1",{className:"hero-title",children:"Terminus"}),(0,n.jsx)("p",{className:"hero-sub",children:"GPS trail visualization for runners and their crew."})]}),(0,n.jsxs)("section",{id:"start",className:"section",children:[(0,n.jsx)("p",{className:"sec-label",children:"01 â Getting Started"}),(0,n.jsx)("h2",{className:"sec-title",children:"Pick your race"}),(0,n.jsx)("p",{className:"sec-body",children:"Open Terminus and pick your race â you are in as the runner. Followers never see this screen: a runner sends them a link from End of Line, and tapping it drops them straight into the same story, no picking or typing required."}),(0,n.jsxs)("div",{className:"role-grid",children:[(0,n.jsxs)("div",{className:"role-card rn",children:[(0,n.jsx)("div",{className:"role-icon",children:(0,n.jsx)("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("polyline",{points:"22 12 18 12 15 21 9 3 6 12 2 12"})})}),(0,n.jsx)("h3",{children:"Runner"}),(0,n.jsx)("p",{children:"You are on the course. Terminus turns your race into a scroll-driven story â pace, terrain, checkpoints, and a live position feed â and lets you invite your crew with a link."})]}),(0,n.jsxs)("div",{className:"role-card fo",children:[(0,n.jsx)("div",{className:"role-icon",children:(0,n.jsxs)("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),(0,n.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})}),(0,n.jsx)("h3",{children:"Follower"}),(0,n.jsx)("p",{children:"You are watching from the sidelines. Tap the link a runner shares with you to join their session and read the exact same story, updated live as they move."})]})]})]}),(0,n.jsx)("hr",{className:"divider"}),(0,n.jsxs)("section",{id:"story",className:"section",children:[(0,n.jsx)("p",{className:"sec-label",children:"02 â The Story"}),(0,n.jsx)("h2",{className:"sec-title",children:"One continuous scroll"}),(0,n.jsx)("p",{className:"sec-body",children:"There is no map view, no bottom sheet, no floating command dock. Terminus reads like a longform article about the route â every section below lives on that same page, in this order. The only control that persists is a small theme toggle pinned to the top corner."}),(0,n.jsxs)("div",{className:"feat-grid",children:[(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot"}),"The route"]}),(0,n.jsx)("p",{children:"Trail name, distance, elevation gain/loss, total estimated time, and a start/elapsed clock."})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot t"}),"The place"]}),(0,n.jsx)("p",{children:"An interactive map tracing the course on the ground."})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot g"}),"Right now"]}),(0,n.jsx)("p",{children:"Live km left, ETA, and time remaining â updates as the GPS position moves."})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot"}),"The climbs"]}),(0,n.jsx)("p",{children:"Every climb, graded 4 (easiest) to 1, then HC (hors catégorie) by length and steepne
4ss."})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot t"}),"The profile"]}),(0,n.jsx)("p",{children:"Full elevation chart, a slope-intensity strip, and an effort-intensity chart, all marked with the current position."})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot g"}),"The pace"]}),(0,n.jsx)("p",{children:"Required pace and effort per kilometer, plus the runner profile and life base stop controls that drive every estimate on the page."})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot"}),"The stages"]}),(0,n.jsx)("p",{children:"Milestones â start, life bases, and the finish â with cutoffs."})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot t"}),"The checkpoints"]}),(0,n.jsx)("p",{children:"ETA, cutoff, and weather forecast for every checkpoint and life base."})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot g"}),"End of line"]}),(0,n.jsx)("p",{children:"Share a trail card, invite someone to follow, switch theme, and leave."})]})]})]}),(0,n.jsx)("hr",{className:"divider"}),(0,n.jsxs)("section",{id:"live",className:"section",children:[(0,n.jsx)("p",{className:"sec-label",children:"03 â Live Tracking"}),(0,n.jsx)("h2",{className:"sec-title",children:"Where you are, right now"}),(0,n.jsx)("p",{className:"sec-body",children:'The "Right now" section is the one part of the story that updates on its own â km left, ETA, and time remaining, based on the pace run so far against the terrain ahead. The map above it traces the course on an interactive, lazy-loaded map.'}),(0,n.jsxs)("div",{className:"role-grid",children:[(0,n.jsxs)("div",{className:"role-card rn",children:[(0,n.jsx)("h3",{children:"Runner"}),(0,n.jsx)("p",{children:'A "Spot me" button starts your device\'s GPS fix and broadcasts your position to anyone following every 30 minutes â it is the only control that starts the live numbers this whole page depends on.'})]}),(0,n.jsxs)("div",{className:"role-card fo",children:[(0,n.jsx)("h3",{children:"Follower"}),(0,n.jsx)("p",{children:'No "Spot me" button â there is nothing of your own to broadcast. The numbers instead update automatically from the runner\'s own GPS broadcast.'})]})]})]}),(0,n.jsx)("hr",{className:"divider"}),(0,n.jsxs)("section",{id:"terrain",className:"section",children:[(0,n.jsx)("p",{className:"sec-label",children:"04 â Terrain & Pace"}),(0,n.jsx)("h2",{className:"sec-title",children:"Climbs, profile & pace"}),(0,n.jsx)("p",{className:"sec-body",children:"Together these sections tell you what the route demands and how fast you can expect to move through it."}),(0,n.jsxs)("div",{className:"panel-list",children:[(0,n.jsxs)("div",{className:"pi",children:[(0,n.jsx)("div",{className:"pi-icon primary",children:(0,n.jsx)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("path",{d:"M3 17l4-8 4 5 3-3 4 6H3z"})})}),(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"pi-name",children:"Climbs"}),(0,n.jsx)("p",{className:"pi-desc",children:'Category (HC, then 1 to 4), summit elevation, average grade, and length for every climb â the one you are currently on is marked "In progress".'})]})]}),(0,n.jsxs)("div",{className:"pi",children:[(0,n.jsx)("div",{className:"pi-icon primary",children:(0,n.jsxs)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("polyline",{points:"23 6 13.5 15.5 8.5 10.5 1 18"}),(0,n.jsx)("polyline",{points:"17 6 23 6 23 12"})]})}),(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"pi-name",children:"Profile"}),(0,n.jsx)("p",{className:"pi-desc",children:"The full elevation chart for the route, with your position marked on the current climb or descent."})]})]}),(0,n.jsxs)("div",{className:"pi",children:[(0,n.jsx)("div",{className:"pi-icon secondary",children:(0,n.jsxs)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("path",{d:"M18 20V10"}),(0,n.jsx)("path",{d:"M12 20V4"}),(0,n.jsx)("path",{d:"M6 20v-6"})]})}),(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"pi-name",children:"Slope & effort intensity"}),(0,n.jsx)("p",{className:"pi-desc",children:"A gradient strip and an effort chart along the whole route â both dim the portion already covered, doubling as a progress indicator."})]})]})]}),(0,n.jsx)("p",{className:"sec-body pace-intro",children:"The pace chart shows the slowest pace still allowed at every point on the course, and the effort multiplier it represents. Two controls beneath it drive every ETA, cutoff, and estimate on the page:"}),(0,n.jsxs)("div",{className:"role-grid",children:[(0,n.jsxs)("div",{className:"role-card rn",children:[(0,n.jsx)("h3",{children:"Runner profile & life base stops"}),(0,n.jsx)("p",{children:"Pick a runner profile (Casual, Trail, Athlete, Elite) and how long you plan to rest at each life base (none, 30 min, 1 hour, 2 hours). Changing either instantly recalculates every estimate on the page."})]}),(0,n.jsxs)("div",{className:"role-card fo",children:[(0,n.jsx)("h3",{children:"Synced from the runner"}
4),(0,n.jsx)("p",{children:'Followers see the same two pickers, disabled, with a "Synced from the runner you\'re following" note â they update automatically whenever the runner changes theirs.'})]})]})]}),(0,n.jsx)("hr",{className:"divider"}),(0,n.jsxs)("section",{id:"checkpoints",className:"section",children:[(0,n.jsx)("p",{className:"sec-label",children:"05 â Checkpoints & Stages"}),(0,n.jsx)("h2",{className:"sec-title",children:"Every stop, with a forecast"}),(0,n.jsx)("p",{className:"sec-body",children:"The stages list is the big picture â start, every life base, and the finish. The checkpoints list is the detailed one: every named waypoint, in order, each with distance, ETA, and cutoff. A checkpoint whose ETA is past its cutoff is flagged in accent colour."}),(0,n.jsxs)("div",{className:"feat-grid",children:[(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot"}),"Distance & elevation"]}),(0,n.jsx)("p",{children:"Distance, gain/loss, estimated time, and the maximum allotted time for the leg leading to each stop."})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot t"}),"Difficulty"]}),(0,n.jsx)("p",{children:"A colour-coded rating for how demanding each leg is, from easy to very hard."})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot g"}),"Weather forecast"]}),(0,n.jsx)("p",{children:"Temperature, chance of precipitation, and wind speed forecast for your predicted arrival time, via Open-Meteo â cold, wet, or windy conditions are flagged."})]})]}),(0,n.jsxs)("div",{className:"info-box",children:[(0,n.jsx)("strong",{children:"Forecasts refresh automatically"})," â as your estimated pace shifts, predicted arrival times move, and the weather forecast for each stop is re-fetched to match."]})]}),(0,n.jsx)("hr",{className:"divider"}),(0,n.jsxs)("section",{id:"end",className:"section",children:[(0,n.jsx)("p",{className:"sec-label",children:"06 â End of Line"}),(0,n.jsx)("h2",{className:"sec-title",children:"Actions"}),(0,n.jsx)("p",{className:"sec-body",children:"The bottom of the story is also where the only exit affordance lives, alongside a handful of utility actions."}),(0,n.jsxs)("table",{className:"gtable",children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{children:"Action"}),(0,n.jsx)("th",{children:"Description"})]})}),(0,n.jsxs)("tbody",{children:[(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{children:"Share this trail"}),(0,n.jsx)("td",{children:"Generates a shareable card â route name, distance, elevation, and estimated time â and opens the native share sheet, or downloads it."})]}),(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{children:"Invite someone to follow"}),(0,n.jsx)("td",{children:"Runner only. Generates and shares a follow link so others can track you live."})]}),(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{children:"Switch theme"}),(0,n.jsx)("td",{children:"Toggle between light and dark mode."})]}),(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{children:"Flush saved locations"}),(0,n.jsx)("td",{children:"Runner only. Erases this device's buffered GPS fixes."})]}),(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{children:"User guide"}),(0,n.jsx)("td",{children:"Open this documentation page."})]}),(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{children:"Leave trail"}),(0,n.jsx)("td",{children:"Exit the current race and return to the start screen. Your saved route data is preserved."})]})]})]})]}),(0,n.jsx)("hr",{className:"divider"}),(0,n.jsxs)("section",{id:"follower",className:"section",children:[(0,n.jsx)("p",{className:"sec-label secondary",children:"07 â Follower Mode"}),(0,n.jsx)("h2",{className:"sec-title",children:"Follow a runner live"}),(0,n.jsx)("p",{className:"sec-body",children:"Follower mode lets crew, family, or fans read a runner's story in real time from any device â no GPS permission needed."}),(0,n.jsxs)("div",{className:"feat-grid",children:[(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot t"}),"Invite link"]}),(0,n.jsx)("p",{children:'The runner shares a link from "Invite someone to follow". Opening it connects you straight to their session â no picking a race or entering a code.'})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot t"}),"Live sync"]}),(0,n.jsx)("p",{children:"The runner's position, pace profile, and life base settings are pushed to every connected follower in real time."})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot t"}),"Same story"]}),(0,n.jsx)("p",{children:"Followers read the identical scroll â hero, map, climbs, terrain, pace, checkpoints â locked to the runner's live position."})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot t"}),"Read-only"]}),(0,n.jsx)("p",{children:"Spot me, invite-to-follow, the runner profile / life base pickers, and flush saved locations are hidden or disabled â nothing here can change what the runner set."})]})]}),(0,n.jsxs)("div",{className:"info-box",children:[(0,n.jsx)("strong",{children:"Runner vs. Follower"})," â the runner's device holds the GPS fix and broadcasts position and pace settings over the room; the follower's device only receives them. Both read the same story, but only the runner's actions are active."]})]}),(0,n.jsx)("hr",{className:"divider"}),(0,n.jsxs)("section",{id:"install",className:"section",children:[(0,n.jsx)("p",{className:"sec-label",children:"08 â Install"}),(0,n.jsx)("h2",{className:"sec-title",children:"Add to Home Screen"}),(0,n.jsx)("p",{className:"sec-body",children:"Terminus is a Progressive Web App (PWA). You can install it on your phone like a native app â it runs full-screen with no browser chrome, loads instantly, and keeps working offline."}),(0,n.jsxs)("div",{className:"feat-grid",children:[(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot"}),"Android (Chrome)"]}),(0,n.jsxs)("p",{children:["Open Terminus in Chrome. Tap the ",(0,n.jsx)("strong",{children:"â® menu"})," in the top-right corner, then tap"," ",(0,n.jsx)("strong",{children:"Add to Home screen"}
vendor: 2,704 bytes, lines 4-62
4),". Confirm by tapping"," ",(0,n.jsx)("strong",{children:"Add"})," â the app icon appears on your home screen."]})]}),(0,n.jsxs)("div",{className:"feat",children:[(0,n.jsxs)("h4",{children:[(0,n.jsx)("span",{className:"dot"}),"iPhone / iPad (Safari)"]}),(0,n.jsxs)("p",{children:["Open Terminus in Safari. Tap the ",(0,n.jsx)("strong",{children:"Share button"})," ","(the square with an arrow pointing up) at the bottom of the screen, then tap ",(0,n.jsx)("strong",{children:"Add to Home Screen"}),". Tap"," ",(0,n.jsx)("strong",{children:"Add"})," to confirm."]})]})]}),(0,n.jsxs)("div",{className:"info-box",children:[(0,n.jsx)("strong",{children:"Safari required on iPhone"})," â iOS only allows PWA installation from Safari. If you are using Chrome or another browser on iPhone, open the same URL in Safari first."]})]}),(0,n.jsx)("footer",{className:"help-footer",children:"© 2026 Terminus â La Vallée"})]})]})})` 5 position: fixed; 6 inset: 0; 7 overflow-y: auto; 8 background: ${e=>e.theme.colors[e.theme.currentVariant]["--color-background"]}; 9 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-text"]}; 10 font-family: ${e=>e.theme.font.family["--font-family-base"]}; 11 12 /* ââ HEADER ââ */ 13 .help-header { 14 position: sticky; 15 top: 0; 16 z-index: 50; 17 display: flex; 18 align-items: center; 19 gap: 1rem; 20 padding: calc(env(safe-area-inset-top) + 0.75rem) 1.5rem 0.75rem; 21 background: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-background"],.88)}; 22 backdrop-filter: blur(16px); 23 -webkit-backdrop-filter: blur(16px); 24 border-bottom: 1px solid 25 ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.07)}; 26 } 27 28 .back-btn { 29 flex-shrink: 0; 30 background: none; 31 border: none; 32 cursor: pointer; 33 font-family: ${e=>e.theme.font.family["--font-family-mono"]}; 34 font-size: 0.8125rem; 35 color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.85)}; 36 padding: 0; 37 transition: color ${e=>e.theme.transitions["--transition-fast"]}; 38 -webkit-tap-highlight-color: transparent; 39 40 &:hover { 41 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-text"]}; 42 } 43 } 44 45 .help-title { 46 font-family: ${e=>e.theme.font.family["--font-family-mono"]}; 47 font-size: 0.8125rem; 48 font-weight: ${e=>e.theme.font.weights["--font-weight-bold"]}; 49 color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.5)}; 50 letter-spacing: 0.06em; 51 text-transform: uppercase; 52 } 53 54 .section-nav { 55 margin-left: auto; 56 display: flex; 57 gap: 2px; 58 overflow-x: auto; 59 -webkit-overflow-scrolling: touch; 60 scrollbar-width: none; 61 62 &::-webkit-scrollbar {
63 display: none; 64 } 65 } 66 67 .nav-btn { 68 flex-shrink: 0; 69 background: none; 70 border: none; 71 cursor: pointer; 72 font-size: 0.75rem; 73 font-weight: 500; 74 padding: 0.3rem 0.75rem; 75 border-radius: 100px; 76 color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.85)}; 77 transition: all ${e=>e.theme.transitions["--transition-fast"]}; 78 -webkit-tap-highlight-color: transparent; 79 80 &:hover { 81 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-text"]}; 82 background: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.06)}; 83 } 84 } 85 86 /* ââ MAIN ââ */ 87 .help-main { 88 max-width: 800px; 89 margin: 0 auto; 90 padding: 0 1.5rem 4rem; 91 } 92 93 /* ââ HERO ââ */ 94 .hero { 95 text-align: center; 96 padding: 5rem 0 4rem; 97 animation: ${a} 0.45s ease both; 98 99 @media (prefers-reduced-motion: reduce) { 100 animation: none; 101 } 102 } 103 104 .hero-eyebrow { 105 font-size: 0.6875rem; 106 font-weight: 700; 107 letter-spacing: 0.22em; 108 text-transform: uppercase; 109 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-secondary-text"]}; 110 margin-bottom: 1rem; 111 } 112 113 .hero-title { 114 font-family: ${e=>e.theme.font.family["--font-family-mono"]}; 115 font-size: clamp(3rem, 12vw, 6rem); 116 font-weight: 900; 117 letter-spacing: -0.05em; 118 line-height: 1; 119 margin: 0 0 1.25rem; 120 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-text"]}; 121 } 122 123 .hero-sub { 124 font-size: 1rem; 125 color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.85)}; 126 max-width: 400px; 127 margin: 0 auto; 128 } 129 130 /* ââ SECTIONS ââ */ 131 .section { 132 margin-bottom: 5rem; 133 animation: ${a} 0.45s ease both; 134 135 @media (prefers-reduced-motion: reduce) { 136 animation: none; 137 } 138 } 139 140 .sec-label { 141 font-size: 0.6875rem; 142 font-weight: 700; 143 letter-spacing: 0.2em; 144 text-transform: uppercase; 145 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-primary-text"]}; 146 margin-bottom: 0.4rem; 147 148 &.secondary { 149 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-secondary-text"]}; 150 } 151 } 152 153 .sec-title { 154 font-family: ${e=>e.theme.font.family["--font-family-mono"]}; 155 font-size: clamp(1.5rem, 4vw, 2.25rem); 156 font-weight: 800; 157 letter-spacing: -0.03em; 158 line-height: 1.1; 159 margin: 0 0 1rem; 160 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-text"]}; 161 } 162 163 .sec-body { 164 font-size: 0.9375rem; 165 color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.85)}; 166 line-height: 1.72; 167 max-width: 640px; 168 169 &.pace-intro { 170 margin-top: 1.75rem; 171 } 172 } 173 174 .divider { 175 border: none; 176 height: 1px; 177 background: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.07)}; 178 margin: 0 0 5rem; 179 } 180 181 /* ââ ROLE CARDS ââ */ 182 .role-grid { 183 display: grid; 184 grid-template-columns: 1fr 1fr; 185 gap: 0.875rem; 186 margin-top: 1.75rem; 187 188 @media (max-width: 540px) { 189 grid-template-columns: 1fr; 190 } 191 } 192 193 .role-card { 194 background: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-surface"],.6)}; 195 border: 1px solid 196 ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.08)}; 197 border-radius: ${e=>e.theme.borderRadius["--border-radius-lg"]}; 198 padding: 1.75rem 1.5rem; 199 position: relative; 200 overflow: hidden; 201 transition: all ${e=>e.theme.transitions["--transition-base"]}; 202 203 &::after { 204 content: ""; 205 position: absolute; 206 bottom: 0; 207 left: 0; 208 right: 0; 209 height: 2px; 210 opacity: 0; 211 transition: opacity 0.3s; 212 } 213 214 &.rn::after { 215 background: ${e=>e.theme.colors[e.theme.currentVariant]["--color-primary"]}; 216 } 217 &.fo::after { 218 background: ${e=>e.theme.colors[e.theme.currentVariant]["--color-secondary"]}; 219 } 220 221 &:hover { 222 transform: translateY(-3px); 223 border-color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.16)}; 224 225 &::after { 226 opacity: 1; 227 } 228 } 229 230 &.rn:hover { 231 box-shadow: 0 16px 40px 232 ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-primary"],.18)}; 233 } 234 235 &.fo:hover { 236 box-shadow: 0 16px 40px 237 ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-secondary"],.2)}; 238 } 239 240 h3 { 241 font-family: ${e=>e.theme.font.family["--font-family-mono"]}; 242 font-size: 1.0625rem; 243 font-weight: 700; 244 letter-spacing: -0.02em; 245 margin-bottom: 0.5rem; 246 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-text"]}; 247 } 248 249 p { 250 font-size: 0.8125rem; 251 color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.85)}; 252 line-height: 1.6; 253 } 254 } 255 256 .role-icon { 257 width: 44px; 258 height: 44px; 259 border-radius: 11px; 260 display: flex; 261 align-items: center; 262 justify-content: center; 263 margin-bottom: 1.125rem; 264 265 .role-card.rn & { 266 background: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-primary"],.12)}; 267 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-primary"]}; 268 } 269 270 .role-card.fo & { 271 background: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-secondary"],.12)}; 272 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-secondary"]}; 273 } 274 } 275 276 /* ââ FEAT GRID ââ */ 277 .feat-grid { 278 display: grid; 279 grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); 280 gap: 0.625rem; 281 margin-top: 1.5rem; 282 } 283 284 .feat { 285 background: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-surface"],.5)}; 286 border: 1px solid 287 ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.07)}; 288 border-radius: ${e=>e.theme.borderRadius["--border-radius-base"]}; 289 padding: 1rem 1.125rem; 290 transition: all ${e=>e.theme.transitions["--transition-fast"]}; 291 292 &:hover { 293 border-color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.14)}; 294 transform: translateY(-1px); 295 } 296 297 h4 { 298 font-size: 0.8125rem; 299 font-weight: 700; 300 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-text"]}; 301 margin-bottom: 0.3rem; 302 display: flex; 303 align-items: center; 304 gap: 0.4rem; 305 } 306 307 p { 308 font-size: 0.75rem; 309 color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.5)}; 310 line-height: 1.55; 311 } 312 } 313 314 .dot {
315 width: 5px; 316 height: 5px; 317 border-radius: 50%; 318 flex-shrink: 0; 319 background: ${e=>e.theme.colors[e.theme.currentVariant]["--color-primary"]}; 320 321 &.t { 322 background: ${e=>e.theme.colors[e.theme.currentVariant]["--color-secondary"]}; 323 } 324 325 &.g { 326 background: ${e=>e.theme.colors[e.theme.currentVariant]["--color-success"]}; 327 } 328 } 329 330 /* ââ PANEL LIST ââ */ 331 .panel-list { 332 display: flex; 333 flex-direction: column; 334 gap: 0.5rem; 335 margin-top: 1.5rem; 336 } 337 338 .pi { 339 display: flex; 340 align-items: flex-start; 341 gap: 0.875rem; 342 padding: 0.875rem 1rem; 343 background: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-surface"],.5)}; 344 border: 1px solid 345 ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.07)}; 346 border-radius: ${e=>e.theme.borderRadius["--border-radius-base"]}; 347 transition: all ${e=>e.theme.transitions["--transition-fast"]}; 348 349 &:hover { 350 border-color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.14)}; 351 background: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-surface"],.7)}; 352 } 353 } 354 355 .pi-icon { 356 flex-shrink: 0; 357 width: 32px; 358 height: 32px; 359 border-radius: 8px; 360 display: flex; 361 align-items: center; 362 justify-content: center;
363 margin-top: 1px; 364 365 &.primary { 366 background: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-primary"],.12)}; 367 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-primary"]}; 368 } 369 370 &.secondary { 371 background: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-secondary"],.12)}; 372 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-secondary"]}; 373 } 374 } 375 376 .pi-name { 377 font-size: 0.8125rem; 378 font-weight: 700; 379 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-text"]}; 380 margin-bottom: 0.2rem; 381 } 382 383 .pi-desc { 384 font-size: 0.75rem; 385 color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.48)}; 386 line-height: 1.5; 387 } 388 389 /* ââ TABLE ââ */ 390 .gtable { 391 width: 100%; 392 border-collapse: collapse; 393 margin-top: 1.25rem; 394 font-size: 0.875rem; 395 396 thead th { 397 text-align: left; 398 font-size: 0.6875rem; 399 font-weight: 700; 400 letter-spacing: 0.14em; 401 text-transform: uppercase; 402 color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.3)}; 403 padding: 0.5rem 1rem; 404 border-bottom: 1px solid 405 ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.08)}; 406 } 407 408 td { 409 padding: 0.7rem 1rem; 410 border-bottom: 1px solid 411 ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.05)}; 412 color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.55)}; 413 vertical-align: top; 414 } 415 416 td:first-child { 417 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-text"]}; 418 font-weight: 600; 419 white-space: nowrap; 420 } 421 422 tr:last-child td { 423 border-bottom: none; 424 } 425 426 tr:hover td { 427 background: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-surface"],.4)}; 428 } 429 } 430 431 /* ââ INFO BOX ââ */ 432 .info-box { 433 margin-top: 1.25rem; 434 padding: 1rem 1.25rem; 435 background: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-secondary"],.08)}; 436 border: 1px solid 437 ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-secondary"],.2)}; 438 border-radius: ${e=>e.theme.borderRadius["--border-radius-base"]}; 439 font-size: 0.8125rem; 440 color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.6)}; 441 line-height: 1.6; 442 443 strong { 444 color: ${e=>e.theme.colors[e.theme.currentVariant]["--color-secondary"]}; 445 } 446 } 447 448 /* ââ FOOTER ââ */ 449 .help-footer { 450 text-align: center; 451 font-family: ${e=>e.theme.font.family["--font-family-mono"]}; 452 font-size: 0.6875rem; 453 letter-spacing: 0.04em; 454 color: ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.2)}; 455 padding-top: 2rem; 456 border-top: 1px solid 457 ${e=>o(e.theme.colors[e.theme.currentVariant]["--color-text"],.06)}; 458 } 459`;export{l as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.