.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/inter-latin-400-normal.C38fXH4l.woff2) format("woff2"),url(/_astro/inter-latin-400-normal.CyCys3Eg.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/inter-latin-700-normal.Yt3aPRUw.woff2) format("woff2"),url(/_astro/inter-latin-700-normal.BLAVimhd.woff) format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/jetbrains-mono-latin-400-normal.V6pRDFza.woff2) format("woff2"),url(/_astro/jetbrains-mono-latin-400-normal.6-qcROiO.woff) format("woff")}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#main-content:focus{outline:none}html,body{height:100%}html{scrollbar-gutter:stable}button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}:root{--font-ui: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Inter", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-mono: "SF Mono", SFMono-Regular, ui-monospace, "JetBrains Mono", Menlo, monospace}body{min-height:100%;color:var(--ink-95);font-family:var(--font-ui);background-color:var(--bg-deep);background-image:var(--pt-opening-gradient);background-position:top center;background-repeat:no-repeat;background-size:100% 1040px;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}.bg-neutral{position:fixed;inset:0;z-index:-1;pointer-events:none;background-color:var(--bg-deep);opacity:0;transition:opacity var(--dur-slow) var(--ease-in-out)}.bg-topglow{position:absolute;top:0;right:0;left:0;height:1040px;z-index:-1;pointer-events:none;background-color:var(--bg-deep);background-image:var(--pt-opening-gradient);opacity:0;transition:opacity var(--dur-slow) var(--ease-in-out)}.bg-neutral.is-on,.bg-topglow.is-on{opacity:1}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-property:opacity,color,background-color,border-color,fill,stroke!important}}:root{--pt-bg-deep: #05080a;--pt-bg-forest: #0d1f22;--pt-bg-mid: #1c3d42;--pt-bg-training-start: #092024;--pt-bg-training-end: #0d2e36;--pt-bg-training-glow-top: #2c7a82;--pt-bg-training-glow-bottom: #15454c;--pt-opening-gradient: radial-gradient( ellipse 148% 118% at 50% -12%, var(--pt-bg-mid) 0%, #1b3b40 10%, #17343a 20%, #132c30 31%, var(--pt-bg-forest) 42%, #0b1a1d 55%, #091416 69%, #081013 81%, #070b0d 91%, var(--pt-bg-deep) 100% );--pt-glass-surface: rgba(30, 40, 45, .45);--pt-glass-surface-hover: rgba(40, 55, 60, .55);--pt-glass-haze: rgba(255, 255, 255, .02);--pt-glass-veil: rgba(255, 255, 255, .03);--pt-glass-border: rgba(255, 255, 255, .08);--pt-glass-border-soft: rgba(255, 255, 255, .1);--pt-glass-focus: rgba(255, 255, 255, .12);--pt-glass-border-hover: rgba(255, 255, 255, .15);--pt-glass-highlight: rgba(255, 255, 255, .25);--pt-glass-inset: rgba(0, 0, 0, .2);--pt-glass-input-bg: rgba(255, 255, 255, .05);--pt-glass-chip-bg: rgba(255, 255, 255, .04);--pt-glass-button-bg: rgba(255, 255, 255, .06);--pt-glass-divider: rgba(255, 255, 255, .06);--pt-glass-mask: rgba(0, 0, 0, .6);--pt-glass-shadow: rgba(0, 0, 0, .2);--pt-glass-shadow-pressed: rgba(0, 0, 0, .3);--pt-glass-shadow-raised: rgba(0, 0, 0, .5);--pt-glass-shadow-floating: rgba(0, 0, 0, .35);--pt-card-fill: linear-gradient(160deg, rgba(40, 60, 64, .4), rgba(20, 26, 30, .55) 72%);--pt-card-fill-border: rgba(255, 255, 255, .11);--pt-card-fill-sheen: inset 0 1px 0 rgba(255, 255, 255, .05);--pt-text-on-accent: #04120f;--pt-cta-surface: #f7fbfa;--pt-cta-highlight-speed: 4s;--pt-cta-highlight-rim: 1.4px;--pt-cta-highlight-glow-inset: 2px;--pt-cta-highlight-glow-blur: 7px;--pt-cta-highlight-glow-opacity: .6;--pt-cta-highlight-gradient: conic-gradient(from 0deg, rgba(56, 178, 172, .24) 0deg, rgba(56, 178, 172, .75) 47.7deg, rgba(79, 209, 197, .95) 73.1deg, rgba(255, 255, 255, 1) 90deg, rgba(79, 209, 197, .95) 106.9deg, rgba(56, 178, 172, .75) 132.3deg, rgba(56, 178, 172, .24) 180deg, rgba(56, 178, 172, .24) 180deg, rgba(56, 178, 172, .75) 227.7deg, rgba(79, 209, 197, .95) 253.1deg, rgba(255, 255, 255, 1) 270deg, rgba(79, 209, 197, .95) 286.9deg, rgba(56, 178, 172, .75) 312.3deg, rgba(56, 178, 172, .24) 360deg);--pt-text-primary: rgba(255, 255, 255, .95);--pt-text-high: rgba(255, 255, 255, .92);--pt-text-emphasis: rgba(255, 255, 255, .9);--pt-text-elevated: rgba(255, 255, 255, .8);--pt-text-medium-strong: rgba(255, 255, 255, .55);--pt-text-secondary: rgba(255, 255, 255, .6);--pt-text-muted: rgba(255, 255, 255, .5);--pt-text-tertiary: rgba(255, 255, 255, .4);--pt-text-subtle: rgba(255, 255, 255, .35);--pt-text-dim: rgba(255, 255, 255, .3);--pt-text-quiet: rgba(255, 255, 255, .25);--pt-text-faint: rgba(255, 255, 255, .2);--pt-text-hint: rgba(255, 255, 255, .18);--pt-accent-teal: #38b2ac;--pt-accent-teal-bright: #4fd1c5;--pt-accent-teal-vivid: #6fffe9;--pt-accent-teal-soft: #81e6d9;--pt-accent-blue: #4299e1;--pt-accent-green: #48bb78;--pt-accent-purple: #9f7aea;--pt-accent-amber-soft: #f6e27a;--pt-status-good: #38b2ac;--pt-status-weak: #ecc94b;--pt-status-bad: #ed8936;--pt-status-error: #fc8181;--pt-status-weak-text: #f6e05e;--pt-status-bad-text: #fbd38d;--pt-mastery-good: #06b6a4;--pt-mastery-moderate: #eebd00;--pt-mastery-weak: #f5740a;--pt-mastery-weak-soft: #dca15f;--pt-keycap-surface: #262830;--pt-keycap-surface-bottom: #1e2026;--pt-keycap-surface-pressed: #16181e;--pt-keycap-edge: #121418;--pt-drill-correct: #6fffe9;--pt-drill-wrong: #ff9e7d;--pt-drill-cursor: #6fffe9;--pt-drill-untyped: rgba(255, 255, 255, .4);--pt-drill-upcoming: rgba(255, 255, 255, .18);--bg-deep: var(--pt-bg-deep);--bg-forest: var(--pt-bg-forest);--bg-glow: var(--pt-bg-mid);--teal: var(--pt-accent-teal);--teal-bright: var(--pt-accent-teal-vivid);--amber: var(--pt-status-weak);--orange: var(--pt-status-bad);--ink-95: var(--pt-text-primary);--ink-60: var(--pt-text-secondary);--ink-40: var(--pt-text-tertiary);--glass-fill: var(--pt-glass-surface);--glass-border: var(--pt-glass-border);--glass-radius: 16px;--pt-font-hero-metric: 28px;--pt-font-mono-glyph: 38px;--pt-font-mono-mini-number: 32px;--pt-font-focus-title: 22px;--pt-font-focus-headline: 18px;--pt-font-summary-header: 20px;--pt-font-page-title: 14px;--pt-font-body: 12px;--pt-font-card-header: 11px;--pt-font-caption: 10px;--pt-font-status-badge: 10px;--pt-font-result-stat: 32px;--pt-font-result-pace: 24px;--pt-font-result-body: 14px;--pt-font-hero-number: 64px;--pt-sidebar-width: 64px;--pt-nav-item-size: 36px;--pt-card-padding: 14px;--pt-card-spacing: 10px;--pt-card-radius: 12px;--pt-key-size: 44px;--pt-key-radius: 5px;--pt-content-padding: 16px;--pt-page-width: 1000px;--pt-page-gutter: 32px;--pt-profile-width: min( calc(var(--pt-page-width) - 2 * var(--pt-page-gutter)), calc(100vw - 2 * var(--pt-page-gutter)) );--pt-radius-xs: 4px;--pt-radius-sm: 6px;--pt-radius-nav: 10px;--pt-radius-md: 12px;--pt-radius-lg: 16px;--pt-radius-pill: 999px;--dur-press: .12s;--dur-fast: .18s;--dur-base: .25s;--dur-slow: .4s;--ease-out: cubic-bezier(.23, 1, .32, 1);--ease-in-out: cubic-bezier(.4, 0, .6, 1);--ease-drawer: cubic-bezier(.32, .72, 0, 1)}.pt-dashboard-bg{background-color:var(--pt-bg-deep);background-image:radial-gradient(ellipse 80% 60% at 50% 0%,rgba(28,61,66,.86),transparent 64%),radial-gradient(circle at 82% 18%,rgba(56,178,172,.12),transparent 34%),linear-gradient(180deg,var(--pt-bg-forest),var(--pt-bg-deep) 72%)}.pt-training-bg{background-color:var(--pt-bg-training-start);background-image:radial-gradient(circle at 50% 0%,rgba(44,122,130,.32),transparent 48%),radial-gradient(circle at 50% 100%,rgba(21,69,76,.28),transparent 54%),linear-gradient(180deg,var(--pt-bg-training-start),var(--pt-bg-training-end))}.pt-panel{background:#161c22f2;border:1px solid var(--pt-glass-border);border-radius:var(--pt-radius-lg);box-shadow:0 25px 60px #00000080,0 0 0 1px #ffffff0d inset;backdrop-filter:blur(40px);-webkit-backdrop-filter:blur(40px)}.pt-card{padding:var(--pt-card-padding);background:var(--pt-glass-surface);border:1px solid var(--pt-glass-border);border-radius:var(--pt-card-radius);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}.pt-card[data-tint=teal]{background:linear-gradient(#38b2ac14,#38b2ac08),#1e282d99;border-color:#38b2ac33}.pt-card-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;font-family:var(--font-ui);font-size:var(--pt-font-card-header);font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--pt-text-secondary)}.pt-section-label{font-family:var(--font-ui);font-size:var(--pt-font-card-header);font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--pt-text-secondary)}.pt-body{font-family:var(--font-ui);font-size:var(--pt-font-body);line-height:1.5;color:var(--pt-text-secondary)}.pt-caption{font-family:var(--font-ui);font-size:var(--pt-font-caption);font-weight:500;color:var(--pt-text-tertiary)}.pt-big-metric{display:grid;gap:4px}.pt-big-metric__line{display:flex;align-items:baseline;gap:2px}.pt-big-metric__value{font-family:var(--font-ui);font-size:var(--pt-font-hero-metric);font-weight:700;letter-spacing:-.03em;line-height:1;color:transparent;background:linear-gradient(180deg,#fff,#ffffffb3);-webkit-background-clip:text;background-clip:text}.pt-big-metric__unit{font-family:var(--font-ui);font-size:var(--pt-font-result-body);font-weight:500;color:var(--pt-text-tertiary)}.pt-big-metric__label{font-family:var(--font-ui);font-size:var(--pt-font-caption);font-weight:500;letter-spacing:.05em;text-transform:uppercase;color:var(--pt-text-secondary)}.pt-status-badge,.pt-trend{display:inline-flex;align-items:center;justify-content:center;gap:6px;width:fit-content;border-radius:var(--pt-radius-sm);white-space:nowrap}.pt-status-badge{padding:3px 8px;border:1px solid color-mix(in srgb,currentColor 20%,transparent);background:color-mix(in srgb,currentColor 15%,transparent);font-family:var(--font-ui);font-size:var(--pt-font-status-badge);font-weight:600;letter-spacing:.02em;line-height:1.2;text-transform:uppercase;color:var(--pt-accent-teal)}.pt-status-badge[data-tone=good]{color:var(--pt-status-good)}.pt-status-badge[data-tone=weak]{color:var(--pt-status-weak)}.pt-status-badge[data-tone=bad]{color:var(--pt-status-bad)}.pt-trend{padding:2px 6px;background:#4fd1c51a;font-family:var(--font-ui);font-size:11px;font-weight:600;color:var(--pt-accent-teal-bright)}.pt-trend[data-direction=down]{background:#ed89361a;color:var(--pt-status-bad)}.pt-action-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:32px;padding:8px 12px;border:1px solid rgba(56,178,172,.3);border-radius:var(--pt-radius-sm);background:linear-gradient(135deg,#38b2ac33,#38b2ac0d);color:var(--pt-accent-teal);font-family:var(--font-ui);font-size:12px;font-weight:600;text-decoration:none;transition:filter var(--dur-press) ease,transform var(--dur-press) var(--ease-out),border-color .15s ease}.pt-action-button:hover{filter:brightness(1.15)}.pt-action-button:active{transform:scale(.97);filter:brightness(.95)}.pt-action-button[data-variant=secondary]{border-color:var(--pt-glass-border);background:var(--pt-glass-input-bg);color:var(--pt-text-primary)}.pt-action-button[data-variant=yellow]{border-color:#ecc94b4d;background:linear-gradient(135deg,#ecc94b33,#ecc94b0d);color:var(--pt-status-weak)}.pt-action-button__meta{margin-left:6px;padding-left:6px;border-left:1px solid color-mix(in srgb,currentColor 25%,transparent);font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--pt-text-tertiary)}.pt-kbd{display:inline-flex;align-items:center;min-height:16px;padding:1px 5px;border-radius:3px;background:var(--pt-glass-inset);font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--pt-text-tertiary)}.pt-segmented{display:inline-flex;gap:1px;padding:2px;border-radius:8px;background:var(--pt-glass-chip-bg)}.pt-segmented button,.pt-segmented [role=tab]{min-height:24px;padding:4px 12px;border-radius:var(--pt-radius-sm);color:var(--pt-text-tertiary);font-family:var(--font-ui);font-size:11px;font-weight:500}.pt-segmented [aria-selected=true],.pt-segmented [data-active=true]{background:var(--pt-glass-focus);color:var(--pt-text-primary)}.pt-toggle{--track: var(--pt-glass-button-bg);position:relative;width:34px;height:20px;border-radius:var(--pt-radius-pill);background:var(--track);border:1px solid var(--pt-glass-border)}.pt-toggle:after{content:"";position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:50%;background:var(--pt-text-secondary);transition:transform .15s ease,background .15s ease}.pt-toggle[data-checked=true]{--track: rgba(56, 178, 172, .25);border-color:#38b2ac61}.pt-toggle[data-checked=true]:after{transform:translate(14px);background:var(--pt-accent-teal-vivid)}.pt-progress{position:relative;overflow:hidden;height:6px;border-radius:var(--pt-radius-pill);background:var(--pt-glass-chip-bg)}.pt-progress:after{content:"";position:absolute;inset:0 auto 0 0;width:calc(var(--value, .5) * 100%);border-radius:inherit;background:linear-gradient(90deg,var(--pt-accent-teal),var(--pt-accent-teal-soft));box-shadow:var(--glow, none)}.pt-mini-bars{display:flex;align-items:end;gap:4px;height:50px}.pt-mini-bars span{flex:1;min-width:5px;height:calc(var(--h, .5) * 100%);min-height:2px;border-radius:2px 2px 0 0;background:var(--pt-glass-border)}.pt-mini-bars span:last-child{background:linear-gradient(180deg,var(--pt-accent-teal-soft),var(--pt-accent-teal))}.pt-sparkline{width:100%;height:60px}.pt-sparkline path{fill:none;stroke:var(--stroke, var(--pt-accent-teal));stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.pt-sparkline polygon{fill:color-mix(in srgb,var(--stroke, var(--pt-accent-teal)) 16%,transparent)}.pt-detail-row{display:grid;grid-template-columns:1fr auto;gap:12px;padding-top:10px;border-top:1px solid var(--pt-glass-divider)}.pt-detail-row__label{display:block;margin-bottom:2px;font-family:var(--font-ui);font-size:10px;font-weight:500;color:var(--pt-text-tertiary)}.pt-detail-row__value{font-family:var(--font-mono);font-size:11px;font-weight:600;color:var(--pt-text-secondary)}.pt-detail-row__value[data-accent=true]{color:var(--pt-accent-teal-vivid)}.pt-keycap{display:inline-grid;place-items:center;width:var(--pt-key-size);height:var(--pt-key-size);border-radius:var(--pt-key-radius);background:var(--pt-glass-veil);border:1px solid var(--pt-glass-button-bg);font-family:var(--font-mono);font-size:10px;font-weight:500;color:var(--pt-text-tertiary)}.pt-keycap[data-state=good]{color:var(--pt-accent-teal-soft);background:color-mix(in srgb,var(--pt-status-good) 20%,transparent);border-color:color-mix(in srgb,var(--pt-status-good) 40%,transparent)}.pt-keycap[data-state=weak]{color:var(--pt-status-weak-text);background:color-mix(in srgb,var(--pt-status-weak) 15%,transparent);border-color:color-mix(in srgb,var(--pt-status-weak) 30%,transparent)}.pt-keycap[data-state=bad]{color:var(--pt-status-bad-text);background:color-mix(in srgb,var(--pt-status-bad) 20%,transparent);border-color:color-mix(in srgb,var(--pt-status-bad) 40%,transparent)}.pt-floating-panel{width:fit-content;max-width:280px;padding:10px 12px;border:1px solid var(--pt-glass-border);border-radius:var(--pt-radius-xs);background:var(--pt-bg-forest);box-shadow:0 12px 28px var(--pt-glass-shadow-floating)}.pt-floating-chip{width:fit-content;padding:10px 14px;border:1px solid var(--pt-glass-border-hover);border-radius:var(--pt-radius-md);background:linear-gradient(#38b2ac0f,#38b2ac0f),var(--pt-glass-surface);box-shadow:0 8px 16px var(--pt-glass-shadow-floating);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px)}.pt-typing-sample{font-family:var(--font-mono);font-size:1.5rem;line-height:1em;color:var(--pt-drill-untyped)}.pt-typing-sample span{margin-right:.3em}.pt-typing-sample [data-state=correct]{color:var(--pt-text-primary)}.pt-typing-sample [data-state=current]{color:var(--pt-text-primary);box-shadow:inset 0 -2px 0 var(--pt-accent-teal-vivid)}.pt-typing-sample [data-state=wrong]{color:var(--pt-status-bad)}.pt-hero-number{font-family:var(--font-ui);font-size:clamp(56px,8vw,96px);font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.03em;line-height:.9;color:transparent;background:linear-gradient(180deg,#fffffff2,#ffffff80);-webkit-background-clip:text;background-clip:text}.pt-hero-number[data-tone=white]{background:linear-gradient(180deg,#fffffff2,#ffffff80);-webkit-background-clip:text;background-clip:text}.pt-hero-label{margin-top:10px;font-family:var(--font-ui);font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--pt-text-tertiary)}
