:root{--halo-colour-surface:#FBF8F3;--halo-colour-surface-raised:#FFFFFF;--halo-colour-surface-sunken:#F4EFE6;--halo-colour-surface-inverse:#1F1B24;--halo-colour-border:#E8E0D3;--halo-colour-border-strong:#9C96A6;--halo-colour-text:#1F1B24;--halo-colour-text-secondary:#6B6377;--halo-colour-text-on-primary:#FFFFFF;--halo-colour-text-on-inverse:#FBF8F3;--halo-colour-primary:#4C1D95;--halo-colour-primary-hover:#3B1486;--halo-colour-primary-active:#2E1065;--halo-colour-primary-subtle:#EDE9FE;--halo-colour-primary-border:#C4B5FD;--halo-colour-accent:#C8A96A;--halo-colour-accent-text:#6F5623;--halo-colour-accent-subtle:#F0E4CB;--halo-colour-success:#15803D;--halo-colour-success-subtle:#DCFCE7;--halo-colour-warning:#92590A;--halo-colour-warning-subtle:#FEF3C7;--halo-colour-danger:#B91C1C;--halo-colour-danger-subtle:#FEE2E2;--halo-colour-info:#1D4ED8;--halo-colour-info-subtle:#DBEAFE;--halo-colour-focus-ring:#5B21B6;--halo-space-0:0px;--halo-space-1:4px;--halo-space-2:8px;--halo-space-3:12px;--halo-space-4:16px;--halo-space-5:20px;--halo-space-6:24px;--halo-space-8:32px;--halo-space-10:40px;--halo-space-12:48px;--halo-space-16:64px;--halo-space-20:80px;--halo-space-24:96px;--halo-radius-none:0px;--halo-radius-sm:4px;--halo-radius-md:8px;--halo-radius-lg:12px;--halo-radius-xl:16px;--halo-radius-2xl:24px;--halo-radius-pill:999px;--halo-font-sans:"Inter",system-ui,-apple-system,"Segoe UI",sans-serif;--halo-font-khmer:"Noto Sans Khmer","Khmer OS",system-ui,sans-serif;--halo-font-mono:"JetBrains Mono",ui-monospace,"SF Mono",Menlo,monospace;--halo-text-xs:12px;--halo-text-sm:14px;--halo-text-base:16px;--halo-text-lg:18px;--halo-text-xl:20px;--halo-text-2xl:24px;--halo-text-3xl:30px;--halo-text-4xl:36px;--halo-text-5xl:48px;--halo-weight-regular:400;--halo-weight-medium:500;--halo-weight-semibold:600;--halo-weight-bold:700;--halo-leading-tight:1.2;--halo-leading-snug:1.35;--halo-leading-normal:1.55;--halo-leading-relaxed:1.7;--halo-leading-khmer:1.9;--halo-tracking-tight:-0.01em;--halo-tracking-normal:0;--halo-tracking-wide:0.02em;--halo-tracking-caps:0.08em;--halo-shadow-sm:0 1px 2px rgba(31,27,36,0.06);--halo-shadow-md:0 2px 8px rgba(31,27,36,0.08);--halo-shadow-lg:0 8px 24px rgba(31,27,36,0.10);--halo-shadow-card:0 1px 3px rgba(31,27,36,0.08),0 8px 24px rgba(31,27,36,0.06);--halo-target-min:44px;--halo-max-content:1200px;--halo-max-prose:680px;--halo-duration-fast:120ms;--halo-duration-normal:200ms;--halo-easing:cubic-bezier(0.2,0,0,1)}*,:after,:before{box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%}body{margin:0;background:var(--halo-colour-surface);color:var(--halo-colour-text);font-family:var(--halo-font-sans);font-size:1rem;line-height:var(--halo-leading-normal);-webkit-font-smoothing:antialiased}:lang(km),[data-locale=km]{font-family:var(--halo-font-khmer);line-height:var(--halo-leading-khmer)}h1,h2,h3,h4{margin:0;line-height:var(--halo-leading-tight);letter-spacing:var(--halo-tracking-tight,-.01em);font-weight:600}h1{font-size:1.875rem}h2{font-size:1.375rem}h3{font-size:1.125rem}ol,p,ul{margin:0}ol,ul{padding-left:1.25rem}a{color:var(--halo-colour-primary);text-decoration-thickness:1px;text-underline-offset:2px}a:hover{color:var(--halo-colour-primary-hover)}:focus-visible{outline:3px solid var(--halo-colour-focus-ring);outline-offset:2px;border-radius:4px}button,input,select,textarea{font:inherit;color:inherit}[role=button],a.halo-target,button,input[type=checkbox],input[type=radio]{min-height:var(--halo-target-min)}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}.halo-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}.halo-skip-link{position:absolute;left:-9999px;top:0;z-index:100;padding:.75rem 1rem;background:var(--halo-colour-primary);color:var(--halo-colour-text-on-primary);border-radius:0 0 8px 0}.halo-skip-link:focus{left:0}@media (forced-colors:active){.halo-badge,.halo-button,.halo-card{border:1px solid ButtonText}}