/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
@layer properties;
@layer theme, base, components, utilities;
@layer theme {
  :root, :host {
    --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
      "Courier New", monospace;
    --color-black: #000;
    --color-white: #fff;
    --spacing: 0.25rem;
    --container-lg: 32rem;
    --text-xs: 0.75rem;
    --text-xs--line-height: calc(1 / 0.75);
    --text-sm: 0.875rem;
    --text-sm--line-height: calc(1.25 / 0.875);
    --text-base: 1rem;
    --text-base--line-height: calc(1.5 / 1);
    --text-lg: 1.125rem;
    --text-lg--line-height: calc(1.75 / 1.125);
    --font-weight-medium: 500;
    --font-weight-semibold: 600;
    --radius-xs: 0.125rem;
    --radius-md: 0.375rem;
    --radius-lg: 0.5rem;
    --default-transition-duration: 150ms;
    --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
    --default-font-family: Georgia,serif;
    --default-mono-font-family: var(--font-mono);
  }
}
@layer base {
  *, ::after, ::before, ::backdrop, ::file-selector-button {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
    border: 0 solid;
  }
  html, :host {
    line-height: 1.5;
    -webkit-text-size-adjust: 100%;
    tab-size: 4;
    font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
    font-feature-settings: var(--default-font-feature-settings, normal);
    font-variation-settings: var(--default-font-variation-settings, normal);
    -webkit-tap-highlight-color: transparent;
  }
  hr {
    height: 0;
    color: inherit;
    border-top-width: 1px;
  }
  abbr:where([title]) {
    -webkit-text-decoration: underline dotted;
    text-decoration: underline dotted;
  }
  h1, h2, h3, h4, h5, h6 {
    font-size: inherit;
    font-weight: inherit;
  }
  a {
    color: inherit;
    -webkit-text-decoration: inherit;
    text-decoration: inherit;
  }
  b, strong {
    font-weight: bolder;
  }
  code, kbd, samp, pre {
    font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
    font-feature-settings: var(--default-mono-font-feature-settings, normal);
    font-variation-settings: var(--default-mono-font-variation-settings, normal);
    font-size: 1em;
  }
  small {
    font-size: 80%;
  }
  sub, sup {
    font-size: 75%;
    line-height: 0;
    position: relative;
    vertical-align: baseline;
  }
  sub {
    bottom: -0.25em;
  }
  sup {
    top: -0.5em;
  }
  table {
    text-indent: 0;
    border-color: inherit;
    border-collapse: collapse;
  }
  :-moz-focusring {
    outline: auto;
  }
  progress {
    vertical-align: baseline;
  }
  summary {
    display: list-item;
  }
  ol, ul, menu {
    list-style: none;
  }
  img, svg, video, canvas, audio, iframe, embed, object {
    display: block;
    vertical-align: middle;
  }
  img, video {
    max-width: 100%;
    height: auto;
  }
  button, input, select, optgroup, textarea, ::file-selector-button {
    font: inherit;
    font-feature-settings: inherit;
    font-variation-settings: inherit;
    letter-spacing: inherit;
    color: inherit;
    border-radius: 0;
    background-color: transparent;
    opacity: 1;
  }
  :where(select:is([multiple], [size])) optgroup {
    font-weight: bolder;
  }
  :where(select:is([multiple], [size])) optgroup option {
    padding-inline-start: 20px;
  }
  ::file-selector-button {
    margin-inline-end: 4px;
  }
  ::placeholder {
    opacity: 1;
  }
  @supports (not (-webkit-appearance: -apple-pay-button))  or (contain-intrinsic-size: 1px) {
    ::placeholder {
      color: currentcolor;
      @supports (color: color-mix(in lab, red, red)) {
        color: color-mix(in oklab, currentcolor 50%, transparent);
      }
    }
  }
  textarea {
    resize: vertical;
  }
  ::-webkit-search-decoration {
    -webkit-appearance: none;
  }
  ::-webkit-date-and-time-value {
    min-height: 1lh;
    text-align: inherit;
  }
  ::-webkit-datetime-edit {
    display: inline-flex;
  }
  ::-webkit-datetime-edit-fields-wrapper {
    padding: 0;
  }
  ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
    padding-block: 0;
  }
  ::-webkit-calendar-picker-indicator {
    line-height: 1;
  }
  :-moz-ui-invalid {
    box-shadow: none;
  }
  button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
    appearance: button;
  }
  ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
    height: auto;
  }
  [hidden]:where(:not([hidden="until-found"])) {
    display: none !important;
  }
}
@layer utilities {
  .pointer-events-none {
    pointer-events: none;
  }
  .visible {
    visibility: visible;
  }
  .sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
    border-width: 0;
  }
  .absolute {
    position: absolute;
  }
  .fixed {
    position: fixed;
  }
  .relative {
    position: relative;
  }
  .inset-0 {
    inset: calc(var(--spacing) * 0);
  }
  .start {
    inset-inline-start: var(--spacing);
  }
  .end {
    inset-inline-end: var(--spacing);
  }
  .top-1\/2 {
    top: calc(1 / 2 * 100%);
  }
  .top-4 {
    top: calc(var(--spacing) * 4);
  }
  .top-\[50\%\] {
    top: 50%;
  }
  .right-3\.5 {
    right: calc(var(--spacing) * 3.5);
  }
  .right-4 {
    right: calc(var(--spacing) * 4);
  }
  .left-1\/2 {
    left: calc(1 / 2 * 100%);
  }
  .left-\[50\%\] {
    left: 50%;
  }
  .z-50 {
    z-index: 50;
  }
  .flex {
    display: flex;
  }
  .grid {
    display: grid;
  }
  .hidden {
    display: none;
  }
  .inline-flex {
    display: inline-flex;
  }
  .table {
    display: table;
  }
  .aspect-square {
    aspect-ratio: 1 / 1;
  }
  .size-2 {
    width: calc(var(--spacing) * 2);
    height: calc(var(--spacing) * 2);
  }
  .size-4 {
    width: calc(var(--spacing) * 4);
    height: calc(var(--spacing) * 4);
  }
  .size-6 {
    width: calc(var(--spacing) * 6);
    height: calc(var(--spacing) * 6);
  }
  .size-8 {
    width: calc(var(--spacing) * 8);
    height: calc(var(--spacing) * 8);
  }
  .size-9 {
    width: calc(var(--spacing) * 9);
    height: calc(var(--spacing) * 9);
  }
  .size-10 {
    width: calc(var(--spacing) * 10);
    height: calc(var(--spacing) * 10);
  }
  .h-6 {
    height: calc(var(--spacing) * 6);
  }
  .h-8 {
    height: calc(var(--spacing) * 8);
  }
  .h-9 {
    height: calc(var(--spacing) * 9);
  }
  .h-10 {
    height: calc(var(--spacing) * 10);
  }
  .w-fit {
    width: fit-content;
  }
  .w-full {
    width: 100%;
  }
  .max-w-\[calc\(100\%-2rem\)\] {
    max-width: calc(100% - 2rem);
  }
  .min-w-0 {
    min-width: calc(var(--spacing) * 0);
  }
  .shrink-0 {
    flex-shrink: 0;
  }
  .-translate-x-1\/2 {
    --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
    translate: var(--tw-translate-x) var(--tw-translate-y);
  }
  .translate-x-\[-50\%\] {
    --tw-translate-x: -50%;
    translate: var(--tw-translate-x) var(--tw-translate-y);
  }
  .-translate-y-1\/2 {
    --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
    translate: var(--tw-translate-x) var(--tw-translate-y);
  }
  .translate-y-\[-50\%\] {
    --tw-translate-y: -50%;
    translate: var(--tw-translate-x) var(--tw-translate-y);
  }
  .transform {
    transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
  }
  .resize {
    resize: both;
  }
  .appearance-none {
    appearance: none;
  }
  .flex-col {
    flex-direction: column;
  }
  .flex-col-reverse {
    flex-direction: column-reverse;
  }
  .items-center {
    align-items: center;
  }
  .justify-center {
    justify-content: center;
  }
  .gap-1 {
    gap: calc(var(--spacing) * 1);
  }
  .gap-1\.5 {
    gap: calc(var(--spacing) * 1.5);
  }
  .gap-2 {
    gap: calc(var(--spacing) * 2);
  }
  .gap-3 {
    gap: calc(var(--spacing) * 3);
  }
  .gap-4 {
    gap: calc(var(--spacing) * 4);
  }
  .rounded-full {
    border-radius: calc(infinity * 1px);
  }
  .rounded-lg {
    border-radius: var(--radius-lg);
  }
  .rounded-md {
    border-radius: var(--radius-md);
  }
  .rounded-xs {
    border-radius: var(--radius-xs);
  }
  .border {
    border-style: var(--tw-border-style);
    border-width: 1px;
  }
  .border-input {
    border-color: var(--input);
  }
  .bg-\[Canvas\] {
    background-color: Canvas;
  }
  .bg-background {
    background-color: var(--background);
  }
  .bg-black\/50 {
    background-color: color-mix(in srgb, #000 50%, transparent);
    @supports (color: color-mix(in lab, red, red)) {
      background-color: color-mix(in oklab, var(--color-black) 50%, transparent);
    }
  }
  .bg-destructive {
    background-color: var(--destructive);
  }
  .bg-primary {
    background-color: var(--primary);
  }
  .bg-secondary {
    background-color: var(--secondary);
  }
  .bg-transparent {
    background-color: transparent;
  }
  .fill-primary {
    fill: var(--primary);
  }
  .p-6 {
    padding: calc(var(--spacing) * 6);
  }
  .px-2 {
    padding-inline: calc(var(--spacing) * 2);
  }
  .px-3 {
    padding-inline: calc(var(--spacing) * 3);
  }
  .px-4 {
    padding-inline: calc(var(--spacing) * 4);
  }
  .px-6 {
    padding-inline: calc(var(--spacing) * 6);
  }
  .py-1 {
    padding-block: calc(var(--spacing) * 1);
  }
  .py-2 {
    padding-block: calc(var(--spacing) * 2);
  }
  .pr-9 {
    padding-right: calc(var(--spacing) * 9);
  }
  .text-center {
    text-align: center;
  }
  .text-base {
    font-size: var(--text-base);
    line-height: var(--tw-leading, var(--text-base--line-height));
  }
  .text-lg {
    font-size: var(--text-lg);
    line-height: var(--tw-leading, var(--text-lg--line-height));
  }
  .text-sm {
    font-size: var(--text-sm);
    line-height: var(--tw-leading, var(--text-sm--line-height));
  }
  .text-xs {
    font-size: var(--text-xs);
    line-height: var(--tw-leading, var(--text-xs--line-height));
  }
  .leading-none {
    --tw-leading: 1;
    line-height: 1;
  }
  .font-medium {
    --tw-font-weight: var(--font-weight-medium);
    font-weight: var(--font-weight-medium);
  }
  .font-semibold {
    --tw-font-weight: var(--font-weight-semibold);
    font-weight: var(--font-weight-semibold);
  }
  .whitespace-nowrap {
    white-space: nowrap;
  }
  .text-\[CanvasText\] {
    color: CanvasText;
  }
  .text-muted-foreground {
    color: var(--muted-foreground);
  }
  .text-primary {
    color: var(--primary);
  }
  .text-primary-foreground {
    color: var(--primary-foreground);
  }
  .text-secondary-foreground {
    color: var(--secondary-foreground);
  }
  .text-white {
    color: var(--color-white);
  }
  .italic {
    font-style: italic;
  }
  .underline-offset-4 {
    text-underline-offset: 4px;
  }
  .opacity-50 {
    opacity: 50%;
  }
  .opacity-70 {
    opacity: 70%;
  }
  .shadow {
    --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  }
  .shadow-lg {
    --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  }
  .shadow-xs {
    --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));
    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
  }
  .ring-offset-background {
    --tw-ring-offset-color: var(--background);
  }
  .outline {
    outline-style: var(--tw-outline-style);
    outline-width: 1px;
  }
  .transition {
    transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
    transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
    transition-duration: var(--tw-duration, var(--default-transition-duration));
  }
  .transition-\[color\,box-shadow\] {
    transition-property: color,box-shadow;
    transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
    transition-duration: var(--tw-duration, var(--default-transition-duration));
  }
  .transition-all {
    transition-property: all;
    transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
    transition-duration: var(--tw-duration, var(--default-transition-duration));
  }
  .transition-opacity {
    transition-property: opacity;
    transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
    transition-duration: var(--tw-duration, var(--default-transition-duration));
  }
  .duration-200 {
    --tw-duration: 200ms;
    transition-duration: 200ms;
  }
  .outline-none {
    --tw-outline-style: none;
    outline-style: none;
  }
  .select-none {
    -webkit-user-select: none;
    user-select: none;
  }
  .paused {
    animation-play-state: paused;
  }
  .running {
    animation-play-state: running;
  }
  .group-data-\[disabled\=true\]\:pointer-events-none {
    &:is(:where(.group)[data-disabled="true"] *) {
      pointer-events: none;
    }
  }
  .group-data-\[disabled\=true\]\:opacity-50 {
    &:is(:where(.group)[data-disabled="true"] *) {
      opacity: 50%;
    }
  }
  .peer-disabled\:cursor-not-allowed {
    &:is(:where(.peer):disabled ~ *) {
      cursor: not-allowed;
    }
  }
  .peer-disabled\:opacity-50 {
    &:is(:where(.peer):disabled ~ *) {
      opacity: 50%;
    }
  }
  .selection\:bg-primary {
    & *::selection {
      background-color: var(--primary);
    }
    &::selection {
      background-color: var(--primary);
    }
  }
  .selection\:text-primary-foreground {
    & *::selection {
      color: var(--primary-foreground);
    }
    &::selection {
      color: var(--primary-foreground);
    }
  }
  .file\:inline-flex {
    &::file-selector-button {
      display: inline-flex;
    }
  }
  .file\:h-7 {
    &::file-selector-button {
      height: calc(var(--spacing) * 7);
    }
  }
  .file\:border-0 {
    &::file-selector-button {
      border-style: var(--tw-border-style);
      border-width: 0px;
    }
  }
  .file\:bg-transparent {
    &::file-selector-button {
      background-color: transparent;
    }
  }
  .file\:text-sm {
    &::file-selector-button {
      font-size: var(--text-sm);
      line-height: var(--tw-leading, var(--text-sm--line-height));
    }
  }
  .file\:font-medium {
    &::file-selector-button {
      --tw-font-weight: var(--font-weight-medium);
      font-weight: var(--font-weight-medium);
    }
  }
  .file\:text-foreground {
    &::file-selector-button {
      color: var(--foreground);
    }
  }
  .placeholder\:text-muted-foreground {
    &::placeholder {
      color: var(--muted-foreground);
    }
  }
  .hover\:bg-accent {
    &:hover {
      @media (hover: hover) {
        background-color: var(--accent);
      }
    }
  }
  .hover\:bg-destructive\/90 {
    &:hover {
      @media (hover: hover) {
        background-color: var(--destructive);
        @supports (color: color-mix(in lab, red, red)) {
          background-color: color-mix(in oklab, var(--destructive) 90%, transparent);
        }
      }
    }
  }
  .hover\:bg-primary\/90 {
    &:hover {
      @media (hover: hover) {
        background-color: var(--primary);
        @supports (color: color-mix(in lab, red, red)) {
          background-color: color-mix(in oklab, var(--primary) 90%, transparent);
        }
      }
    }
  }
  .hover\:bg-secondary\/80 {
    &:hover {
      @media (hover: hover) {
        background-color: var(--secondary);
        @supports (color: color-mix(in lab, red, red)) {
          background-color: color-mix(in oklab, var(--secondary) 80%, transparent);
        }
      }
    }
  }
  .hover\:text-accent-foreground {
    &:hover {
      @media (hover: hover) {
        color: var(--accent-foreground);
      }
    }
  }
  .hover\:underline {
    &:hover {
      @media (hover: hover) {
        text-decoration-line: underline;
      }
    }
  }
  .hover\:opacity-100 {
    &:hover {
      @media (hover: hover) {
        opacity: 100%;
      }
    }
  }
  .focus\:ring-2 {
    &:focus {
      --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
      box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
    }
  }
  .focus\:ring-ring {
    &:focus {
      --tw-ring-color: var(--ring);
    }
  }
  .focus\:ring-offset-2 {
    &:focus {
      --tw-ring-offset-width: 2px;
      --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
    }
  }
  .focus\:outline-hidden {
    &:focus {
      --tw-outline-style: none;
      outline-style: none;
      @media (forced-colors: active) {
        outline: 2px solid transparent;
        outline-offset: 2px;
      }
    }
  }
  .focus-visible\:border-ring {
    &:focus-visible {
      border-color: var(--ring);
    }
  }
  .focus-visible\:ring-\[3px\] {
    &:focus-visible {
      --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
      box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
    }
  }
  .focus-visible\:ring-destructive\/20 {
    &:focus-visible {
      --tw-ring-color: var(--destructive);
      @supports (color: color-mix(in lab, red, red)) {
        --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);
      }
    }
  }
  .focus-visible\:ring-ring\/50 {
    &:focus-visible {
      --tw-ring-color: var(--ring);
      @supports (color: color-mix(in lab, red, red)) {
        --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);
      }
    }
  }
  .disabled\:pointer-events-none {
    &:disabled {
      pointer-events: none;
    }
  }
  .disabled\:cursor-not-allowed {
    &:disabled {
      cursor: not-allowed;
    }
  }
  .disabled\:opacity-50 {
    &:disabled {
      opacity: 50%;
    }
  }
  .has-\[select\:disabled\]\:opacity-50 {
    &:has(*:is(select:disabled)) {
      opacity: 50%;
    }
  }
  .has-\[\>svg\]\:px-1\.5 {
    &:has(>svg) {
      padding-inline: calc(var(--spacing) * 1.5);
    }
  }
  .has-\[\>svg\]\:px-2\.5 {
    &:has(>svg) {
      padding-inline: calc(var(--spacing) * 2.5);
    }
  }
  .has-\[\>svg\]\:px-3 {
    &:has(>svg) {
      padding-inline: calc(var(--spacing) * 3);
    }
  }
  .has-\[\>svg\]\:px-4 {
    &:has(>svg) {
      padding-inline: calc(var(--spacing) * 4);
    }
  }
  .aria-invalid\:border-destructive {
    &[aria-invalid="true"] {
      border-color: var(--destructive);
    }
  }
  .aria-invalid\:ring-destructive\/20 {
    &[aria-invalid="true"] {
      --tw-ring-color: var(--destructive);
      @supports (color: color-mix(in lab, red, red)) {
        --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);
      }
    }
  }
  .data-\[size\=sm\]\:h-8 {
    &[data-size="sm"] {
      height: calc(var(--spacing) * 8);
    }
  }
  .data-\[size\=sm\]\:py-1 {
    &[data-size="sm"] {
      padding-block: calc(var(--spacing) * 1);
    }
  }
  .data-\[state\=closed\]\:animate-out {
    &[data-state="closed"] {
      animation: exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);
    }
  }
  .data-\[state\=closed\]\:fade-out-0 {
    &[data-state="closed"] {
      --tw-exit-opacity: calc(0/100);
      --tw-exit-opacity: 0;
    }
  }
  .data-\[state\=closed\]\:zoom-out-95 {
    &[data-state="closed"] {
      --tw-exit-scale: calc(95*1%);
      --tw-exit-scale: .95;
    }
  }
  .data-\[state\=open\]\:animate-in {
    &[data-state="open"] {
      animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);
    }
  }
  .data-\[state\=open\]\:bg-accent {
    &[data-state="open"] {
      background-color: var(--accent);
    }
  }
  .data-\[state\=open\]\:text-muted-foreground {
    &[data-state="open"] {
      color: var(--muted-foreground);
    }
  }
  .data-\[state\=open\]\:fade-in-0 {
    &[data-state="open"] {
      --tw-enter-opacity: calc(0/100);
      --tw-enter-opacity: 0;
    }
  }
  .data-\[state\=open\]\:zoom-in-95 {
    &[data-state="open"] {
      --tw-enter-scale: calc(95*1%);
      --tw-enter-scale: .95;
    }
  }
  .sm\:max-w-lg {
    @media (width >= 40rem) {
      max-width: var(--container-lg);
    }
  }
  .sm\:flex-row {
    @media (width >= 40rem) {
      flex-direction: row;
    }
  }
  .sm\:justify-end {
    @media (width >= 40rem) {
      justify-content: flex-end;
    }
  }
  .sm\:text-left {
    @media (width >= 40rem) {
      text-align: left;
    }
  }
  .md\:text-sm {
    @media (width >= 48rem) {
      font-size: var(--text-sm);
      line-height: var(--tw-leading, var(--text-sm--line-height));
    }
  }
  .dark\:border-input {
    @media (prefers-color-scheme: dark) {
      border-color: var(--input);
    }
  }
  .dark\:bg-destructive\/60 {
    @media (prefers-color-scheme: dark) {
      background-color: var(--destructive);
      @supports (color: color-mix(in lab, red, red)) {
        background-color: color-mix(in oklab, var(--destructive) 60%, transparent);
      }
    }
  }
  .dark\:bg-input\/30 {
    @media (prefers-color-scheme: dark) {
      background-color: var(--input);
      @supports (color: color-mix(in lab, red, red)) {
        background-color: color-mix(in oklab, var(--input) 30%, transparent);
      }
    }
  }
  .dark\:hover\:bg-accent\/50 {
    @media (prefers-color-scheme: dark) {
      &:hover {
        @media (hover: hover) {
          background-color: var(--accent);
          @supports (color: color-mix(in lab, red, red)) {
            background-color: color-mix(in oklab, var(--accent) 50%, transparent);
          }
        }
      }
    }
  }
  .dark\:hover\:bg-input\/50 {
    @media (prefers-color-scheme: dark) {
      &:hover {
        @media (hover: hover) {
          background-color: var(--input);
          @supports (color: color-mix(in lab, red, red)) {
            background-color: color-mix(in oklab, var(--input) 50%, transparent);
          }
        }
      }
    }
  }
  .dark\:focus-visible\:ring-destructive\/40 {
    @media (prefers-color-scheme: dark) {
      &:focus-visible {
        --tw-ring-color: var(--destructive);
        @supports (color: color-mix(in lab, red, red)) {
          --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);
        }
      }
    }
  }
  .dark\:aria-invalid\:ring-destructive\/40 {
    @media (prefers-color-scheme: dark) {
      &[aria-invalid="true"] {
        --tw-ring-color: var(--destructive);
        @supports (color: color-mix(in lab, red, red)) {
          --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);
        }
      }
    }
  }
  .\[\&_svg\]\:pointer-events-none {
    & svg {
      pointer-events: none;
    }
  }
  .\[\&_svg\]\:shrink-0 {
    & svg {
      flex-shrink: 0;
    }
  }
  .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 {
    & svg:not([class*='size-']) {
      width: calc(var(--spacing) * 3);
      height: calc(var(--spacing) * 3);
    }
  }
  .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 {
    & svg:not([class*='size-']) {
      width: calc(var(--spacing) * 4);
      height: calc(var(--spacing) * 4);
    }
  }
}
@property --tw-animation-delay {
  syntax: "*";
  inherits: false;
  initial-value: 0s;
}
@property --tw-animation-direction {
  syntax: "*";
  inherits: false;
  initial-value: normal;
}
@property --tw-animation-duration {
  syntax: "*";
  inherits: false;
}
@property --tw-animation-fill-mode {
  syntax: "*";
  inherits: false;
  initial-value: none;
}
@property --tw-animation-iteration-count {
  syntax: "*";
  inherits: false;
  initial-value: 1;
}
@property --tw-enter-blur {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-enter-opacity {
  syntax: "*";
  inherits: false;
  initial-value: 1;
}
@property --tw-enter-rotate {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-enter-scale {
  syntax: "*";
  inherits: false;
  initial-value: 1;
}
@property --tw-enter-translate-x {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-enter-translate-y {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-exit-blur {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-exit-opacity {
  syntax: "*";
  inherits: false;
  initial-value: 1;
}
@property --tw-exit-rotate {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-exit-scale {
  syntax: "*";
  inherits: false;
  initial-value: 1;
}
@property --tw-exit-translate-x {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-exit-translate-y {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --scroll-fade-t {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 0px;
}
@property --scroll-fade-b {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 0px;
}
@property --scroll-fade-s {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 0px;
}
@property --scroll-fade-e {
  syntax: "<length-percentage>";
  inherits: false;
  initial-value: 0px;
}
@property --scroll-fade-mask {
  syntax: "*";
  inherits: false;
}
@property --shimmer-angle {
  syntax: "<angle>";
  inherits: true;
  initial-value: 20deg;
}
@property --shimmer-image {
  syntax: "*";
  inherits: false;
}
@property --shimmer-text-fill {
  syntax: "*";
  inherits: false;
}
@media (prefers-reduced-motion: reduce) {
  .shimmer {
    animation: none;
    background-image: none;
    -webkit-text-fill-color: currentColor;
  }
}
@font-face {
  font-family: Pinyon;
  src: url('/hogwarts/fonts/pinyon-script.woff2') format('woff2');
  font-display: swap;
}
.burned-paper {
  position: relative;
  isolation: isolate;
  width: min(610px,100%);
  margin: auto;
  padding: 58px 55px 52px;
  color: #302d22;
  filter: drop-shadow(0 18px 35px #0008);
  line-height: 1.4;
}
.burned-paper::before {
  content: "";
  position: absolute;
  inset: -12px -16px;
  z-index: -1;
  pointer-events: none;
  border: 0 solid transparent;
  border-image-source: url('/hogwarts/images/burned-paper.webp');
  border-image-slice: 180 120 150 120 fill;
  border-image-width: 78px 46px 64px 46px;
  border-image-repeat: stretch;
}
.warning-letter .eyebrow {
  text-align: center;
  color: #6a543b;
  line-height: 1.7;
  font-size: 10px;
  margin: 0 0 25px;
  letter-spacing: .1em;
}
.warning-letter h1 {
  text-align: center;
  font-family: Cormorant,Georgia,serif;
  font-size: 36px;
  font-weight: 500;
  line-height: 1.15;
  margin: 0 0 25px;
  color: #503322;
}
.warning-letter h1 em {
  font-weight: 400;
}
.warning-letter .letter-crest {
  width: 165px;
  margin: 0 auto 10px;
}
.warning-letter .salutation {
  font-family: Pinyon,Cormorant,serif;
  font-size: 36px;
  gap: 10px;
  margin: 0 0 14px;
}
.warning-letter .salutation input {
  font-family: Pinyon,Cormorant,serif;
  font-size: 36px;
  height: 44px;
  color: #30382b;
  max-width: min(260px,70%);
}
.warning-letter .ghostwriting {
  font-size: 25px;
  font-style: italic;
  line-height: 1.35;
}
.ink-line {
  position: relative;
  margin: 0 0 16px;
}
.ink-reserve {
  visibility: hidden;
}
.ink-written {
  position: absolute;
  inset: 0;
  white-space: pre-wrap;
}
.ink-reveal {
  font-size: 16px;
  font-family: Cormorant,serif;
  font-style: italic;
  min-height: 44px;
  color: #665d43;
  border-bottom: 1px solid #88774a66;
}
.ink-reveal:disabled {
  cursor: default;
  border-color: transparent;
  color: #72674e;
}
.warning-letter .signature {
  font-size: 21px;
  font-style: italic;
  margin: 12px 0 24px;
}
.warning-letter .signature em {
  font-family: Pinyon,serif;
  font-size: 48px;
  font-style: normal;
}
.warning-letter .story-button {
  display: flex;
  width: 100%;
  background: #263c2c !important;
  box-shadow: inset 0 0 0 4px #263c2c;
}
.warning-letter .story-button:hover {
  background: #3b5037 !important;
}
.warning-letter .letter-postscript {
  font-style: italic;
  font-size: 16px;
  text-align: center;
  margin: 20px 0 0;
  color: #6a5842;
}
.paper-embers {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 2;
  overflow: visible;
}
.paper-embers i {
  position: absolute;
  background: url('/hogwarts/images/paper-flame.webp') center/contain no-repeat;
  width: 17px;
  height: 29px;
  opacity: 0;
  animation: paper-smoulder 8s ease-out infinite;
}
.paper-embers i:nth-child(1) {
  left: -7px;
  top: 29%;
  animation-delay: 1s;
}
.paper-embers i:nth-child(2) {
  right: -11px;
  top: 65%;
  animation-delay: 4s;
}
.paper-embers i:nth-child(3) {
  left: 16%;
  bottom: -8px;
  animation-delay: 6s;
}
.paper-still .paper-embers {
  display: none;
}
@keyframes paper-smoulder {
  0%,65%,100% {
    opacity: 0;
    transform: translateY(0) scale(.65);
  }
  73% {
    opacity: .8;
  }
  88% {
    opacity: 0;
    transform: translateY(-35px) scale(1);
  }
}
@media (max-width:640px) {
  .letter-scene {
    padding: 90px 19px 110px;
  }
  .burned-paper {
    padding: 43px 23px 42px;
  }
  .burned-paper::before {
    inset: -8px -9px;
    border-image-width: 61px 26px 49px 26px;
  }
  .warning-letter h1 {
    font-size: 29px;
    line-height: 1.16;
    margin-bottom: 20px;
  }
  .warning-letter .ghostwriting {
    font-size: 23px;
  }
  .warning-letter .eyebrow {
    font-size: 9px;
    margin-bottom: 22px;
  }
  .warning-letter .letter-crest {
    width: 147px;
  }
  .warning-letter .salutation,.warning-letter .salutation input {
    font-size: 34px;
  }
  .warning-letter .story-button {
    font-size: 14px !important;
    padding: 17px 12px !important;
  }
}
.diary-scene {
  justify-content: center;
  text-align: center;
  padding-top: 112px;
}
.diary-layout {
  max-width: 550px;
  width: 100%;
}
.diary-layout>h1 {
  font-size: clamp(44px,5vw,64px);
  font-weight: 400;
  line-height: 1.02;
  margin: 12px 0 20px;
}
.diary-layout>h1 em {
  color: #d7b987;
}
.scene-context {
  font-size: 22px;
  line-height: 1.35;
  color: #c5c4b7;
  margin: 0 0 28px;
  text-shadow: 0 2px 10px #000;
}
.diary-page {
  position: relative;
  isolation: isolate;
  color: #453a2d;
  text-shadow: none;
  padding: 35px 40px 30px;
  background: linear-gradient(90deg,#89704650,transparent 5%,transparent 95%,#a4864c30),url('/hogwarts/images/burned-paper.webp') center/160% 160%;
  background-color: #d1bc93;
  box-shadow: 0 8px 55px #0009,inset 10px 0 25px #5c452233;
  border: 1px solid #8d7757;
  min-height: 360px;
  transform: rotate(-.6deg);
}
.diary-date {
  display: block;
  text-align: right;
  font-size: 15px;
  font-style: italic;
  color: #786648;
  border-bottom: 1px solid #8d775755;
  padding-bottom: 12px;
}
.diary-silence {
  padding: 28px 0 20px;
}
.diary-silence>p {
  font-style: italic;
  font-size: 27px;
  line-height: 1.4;
  margin: 20px 0 35px;
}
.diary-page .story-button {
  background: #362f26 !important;
  box-shadow: inset 0 0 0 4px #362f26;
  font-size: 15px !important;
}
.diary-question {
  font-family: Pinyon,Cormorant,serif;
  text-align: left;
  font-size: 35px;
  margin: 20px 0 8px;
  color: #786145;
}
.diary-answer {
  font-family: Pinyon,Cormorant,serif;
  font-size: 36px;
  text-align: left;
  line-height: 1.2;
  min-height: 90px;
  color: #29352b;
}
.anagram-instruction {
  font-size: 18px;
  line-height: 1.3;
  margin: 12px 0 18px;
}
.anagram-instruction em {
  font-size: 16px;
  color: #786449;
}
.anagram-slots {
  display: flex;
  justify-content: center;
  gap: 6px;
  flex-wrap: wrap;
  margin: 15px 0 23px;
}
.anagram-word {
  display: flex;
  gap: 2px;
}
.anagram-slot {
  width: 23px;
  min-height: 30px;
  font-family: Cinzel,serif;
  font-size: 19px;
  border-bottom: 1px solid #836440;
}
.anagram-letters {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 7px;
  max-width: 380px;
  margin: auto;
}
.anagram-letters button {
  font-family: Cinzel,serif;
  min-width: 36px;
  height: 43px;
  background: #eee0b844;
  border: 1px solid #8e6a39;
  color: #3e3526;
  box-shadow: 0 2px 4px #533b1615;
  transition: background .2s,opacity .2s;
}
.anagram-letters button:hover {
  background: #f5e7c4;
}
.anagram-letters button:focus-visible,.diary-page button:focus-visible,.library-note button:focus-visible {
  outline-color: #463a29;
}
.anagram-letters button:disabled {
  opacity: .18;
  cursor: default;
}
.diary-page .gentle-feedback {
  font-size: 16px;
  color: #755c3f;
  margin: 18px 0 8px;
  line-height: 1.3;
}
.diary-page .text-actions {
  gap: 22px;
  color: #57412b;
  font-size: 16px;
}
.diary-page .text-actions button {
  min-height: 44px;
}
.diary-page .text-actions button:disabled {
  opacity: .4;
  cursor: default;
}
.diary-page .text-actions button:hover {
  color: #121c15;
}
.diary-truth .eyebrow {
  color: #756044;
  font-size: 10px;
  margin: 10px 0 20px;
}
.riddle-true-name {
  font-family: Cinzel,serif;
  text-transform: uppercase;
  font-size: 24px;
  line-height: 1.4;
  margin: 0 0 20px;
  letter-spacing: .06em;
}
.riddle-true-name strong {
  font-family: Potter,serif;
  font-size: 64px;
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
  color: #374130;
}
.diary-truth>p:not(.eyebrow):not(.riddle-true-name) {
  font-size: 21px;
  line-height: 1.3;
}
.diary-truth .diary-threat {
  font-family: Pinyon,serif;
  font-size: 31px !important;
  line-height: 1.15 !important;
  color: #59412d;
}
.diary-next>p {
  font-size: 21px;
  line-height: 1.4;
  margin: 25px 0;
  color: #ded6c3;
}
.library-scene {
  justify-content: center;
  padding-top: 120px;
  text-align: center;
  min-height: 100svh;
  overflow: clip;
}
.carriage-background {
  position: absolute;
  inset: 0;
  z-index: -1;
  overflow: hidden;
}
.carriage-background .train-art {
  background-position: center;
  filter: brightness(.4);
  transform: scale(1.03);
  transition: filter 2s;
}
.library-lit .train-art {
  filter: brightness(.7);
}
.carriage-window {
  position: absolute;
  right: 0;
  top: 0;
  width: 40%;
  height: 70%;
  opacity: .28;
  filter: blur(5px);
  mask-image: linear-gradient(90deg,transparent,#000);
}
.carriage-shade {
  position: absolute;
  inset: 0;
  background: linear-gradient(0deg,#051218,transparent 70%),radial-gradient(ellipse at 50% 45%,transparent,#031019c9);
  transition: background 2s;
}
.library-lit .carriage-shade {
  background: linear-gradient(0deg,#051218,transparent 70%),radial-gradient(ellipse at 50% 45%,#c3eddb1a,#031019a0);
}
.library-layout {
  width: min(530px,100%);
}
.library-layout>h1 {
  font-size: 44px;
  line-height: 1.1;
  font-weight: 400;
  margin: 0 0 30px;
  color: #e4d6b7;
}
.lumos-invitation {
  padding-top: 10vh;
  padding-bottom: 13vh;
}
.lumos-invitation p {
  font-size: 24px;
  line-height: 1.4;
}
.lumos-invitation .spell-whisper {
  font-family: Pinyon,serif;
  font-size: 40px;
  margin: 40px 0 25px;
}
.library-note {
  text-align: left;
  background: radial-gradient(ellipse at top,#f0e3be,#cbb48b);
  color: #3d3828;
  padding: 38px 35px 22px;
  box-shadow: 0 0 80px #cfedd425,0 18px 45px #0007;
  transform: rotate(.6deg);
  border: 1px solid #897958;
}
.library-note .eyebrow {
  font-size: 9px;
  color: #74633e;
  line-height: 1.6;
  margin-bottom: 20px;
}
.library-note h2 {
  font-size: 35px;
  font-weight: 500;
  line-height: 1.1;
  margin: 0 0 25px;
}
.library-note .ghostwriting {
  font-size: 23px;
  line-height: 1.4;
  font-style: italic;
}
.evidence-question {
  font-size: 23px;
  border-top: 1px solid #937e5455;
  padding-top: 22px;
  margin: 24px 0 14px;
}
.evidence-choices {
  display: grid;
  gap: 8px;
}
.evidence-choices button {
  min-height: 49px;
  padding: 9px 14px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  border: 1px solid #998052;
  transition: background .2s;
  box-shadow: 0 3px 10px #533b160a;
}
.evidence-choices button:hover {
  background: #ffedbf;
}
.evidence-choices button:active {
  transform: translateY(1px);
}
.evidence-choices span {
  color: #77613d;
}
.evidence-feedback {
  font-style: italic;
  font-size: 17px;
  line-height: 1.25;
  color: #705b3e;
  min-height: 43px;
  margin: 18px 0 0;
}
.mission-ticket {
  margin: auto;
}
.mission-ticket .rail-ticket h1 {
  font-size: 70px;
}
.ticket-mission {
  font-size: 30px;
  font-style: italic;
  line-height: 1.15;
  border-top: 1px solid #886a46;
  border-bottom: 1px solid #886a46;
  padding: 22px 0;
  margin: 20px 0;
}
.ticket-explanation {
  font-size: 20px;
  line-height: 1.35;
  margin: 0 0 22px;
}
.arrival-bridge {
  font-size: 19px;
  color: #cbcbbb;
  line-height: 1.4;
  margin: 15px 0 30px;
}
.mystery-arrival .arrival-copy {
  max-width: 640px;
}
.mystery-arrival .arrival-subtitle {
  font-size: 28px;
  line-height: 1.2;
}
.mystery-arrival .arrival-intro {
  font-size: 25px;
}
.mystery-arrival .story-button {
  font-size: 15px !important;
  padding: 20px 24px !important;
}
.letter-scene .warning-letter h1 {
  font-size: 36px;
}
.letter-scene .warning-letter .letter-crest {
  width: 165px;
}
.letter-scene .warning-letter .salutation input {
  height: 44px;
  font-size: 36px;
}
.letter-scene .warning-letter .salutation {
  animation: none;
}
@media (max-width:640px) {
  .letter-scene .warning-letter h1 {
    font-size: 29px;
  }
  .letter-scene .warning-letter .salutation input {
    font-size: 34px;
  }
  .diary-scene {
    padding: 98px 20px 100px;
    align-items: center;
  }
  .diary-layout>h1 {
    font-size: 44px;
  }
  .scene-context {
    font-size: 20px;
  }
  .diary-page {
    padding: 27px 22px 23px;
  }
  .diary-answer {
    font-size: 33px;
    min-height: 83px;
  }
  .anagram-slot {
    width: 23px;
  }
  .anagram-slots {
    gap: 6px 12px;
  }
  .anagram-letters {
    gap: 8px;
    max-width: 295px;
  }
  .anagram-letters button {
    width: 34px;
    min-width: 34px;
    height: 44px;
  }
  .diary-page .text-actions {
    gap: 18px;
  }
  .diary-next>p {
    font-size: 20px;
  }
  .riddle-true-name strong {
    font-size: 58px;
  }
  .library-scene {
    padding: 105px 22px 100px;
    align-items: center;
  }
  .library-layout>h1 {
    font-size: 35px;
  }
  .library-layout>.eyebrow {
    font-size: 10px;
  }
  .library-note {
    padding: 29px 23px 22px;
  }
  .library-note h2 {
    font-size: 32px;
  }
  .library-note .ghostwriting {
    font-size: 22px;
  }
  .evidence-question {
    font-size: 21px;
  }
  .ticket-mission {
    font-size: 27px;
  }
  .mystery-arrival .arrival-subtitle {
    font-size: 26px;
  }
  .mystery-arrival .story-button {
    font-size: 13px !important;
    padding: 20px 14px !important;
  }
  .mystery-arrival .arrival-bridge {
    font-size: 19px;
  }
  .mystery-arrival .arrival-intro {
    font-size: 24px;
  }
  .carriage-background .train-art {
    background-size: auto 110%;
    background-position: 57% center;
  }
}
.story-world .diary-page.burned-paper {
  background: none;
  border: 0;
  box-shadow: none;
  padding: 42px 38px;
  transform: none;
  min-height: 0;
  text-align: center;
}
.story-world .diary-page .diary-answer {
  font-size: 31px;
  min-height: 0;
  line-height: 1.16;
  margin-bottom: 16px;
}
.story-world .diary-page .diary-answer .ink-line {
  margin-bottom: 12px;
}
.story-world .diary-layout {
  max-width: 590px;
}
.story-world .diary-layout>h1 {
  font-size: clamp(40px,4.8vw,62px);
}
.story-world .diary-layout>.scene-footnote {
  margin-top: 27px;
}
.defence-scene {
  justify-content: center;
  isolation: isolate;
  text-align: center;
  padding: 112px 25px 115px;
}
.defence-background {
  position: absolute;
  inset: 0;
  z-index: -1;
  opacity: .6;
}
.defence-background:after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(0deg,#051119,#05111933,#05111988);
}
.defence-letter,.welcome-letter {
  max-width: 570px;
  text-align: left;
}
.defence-letter .eyebrow,.welcome-letter .eyebrow {
  font-size: 10px;
  line-height: 1.7;
  letter-spacing: .12em;
  color: #715936;
  text-align: center;
  margin-bottom: 23px;
}
.defence-letter h1,.welcome-letter h1 {
  font-size: 39px;
  text-align: center;
  line-height: 1.04;
  font-weight: 500;
  margin: 0 0 28px;
  color: #423323;
}
.defence-letter h1 em,.welcome-letter h1 em {
  font-weight: 400;
}
.defence-letter .ghostwriting,.welcome-letter .ghostwriting {
  font-size: 24px;
  line-height: 1.3;
  font-style: italic;
}
.defence-letter .signature,.welcome-letter .signature {
  font-size: 20px;
  font-style: italic;
  margin: 19px 0 22px;
}
.defence-letter .signature em,.welcome-letter .signature em {
  font-family: Pinyon,serif;
  font-size: 48px;
  font-style: normal;
  line-height: 1.3;
}
.defence-letter .story-button,.welcome-letter .story-button {
  width: 100%;
  background: #253c2d !important;
  box-shadow: inset 0 0 0 4px #253c2d !important;
  padding: 18px 15px !important;
}
.defence-letter .letter-postscript {
  font-size: 16px;
  text-align: center;
  line-height: 1.3;
  color: #726149;
  font-style: italic;
  margin: 20px 0 0;
}
.welcome-name {
  font-family: Pinyon,Cormorant,serif;
  font-size: 38px;
  margin: 0 0 12px;
  overflow-wrap: anywhere;
}
.arrival-letter-wrap {
  width: min(570px,100%);
}
.details-dialog.details-dialog {
  padding: 20px !important;
  border: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  width: min(620px,calc(100vw - 16px)) !important;
  overflow-x: hidden;
}
.details-dialog .rsvp-paper {
  width: 100%;
  padding: 37px 33px 30px;
}
.details-dialog [data-slot="dialog-close"] {
  z-index: 5;
  right: 45px;
  top: 42px;
  color: #3e3425;
}
.burned-paper button:focus-visible,.burned-paper input:focus-visible,.burned-paper select:focus-visible {
  outline: 2px solid #35533c;
  outline-offset: 4px;
}
.dark-arts-visual {
  position: absolute;
  inset: 0;
  overflow: hidden;
  background: #030a0d;
}
.dark-arts-image {
  position: absolute;
  inset: -3%;
  background-position: center;
  background-size: cover;
  animation: dark-arrival 9s ease-out both;
}
.dark-arts-reveal .dark-arts-image {
  background-position: 57% 50%;
  filter: brightness(.75);
  mask-image: linear-gradient(0deg,transparent,#000 24%,#000 90%);
}
.dark-arts-dementors .dark-arts-image {
  background-position: 22% 50%;
  filter: brightness(.68) saturate(.65);
  animation: dementor-drift 14s ease-in-out infinite alternate;
}
.spectral-mist {
  position: absolute;
  inset: -20%;
  background: radial-gradient(ellipse at 18% 68%,#73a69938,transparent 38%),radial-gradient(ellipse at 81% 32%,#25856c20,transparent 36%);
  filter: blur(18px);
  mix-blend-mode: screen;
  pointer-events: none;
  animation: mist-drift 17s ease-in-out infinite alternate;
}
.mist-two {
  animation-direction: alternate-reverse;
  animation-duration: 23s;
  transform: rotate(180deg);
  opacity: .7;
}
.ink-apparition {
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse at 50% 50%,transparent 35%,#000b 78%);
  animation: ink-reveal 2.7s ease-out both;
}
.dark-arts-defeat {
  background: transparent;
}
.dark-arts-defeat .dark-arts-image {
  animation: apparition-break 5.5s ease-in forwards;
  mask-image: radial-gradient(ellipse,#000 15%,transparent 75%);
}
.dark-arts-defeat .spectral-mist,.dark-arts-defeat .ink-apparition {
  animation: mist-vanish 4s ease-out forwards;
}
.red-spell-impact {
  position: absolute;
  left: 50%;
  top: 52%;
  width: 3px;
  height: 80%;
  transform: rotate(15deg);
  transform-origin: top;
  background: #fff5e8;
  box-shadow: 0 0 16px 8px #ef4b36,0 0 80px 20px #ee742566;
  animation: red-impact 2s ease-out both;
}
.vanishing-ash {
  position: absolute;
  inset: 0;
}
.vanishing-ash i {
  position: absolute;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: #f2d298;
  box-shadow: 0 0 9px #e2bf78;
  opacity: 0;
  animation: ash-away 2.8s ease-out forwards;
}
.visual-still * {
  animation: none !important;
}
.visual-still.dark-arts-defeat .dark-arts-image,.visual-still.dark-arts-defeat .ink-apparition,.visual-still.dark-arts-defeat .spectral-mist,.visual-still .red-spell-impact {
  display: none;
}
@keyframes dark-arrival {
  from {
    transform: scale(1.08);
    opacity: 0;
    filter: brightness(.1) blur(12px);
  }
  25% {
    opacity: 1;
  }
  to {
    transform: scale(1);
    opacity: 1;
  }
}
@keyframes dementor-drift {
  to {
    transform: scale(1.055) translateY(-1.5%);
  }
}
@keyframes mist-drift {
  to {
    translate: 6% -4%;
    scale: 1.2;
  }
}
@keyframes ink-reveal {
  from {
    background-color: #020909;
  }
  to {
    background-color: transparent;
  }
}
@keyframes apparition-break {
  0%,20% {
    opacity: 1;
    filter: brightness(.7);
  }
  40% {
    filter: brightness(1.3) blur(1px);
  }
  75% {
    opacity: .25;
    filter: blur(15px);
    transform: scale(1.07) translateY(-4%);
  }
  100% {
    opacity: 0;
    filter: blur(24px);
    transform: scale(1.13) translateY(-10%);
  }
}
@keyframes red-impact {
  0% {
    opacity: 0;
    scale: 1 .05;
  }
  30% {
    opacity: 1;
    scale: 1 1;
  }
  65%,100% {
    opacity: 0;
    scale: 4 1;
  }
}
@keyframes mist-vanish {
  to {
    opacity: 0;
  }
}
@keyframes ash-away {
  15% {
    opacity: .9;
  }
  to {
    opacity: 0;
    transform: translate(110px,-180px) scale(.3);
  }
}
.reveal-scene {
  height: 100svh;
  min-height: 790px;
  position: relative;
  isolation: isolate;
  overflow: hidden;
  text-align: center;
}
.reveal-shade {
  position: absolute;
  inset: 0;
  background: linear-gradient(0deg,#030d11 2%,#030d11e8 18%,#030d1166 45%,transparent 70%,#030d1188);
}
.reveal-inscription {
  position: absolute;
  bottom: 272px;
  left: 20px;
  right: 20px;
  text-shadow: 0 2px 28px #000;
}
.reveal-inscription .eyebrow {
  font-size: 10px;
  letter-spacing: .14em;
  line-height: 1.8;
  max-width: 480px;
  margin: 0 auto 18px;
  color: #b4d1bb;
}
.reveal-inscription h1 {
  font-family: Cinzel,serif;
  font-size: 28px;
  line-height: 1.25;
  font-weight: 400;
  margin: 0;
}
.reveal-inscription h1 em {
  font-family: Potter,serif;
  font-size: clamp(72px,10vw,125px);
  font-style: normal;
  color: #dbe7c7;
  line-height: 1.12;
  text-shadow: 0 0 50px #9cde7c44;
}
.villain-whisper {
  font-family: Pinyon,serif;
  font-size: 37px;
  margin: 12px 0 0;
  color: #ded8ba;
}
.reveal-next {
  position: absolute;
  bottom: 95px;
  left: 20px;
  right: 20px;
  opacity: 0;
  visibility: hidden;
  transition: opacity 1s;
  display: flex;
  flex-direction: column;
  align-items: center;
}
.reveal-next.is-ready {
  opacity: 1;
  visibility: visible;
}
.reveal-next>p {
  font-size: 21px;
  line-height: 1.3;
  margin: 0 0 20px;
}
.reveal-next .story-button {
  background: #112720bb !important;
}
.reveal-next .replay-link {
  font-size: 15px;
  margin-top: 10px;
}
.scene-skip {
  position: absolute;
  bottom: 112px;
  left: 50%;
  transform: translateX(-50%);
  font-size: 18px;
  border-bottom: 1px solid #ad9b6a;
  min-height: 44px;
}
.wand-chapter {
  min-height: 100svh;
}
.wand-encounter {
  position: relative;
  isolation: isolate;
  min-height: 100svh;
  padding: 108px 24px 110px;
  text-align: center;
  overflow: hidden;
}
.battle-film {
  position: absolute;
  inset: 0;
  z-index: -3;
  transition: opacity 1.8s,filter 1.8s,transform 1.8s;
}
.battle-shade {
  position: absolute;
  inset: 0;
  z-index: -2;
  background: linear-gradient(0deg,#04121cf5,#04121c35 50%,#04121cbc),radial-gradient(ellipse at 50% 50%,transparent,#020b1466);
}
.battle-heading {
  position: relative;
  max-width: 740px;
  margin: auto;
  pointer-events: none;
  text-shadow: 0 2px 14px #000;
}
.battle-heading .eyebrow {
  font-size: 10px;
  letter-spacing: .2em;
  margin: 0 0 14px;
  color: #c5d9db;
}
.battle-heading h1 {
  font-family: Potter,Cormorant,serif;
  font-size: clamp(52px,6.8vw,83px);
  font-weight: 400;
  line-height: 1;
  margin: 0;
  color: #e5f3e7;
  text-shadow: 0 0 40px #a4edff45;
}
.battle-heading>p:last-child {
  font-size: 22px;
  line-height: 1.3;
  margin: 16px auto 8px;
  max-width: 570px;
}
.wand-surface {
  position: relative;
  isolation: isolate;
  width: min(760px,100%);
  height: clamp(310px,43svh,480px);
  margin: 10px auto 0;
  touch-action: none;
  cursor: none;
  -webkit-user-select: none;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
  border-radius: 48%;
  outline-offset: -4px;
}
.wand-surface:focus-visible {
  outline: 1px solid #c6e5e744;
}
.wand-canvas,.gesture-guide {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}
.spell-ring {
  position: absolute;
  inset: 12% 16%;
  border: 1px solid #d5eef21c;
  border-radius: 50%;
  box-shadow: 0 0 60px #8cd1ee0a,inset 0 0 50px #a5d6e00a;
  pointer-events: none;
}
.spell-ring:after {
  content: "✦";
  position: absolute;
  left: calc(50% - 7px);
  top: -12px;
  font-size: 16px;
  color: #bbdbeaaa;
  text-shadow: 0 0 20px #a4dfef;
}
.gesture-guide {
  filter: drop-shadow(0 0 6px #a4e6f8);
  opacity: .55;
}
.gesture-guide path {
  fill: none;
  stroke: #d6eced;
  stroke-width: 2;
  stroke-dasharray: 6 13;
  vector-effect: non-scaling-stroke;
}
.gesture-guide circle {
  fill: #deffff;
  stroke: #c3f5ff;
  stroke-width: 3;
}
.gesture-guide .guide-arrow {
  stroke-dasharray: none;
  stroke-width: 2;
}
.gesture-guide.show-demo {
  opacity: 1;
}
.gesture-guide.show-demo path:first-child {
  stroke: #fff;
  stroke-width: 4;
  stroke-dasharray: 1800;
  stroke-dashoffset: 1800;
  animation: trace-example 2.6s ease-out 2;
}
.wand-lift {
  position: absolute;
  bottom: 8%;
  left: 0;
  right: 0;
  font-size: 16px;
  font-style: italic;
  color: #c9dfe0ba;
  pointer-events: none;
  text-shadow: 0 1px 10px #000;
}
.battle-controls {
  position: relative;
  max-width: 690px;
  margin: 0 auto;
  min-height: 148px;
}
.battle-feedback {
  font-size: 20px;
  line-height: 1.25;
  color: #d5e5e5;
  margin: 0 auto 16px;
  max-width: 520px;
  min-height: 26px;
  text-shadow: 0 1px 15px #000;
}
.spell-progress {
  display: flex;
  justify-content: center;
  gap: 32px;
  font-family: Cinzel,serif;
  font-size: 10px;
  letter-spacing: .06em;
  margin: 18px 0;
  color: #91a3ad77;
}
.spell-progress>span {
  display: flex;
  gap: 8px;
  align-items: center;
}
.spell-progress .active {
  color: #e3f8fb;
}
.spell-progress .complete {
  color: #d5bf8b;
}
.wand-help {
  display: flex;
  justify-content: center;
  gap: 25px;
  color: #becdd2;
  font-size: 16px;
}
.wand-help button {
  min-height: 44px;
  border-bottom: 1px solid #b7c9cf33;
}
.keyboard-spells {
  font-family: Arial,sans-serif;
  font-size: 11px;
  letter-spacing: .05em;
  color: #94aab3;
  margin: 14px 0 0;
}
.wand-help+.story-button {
  margin-top: 18px;
}
.spell-in-flight {
  font-family: Pinyon,serif;
  font-size: 40px;
  color: #e0f6fd;
  margin: 24px 0;
}
.protego-dome {
  position: absolute;
  inset: 9% 12%;
  border: 2px solid #d1f8ff;
  border-radius: 50%;
  background: radial-gradient(ellipse,transparent 45%,#a9f2ff29);
  box-shadow: 0 0 50px #a5e9ff5c,inset 0 0 80px #9be5ff25;
  animation: shield-rise 1.3s ease-out both;
  display: grid;
  place-items: center;
  pointer-events: none;
}
.protego-dome span {
  font-family: Pinyon,serif;
  font-size: 45px;
  color: #e5fcff;
  text-shadow: 0 0 15px #8ad7ff;
}
.dementors-flee {
  opacity: 0;
  transform: scale(.83) translateY(-7%);
  filter: blur(18px) brightness(1.6);
}
.patronus-burst {
  position: absolute;
  inset: -10% 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  color: #d4faff;
  filter: drop-shadow(0 0 10px #b4f9ff) drop-shadow(0 0 35px #7ddef799);
  animation: patronus-rise 2.6s ease-out both;
  pointer-events: none;
}
.patronus-burst:before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse,#9cdeef40,transparent 67%);
  border-radius: 50%;
  animation: patronus-wave 2s ease-out both;
}
.patronus-burst svg {
  width: 85%;
  height: 85%;
  max-height: 380px;
  overflow: visible;
}
.patronus-burst span {
  font-family: Pinyon,serif;
  font-size: 33px;
  color: #e4ffff;
  margin-top: -10px;
}
.disarming-beam {
  position: absolute;
  left: 50%;
  top: 45%;
  width: 5px;
  height: 65%;
  background: #ffe9bc;
  box-shadow: 0 0 18px 12px #f5ab4b88,0 0 100px 30px #ed694833;
  transform: rotate(16deg);
  transform-origin: top;
  animation: red-impact 1.4s ease-out both;
  pointer-events: none;
}
.phase-finale {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  min-height: max(800px,100svh);
}
.phase-finale .battle-heading {
  margin: 0 auto;
  padding-top: 5vh;
}
.phase-finale .battle-heading h1 {
  font-family: Cormorant,serif;
  font-size: clamp(44px,7vw,74px);
}
.finale-copy {
  padding-top: 300px;
  position: relative;
  animation: finale-arrive 1.6s 3.5s both;
}
.finale-copy p {
  font-size: 25px;
  line-height: 1.3;
  margin: 0 0 24px;
  text-shadow: 0 1px 18px #000;
}
.encounter-still * {
  animation: none !important;
  transition: none !important;
}
.encounter-still .finale-copy {
  opacity: 1;
}
.encounter-still .protego-dome,.encounter-still .patronus-burst {
  opacity: 1;
}
@keyframes shield-rise {
  from {
    transform: scale(.35);
    opacity: 0;
  }
  60% {
    opacity: 1;
  }
  to {
    transform: scale(1);
    opacity: 1;
  }
}
@keyframes patronus-rise {
  from {
    transform: scale(.45);
    opacity: 0;
  }
  40% {
    opacity: 1;
  }
  to {
    transform: scale(1);
    opacity: 1;
  }
}
@keyframes patronus-wave {
  from {
    transform: scale(.2);
    opacity: 0;
  }
  50% {
    opacity: .8;
  }
  to {
    transform: scale(2.1);
    opacity: 0;
  }
}
@keyframes trace-example {
  to {
    stroke-dashoffset: 0;
  }
}
@keyframes finale-arrive {
  from {
    opacity: 0;
    transform: translateY(12px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@media (max-width:640px) {
  .story-world .diary-page.burned-paper {
    padding: 35px 24px 30px;
  }
  .story-world .diary-layout {
    max-width: 480px;
  }
  .story-world .diary-page .diary-answer {
    font-size: 29px;
  }
  .story-world .diary-scene {
    padding-left: 20px;
    padding-right: 20px;
    padding-top: 100px;
  }
  .story-world .diary-layout>h1 {
    font-size: 42px;
  }
  .story-world .diary-page .anagram-letters {
    gap: 7px;
  }
  .defence-scene {
    padding: 100px 22px 110px;
    align-items: center;
  }
  .defence-letter,.welcome-letter {
    padding: 40px 25px;
  }
  .defence-letter h1,.welcome-letter h1 {
    font-size: 33px;
  }
  .defence-letter .ghostwriting,.welcome-letter .ghostwriting {
    font-size: 22px;
  }
  .defence-letter .eyebrow,.welcome-letter .eyebrow {
    font-size: 9px;
  }
  .welcome-name {
    font-size: 34px;
  }
  .defence-letter .story-button,.welcome-letter .story-button {
    font-size: 14px !important;
  }
  .details-dialog.details-dialog {
    padding: 17px !important;
  }
  .details-dialog .rsvp-paper {
    padding: 33px 22px 25px;
  }
  .details-dialog [data-slot="dialog-close"] {
    right: 32px;
    top: 32px;
  }
  .reveal-scene {
    min-height: 780px;
  }
  .reveal-inscription {
    bottom: 310px;
  }
  .reveal-inscription .eyebrow {
    font-size: 9px;
    max-width: 280px;
  }
  .reveal-inscription h1 {
    font-size: 22px;
  }
  .reveal-inscription h1 em {
    font-size: 80px;
  }
  .villain-whisper {
    font-size: 30px;
  }
  .reveal-next {
    bottom: 94px;
  }
  .reveal-next>p {
    font-size: 20px;
  }
  .reveal-next .story-button {
    padding: 18px 24px !important;
  }
  .dark-arts-reveal .dark-arts-image {
    background-position: 57% 50%;
  }
  .wand-encounter {
    padding: 104px 18px 96px;
  }
  .battle-heading h1 {
    font-size: clamp(47px,13vw,60px);
  }
  .battle-heading>p:last-child {
    font-size: 20px;
    margin-top: 14px;
    max-width: 330px;
  }
  .battle-heading .eyebrow {
    font-size: 9px;
    letter-spacing: .1em;
    margin-bottom: 14px;
  }
  .wand-surface {
    height: clamp(280px,36svh,350px);
    margin: 3px auto 0;
    width: 100%;
  }
  .spell-ring {
    inset: 15% 8%;
  }
  .battle-feedback {
    font-size: 18px;
    max-width: 330px;
    min-height: 45px;
    margin-bottom: 11px;
  }
  .spell-progress {
    gap: 17px;
    font-size: 9px;
    letter-spacing: 0;
    margin: 14px 0;
  }
  .spell-progress>span {
    gap: 5px;
  }
  .spell-progress>span>span {
    max-width: 89px;
    line-height: 1.5;
  }
  .wand-help {
    gap: 22px;
    font-size: 15px;
  }
  .keyboard-spells {
    font-size: 10px;
    margin-top: 11px;
  }
  .battle-controls .story-button {
    font-size: 14px !important;
    padding: 16px 20px !important;
  }
  .wand-lift {
    font-size: 15px;
    bottom: 8%;
  }
  .patronus-burst svg {
    width: 100%;
    height: 85%;
  }
  .patronus-burst span {
    font-size: 29px;
  }
  .phase-finale {
    min-height: 810px;
  }
  .phase-finale .battle-heading h1 {
    font-size: 46px;
  }
  .finale-copy p {
    font-size: 23px;
  }
  .finale-copy {
    padding-top: 330px;
  }
}
@media (prefers-reduced-motion:reduce) {
  .dark-arts-defeat .dark-arts-image,.dark-arts-defeat .ink-apparition,.dark-arts-defeat .spectral-mist,.dark-arts-defeat .red-spell-impact {
    display: none;
  }
  .reveal-next,.finale-copy {
    transition: none;
  }
}
.dark-arts-duel .dark-arts-image,.dark-arts-defeat .dark-arts-image {
  background-position: 61% 50%;
  filter: brightness(.8);
}
.story-world .defence-scene {
  padding: 112px 25px 115px;
  align-items: center;
}
@media (max-width:640px) {
  .story-world .defence-scene {
    padding: 100px 22px 110px;
  }
  .story-world .diary-scene {
    align-items: center;
  }
  .story-world .warning-letter {
    padding: 43px 23px 42px;
  }
  .story-world .letter-scene {
    padding: 98px 22px 115px;
  }
  .story-world .anagram-letters button {
    min-width: 36px;
    min-height: 44px;
  }
  .story-world .anagram-slots {
    gap: 5px 8px;
  }
  .story-world .anagram-slot {
    width: 22px;
  }
}
.story-world .ghostwriting.drawn-ink {
  font-family: Pinyon,Cormorant,serif;
  font-style: normal;
  font-size: 31px;
  line-height: 1.3;
  letter-spacing: .005em;
}
.story-world .diary-page .ghostwriting.drawn-ink {
  font-size: 32px;
  line-height: 1.2;
}
.drawn-ink .ink-line {
  position: relative;
  isolation: isolate;
  margin-bottom: 17px;
}
.drawn-ink .ink-written {
  white-space: pre-wrap;
  will-change: clip-path;
}
.drawn-ink[data-writing="active"] .ink-written {
  clip-path: inset(0 100% 0 0);
}
.drawn-ink[data-writing="complete"] .ink-written {
  clip-path: none !important;
}
.ink-pen {
  position: absolute;
  left: 0;
  top: 0;
  width: 26px;
  height: 64px;
  pointer-events: none;
  opacity: 0;
  transform-origin: 0 0;
  z-index: 3;
  filter: drop-shadow(1px 2px 2px #382c1b22);
}
.ink-pen svg {
  display: block;
  width: 26px;
  height: 64px;
  transform: translate(-3px,-61px);
}
.drawn-ink[data-writing="complete"] .ink-pen {
  display: none;
}
.story-world .warning-letter .ghostwriting.drawn-ink {
  font-size: 31px;
  line-height: 1.26;
}
.story-world .ghostwriting.drawn-ink .ink-reveal {
  font-family: Cormorant,serif;
  font-size: 16px;
  font-style: italic;
  letter-spacing: 0;
}
.story-route {
  position: fixed;
  inset: 0;
  z-index: 60;
  overflow: hidden;
  background: #061015;
  pointer-events: auto;
  animation: route-arrive .35s ease-out both;
}
.story-route .scene-film {
  inset: 0;
  transform: scale(1.02);
}
.route-shade {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(0deg,#031016d9,transparent 50%,#06101555);
}
.story-route>p {
  position: absolute;
  left: 22px;
  right: 22px;
  bottom: 18%;
  font-family: Pinyon,Cormorant,serif;
  text-align: center;
  font-size: clamp(31px,4vw,52px);
  color: #eee2c8;
  text-shadow: 0 2px 20px #000;
  margin: 0;
  animation: route-caption 1s .3s both;
}
.route-skip {
  position: absolute;
  bottom: max(35px,env(safe-area-inset-bottom));
  left: 50%;
  transform: translateX(-50%);
  font-size: 16px;
  border-bottom: 1px solid #b6a78170;
  min-height: 44px;
  letter-spacing: .04em;
  color: #eadfc9;
}
.route-letter {
  background: radial-gradient(ellipse at center,#cfb48222,#071216ee);
  animation: letter-unseal .85s ease both;
}
.route-letter>p,.route-letter .route-skip {
  display: none;
}
.route-departure {
  animation: train-depart 2.4s ease both;
}
.route-departure .scene-film {
  animation: train-pull 2.4s ease-in both;
}
.route-burn {
  background: #010705;
  animation: burn-takeover 4.65s linear both;
}
.route-burn .scene-film {
  filter: contrast(1.06);
  animation: burn-film .6s .25s both;
}
.route-burn>p {
  bottom: 13%;
  font-size: 30px;
  color: #e6d3a7;
  animation: route-caption .8s 1.5s both;
}
.route-burn .route-shade {
  background: linear-gradient(0deg,#02080688,transparent 30%,#02080633);
}
.transition-burn .diary-page {
  animation: letter-catches-fire 1.6s ease-in both;
}
.transition-burn .diary-page:after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 5;
  background: radial-gradient(ellipse,#04100b 45%,#7b2a08 48%,#ffbd47 49%,#ef642944 52%,transparent 54%);
  transform: scale(0);
  animation: burn-hole 1.7s ease-in forwards;
  pointer-events: none;
}
.transition-burn .diary-page .paper-embers i {
  opacity: 1;
  scale: 4;
  animation-duration: .8s;
}
.route-embers {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.route-embers i {
  position: absolute;
  top: 58%;
  width: 3px;
  height: 5px;
  border-radius: 50%;
  background: #ffc77c;
  box-shadow: 0 0 15px #ff914d;
  opacity: 0;
  animation: burn-sparks 2.3s ease-out both;
}
.route-frost {
  background: #07121b;
  animation: frost-transit 1.9s ease both;
}
.frost-veins {
  position: absolute;
  inset: 0;
  background: repeating-conic-gradient(from 12deg at 0 0,transparent 0deg 11deg,#bcf4ff25 12deg,transparent 13deg 24deg),repeating-conic-gradient(from 34deg at 100% 100%,transparent 0deg 14deg,#c2f3ff30 15deg,transparent 16deg 28deg);
  mask-image: radial-gradient(ellipse,transparent 22%,#000 90%);
  filter: blur(.5px);
  animation: freeze-in 1.5s ease both;
}
.frost-breath {
  position: absolute;
  inset: -10%;
  background: radial-gradient(ellipse at 50% 60%,#8fb8c330,transparent 50%);
  filter: blur(20px);
  animation: cold-breath 1.6s ease-in both;
}
.route-doors {
  background: #170f08;
  animation: doors-transit 2.2s ease both;
}
.castle-door {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 50.1%;
  background: linear-gradient(90deg,#0d100f,#171c1b 45%,#2a2920 90%,#5d5436);
  box-shadow: inset 0 0 0 14px #0b100fa8,inset 0 0 0 17px #655a393d;
  transform-origin: center;
}
.castle-door:after {
  content: "";
  position: absolute;
  inset: 8% 12%;
  border: 1px solid #92835738;
  border-radius: 38% 38% 0 0;
}
.door-left {
  left: 0;
  animation: door-left-open 2s ease-in-out both;
}
.door-right {
  right: 0;
  scale: -1 1;
  animation: door-right-open 2s ease-in-out both;
}
.route-doors>p {
  animation: route-caption .7s 1s both;
}
@keyframes route-arrive {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes route-caption {
  from {
    opacity: 0;
    transform: translateY(8px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes letter-unseal {
  0% {
    opacity: 0;
    filter: blur(6px);
  }
  45% {
    opacity: 1;
  }
  100% {
    opacity: 0;
    filter: blur(0);
  }
}
@keyframes train-depart {
  0% {
    opacity: 0;
    clip-path: inset(0 100% 0 0);
  }
  25% {
    opacity: 1;
    clip-path: inset(0);
  }
  83% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}
@keyframes train-pull {
  from {
    transform: scale(1.08) translateX(3%);
  }
  to {
    transform: scale(1.14) translateX(-3%);
  }
}
@keyframes burn-takeover {
  0% {
    opacity: 0;
  }
  18%,87% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}
@keyframes burn-film {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes letter-catches-fire {
  0% {
    filter: drop-shadow(0 18px 35px #0008);
  }
  40% {
    filter: drop-shadow(0 0 40px #e08a20aa) brightness(1.12);
  }
  100% {
    filter: brightness(.2);
    transform: scale(.95);
    opacity: 0;
  }
}
@keyframes burn-hole {
  to {
    transform: scale(3.4);
  }
}
@keyframes burn-sparks {
  10% {
    opacity: 1;
  }
  to {
    transform: translate(40px,-65vh) rotate(90deg);
    opacity: 0;
  }
}
@keyframes frost-transit {
  0% {
    opacity: 0;
  }
  35%,80% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}
@keyframes freeze-in {
  from {
    opacity: 0;
    transform: scale(1.5);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
@keyframes cold-breath {
  from {
    opacity: 0;
    transform: scale(.8);
  }
  to {
    opacity: 1;
    transform: scale(1.4);
  }
}
@keyframes doors-transit {
  0%,82% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}
@keyframes door-left-open {
  0%,8% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(-100%);
  }
}
@keyframes door-right-open {
  0%,8% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(100%);
  }
}
.wand-encounter.phase-attack,.wand-encounter.phase-counterattack {
  min-height: max(800px,100svh);
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.phase-attack .battle-heading,.phase-counterattack .battle-heading {
  margin: 0 auto;
  width: 100%;
  padding-top: 0;
}
.phase-attack .battle-heading h1 {
  font-family: Cormorant,serif;
  font-size: clamp(43px,5.7vw,70px);
}
.phase-counterattack .battle-heading {
  animation: patronus-title 6s ease both;
}
.phase-counterattack .battle-shade {
  background: linear-gradient(0deg,#031219e0,transparent 35%,transparent 74%,#03121999);
}
.battle-cinematic-controls {
  position: relative;
  padding-top: 360px;
  max-width: 600px;
  margin: 0 auto;
  width: 100%;
}
.battle-cinematic-controls>p {
  font-size: 23px;
  line-height: 1.3;
  color: #e0eff1;
  text-shadow: 0 2px 16px #000;
  margin: 0 0 24px;
}
.phase-counterattack .battle-cinematic-controls {
  animation: patronus-caption 6s ease both;
}
.battle-cinematic-controls:focus-within {
  opacity: 1 !important;
  animation: none;
}
.battle-film .dementor-film video {
  object-position: 52% 50%;
}
.encounter-0.phase-effect .battle-film {
  animation: shield-recoil 1.8s ease-out both;
}
.attack-frost {
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  box-shadow: inset 0 0 95px #b9eeff26;
  background: radial-gradient(ellipse at center,transparent 45%,#709bae20);
  animation: threat-breathing 4s ease-in-out infinite alternate;
}
.wand-charge {
  position: absolute;
  bottom: 2%;
  left: 34%;
  right: 34%;
  height: 2px;
  overflow: hidden;
  background: #c9edf51b;
  pointer-events: none;
}
.wand-charge>span {
  display: block;
  height: 100%;
  background: #e4ffff;
  box-shadow: 0 0 9px 4px #b7edf6;
  transition: width .08s linear;
}
.shield-shockwave {
  position: absolute;
  inset: 0;
  z-index: 3;
  pointer-events: none;
  background: radial-gradient(ellipse,transparent 30%,#b9f3ff18 48%,#dafcff77 50%,transparent 53%);
  animation: shield-impact 1.1s ease-out both;
}
.phase-effect .protego-dome {
  box-shadow: 0 0 90px #a5e9ff88,inset 0 0 100px #9be5ff3d;
}
.encounter-1.phase-ready .wand-surface {
  height: clamp(240px,31svh,340px);
}
.encounter-1.phase-ready .battle-controls>.replay-link,.encounter-1.phase-ready .battle-controls .replay-link {
  display: block;
  margin: 13px auto 0;
}
.encounter-1.phase-ready .spell-ring {
  opacity: 0;
}
@keyframes threat-breathing {
  to {
    box-shadow: inset 0 0 135px #a6dffb42;
    filter: brightness(1.08);
  }
}
@keyframes shield-impact {
  from {
    transform: scale(.3);
    opacity: 0;
  }
  25% {
    opacity: 1;
  }
  to {
    transform: scale(2.8);
    opacity: 0;
  }
}
@keyframes shield-recoil {
  0% {
    transform: scale(1);
    filter: brightness(1);
  }
  25% {
    filter: brightness(1.5);
  }
  100% {
    transform: scale(.93);
    filter: brightness(.7);
  }
}
@keyframes patronus-title {
  0%,12% {
    opacity: 1;
  }
  30%,75% {
    opacity: .18;
  }
  100% {
    opacity: 1;
  }
}
@keyframes patronus-caption {
  0%,55% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}
@media (max-width:640px) {
  .story-world .ghostwriting.drawn-ink,.story-world .warning-letter .ghostwriting.drawn-ink {
    font-size: 29px;
    line-height: 1.26;
  }
  .story-world .diary-page .ghostwriting.drawn-ink {
    font-size: 30px;
  }
  .ink-pen {
    scale: .86;
  }
  .story-route>p {
    font-size: 34px;
  }
  .route-burn>p {
    font-size: 28px;
    bottom: 17%;
  }
  .route-burn .scene-film video {
    object-fit: cover;
    object-position: 50% 50%;
  }
  .battle-cinematic-controls {
    padding-top: 340px;
  }
  .battle-cinematic-controls>p {
    font-size: 22px;
  }
  .phase-attack .battle-heading h1 {
    font-size: 45px;
  }
  .phase-counterattack .battle-heading h1 {
    font-size: 51px;
  }
  .phase-counterattack .battle-controls {
    margin-bottom: 0;
  }
}
@media (max-width:640px) {
  .battle-film .patronus-film {
    background-color: #06141a;
  }
  .battle-film .patronus-film:before {
    content: "";
    position: absolute;
    inset: -5%;
    background: inherit;
    background-size: cover;
    background-position: center;
    filter: blur(28px) brightness(.3);
    transform: scale(1.08);
  }
  .battle-film .patronus-film video {
    position: relative;
    object-fit: contain;
    z-index: 1;
  }
}
@media (prefers-reduced-motion:reduce) {
  .ink-pen {
    display: none;
  }
  .drawn-ink .ink-written {
    clip-path: none !important;
  }
  .attack-frost,.shield-shockwave {
    animation: none !important;
  }
  .phase-counterattack .battle-heading,.phase-counterattack .battle-cinematic-controls {
    animation: none;
    opacity: 1;
  }
}
.story-world .ghostwriting.drawn-ink,.story-world .warning-letter .ghostwriting.drawn-ink,.story-world .diary-page .ghostwriting.drawn-ink {
  font-family: Cormorant,Georgia,serif;
  font-size: 25px;
  line-height: 1.4;
  font-style: italic;
  letter-spacing: 0;
}
.story-world .diary-page .ghostwriting.drawn-ink {
  font-size: 28px;
}
.story-route>p {
  font-family: Cormorant,Georgia,serif;
  font-size: clamp(28px,3vw,42px);
  max-width: 640px;
  margin: 0 auto;
  line-height: 1.25;
}
.route-letter {
  animation: slow-letter 8.5s ease both;
  background: #071216;
}
.route-letter>p,.route-letter .route-skip {
  display: block;
}
.route-letter>p {
  animation: route-caption 1.5s 2s both;
}
.route-departure,.route-departure .scene-film {
  animation-duration: 9s;
}
.route-burn {
  animation-duration: 8s;
}
.route-burn .scene-film {
  animation-duration: 1.2s;
}
.route-burn>p {
  animation-delay: 2s;
}
.route-frost {
  animation-duration: 4.5s;
}
.frost-veins,.frost-breath {
  animation-duration: 3.5s;
}
.route-doors {
  animation-duration: 8.5s;
}
.castle-door.door-left,.castle-door.door-right {
  animation-duration: 6s;
}
@keyframes slow-letter {
  0% {
    opacity: 0;
  }
  15%,90% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}
@media (max-width:640px) {
  .story-world .ghostwriting.drawn-ink,.story-world .warning-letter .ghostwriting.drawn-ink {
    font-size: 23px;
    line-height: 1.4;
  }
  .story-world .diary-page .ghostwriting.drawn-ink {
    font-size: 26px;
  }
  .story-route>p {
    font-size: 29px;
  }
}
.story-sequence .film-chapter {
  position: relative;
  isolation: isolate;
  min-height: max(760px,100svh);
  padding: 120px 6% 112px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  text-align: center;
  overflow: hidden;
  background: #061015;
}
.story-sequence .film-chapter>.scene-film {
  z-index: -3;
}
.chapter-film-shade {
  position: absolute;
  inset: 0;
  z-index: -2;
  background: linear-gradient(0deg,#031016ed,transparent 44%,#07111617 65%,#031016a6);
  pointer-events: none;
}
.film-chapter-heading,.film-chapter-copy {
  width: min(700px,100%);
  margin: 0 auto;
  position: relative;
  text-shadow: 0 2px 22px #000;
}
.film-chapter-heading .eyebrow {
  margin: 0 0 18px;
  font-size: 10px;
}
.film-chapter-heading h1 {
  font-family: Cormorant,Georgia,serif;
  font-size: clamp(45px,5.7vw,74px);
  font-weight: 400;
  line-height: 1.04;
  color: #efe5d4;
  margin: 0;
}
.film-chapter-copy {
  padding-top: 36vh;
}
.film-chapter-copy>p {
  font-size: 26px;
  line-height: 1.35;
  max-width: 560px;
  margin: 0 auto 25px;
}
.film-chapter-copy .replay-link {
  display: block;
  margin: 12px auto 0;
}
.film-chapter-copy .film-status {
  font-family: Cormorant,serif;
  font-size: 18px;
  margin: 15px auto 0;
  color: #c3c8c4;
}
.story-sequence .portrait-chapter .scene-film:before,.story-sequence .duel-film:before {
  content: "";
  position: absolute;
  inset: -5%;
  background: inherit;
  background-size: cover;
  background-position: center;
  filter: blur(35px) brightness(.33);
  transform: scale(1.08);
}
.story-sequence .portrait-chapter .scene-film video,.story-sequence .duel-film video {
  position: relative;
  object-fit: contain;
  z-index: 1;
}
.story-sequence .transition-burn .diary-page,.story-sequence.transition-burn .diary-page {
  animation-duration: 2.6s;
}
.story-sequence.transition-burn .diary-page:after {
  animation-duration: 2.5s;
}
.timed-duel {
  position: relative;
  isolation: isolate;
  min-height: max(780px,100svh);
  overflow: hidden;
  text-align: center;
  background: #030a0e;
  color: #eaf0e8;
}
.duel-poster {
  position: absolute;
  inset: 0;
  z-index: -4;
  background-size: cover;
  background-position: center;
  filter: brightness(.36);
}
.story-sequence .duel-film {
  z-index: -3;
}
.duel-vignette {
  position: absolute;
  inset: 0;
  z-index: -2;
  background: linear-gradient(0deg,#041218f0,transparent 39%,transparent 59%,#041019b5);
  pointer-events: none;
}
.duel-brief {
  width: min(640px,100%);
  margin: 0 auto;
  padding: 115px 26px 115px;
  text-shadow: 0 2px 22px #000;
}
.duel-brief .eyebrow {
  font-size: 10px;
  margin-bottom: 22px;
  color: #c8c2ad;
}
.duel-brief h1 {
  font-size: clamp(42px,5vw,65px);
  font-weight: 400;
  line-height: 1.04;
  margin: 0 0 23px;
  color: #ece3d0;
}
.duel-brief>p:not(.eyebrow) {
  font-size: 23px;
  line-height: 1.35;
  max-width: 480px;
  margin: 0 auto 24px;
}
.spell-rehearsal {
  margin: 24px auto 30px;
  padding: 22px 0 10px;
  border-top: 1px solid #bed5d426;
  border-bottom: 1px solid #bed5d426;
}
.spell-rehearsal svg {
  height: 83px;
  width: 139px;
  color: var(--spell-color);
  filter: drop-shadow(0 0 9px var(--spell-color));
  margin: auto;
}
.spell-rehearsal path {
  fill: none;
  stroke: currentColor;
  stroke-width: 2.5;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.spell-rehearsal h2 {
  font-family: Cormorant,serif;
  font-size: 32px;
  font-weight: 400;
  margin: 13px 0 5px;
  color: var(--spell-color);
}
.spell-rehearsal p {
  font-size: 20px;
  line-height: 1.35;
  margin: 0 0 18px;
}
.duel-brief>p.duel-fineprint {
  font-size: 17px;
  line-height: 1.4;
  margin: 20px auto 0;
  color: #b0c2c3;
}
.duel-hud {
  position: relative;
  z-index: 2;
  padding: 107px 20px 0;
  max-width: 720px;
  margin: auto;
  pointer-events: none;
  text-shadow: 0 2px 20px #000;
}
.duel-hud .eyebrow {
  font-size: 10px;
  letter-spacing: .18em;
  margin: 0 0 13px;
  color: #d0d7cf;
}
.duel-hud h1 {
  font-family: Potter,Cormorant,serif;
  font-size: clamp(45px,6vw,70px);
  font-weight: 400;
  line-height: 1.1;
  color: var(--spell-color);
  margin: 0;
}
.duel-hud>p:last-of-type {
  font-size: 21px;
  line-height: 1.35;
  margin: 12px 0 18px;
}
.duel-clock {
  display: flex;
  gap: 13px;
  align-items: center;
  justify-content: center;
  color: #d9e9e9;
  width: min(250px,72vw);
  margin: auto;
  font-family: Arial,sans-serif;
  font-size: 16px;
  font-variant-numeric: tabular-nums;
}
.duel-clock>span {
  min-width: 25px;
  text-align: left;
}
.duel-clock>div {
  height: 3px;
  flex: 1;
  background: #9eb1ac33;
  overflow: hidden;
}
.duel-clock i {
  display: block;
  width: 100%;
  height: 100%;
  background: var(--spell-color);
  transform-origin: left;
  transition: transform .2s linear;
}
.duel-clock.time-critical {
  color: #ffa988;
}
.duel-clock.time-critical i {
  background: #ff9b71;
}
.duel-wand {
  position: absolute;
  z-index: 3;
  top: 30%;
  bottom: 20%;
  left: 50%;
  transform: translateX(-50%);
  width: min(760px,96%);
  touch-action: none;
  user-select: none;
  -webkit-user-select: none;
  -webkit-tap-highlight-color: transparent;
  cursor: crosshair;
  border-radius: 20%;
  outline-offset: -6px;
}
.duel-wand:focus-visible {
  outline: 1px solid #c1e7e627;
}
.duel-wand canvas,.duel-gesture-guide {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}
.duel-gesture-guide {
  opacity: .3;
  filter: drop-shadow(0 0 7px var(--spell-color));
}
.duel-gesture-guide path {
  fill: none;
  stroke: var(--spell-color);
  stroke-width: 2;
  stroke-dasharray: 5 12;
  stroke-linecap: round;
  stroke-linejoin: round;
  vector-effect: non-scaling-stroke;
}
.duel-energy {
  position: absolute;
  left: 35%;
  right: 35%;
  bottom: 0;
  height: 2px;
  background: #c9edf515;
  pointer-events: none;
}
.duel-energy i {
  display: block;
  height: 100%;
  background: var(--spell-color);
  box-shadow: 0 0 12px var(--spell-color);
  transition: width .08s linear;
}
.duel-help {
  position: absolute;
  z-index: 4;
  left: 20px;
  right: 20px;
  bottom: 94px;
  max-width: 650px;
  margin: auto;
}
.duel-help>p {
  font-size: 19px;
  line-height: 1.25;
  min-height: 24px;
  margin: 0 auto 12px;
  max-width: 490px;
  text-shadow: 0 2px 15px #000;
}
.duel-help>div {
  display: flex;
  gap: 22px;
  justify-content: center;
  align-items: center;
  color: #b4c8c9;
  font-size: 15px;
}
.duel-help>div>button {
  min-height: 40px;
  border-bottom: 1px solid #b5c2bd40;
}
.duel-help>div>span {
  font-family: Arial,sans-serif;
  font-size: 10px;
}
.duel-help .assisted-cast {
  display: block;
  margin: 10px auto 0;
  padding: 10px 20px;
  background: #07151ee0;
  border: 1px solid #b2c9c477;
  color: var(--spell-color);
  min-height: 44px;
  font-size: 18px;
}
.duel-hold {
  position: absolute;
  inset: 0;
  z-index: 5;
  background: #031015d9;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 28px;
}
.duel-hold>p {
  font-size: 26px;
  line-height: 1.35;
  max-width: 420px;
  margin: 0 0 30px;
}
.duel-death {
  position: absolute;
  inset: 0;
  z-index: 5;
  background: radial-gradient(ellipse at center,#091719e8,#000);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 100px 26px;
  animation: duel-darken 1.6s ease both;
}
.duel-death .eyebrow {
  color: #bc9482;
  font-size: 11px;
  margin: 0 0 24px;
}
.duel-death h1 {
  font-size: clamp(45px,6vw,72px);
  font-weight: 400;
  line-height: 1.05;
  margin: 0 0 25px;
  max-width: 650px;
  color: #e3e0d5;
}
.duel-death>p:not(.eyebrow) {
  max-width: 440px;
  font-size: 23px;
  line-height: 1.4;
  color: #a9b5b4;
  margin: 0 0 32px;
}
.duel-death>span {
  font-size: 15px;
  color: #9babac;
  margin-top: 22px;
}
.duel-victory-heading {
  position: relative;
  padding: 115px 25px 0;
  text-shadow: 0 2px 25px #000;
}
.duel-victory-heading .eyebrow {
  font-size: 11px;
  color: var(--spell-color);
  margin: 0 0 17px;
}
.duel-victory-heading h1 {
  font-size: clamp(42px,5vw,65px);
  font-weight: 400;
  line-height: 1.05;
  margin: 0;
}
.duel-victory-copy {
  position: absolute;
  bottom: 115px;
  left: 25px;
  right: 25px;
  max-width: 620px;
  margin: auto;
  opacity: 0;
  visibility: hidden;
  transition: opacity 1.2s;
}
.duel-victory-copy.victory-ready {
  opacity: 1;
  visibility: visible;
}
.duel-victory-copy>p {
  font-size: 25px;
  line-height: 1.3;
  margin: 0 0 24px;
  text-shadow: 0 2px 20px #000;
}
.duel-victory-copy .replay-link {
  display: block;
  margin: 14px auto 0;
}
.duel-victory-copy .film-status {
  font-size: 17px;
  margin-top: 17px;
}
.duel-paused * {
  animation-play-state: paused !important;
}
@keyframes duel-darken {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@media (max-width:640px) {
  .story-sequence .film-chapter {
    padding: 106px 23px 103px;
    min-height: max(720px,100svh);
  }
  .film-chapter-heading h1 {
    font-size: 45px;
  }
  .film-chapter-heading .eyebrow {
    font-size: 9px;
    letter-spacing: .16em;
    line-height: 1.5;
  }
  .film-chapter-copy {
    padding-top: 34vh;
  }
  .film-chapter-copy>p {
    font-size: 23px;
    line-height: 1.3;
  }
  .film-chapter-copy .story-button {
    font-size: 14px !important;
    padding: 19px 21px !important;
  }
  .story-sequence .portrait-chapter .scene-film video,.story-sequence .duel-film video {
    object-fit: cover;
    object-position: center;
  }
  .story-sequence .story-header .chapter-name {
    font-size: 9px;
    letter-spacing: .07em;
  }
  .story-sequence .chapter-dots {
    gap: 7px;
  }
  .timed-duel {
    min-height: max(760px,100svh);
  }
  .duel-brief {
    padding: 110px 23px 113px;
  }
  .duel-brief h1 {
    font-size: 43px;
  }
  .duel-brief>p:not(.eyebrow) {
    font-size: 21px;
  }
  .spell-rehearsal {
    margin: 22px auto 25px;
    padding-top: 19px;
  }
  .spell-rehearsal h2 {
    font-size: 31px;
  }
  .spell-rehearsal p {
    font-size: 20px;
  }
  .duel-brief .story-button {
    font-size: 14px !important;
    padding: 18px 22px !important;
  }
  .duel-hud {
    padding-top: 102px;
  }
  .duel-hud h1 {
    font-size: 49px;
  }
  .duel-hud>p:last-of-type {
    font-size: 19px;
    max-width: 315px;
    margin: 12px auto 16px;
  }
  .duel-hud .eyebrow {
    font-size: 9px;
  }
  .duel-wand {
    top: 32%;
    bottom: 22%;
  }
  .duel-help {
    bottom: 92px;
    left: 22px;
    right: 22px;
  }
  .duel-help>p {
    font-size: 18px;
  }
  .duel-help>div {
    gap: 19px;
  }
  .duel-death h1 {
    font-size: 44px;
  }
  .duel-death>p:not(.eyebrow) {
    font-size: 22px;
  }
  .duel-victory-heading {
    padding-top: 110px;
  }
  .duel-victory-heading h1 {
    font-size: 43px;
  }
  .duel-victory-copy {
    bottom: 112px;
  }
  .duel-victory-copy>p {
    font-size: 23px;
  }
  .duel-victory-copy .story-button {
    font-size: 14px !important;
    padding: 18px 22px !important;
  }
}
@media (prefers-reduced-motion:reduce) {
  .duel-death {
    animation: none;
  }
  .duel-victory-copy,.duel-clock i {
    transition: none;
  }
}
.story-sequence .full-frame-chapter>.scene-film:before {
  content: "";
  position: absolute;
  inset: -5%;
  background: inherit;
  background-size: cover;
  background-position: center;
  filter: blur(32px) brightness(.28);
}
.story-sequence .full-frame-chapter>.scene-film video {
  position: relative;
  object-fit: contain;
  object-position: center;
  z-index: 1;
  transform: none;
}
.story-sequence .full-frame-chapter .chapter-film-shade {
  background: linear-gradient(0deg,#031016ed,transparent 32%,transparent 73%,#031016ad);
}
.apparition-chapter>.dark-arts-visual {
  z-index: -3;
}
.apparition-chapter .dark-arts-image {
  animation-duration: 4s;
}
.story-sequence .duel-film.frame-contain video {
  object-fit: contain;
}
.story-sequence .duel-film.frame-cover video {
  object-fit: cover;
  object-position: 52% 50%;
}
.duel-artwork {
  position: absolute;
  inset: 0;
  z-index: -3;
}
.duel-artwork .dark-arts-duel .dark-arts-image {
  animation: none;
  opacity: 1;
  filter: brightness(.7);
}
.duel-artwork .dark-arts-duel .ink-apparition {
  display: none;
}
.duel-artwork .dark-arts-defeat .red-spell-impact {
  background: #efffe4;
  box-shadow: 0 0 19px 11px #72ed46,0 0 100px 27px #4df84188;
}
.gathering-curse {
  position: absolute;
  inset: 0;
  opacity: var(--attack-progress);
  background: radial-gradient(ellipse at 57% 44%,#bdffbf55,transparent 18%),radial-gradient(ellipse,transparent 45%,#25924080);
  mix-blend-mode: screen;
  pointer-events: none;
  transition: opacity .12s linear;
}
.duel-gesture-guide {
  opacity: .65;
}
.duel-gesture-guide path {
  stroke-width: 2;
  stroke-dasharray: 5 14;
  stroke: #e3ffff75;
}
.duel-gesture-guide .duel-trace-path {
  stroke: var(--spell-color);
  stroke-width: 3.5;
  stroke-dasharray: 100;
  stroke-dashoffset: 100;
  animation: spell-overlay-trace 2.8s .1s infinite ease-in-out;
}
.duel-gesture-guide circle {
  fill: var(--spell-color);
  stroke: #fff;
  stroke-width: 3;
  filter: drop-shadow(0 0 8px var(--spell-color));
}
@keyframes spell-overlay-trace {
  0%,10% {
    stroke-dashoffset: 100;
    opacity: .35;
  }
  70%,85% {
    stroke-dashoffset: 0;
    opacity: 1;
  }
  100% {
    stroke-dashoffset: 0;
    opacity: 0;
  }
}
.smoke-transition {
  position: fixed;
  inset: 0;
  z-index: 70;
  overflow: hidden;
  pointer-events: auto;
  isolation: isolate;
}
.smoke-cloud {
  position: absolute;
  inset: -30%;
  background: radial-gradient(ellipse at 28% 62%,#0c1a1cee 4%,#1e3334e0 18%,#041012e8 34%,transparent 52%),radial-gradient(ellipse at 68% 45%,#1b2f30ed 6%,#031014f5 31%,transparent 53%);
  filter: blur(25px);
  animation: smoke-cross 3.4s ease-in-out both;
}
.smoke-b {
  rotate: 150deg;
  animation-delay: .1s;
  filter: blur(18px);
  scale: 1.2;
}
.smoke-c {
  rotate: 270deg;
  animation-delay: .18s;
  filter: blur(38px);
  scale: 1.5;
}
.smoke-veil {
  position: absolute;
  inset: 0;
  background: #041013;
  animation: smoke-veil 3.4s ease both;
}
.smoke-flash {
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse at center,#d6ffeaaa,#70b99744 30%,transparent 72%);
  animation: smoke-flash 1s ease-out both;
  mix-blend-mode: screen;
  z-index: 2;
}
@keyframes smoke-cross {
  0% {
    opacity: 0;
    transform: scale(.15) translateY(18%);
  }
  27% {
    opacity: 1;
    transform: scale(1.2) translateY(0);
  }
  65% {
    opacity: 1;
    transform: scale(1.5) translateX(-4%);
  }
  100% {
    opacity: 0;
    transform: scale(2.3) translateX(22%);
  }
}
@keyframes smoke-veil {
  0%,12% {
    opacity: 0;
  }
  35%,57% {
    opacity: 1;
  }
  100% {
    opacity: 0;
  }
}
@keyframes smoke-flash {
  0% {
    opacity: 0;
    transform: scale(.3);
  }
  25% {
    opacity: .85;
  }
  100% {
    opacity: 0;
    transform: scale(1.5);
  }
}
@media (prefers-reduced-motion:reduce) {
  .duel-trace-path {
    animation: none !important;
    stroke-dashoffset: 0 !important;
  }
  .smoke-transition {
    display: none;
  }
}
.story-sequence .duel-film-victory {
  opacity: 0;
  pointer-events: none;
}
.story-sequence .duel-film-victory.is-visible {
  opacity: 1;
}
.duel-cast-flare {
  position: absolute;
  inset: 0;
  z-index: 6;
  pointer-events: none;
  opacity: 0;
  background: radial-gradient(ellipse,#f5fff1 10%,#c5ffad 55%,#71c754);
  transition: opacity .75s ease-out;
}
.duel-cast-flare.is-bright {
  opacity: 1;
  transition-duration: .28s;
}
@media (prefers-reduced-motion:reduce) {
  .duel-cast-flare {
    transition: none;
  }
}
.encounter-victory-film.is-visible {
  pointer-events: auto;
}
.story-sequence .encounter-victory-film>.timed-duel {
  height: 100%;
  min-height: 0;
}
.finale-scene {
  position: relative;
  isolation: isolate;
  min-height: max(780px,100svh);
  overflow: hidden;
  background: #100e0a;
  text-align: center;
}
.finale-scene .finale-film {
  position: fixed;
  z-index: -4;
  inset: 0;
  background-position: center;
}
.finale-film:before {
  content: "";
  position: absolute;
  inset: -5%;
  background: inherit;
  background-size: cover;
  background-position: center;
  filter: blur(36px) brightness(.45);
}
.story-sequence .finale-film video {
  position: relative;
  z-index: 1;
  object-fit: contain;
  object-position: center;
}
.finale-shade {
  position: absolute;
  inset: 0;
  z-index: -2;
  background: linear-gradient(0deg,#17110fe6,transparent 36%,transparent 68%,#140e0cab);
  transition: background 1.2s;
}
.invitation-revealed .finale-shade {
  background: linear-gradient(0deg,#0d110fe8,#101510ad 45%,#15130dab);
}
.celebration-content {
  position: relative;
  min-height: max(780px,100svh);
  padding: 126px 24px 120px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  align-items: center;
}
.celebration-congratulations {
  text-shadow: 0 2px 30px #000b;
  max-width: 700px;
  width: 100%;
}
.celebration-congratulations .eyebrow {
  color: #f0d59f;
  font-size: 10px;
  letter-spacing: .2em;
  margin: 0 0 17px;
}
.celebration-congratulations h1 {
  font-family: Cormorant,Georgia,serif;
  font-size: clamp(40px,6vw,72px);
  line-height: 1;
  font-weight: 400;
  color: #fff2ce;
  margin: 0;
  overflow-wrap: anywhere;
}
.celebration-congratulations h1 em {
  display: block;
  font-weight: 400;
  color: #f8d681;
  margin-top: 10px;
  font-size: .78em;
}
.celebration-message {
  max-width: 560px;
  text-shadow: 0 2px 24px #000;
  padding-top: 35vh;
}
.celebration-message>p {
  font-size: 29px;
  line-height: 1.25;
  color: #ffedc8;
  margin: 0 0 20px;
}
.celebration-message>button {
  font-family: Cinzel,Georgia,serif;
  text-transform: uppercase;
  letter-spacing: .12em;
  font-size: 11px;
  min-height: 44px;
  border-bottom: 1px solid #e8d3a366;
  color: #f4e1b9;
}
.celebration-message>button span {
  margin-left: 10px;
}
.celebration-hold {
  position: absolute;
  inset: 0;
  z-index: 5;
  background: #101811d9;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 30px;
}
.celebration-hold>p {
  font-size: 29px;
  margin-bottom: 24px;
}
.celebration-hold>button:last-child {
  margin-top: 22px;
  min-height: 44px;
  border-bottom: 1px solid #eadbb466;
  font-size: 18px;
}
.film-sound-prompt {
  position: absolute;
  right: 24px;
  top: 68px;
  z-index: 8;
  min-height: 40px;
  padding: 9px 14px;
  color: #f7e9c7;
  background: #09181be8;
  border: 1px solid #d9c08a77;
  border-radius: 2px;
  font-family: Cormorant,Georgia,serif;
  font-size: 16px;
  letter-spacing: .01em;
}
.party-invitation-stage {
  position: relative;
  padding: 113px 30px 115px;
  max-width: 790px;
  margin: auto;
}
.invitation-victory-line {
  position: relative;
  font-size: 19px;
  font-style: italic;
  line-height: 1.4;
  color: #f1ddb1;
  margin: 0 0 37px;
  text-shadow: 0 2px 15px #000;
}
.invitation-aura {
  position: absolute;
  top: 17%;
  left: 50%;
  transform: translateX(-50%);
  width: 130%;
  height: 65%;
  background: radial-gradient(ellipse,#d2ab4e30,transparent 68%);
  pointer-events: none;
}
.story-world .party-invitation {
  position: relative;
  width: min(595px,100%);
  padding: 48px 60px 36px;
  color: #36281c;
  filter: drop-shadow(0 15px 65px #000b);
  text-shadow: none;
}
.invitation-gilt-frame {
  position: absolute;
  inset: 20px 18px 18px;
  border: 1px solid #8b69345c;
  pointer-events: none;
}
.invitation-gilt-frame:before {
  content: "";
  position: absolute;
  inset: 4px;
  border: 1px solid #7e62312e;
}
.invitation-gilt-frame:after {
  content: "✦";
  position: absolute;
  left: 50%;
  top: -13px;
  transform: translateX(-50%);
  color: #86612b;
  font-size: 17px;
  background: #dcc79e;
  padding: 0 10px;
}
.party-crest {
  width: 153px;
  margin: 0 auto 9px;
  mix-blend-mode: multiply;
  filter: grayscale(1) sepia(.75);
}
.party-crest img {
  width: 100%;
  height: auto;
}
.party-invitation .party-overline {
  font-family: Cinzel,Georgia,serif;
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: .17em;
  color: #785529;
  margin: 0 0 20px;
}
.party-invitation h1 {
  font-family: Potter,Georgia,serif;
  font-size: clamp(78px,8vw,100px);
  font-weight: 400;
  line-height: .78;
  letter-spacing: -.02em;
  color: #253e30;
  margin: 10px 0 0;
  text-shadow: 0 1px #f2e5bd;
}
.party-invitation h1>span {
  display: block;
  font-family: Cinzel,Georgia,serif;
  font-size: 16px;
  letter-spacing: .33em;
  line-height: 1.5;
  text-transform: uppercase;
  margin-top: 19px;
  padding-left: .33em;
  color: #68491d;
}
.party-house-ribbons {
  display: flex;
  gap: 7px;
  justify-content: center;
  margin: 23px 0 20px;
  height: 23px;
}
.party-house-ribbons i {
  width: 18px;
  background: #7a292b;
  clip-path: polygon(0 0,100% 0,100% 100%,50% 78%,0 100%);
  border-top: 2px solid #b4954e;
}
.party-house-ribbons i:nth-child(2) {
  background: #30533d;
}
.party-house-ribbons i:nth-child(3) {
  background: #344b6f;
}
.party-house-ribbons i:nth-child(4) {
  background: #b39037;
}
.party-invitation .party-invite-to {
  font-family: Cormorant,Georgia,serif;
  font-style: italic;
  font-size: 33px;
  line-height: 1.1;
  color: #644525;
  margin: 0 0 17px;
  overflow-wrap: anywhere;
}
.party-invitation .party-letter {
  font-family: Cormorant,Georgia,serif;
  font-size: 23px;
  line-height: 1.28;
  margin: 0 0 17px;
  font-style: italic;
  color: #332d23;
}
.party-invitation .party-description {
  font-family: Cormorant,Georgia,serif;
  font-size: 21px;
  line-height: 1.32;
  margin: 0 0 24px;
  color: #4b4331;
}
.party-details {
  border-top: 1px solid #94764455;
  border-bottom: 1px solid #94764455;
  padding: 13px 0;
  margin: 0;
  text-align: left;
}
.party-details>div {
  display: grid;
  grid-template-columns: 55px 1fr;
  gap: 15px;
  margin: 7px 0;
  align-items: baseline;
}
.party-details dt {
  font-family: Cinzel,Georgia,serif;
  font-size: 9px;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: #795c32;
}
.party-details dd {
  font-family: Cormorant,Georgia,serif;
  margin: 0;
  font-size: 18px;
  line-height: 1.3;
  color: #403b2b;
}
.invitation-wax-seal {
  width: 60px;
  height: 60px;
  margin: 24px auto 21px;
  border-radius: 46% 49% 44% 50%;
  background: radial-gradient(circle at 34% 28%,#a84639,#772a26 70%,#542622);
  display: grid;
  place-items: center;
  box-shadow: inset 0 0 0 3px #802c27,inset 0 0 0 5px #bf68533d,2px 5px 7px #4c271643;
  transform: rotate(-9deg);
}
.invitation-wax-seal span {
  font-family: Potter,Georgia,serif;
  font-size: 36px;
  color: #dba680;
  text-shadow: 0 1px #591511,-1px -1px #efc5a255;
}
.party-invitation .story-button {
  display: flex;
  width: 100%;
  justify-content: center;
  background: #253d2d !important;
  color: #f2e0ae !important;
  border-color: #8d7346 !important;
  box-shadow: inset 0 0 0 4px #253d2d,0 5px 16px #32241424;
  padding: 20px 10px !important;
  font-size: 15px !important;
  letter-spacing: .03em;
}
.party-invitation .story-button:hover {
  background: #35523a !important;
  box-shadow: inset 0 0 0 4px #35523a,0 5px 20px #32241430;
}
.party-invitation .party-pending {
  font-size: 15px;
  font-style: italic;
  line-height: 1.25;
  color: #746248;
  margin: 13px 0 21px;
}
.party-invitation .party-host {
  font-size: 17px;
  font-style: italic;
  margin: 0;
  color: #695235;
}
.party-host em {
  font-family: Pinyon,Cormorant,serif;
  font-size: 33px;
  margin-left: 6px;
}
.party-host>span {
  display: block;
  font-family: Cinzel,Georgia,serif;
  font-style: normal;
  font-size: 8px;
  letter-spacing: .3em;
  margin-top: 2px;
  color: #7c663e;
}
.mischief-managed {
  font-size: 27px;
  font-style: italic;
  line-height: 1.2;
  color: #f2d9a5;
  margin: 38px 0 6px;
  text-shadow: 0 2px 18px #000;
}
.party-invitation-stage>.replay-link {
  font-size: 16px;
  color: #decba5;
}
.celebration-stars {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 1;
  overflow: hidden;
}
.celebration-stars i {
  position: absolute;
  left: var(--x);
  bottom: -15px;
  width: 3px;
  height: 3px;
  border-radius: 50%;
  background: #fff2c0;
  box-shadow: 0 0 9px #e8bd68;
  opacity: 0;
  animation: celebration-star 9s var(--delay) infinite ease-out;
}
@keyframes celebration-star {
  8% {
    opacity: .75;
  }
  80% {
    opacity: .35;
  }
  100% {
    transform: translate(var(--drift),-110vh);
    opacity: 0;
  }
}
.duel-avada.duel-victory .duel-victory-heading {
  opacity: 0;
  transform: translateY(9px);
  transition: opacity 1.2s,transform 1.2s;
}
.duel-avada.duel-victory .duel-victory-heading.victory-closing {
  opacity: 1;
  transform: none;
}
.finale-still * {
  animation-play-state: paused !important;
}
@media (max-width:640px) {
  .celebration-content {
    padding: 109px 22px 111px;
    min-height: max(730px,100svh);
  }
  .celebration-congratulations h1 {
    font-size: 45px;
  }
  .celebration-congratulations .eyebrow {
    font-size: 9px;
    letter-spacing: .12em;
  }
  .celebration-message>p {
    font-size: 25px;
  }
  .celebration-message {
    padding-top: 37vh;
  }
  .film-sound-prompt {
    right: 20px;
    top: 63px;
    font-size: 14px;
    min-height: 38px;
  }
  .party-invitation-stage {
    padding: 107px 25px 112px;
  }
  .invitation-victory-line {
    font-size: 17px;
    margin-bottom: 30px;
    max-width: 290px;
    margin-left: auto;
    margin-right: auto;
  }
  .story-world .party-invitation {
    padding: 40px 23px 32px;
  }
  .invitation-gilt-frame {
    inset: 16px 5px 12px;
  }
  .party-crest {
    width: 135px;
  }
  .party-invitation .party-overline {
    font-size: 8px;
    letter-spacing: .12em;
    margin-bottom: 21px;
  }
  .party-invitation h1 {
    font-size: clamp(63px,20vw,80px);
  }
  .party-invitation h1>span {
    font-size: 13px;
    margin-top: 18px;
  }
  .party-house-ribbons {
    margin-top: 20px;
  }
  .party-invitation .party-invite-to {
    font-size: 29px;
  }
  .party-invitation .party-letter {
    font-size: 22px;
  }
  .party-invitation .party-description {
    font-size: 20px;
  }
  .party-details>div {
    gap: 8px;
    grid-template-columns: 47px 1fr;
  }
  .party-details dd {
    font-size: 17px;
  }
  .party-details dt {
    font-size: 8px;
  }
  .party-invitation .story-button {
    font-size: 14px !important;
  }
  .party-invitation .party-pending {
    font-size: 14px;
  }
  .mischief-managed {
    font-size: 25px;
  }
}
@media (prefers-reduced-motion:reduce) {
  .celebration-stars {
    display: none;
  }
  .duel-avada.duel-victory .duel-victory-heading {
    opacity: 1 !important;
    transform: none !important;
  }
}
.feast-finale.invitation-revealed {
  min-height: 100svh;
  overflow: visible;
  background: radial-gradient(ellipse at top,#5a452033,transparent 65%),linear-gradient(#101812ed,#101812ed),url('/hogwarts/images/hogwarts-feast-v5.jpg') center/cover;
}
.feast-letter-stage {
  width: 100%;
  max-width: 720px;
  margin: 0 auto;
  padding: 110px 28px 92px;
  box-sizing: border-box;
  animation: feast-letter-arrive .8s ease both;
}
.feast-letter {
  position: relative;
  isolation: isolate;
  box-sizing: border-box;
  width: 100%;
  padding: 48px clamp(25px,7vw,68px) 38px;
  color: #35291e;
  text-align: left;
  font: 22px/1.5 Cormorant,Georgia,serif;
  filter: drop-shadow(0 18px 36px #0008);
  overflow-wrap: anywhere;
}
.feast-letter:before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  border: 0 solid transparent;
  border-image: url('/hogwarts/images/burned-paper.webp') 180 120 150 120 fill / 70px 38px 60px 38px / 0 stretch;
}
.feast-letter-header {
  text-align: center;
}
.feast-overline {
  font: 10px/1.7 Cinzel,Georgia,serif;
  text-transform: uppercase;
  letter-spacing: .15em;
  color: #755633;
  margin: 20px 0 14px;
}
.feast-letter h1 {
  font: clamp(40px,10vw,64px)/1.12 Cinzel,Georgia,serif;
  letter-spacing: -.025em;
  color: #213d2e;
  margin: 0;
  outline: none;
}
.feast-letter h1 span {
  display: block;
  font-size: .36em;
  letter-spacing: .2em;
  line-height: 1.7;
  margin-top: 8px;
  text-transform: uppercase;
}
.feast-seal {
  position: relative;
  width: 68px;
  height: 68px;
  margin: 0 auto;
  display: grid;
  place-items: center;
  transform: rotate(-9deg);
  border-radius: 46% 51% 45% 49%;
  background: radial-gradient(circle at 32% 25%,#b85a48,#862e2a 57%,#571e21);
  box-shadow: inset 0 0 0 3px #742624,inset 0 0 0 6px #ca806055,2px 5px 9px #3b211a55;
}
.feast-seal:before {
  content: "";
  position: absolute;
  inset: 10px;
  border: 1px solid #d29169aa;
  border-radius: 50%;
}
.feast-seal span {
  font: 35px/1 Cinzel,Georgia,serif;
  color: #dcad78;
  text-shadow: 0 2px #511d1e;
}
.feast-divider {
  display: flex;
  align-items: center;
  gap: 16px;
  margin: 24px 0;
  color: #947243;
  font-size: 15px;
}
.feast-divider:before,.feast-divider:after {
  content: "";
  height: 1px;
  background: #82603c55;
  flex: 1;
}
.feast-letter p {
  margin: 0 0 19px;
}
.feast-letter .feast-salutation {
  font-style: italic;
  font-size: 27px;
  color: #5b3929;
}
.feast-details {
  margin: 25px 0;
  padding: 15px 0;
  border-block: 1px solid #82603c55;
}
.feast-details>div {
  display: grid;
  grid-template-columns: 58px minmax(0,1fr);
  gap: 16px;
  padding: 7px 0;
  align-items: baseline;
}
.feast-details dt {
  font: 10px/1.6 Cinzel,Georgia,serif;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: #725332;
}
.feast-details dd {
  margin: 0;
  font-size: 20px;
  line-height: 1.35;
}
.feast-signature {
  font-style: italic;
}
.feast-signature span {
  display: block;
  font: 40px/1.3 Pinyon,Cormorant,serif;
  margin-top: 4px;
  color: #244532;
}
.feast-reply {
  margin-top: 24px;
  text-align: center;
}
.feast-letter .story-button {
  width: 100%;
  min-height: 52px;
  white-space: normal;
  justify-content: center;
  background: #244332 !important;
  color: #f5e8c6 !important;
  border: 1px solid #8e7850 !important;
  box-shadow: inset 0 0 0 3px #244332 !important;
  font: 12px/1.5 Cinzel,Georgia,serif !important;
  padding: 17px 12px !important;
  letter-spacing: .04em;
}
.feast-reply p {
  font-size: 17px;
  line-height: 1.4;
  margin: 16px 0 10px;
}
.feast-reply small {
  display: block;
  font: 14px/1.4 Cormorant,Georgia,serif;
  color: #6b5740;
}
.feast-letter-footer {
  border-top: 1px solid #82603c44;
  margin-top: 26px;
  padding-top: 18px;
  text-align: center;
  font: 8px/1.8 Cinzel,Georgia,serif;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: #765b39;
}
.feast-replay {
  display: block;
  margin: 28px auto 0;
  min-height: 44px;
  padding: 10px 15px;
  color: #e2cca0;
  font: 17px/1.3 Cormorant,Georgia,serif;
  border-bottom: 1px solid #b99c6155;
}
.feast-letter button:focus-visible,.feast-replay:focus-visible {
  outline: 2px solid #9b793d;
  outline-offset: 4px;
}
.feast-rsvp-dialog {
  width: min(540px,calc(100vw - 28px)) !important;
  max-width: 540px !important;
  max-height: calc(100svh - 40px);
  overflow-y: auto;
  overscroll-behavior: contain;
  box-sizing: border-box;
  padding: 38px clamp(22px,6vw,42px) 28px !important;
  background: #e5d3ae !important;
  color: #35291e !important;
  border: 1px solid #8b6841 !important;
  border-radius: 5px !important;
  box-shadow: 0 25px 90px #000b !important;
  gap: 0 !important;
}
.feast-rsvp-dialog [data-slot="dialog-close"] {
  top: 12px;
  right: 12px;
  color: #4f3523;
}
.feast-rsvp-content {
  min-width: 0;
}
.feast-rsvp-content>.feast-overline {
  text-align: center;
  margin: 0 0 12px;
}
.feast-rsvp-title {
  font: 34px/1.15 Cormorant,Georgia,serif !important;
  text-align: center;
  color: #244332;
}
.feast-rsvp-description {
  font: 18px/1.4 Cormorant,Georgia,serif !important;
  color: #655238 !important;
  text-align: center;
  margin: 15px 0 26px;
}
.feast-rsvp-dialog input:not([type="checkbox"]) {
  width: 100%;
  min-width: 0;
}
.feast-rsvp-dialog .reply-form {
  min-width: 0;
}
.feast-rsvp-dialog .story-button {
  white-space: normal;
}
.feast-rsvp-dialog .plus-one-choice {
  align-items: flex-start;
}
@keyframes feast-letter-arrive {
  from {
    opacity: 0;
    transform: translateY(14px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
@media (max-width:420px) {
  .feast-letter-stage {
    padding: 96px 14px 80px;
  }
  .feast-letter {
    font-size: 20px;
    padding: 38px 26px 32px;
  }
  .feast-letter:before {
    border-image-width: 60px 26px 52px 26px;
  }
  .feast-details>div {
    gap: 10px;
    grid-template-columns: 49px minmax(0,1fr);
  }
  .feast-details dd {
    font-size: 18px;
  }
  .feast-letter .feast-salutation {
    font-size: 24px;
  }
}
@media (prefers-reduced-motion:reduce) {
  .feast-letter-stage {
    animation: none;
  }
}
.victory-letter-backdrop {
  position: fixed;
  inset: 0;
  z-index: 70;
  background: #020a0dd9;
  backdrop-filter: blur(9px);
  animation: victory-backdrop-in .7s ease both;
}
.victory-letter.burned-paper {
  position: fixed;
  left: 50%;
  top: 50%;
  z-index: 71;
  transform: translate(-50%,-50%);
  width: min(550px,calc(100% - 32px));
  max-height: calc(100svh - 38px);
  overflow-y: auto;
  padding: 45px 55px 35px;
  color: #342b20;
  text-align: center;
  outline: none;
  filter: drop-shadow(0 20px 65px #000b);
  animation: victory-letter-in .85s ease both;
}
.victory-letter-gilt {
  position: absolute;
  inset: 20px 18px;
  border: 1px solid #9c793f65;
  pointer-events: none;
}
.victory-letter-gilt:before {
  content: "";
  position: absolute;
  inset: 5px;
  border: 1px solid #9c793f30;
}
.victory-letter-seal {
  display: grid;
  place-items: center;
  margin: 0 auto 20px;
  width: 62px;
  height: 62px;
  border-radius: 47% 44% 49% 45%;
  background: radial-gradient(circle at 35% 30%,#af4031,#722920);
  border: 3px double #c98252;
  box-shadow: 0 4px 7px #40221355,inset 0 0 0 5px #802c2377;
  color: #e6b581;
  font: 36px Potter,Georgia,serif;
  transform: rotate(-8deg);
}
.victory-letter-final .victory-letter-seal {
  background: radial-gradient(circle at 35% 30%,#a08a43,#5a461c);
  border-color: #c7a76c;
}
.victory-letter-overline {
  font: 9px/1.5 Georgia,serif;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: #79603a;
  margin: 0 0 20px;
}
.victory-letter-congratulations {
  font: 38px/1.1 Potter,Georgia,serif;
  color: #78522b;
  margin: 0 0 12px;
}
.victory-letter-title {
  font: 500 clamp(31px,5vw,43px)/1.05 Cormorant,Georgia,serif;
  margin: 0;
}
.victory-letter-rule {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 16px;
  color: #a58546;
  margin: 20px 0;
}
.victory-letter-rule:before,.victory-letter-rule:after {
  content: "";
  height: 1px;
  width: 70px;
  background: linear-gradient(90deg,transparent,#a5854688);
}
.victory-letter-rule:after {
  transform: rotate(180deg);
}
.victory-letter-description {
  font: italic 22px/1.4 Cormorant,Georgia,serif;
  color: #463825;
  margin: 0;
}
.victory-letter-signature {
  font: italic 20px/1.3 Cormorant,Georgia,serif;
  color: #775b35;
  margin: 21px 0 25px;
}
.victory-letter .story-button {
  width: 100%;
  background: #193a30 !important;
  padding: 18px 18px !important;
  font-size: 13px !important;
  letter-spacing: .04em;
}
.victory-letter-replay {
  display: block;
  margin: 17px auto 0;
  font: italic 17px Cormorant,Georgia,serif;
  color: #74603d;
  padding: 6px;
  border-bottom: 1px solid #9a7e4a44;
}
.victory-letter-status {
  font-size: 16px;
  line-height: 1.3;
  margin: 12px 0 0;
}
@keyframes victory-backdrop-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes victory-letter-in {
  from {
    opacity: 0;
    transform: translate(-50%,-45%) scale(.97);
  }
  to {
    opacity: 1;
    transform: translate(-50%,-50%) scale(1);
  }
}
@media (max-width:640px) {
  .victory-letter.burned-paper {
    padding: 34px 32px 27px;
  }
  .victory-letter-seal {
    width: 50px;
    height: 50px;
    font-size: 30px;
    margin-bottom: 16px;
  }
  .victory-letter-description {
    font-size: 21px;
  }
  .victory-letter-congratulations {
    font-size: 33px;
  }
  .victory-letter-signature {
    margin: 17px 0 21px;
  }
  .victory-letter-overline {
    font-size: 8px;
    margin-bottom: 15px;
  }
}
@media (prefers-reduced-motion:reduce) {
  .victory-letter-backdrop,.victory-letter.burned-paper {
    animation: none;
  }
}
.broom-arrival-backdrop {
  position: fixed;
  inset: 0;
  z-index: -2;
  background: linear-gradient(#041019a6,#071316e6),url('/hogwarts/images/diary-discovery.jpg') center/cover no-repeat;
}
.story-sequence .broom-flight-chapter .film-chapter-heading,.story-sequence .broom-flight-chapter .film-chapter-copy {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 1s,visibility 1s;
}
.story-sequence .broom-flight-chapter.chapter-copy-ready .film-chapter-heading,.story-sequence .broom-flight-chapter.chapter-copy-ready .film-chapter-copy {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}
.story-sequence .broom-flight-chapter:not(.chapter-copy-ready) .chapter-film-shade {
  opacity: .12;
}
.victory-letter.burned-paper::before {
  inset: 0;
}
.owl-cinema.delivery-waiting {
  background: radial-gradient(ellipse at 50% 38%,#54604a,#182d2b 56%,#0d1f25);
}
.opening-letter-screen {
  position: absolute;
  inset: 0;
  z-index: 3;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 20px;
  padding: 60px 24px 105px;
  overflow: hidden;
  background: #05121e;
  opacity: 1;
  transition: opacity .85s,visibility .85s;
}
.opening-letter-screen.delivery-unsealed {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.summoning-castle {
  position: absolute;
  inset: 0;
  background: url('/hogwarts/images/hogwarts-night-poster.jpg') 45% center/cover;
}
.summoning-castle .scene-film {
  position: absolute;
  inset: 0;
}
.summoning-castle video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 45% center;
}
.summoning-castle:after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(#020d1f40,#03101a44 38%,#020a14d9);
}
.summoning-heading {
  position: relative;
  text-align: center;
  text-shadow: 0 3px 24px #02070c;
  margin-top: 2vh;
}
.summoning-heading>p:first-child {
  font: 10px Georgia,serif;
  letter-spacing: .35em;
  color: #d3c397;
  text-transform: uppercase;
  margin: 0 0 22px;
}
.summoning-heading h1 {
  font: clamp(75px,10vw,132px)/.85 Potter,Georgia,serif;
  color: #e9d5a1;
  margin: 0;
  text-shadow: 0 2px 3px #241607,0 0 45px #bd995c40;
}
.summoning-heading h1 span {
  display: block;
  font: 16px Georgia,serif;
  letter-spacing: .45em;
  text-transform: uppercase;
  margin: 23px 0 0;
}
.summoning-whisper {
  font: italic 24px Cormorant,Georgia,serif;
  color: #eee5ce;
  margin: 26px 0 0;
}
.snitch-button {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: min(390px,90vw);
  min-height: 230px;
  padding: 0 0 16px;
  border: 0;
  background: none;
  color: #f2ddb1;
  isolation: isolate;
}
.golden-snitch {
  width: 100%;
  height: 160px;
  overflow: visible;
  filter: drop-shadow(0 0 14px #fbd87865);
  animation: snitch-hover 4s ease-in-out infinite;
}
.snitch-wing {
  transform-box: fill-box;
}
.snitch-wing-left {
  transform-origin: right center;
  animation: snitch-wings .65s ease-in-out infinite alternate;
}
.snitch-wing-right {
  transform-origin: left center;
  animation: snitch-wings .65s ease-in-out infinite alternate-reverse;
}
.snitch-halo {
  position: absolute;
  left: 50%;
  top: 70px;
  width: 170px;
  height: 170px;
  transform: translate(-50%,-50%);
  border-radius: 50%;
  background: radial-gradient(#f4cc6455,transparent 67%);
  box-shadow: 0 0 75px #f2bf3825;
  transition: box-shadow .5s;
}
.snitch-call {
  font: italic 28px Cormorant,Georgia,serif;
  line-height: 1.2;
  text-shadow: 0 2px 10px #000;
}
.snitch-hint {
  font: 10px Georgia,serif;
  text-transform: uppercase;
  letter-spacing: .22em;
  color: #bdad8c;
  margin-top: 12px;
}
.snitch-button:hover .snitch-halo,.snitch-button:focus-visible .snitch-halo {
  box-shadow: 0 0 100px #ffcf7388;
}
.snitch-button:focus-visible {
  outline: 1px solid #f2d493;
  border-radius: 50%;
}
.summoning-mist {
  position: absolute;
  inset: 40% -25% -20%;
  background: radial-gradient(ellipse,#a6d8ed19,transparent 65%);
  filter: blur(30px);
  animation: castle-mist 15s ease-in-out infinite alternate;
  pointer-events: none;
}
.summoning-stars {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.summoning-stars i {
  position: absolute;
  width: 3px;
  height: 3px;
  background: #f5d898;
  border-radius: 50%;
  box-shadow: 0 0 12px #fedb8c;
  animation: snitch-spark 5s ease-in-out infinite;
}
@keyframes snitch-hover {
  50% {
    transform: translateY(-12px) rotate(2deg);
  }
}
@keyframes snitch-wings {
  to {
    transform: scaleY(.55) rotate(-9deg);
  }
}
@keyframes castle-mist {
  to {
    transform: translate(12%,-8%);
  }
}
@keyframes snitch-spark {
  0%,100% {
    opacity: .1;
    transform: translateY(0);
  }
  50% {
    opacity: .9;
    transform: translateY(-25px);
  }
}
.delivery-waiting .cinema-controls {
  z-index: 4;
}
.delivery-waiting .cinema-controls button {
  color: #f4e6c9;
}
.delivery-waiting .cinema-controls .cinema-sound {
  border: 1px solid #e3ce9b4a;
}
.owl-cinema .cinema-caption {
  max-width: 750px;
  margin: 0 auto;
  bottom: 17%;
  font-size: clamp(26px,3vw,37px);
  line-height: 1.25;
}
@media (max-width:640px) {
  .opening-letter-screen {
    padding: 70px 24px 100px;
    gap: 25px;
  }
  .summoning-heading h1 {
    font-size: 90px;
  }
  .summoning-heading h1 span {
    font-size: 13px;
  }
  .summoning-whisper {
    font-size: 23px;
  }
  .snitch-button {
    width: 310px;
    max-width: 100%;
  }
  .owl-cinema .cinema-caption {
    font-size: 27px;
    left: 24px;
    right: 24px;
  }
}
@media (max-height:600px) {
  .opening-letter-screen {
    padding: 25px 24px 65px;
    gap: 5px;
  }
  .summoning-heading h1 {
    font-size: 65px;
  }
  .summoning-heading>p:first-child {
    margin-bottom: 12px;
  }
  .summoning-whisper {
    margin: 15px 0 0;
    font-size: 20px;
  }
  .snitch-button {
    min-height: 155px;
    width: 270px;
  }
  .golden-snitch {
    height: 105px;
  }
  .summoning-heading h1 span {
    margin-top: 15px;
  }
}
@media (prefers-reduced-motion:reduce) {
  .opening-letter-screen {
    transition: none;
  }
  .golden-snitch,.snitch-wing,.summoning-mist,.summoning-stars i {
    animation: none;
  }
}
.story-world.stage-0,.story-world.stage-1 {
  background: #000;
}
.dementor-atmosphere {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  overflow: hidden;
}
.dementor-cold-vignette {
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse at 50% 46%,transparent 24%,#071b2055 57%,#020a12);
  opacity: calc(.28 + var(--cold)*.52);
  box-shadow: inset 0 0 80px #a5d6ed22;
  transition: opacity .35s;
}
.dementor-fog {
  position: absolute;
  inset: 0;
  opacity: calc(.12 + var(--cold)*.28);
}
.dementor-fog i {
  position: absolute;
  width: 110%;
  height: 33%;
  left: -45%;
  top: 33%;
  background: radial-gradient(ellipse,#b9d7de55,transparent 66%);
  filter: blur(22px);
  transform: rotate(-18deg);
  animation: dementor-wind 8s infinite alternate ease-in-out;
}
.dementor-fog i:nth-child(2) {
  left: 35%;
  top: 58%;
  animation-delay: -4s;
  animation-direction: alternate-reverse;
}
.dementor-fog i:nth-child(3) {
  left: -15%;
  top: 75%;
  height: 22%;
  animation-delay: -2s;
}
.frost-veins {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: min(27%,190px);
  overflow: visible;
  opacity: calc(.1 + var(--cold)*.58);
  filter: drop-shadow(0 0 4px #bceaff55);
}
.frost-veins.frost-side-1 {
  left: auto;
  right: 0;
  transform: scaleX(-1);
}
.frost-veins path {
  fill: none;
  stroke: #d3f4ff;
  stroke-width: 1;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-dasharray: 1;
  stroke-dashoffset: calc(1 - var(--cold));
  transition: stroke-dashoffset .3s linear;
  vector-effect: non-scaling-stroke;
}
.frost-veins path:nth-child(2) {
  stroke-width: .65;
  opacity: .7;
}
.frost-veins path:nth-child(3) {
  stroke-width: 2;
  opacity: .28;
}
.wand-memory-light {
  position: absolute;
  inset: 18% 5% 10%;
  background: radial-gradient(ellipse,#c5f8ff50,transparent 64%);
  opacity: calc(var(--wand-light)*.6);
  mix-blend-mode: screen;
  transition: opacity .12s;
}
.gathering-patronus-ring {
  position: absolute;
  width: min(46vw,360px);
  aspect-ratio: 1;
  left: 50%;
  top: 53%;
  transform: translate(-50%,-50%) scale(calc(.65 + var(--wand-light)*.35));
  border: 1px solid #d5ffff75;
  border-radius: 50%;
  box-shadow: 0 0 30px #b4f5ff66,inset 0 0 30px #b4f5ff33;
  opacity: calc(var(--wand-light)*.8);
  transition: opacity .1s,transform .12s;
}
.atmosphere-held * {
  animation-play-state: paused !important;
}
@keyframes dementor-wind {
  to {
    transform: translateX(32%) translateY(-8%) rotate(9deg);
  }
}
.duel-patronus.duel-active .duel-film video {
  filter: saturate(.78) contrast(1.06);
}
.patronus-impact {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  overflow: hidden;
  background: radial-gradient(ellipse at 50% 52%,#cfffff25,transparent 62%);
}
.patronus-impact i {
  position: absolute;
  left: 50%;
  top: 53%;
  width: min(65vw,700px);
  aspect-ratio: 1;
  border-radius: 50%;
  border: 3px solid #dcffff99;
  box-shadow: 0 0 60px 18px #c4faff77,inset 0 0 45px #d5ffff44;
  transform: translate(-50%,-50%) scale(calc(.4 + var(--wave)*3));
}
.patronus-impact span {
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse at center,transparent 26%,#b3ecf71c);
}
.duel-patronus.duel-victory .duel-victory-heading {
  opacity: 0;
  transform: translateY(9px);
  transition: opacity 1.1s,transform 1.1s;
}
.duel-patronus.duel-victory .duel-victory-heading.victory-closing {
  opacity: 1;
  transform: none;
}
@media (prefers-reduced-motion:reduce) {
  .dementor-fog,.patronus-impact {
    display: none;
  }
  .duel-patronus.duel-victory .duel-victory-heading {
    opacity: 1;
    transform: none;
  }
}
.duel-cast-progress {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  margin: 10px auto;
  color: #ebdec2;
}
.duel-cast-progress>span {
  display: grid;
  place-items: center;
  width: 27px;
  height: 27px;
  border: 1px solid #d7c48a66;
  border-radius: 50%;
  font: 12px Georgia,serif;
  background: #07121888;
}
.duel-cast-progress>span.cast-landed {
  background: #d6eff2;
  color: #143139;
  box-shadow: 0 0 15px #bef4ff99;
}
.duel-cast-progress small {
  font: italic 16px Cormorant,Georgia,serif;
  margin-left: 5px;
}
.spell-target {
  opacity: 1;
  transition: opacity .2s;
}
.spell-target.spell-recovering {
  opacity: .18;
}
.duel-active .duel-hud {
  padding-top: 95px;
}
.duel-active .duel-hud h1 {
  font-size: clamp(40px,5vw,60px);
}
.duel-active .duel-hud>p:last-of-type {
  font-size: 18px;
  margin: 8px auto 9px;
  max-width: 340px;
}
.duel-active .duel-wand {
  top: 40%;
  bottom: 20%;
}
.duel-active .duel-cast-progress {
  margin: 7px auto;
}
.duel-active .duel-hud .eyebrow {
  margin-bottom: 8px;
}
@media (max-width:640px) {
  .duel-active .duel-hud {
    padding-top: 88px;
  }
  .duel-active .duel-hud h1 {
    font-size: 40px;
  }
  .duel-active .duel-hud>p:last-of-type {
    font-size: 17px;
    max-width: 285px;
  }
  .duel-active .duel-wand {
    top: 40%;
    bottom: 21%;
  }
}
@font-face {
  font-family: Potter;
  src: url('/hogwarts/fonts/harry-p.ttf') format('truetype');
  font-display: swap;
}
@font-face {
  font-family: Cormorant;
  src: url('/hogwarts/fonts/cormorant-garamond.woff2') format('woff2');
  font-weight: 300 700;
  font-display: swap;
}
:root {
  --background: #091418;
  --foreground: #eee4d2;
  --card: #142328;
  --card-foreground: #eee4d2;
  --popover: #102025;
  --popover-foreground: #eee4d2;
  --primary: #cfb17a;
  --primary-foreground: #091418;
  --secondary: #253035;
  --secondary-foreground: #eee4d2;
  --muted: #233337;
  --muted-foreground: #bab7aa;
  --accent: #294148;
  --accent-foreground: #eee4d2;
  --destructive: #e8a89c;
  --border: #b59d6555;
  --input: #b59d6555;
  --ring: #e3c17e;
  --radius: .25rem;
  --gold: #d9bb80;
  --paper: #e8d9b5;
  --ink: #213931;
}
* {
  box-sizing: border-box;
}
html,body {
  margin: 0;
  min-height: 100%;
  background: var(--background);
  color: var(--foreground);
}
body {
  font-family: Cormorant,Georgia,serif;
  font-size: 20px;
  -webkit-font-smoothing: antialiased;
}
button,a,input {
  touch-action: manipulation;
}
button {
  cursor: pointer;
}
button:disabled {
  cursor: wait;
}
button:focus-visible,a:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 5px;
}
::selection {
  background: #bb9455;
  color: #101d1e;
}
.story-world {
  min-height: 100svh;
  isolation: isolate;
  position: relative;
  overflow: clip;
  background: #091418;
}
.atmosphere {
  position: fixed;
  inset: 0;
  z-index: -2;
  overflow: hidden;
  background: #0b171b;
}
.scene-art {
  position: absolute;
  inset: -2%;
  background-size: cover;
  background-position: center 53%;
  animation: scene-breathe 25s ease-in-out infinite alternate;
}
.scene-shade {
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg,rgba(3,14,18,.92) 0%,rgba(4,17,20,.76) 35%,rgba(4,15,18,.05) 75%),linear-gradient(0deg,#051115bd,transparent 35%,#07141966);
}
.film-grain {
  position: absolute;
  inset: 0;
  opacity: .11;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 150 150' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.86' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.45' filter='url(%23n)'/%3E%3C/svg%3E");
  pointer-events: none;
}
.embers {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.embers i {
  position: absolute;
  left: var(--x);
  bottom: -5%;
  height: 2px;
  width: 2px;
  border-radius: 50%;
  background: #e6cc97;
  box-shadow: 0 0 8px #e6ca8399;
  opacity: 0;
  animation: ember-rise var(--duration) var(--delay) infinite linear;
}
.story-header,.story-footer {
  position: absolute;
  z-index: 10;
  left: 4.5%;
  right: 4.5%;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 20px;
  font-family: Arial,sans-serif;
  font-size: 12px;
  letter-spacing: .12em;
}
.story-header {
  top: 32px;
}
.story-footer {
  bottom: 26px;
  color: #c1baabc9;
  font-size: 12px;
  letter-spacing: .03em;
}
.wordmark {
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: 11px;
  letter-spacing: .25em;
}
.wordmark:first-letter {
  font-family: Georgia,serif;
  font-size: 25px;
}
.wordmark-line {
  width: 30px;
  height: 1px;
  background: #c5b48b77;
}
.chapter-name {
  color: #d8c599;
  letter-spacing: .14em;
  text-transform: uppercase;
  font-size: 11px;
}
.scene {
  min-height: 100svh;
  position: relative;
  padding: 110px 8% 95px;
  display: flex;
  align-items: center;
}
.opening-copy {
  width: min(550px,54vw);
  text-align: center;
  animation: ink-arrive 1.8s ease both;
}
.eyebrow {
  font-family: Arial,sans-serif;
  text-transform: uppercase;
  font-size: 11px;
  letter-spacing: .24em;
  color: var(--gold);
  margin: 0 0 28px;
}
.potter-title {
  font-family: Potter,Georgia,serif;
  font-size: clamp(92px,10vw,155px);
  font-weight: 400;
  letter-spacing: -.025em;
  line-height: .88;
  color: #ead8b1;
  text-shadow: 0 3px 25px #0006;
  margin: 14px 0 0;
}
.after-dark {
  text-transform: uppercase;
  font-family: Georgia,serif;
  font-size: 20px;
  letter-spacing: .45em;
  margin: 15px 0 23px;
  padding-left: .45em;
  color: var(--gold);
}
.little-rule {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 15px;
  color: var(--gold);
  font-size: 13px;
  margin: 20px auto 25px;
}
.little-rule:before,.little-rule:after {
  content: "";
  height: 1px;
  width: 50px;
  background: #b49a5c66;
}
.opening-story {
  font-size: 28px;
  margin: 0 0 12px;
}
.opening-whisper {
  color: #c8c8bd;
  font-size: 20px;
  line-height: 1.5;
  margin: 0 0 30px;
}
.story-button {
  position: relative !important;
  border: 1px solid #c8a56c !important;
  border-radius: 1px !important;
  background: linear-gradient(135deg,#b18c3924,#13262c99) !important;
  color: #f5e5c2 !important;
  padding: 20px 36px !important;
  min-height: 54px !important;
  height: auto !important;
  font-family: Georgia,serif !important;
  font-size: 16px !important;
  font-weight: 400 !important;
  letter-spacing: .08em;
  box-shadow: inset 0 0 0 4px #09171c,0 8px 30px #0003;
  transition: background .3s,box-shadow .3s,transform .3s !important;
}
.story-button:hover {
  background: #b99a4f38 !important;
  box-shadow: inset 0 0 0 4px #142628,0 0 35px #d5b87920;
  transform: translateY(-2px);
}
.story-button:active {
  transform: translateY(1px);
}
.scene-footnote {
  font-style: italic;
  color: #b7b9ac;
  font-size: 16px;
  margin-top: 22px;
}
.vertical-caption {
  position: absolute;
  right: 34px;
  top: 50%;
  writing-mode: vertical-rl;
  letter-spacing: .18em;
  text-transform: uppercase;
  font-size: 10px;
  color: #dac5939e;
}
.parchment {
  background: radial-gradient(ellipse at top,#efe4c8,#dac69d);
  color: var(--ink);
  padding: 46px 55px;
  max-width: 600px;
  margin: auto;
  box-shadow: 0 24px 100px #0009, inset 0 0 60px #7f633d30;
  border: 1px solid #d8c090;
  line-height: 1.45;
}
.parchment h1 {
  font-size: 40px;
  line-height: 1.1;
  margin: 0 0 25px;
}
.parchment p {
  margin-bottom: 16px;
}
.parchment .eyebrow {
  color: #695732;
  font-size: 10px;
}
.parchment .story-button {
  background: #18392d !important;
}
.letter-preview {
  padding-top: 95px;
  padding-bottom: 85px;
}
@keyframes scene-breathe {
  to {
    transform: scale(1.055);
  }
}
@keyframes ink-arrive {
  from {
    opacity: 0;
    filter: blur(5px);
    transform: translateY(12px);
  }
  to {
    opacity: 1;
    filter: blur(0);
    transform: translateY(0);
  }
}
@keyframes ember-rise {
  0% {
    opacity: 0;
    transform: translate(0,0);
  }
  15% {
    opacity: .6;
  }
  75% {
    opacity: .3;
  }
  100% {
    opacity: 0;
    transform: translate(40px,-105vh);
  }
}
@media (max-width:640px) {
  .story-header {
    top: 25px;
    left: 24px;
    right: 24px;
  }
  .wordmark {
    font-size: 9px;
    gap: 7px;
  }
  .wordmark-line {
    width: 15px;
  }
  .chapter-name {
    font-size: 10px;
  }
  .scene {
    padding: 110px 24px 105px;
    align-items: flex-end;
  }
  .opening-copy {
    width: 100%;
    padding-bottom: 3vh;
  }
  .scene-art {
    background-position: 64% 37%;
    background-size: auto 108%;
  }
  .scene-shade {
    background: linear-gradient(0deg,#071417 1%,#071417e8 27%,#07141752 69%,#07141777);
  }
  .potter-title {
    font-size: clamp(80px,23vw,115px);
  }
  .eyebrow {
    font-size: 10px;
    letter-spacing: .18em;
    margin-bottom: 20px;
  }
  .after-dark {
    font-size: 15px;
    margin: 12px 0 18px;
  }
  .little-rule {
    margin: 17px auto;
  }
  .opening-story {
    font-size: 25px;
  }
  .opening-whisper {
    font-size: 19px;
    margin-bottom: 25px;
  }
  .scene-footnote {
    font-size: 15px;
    margin-top: 17px;
  }
  .story-footer {
    left: 24px;
    right: 24px;
    bottom: 24px;
    justify-content: center;
    font-size: 10px;
  }
  .story-footer>span:last-child {
    display: none;
  }
  .vertical-caption {
    display: none;
  }
  .parchment {
    padding: 32px 25px;
    font-size: 18px;
  }
  .parchment h1 {
    font-size: 34px;
  }
  .letter-preview {
    align-items: center;
    padding: 90px 16px;
  }
  .story-button {
    font-size: 15px !important;
    min-height: 52px !important;
  }
  .opening-scene {
    min-height: 850px;
    min-height: max(760px,100svh);
  }
}
@media (prefers-reduced-motion:reduce) {
  *,*:before,*:after {
    animation: none !important;
    transition: none !important;
    scroll-behavior: auto !important;
  }
  .scene-art {
    transform: none;
  }
}
@media (min-width:641px) {
  .atmosphere-owl .scene-art {
    background-size: auto 112%;
    background-repeat: no-repeat;
    background-position: right 50%;
  }
}
@font-face {
  font-family: Cormorant;
  src: url('/hogwarts/fonts/cormorant-garamond-italic.woff2') format('woff2');
  font-style: italic;
  font-weight: 300 700;
  font-display: swap;
}
@font-face {
  font-family: Cinzel;
  src: url('/hogwarts/fonts/cinzel.woff2') format('woff2');
  font-weight: 400 900;
  font-display: swap;
}
.eyebrow,.after-dark,.chapter-name {
  font-family: Cinzel,Georgia,serif;
}
.story-header {
  pointer-events: none;
}
.story-footer {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 23px 4.5%;
  background: linear-gradient(0deg,#061317e8,transparent);
  font-size: 12px;
  letter-spacing: .02em;
}
.story-footer button {
  transition: color .2s;
  color: #d0c4ac;
  min-height: 40px;
}
.story-footer button:hover {
  color: #ffe3a4;
}
.footer-controls {
  display: flex;
  gap: 25px;
  align-items: center;
}
.sound-toggle {
  display: flex;
  gap: 9px;
  align-items: center;
}
.chapter-dots {
  display: flex;
  gap: 10px;
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}
.chapter-dots span {
  width: 4px;
  height: 4px;
  background: #e5d4a933;
  transform: rotate(45deg);
}
.chapter-dots .current {
  background: #dfc389;
  box-shadow: 0 0 8px #e5c38680;
}
.chapter-dots .complete {
  background: #b1a488;
}
.details-link {
  border-bottom: 1px solid #af97603d;
}
.scene-transition {
  position: relative;
}
.stage-1 .scene-shade {
  background: #041315a3;
}
.letter-scene {
  padding: 105px 24px 115px;
  perspective: 1500px;
}
.letter-scene .parchment {
  width: min(610px,100%);
  position: relative;
  padding: 40px 52px;
  text-align: left;
  box-shadow: 0 24px 100px #0009,inset 0 0 70px #a2815033;
}
.letter-scene .parchment:before {
  content: "";
  position: absolute;
  inset: 12px;
  border: 1px solid #78644333;
  pointer-events: none;
}
.letter-scene .parchment .eyebrow {
  text-align: center;
  letter-spacing: .14em;
  line-height: 1.7;
  margin: 10px 0 22px;
}
.letter-crest {
  font-family: Potter,Georgia,serif;
  text-align: center;
  font-size: 46px;
  line-height: 1.1;
  color: #496052;
}
.letter-scene h1 {
  text-align: center;
  font-size: 43px;
  font-weight: 500;
}
.salutation {
  display: flex;
  align-items: baseline;
  margin-top: 20px;
  gap: 8px;
}
.salutation input {
  padding: 0 4px;
  border: 0;
  border-bottom: 1px dashed #60745a80;
  border-radius: 0;
  box-shadow: none;
  max-width: 245px;
  height: 35px;
  font-size: 24px;
  font-family: Cormorant,Georgia,serif;
  background: transparent;
  color: #213931;
}
.salutation input::placeholder {
  color: #59726199;
}
.parchment p {
  font-size: 20px;
  line-height: 1.4;
}
.parchment .ominous-line {
  font-style: italic;
  color: #375949;
}
.parchment .signature {
  margin: 18px 0 24px;
}
.signature em {
  font-size: 31px;
}
.parchment .letter-postscript {
  font-size: 15px;
  font-style: italic;
  margin: 18px 0 0;
  color: #6b654b;
}
.parchment .story-button {
  display: flex;
  margin: 0 auto;
  width: 100%;
  border-color: #627154 !important;
  box-shadow: inset 0 0 0 4px #213e30;
}
.parchment .story-button:hover {
  background: #365944 !important;
}
.atmosphere-train .scene-shade {
  background: linear-gradient(90deg,#031118e6,#08181fc4 30%,#0b161b38),linear-gradient(0deg,#061319cf,transparent 75%);
}
.atmosphere-train .scene-art {
  background-position: 60% 50%;
}
.ticket-scene {
  justify-content: center;
  text-align: center;
}
.riddle-copy {
  max-width: 500px;
  width: 100%;
  text-shadow: 0 2px 15px #000;
}
.riddle-copy h1 {
  font-size: clamp(40px,5vw,65px);
  line-height: 1.05;
  margin: 15px 0 25px;
  font-weight: 400;
  letter-spacing: -.02em;
}
.riddle-copy h1 em {
  color: #d7ba80;
}
.riddle-lines {
  font-size: 26px;
  line-height: 1.5;
  letter-spacing: .01em;
  margin: 20px 0;
}
.riddle-question {
  font-style: italic;
  color: #e4cf9d;
  font-size: 24px;
  margin: 20px 0;
}
.riddle-form {
  display: flex;
  flex-direction: column;
  gap: 16px;
  max-width: 330px;
  margin: auto;
}
.riddle-form input {
  height: 54px;
  text-align: center;
  border: 0;
  border-radius: 0;
  border-bottom: 1px solid #cbb27888;
  background: #04121966;
  font-size: 22px;
  color: #fff0d7;
  font-family: Cormorant,Georgia,serif;
  box-shadow: none;
}
.riddle-form input::placeholder {
  color: #b9b6a9;
}
.gentle-feedback {
  color: #c5bba6;
  font-style: italic;
  font-size: 17px;
  min-height: 24px;
  margin: 22px 0 15px;
}
.text-actions {
  display: flex;
  justify-content: center;
  gap: 20px;
  font-size: 15px;
  color: #d3c4a4;
}
.text-actions button {
  min-height: 36px;
  border-bottom: 1px solid #ac987855;
}
.text-actions button:hover {
  color: #fff0c9;
}
.ticket-reveal {
  width: min(435px,100%);
}
.ticket-reveal>.eyebrow {
  line-height: 1.8;
  margin-bottom: 24px;
}
.rail-ticket {
  padding: 25px 32px 19px;
  background: radial-gradient(ellipse at 20% 20%,#f0dfb5,#c5a16a);
  color: #533925;
  border: 6px double #715031;
  box-shadow: 0 20px 90px #000b;
  position: relative;
  margin: 0 auto 35px;
  transform: rotate(-2deg);
}
.ticket-railway {
  font-family: Cinzel,Georgia,serif;
  font-size: 13px;
  letter-spacing: .12em;
  text-transform: uppercase;
  margin-bottom: 20px;
}
.rail-ticket h1 {
  font-family: Potter,Georgia,serif;
  font-weight: 400;
  font-size: 70px;
  line-height: .8;
  margin: 12px 0 25px;
}
.ticket-rule {
  border-top: 1px solid #78512d;
  border-bottom: 1px solid #78512d;
  height: 4px;
  margin: 22px 0;
}
.ticket-passenger {
  font-family: Cinzel,Georgia,serif;
  text-transform: uppercase;
  font-size: 10px;
  letter-spacing: .12em;
}
.ticket-name {
  font-size: 30px;
  font-style: italic;
  margin: 6px 0 22px;
  overflow-wrap: anywhere;
}
.ticket-bottom {
  display: grid;
  grid-template-columns: 1fr 1.2fr;
  gap: 20px;
  border-top: 1px solid #7a5a34;
  border-bottom: 1px solid #7a5a34;
  padding: 15px 0;
}
.ticket-bottom>div+div {
  border-left: 1px dashed #866340;
}
.ticket-bottom span {
  font-size: 10px;
  font-family: Cinzel,Georgia,serif;
  text-transform: uppercase;
  display: block;
  letter-spacing: .1em;
}
.ticket-bottom strong {
  font-size: 65px;
  line-height: 1.1;
  font-weight: 500;
}
.ticket-bottom p {
  font-size: 28px;
  margin: 3px 0;
}
.ticket-bottom small {
  font-size: 15px;
  font-style: italic;
}
.ticket-serial {
  font-family: Arial,sans-serif;
  font-size: 9px;
  letter-spacing: .17em;
  margin: 15px 0 0;
}
.spell-scene {
  height: 100svh;
  min-height: 760px;
  padding: 0;
  display: block;
  overflow: hidden;
}
.spell-surface {
  position: absolute;
  inset: 0;
  touch-action: pan-y;
}
.train-art {
  position: absolute;
  inset: 0;
  background-image: url('/hogwarts/images/train-compartment.jpg');
  background-size: cover;
  background-position: 50% 50%;
  filter: brightness(.65);
  transition: filter 1.7s;
}
.is-lit .train-art {
  filter: brightness(1);
}
.wand-darkness {
  position: absolute;
  inset: 0;
  transition: background 1.5s;
  pointer-events: none;
}
.spell-heading {
  position: absolute;
  top: 115px;
  left: 50%;
  transform: translateX(-50%);
  text-align: center;
  width: min(600px,90%);
  pointer-events: none;
  text-shadow: 0 4px 15px #000;
}
.spell-heading h1 {
  font-size: 70px;
  font-weight: 400;
  line-height: 1;
  margin: 10px 0 15px;
  color: #f2dfb4;
}
.spell-heading .eyebrow {
  margin-bottom: 10px;
}
.spell-heading p:last-child {
  font-size: 23px;
  line-height: 1.4;
  white-space: pre-line;
}
.spell-controls {
  position: absolute;
  bottom: 90px;
  left: 50%;
  transform: translateX(-50%);
  text-align: center;
  width: min(420px,90%);
  pointer-events: none;
}
.spell-controls button {
  pointer-events: auto;
}
.spell-controls .scene-footnote {
  font-size: 16px;
  margin-top: 12px;
}
.wand-cursor {
  position: absolute;
  width: 35px;
  height: 35px;
  transform: translate(-50%,-50%);
  border-radius: 50%;
  background: #ffffee;
  box-shadow: 0 0 30px 15px #dafaff80,0 0 90px 50px #95d4e029;
  opacity: .8;
  pointer-events: none;
  mix-blend-mode: screen;
  transition: left .1s,top .1s;
}
.discovery {
  position: absolute;
  transform: translate(-50%,-50%);
  width: 60px;
  height: 60px;
  border-radius: 50%;
  color: #f5e9be;
  font-size: 38px;
  text-shadow: 0 0 16px #a6eaff;
  animation: glimmer 3s ease-in-out infinite;
  background: radial-gradient(circle,#73c7e022,transparent 70%);
}
.discovery:hover,.discovery:focus-visible {
  background: #c6e9eb30;
  outline: 1px solid #dfd7b8;
  outline-offset: 4px;
}
.discovery.discovered {
  color: #dbc184;
  text-shadow: 0 0 16px #edcd90;
}
.discovery-copy {
  padding: 18px 22px 10px;
  background: linear-gradient(0deg,#06151bee,#06151b66);
  border-top: 1px solid #dbd5b82e;
}
.discovery-copy .eyebrow {
  font-size: 11px;
  margin-bottom: 10px;
}
.discovery-copy p:last-child {
  font-size: 21px;
  line-height: 1.3;
  margin: 0;
}
.spell-found {
  display: flex;
  justify-content: center;
  gap: 17px;
  margin: 10px 0 19px;
  color: #a5b4b649;
  font-size: 13px;
}
.spell-found .found {
  color: var(--gold);
}
.is-lit .spell-heading {
  opacity: .9;
}
@keyframes glimmer {
  50% {
    filter: brightness(1.8);
    text-shadow: 0 0 25px #b5eaff;
    scale: 1.06;
  }
}
.atmosphere-castle .scene-art {
  background-position: center 28%;
  animation: castle-approach 30s ease-out both;
  background-size: cover;
}
.atmosphere-castle .scene-shade {
  background: linear-gradient(0deg,#06171bee 5%,#07171ca3 32%,#07171c05 78%),linear-gradient(90deg,#09203030,transparent);
}
.arrival-scene {
  align-items: flex-end;
  justify-content: center;
  text-align: center;
  padding-top: 35vh;
}
.arrival-copy {
  max-width: 740px;
  width: 100%;
  padding-top: 80px;
}
.arrival-copy .eyebrow {
  margin-bottom: 15px;
}
.arrival-copy .potter-title {
  font-size: clamp(95px,11vw,150px);
}
.arrival-subtitle {
  font-size: 28px;
  margin: 20px 0 0;
  color: #eadcc0;
}
.arrival-intro {
  font-size: 23px;
  line-height: 1.3;
  margin: 20px 0 25px;
}
.evening-moments {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px 24px;
  margin: 35px 0 10px;
}
.evening-moments button {
  font-family: Cinzel,Georgia,serif;
  text-transform: uppercase;
  letter-spacing: .04em;
  font-size: 11px;
  min-height: 38px;
  border-bottom: 1px solid transparent;
  color: #c7b894;
}
.evening-moments button:hover,.evening-moments button[aria-expanded=true] {
  border-color: #cfb071;
  color: #ffe5b1;
}
.moment-copy {
  max-width: 470px;
  margin: 5px auto 25px;
  line-height: 1.4;
}
.moment-copy h2 {
  font-size: 25px;
  color: #ecd7a8;
  font-weight: 400;
  margin: 5px 0 12px;
}
.moment-copy p {
  font-size: 19px;
  color: #c9c9bc;
}
.replay-link {
  font-style: italic;
  font-size: 16px;
  color: #b9b8a9;
  min-height: 40px;
  margin-top: 10px;
  border-bottom: 1px solid #9b9e8a33;
}
.replay-link:hover {
  color: #f4e3bc;
}
@keyframes castle-approach {
  from {
    transform: scale(1);
  }
  to {
    transform: scale(1.11);
  }
}
.details-dialog {
  background: radial-gradient(ellipse at top,#efe4c8,#dfcca5) !important;
  color: #273d33 !important;
  width: min(550px,calc(100vw - 24px)) !important;
  max-height: 90svh;
  overflow-y: auto;
  padding: 38px 38px 28px !important;
  border: 1px solid #d0b888 !important;
  border-radius: 1px !important;
  box-shadow: 0 20px 100px #000c !important;
  gap: 0 !important;
  font-family: Cormorant,Georgia,serif;
}
.details-dialog .eyebrow {
  color: #746039;
  text-align: center;
  font-size: 10px;
  margin: 7px 0 16px;
}
.details-title {
  font-family: Cormorant,Georgia,serif;
  font-weight: 500 !important;
  font-size: 43px !important;
  line-height: 1 !important;
  text-align: center;
  color: #243e32;
}
.details-description {
  font-family: Cormorant,Georgia,serif;
  color: #68674d !important;
  font-size: 19px !important;
  text-align: center;
  margin: 18px 0 24px !important;
}
.event-details {
  border-top: 1px solid #8d815a55;
  border-bottom: 1px solid #8d815a55;
  margin: 0;
  padding: 15px 0;
}
.event-details>div {
  display: grid;
  grid-template-columns: 65px 1fr;
  gap: 15px;
  padding: 6px 0;
  font-size: 18px;
}
.event-details dt {
  font-style: italic;
  color: #6b6c4f;
}
.event-details dd {
  margin: 0;
}
.event-notice {
  font-size: 17px;
  line-height: 1.35;
  color: #62664d;
  margin: 18px 0 24px;
}
.reply-form {
  display: flex;
  flex-direction: column;
  gap: 11px;
}
.reply-form>label {
  font-family: Cormorant,Georgia,serif;
  font-size: 19px;
  color: #233e32;
}
.reply-form input {
  height: 44px;
  background: #fff8dc44;
  color: #233e32;
  border-color: #6c765666;
  border-radius: 1px;
  font-family: Cormorant,Georgia,serif;
  font-size: 20px;
  box-shadow: none;
}
.reply-form input::placeholder {
  color: #6d745c;
}
.reply-choices {
  gap: 10px !important;
  margin: 9px 0 13px;
}
.reply-choices>div {
  display: flex;
  align-items: center;
  gap: 11px;
}
.reply-choices label {
  font-size: 18px;
  font-weight: 400;
}
.reply-choices button {
  color: #244132;
  border-color: #64765a;
}
.reply-form select {
  background: #fff8dc44;
  border-color: #6c765666;
  border-radius: 1px;
  height: 44px;
  font-family: Cormorant,Georgia,serif;
  font-size: 18px;
  width: 100%;
  color: #233e32;
}
.form-note {
  font-size: 15px;
  color: #677057;
  line-height: 1.35;
  margin: 0 0 10px;
}
.reply-form .story-button {
  background: #234234 !important;
  box-shadow: inset 0 0 0 4px #234234 !important;
  color: #f0ddb5 !important;
  border-color: #6f7957 !important;
}
.form-error {
  color: #91392c;
  font-size: 17px;
  line-height: 1.3;
  margin: 0 0 10px;
}
.gathering-note {
  text-align: center;
  font-size: 12px;
  color: #727057;
  margin: 20px 0 0;
}
.reply-success {
  text-align: center;
  padding: 15px 0 25px;
}
.success-star {
  font-size: 52px;
  color: #80703e;
}
.reply-success h2 {
  font-size: 36px;
  font-weight: 400;
  margin: 5px 0 15px;
}
.reply-success p {
  font-size: 20px;
  line-height: 1.4;
}
.reply-success .saved-response {
  font-size: 16px;
  font-style: italic;
}
.ink-link {
  font-size: 17px;
  color: #365f46;
  border-bottom: 1px solid #718266;
  min-height: 40px;
}
@media (min-width:1000px) {
  .spell-surface {
    left: 18%;
    right: 18%;
  }
  .spell-scene:before,.spell-scene:after {
    content: "";
    position: absolute;
    top: 0;
    bottom: 0;
    width: 25%;
    z-index: 1;
    pointer-events: none;
  }
  .spell-scene:before {
    left: 0;
    background: linear-gradient(90deg,#061219,transparent);
  }
  .spell-scene:after {
    right: 0;
    background: linear-gradient(270deg,#061219,transparent);
  }
  .spell-heading,.spell-controls {
    z-index: 2;
  }
}
@media (max-width:640px) {
  .story-footer {
    padding: 12px 21px;
    font-size: 11px;
    justify-content: space-between;
  }
  .footer-controls {
    gap: 15px;
  }
  .chapter-dots {
    gap: 7px;
  }
  .sound-toggle {
    gap: 6px;
  }
  .story-footer>span:last-child {
    display: block;
  }
  .letter-scene {
    padding: 90px 15px 100px;
  }
  .letter-scene .parchment {
    padding: 30px 29px;
  }
  .letter-scene .parchment p {
    font-size: 19px;
    line-height: 1.35;
  }
  .letter-scene h1 {
    font-size: 37px;
    margin-bottom: 18px;
  }
  .parchment .letter-postscript {
    font-size: 15px !important;
  }
  .parchment .eyebrow {
    font-size: 9px !important;
  }
  .salutation input {
    font-size: 23px;
    max-width: 220px;
  }
  .letter-crest {
    font-size: 38px;
  }
  .riddle-copy h1 {
    font-size: 43px;
  }
  .ticket-scene {
    align-items: center;
    padding: 105px 25px 100px;
  }
  .riddle-lines {
    font-size: 24px;
  }
  .ticket-reveal .eyebrow {
    font-size: 9px;
  }
  .rail-ticket {
    padding: 24px 24px 18px;
    max-width: 330px;
  }
  .rail-ticket h1 {
    font-size: 66px;
  }
  .ticket-name {
    font-size: 27px;
  }
  .spell-scene {
    padding: 0;
    min-height: 780px;
    height: 100svh;
  }
  .spell-heading {
    top: 100px;
  }
  .spell-heading h1 {
    font-size: 60px;
  }
  .spell-heading p:last-child {
    font-size: 20px;
  }
  .spell-controls {
    bottom: 75px;
  }
  .spell-controls .scene-footnote {
    font-size: 14px;
  }
  .discovery-copy p:last-child {
    font-size: 19px;
  }
  .spell-heading .eyebrow {
    font-size: 10px;
  }
  .train-art {
    background-size: auto 110%;
    background-position: 58% 52%;
  }
  .discovery {
    width: 58px;
    height: 58px;
  }
  .arrival-scene {
    padding: 300px 22px 100px;
    min-height: 100svh;
  }
  .arrival-copy {
    padding-top: 0;
  }
  .arrival-copy .potter-title {
    font-size: 98px;
  }
  .arrival-subtitle {
    font-size: 24px;
  }
  .arrival-intro {
    font-size: 22px;
  }
  .evening-moments {
    gap: 4px 20px;
    margin-top: 26px;
  }
  .evening-moments button {
    font-size: 10px;
  }
  .atmosphere-castle .scene-art {
    background-size: auto 86%;
    background-position: 47% top;
    background-repeat: no-repeat;
  }
  .atmosphere-castle .scene-shade {
    background: linear-gradient(0deg,#06151b 1%,#06151bf0 25%,#06151b90 47%,#06151b05 75%);
  }
  .details-dialog {
    padding: 32px 25px 25px !important;
  }
  .details-title {
    font-size: 38px !important;
  }
  .details-description {
    font-size: 18px !important;
  }
  .reply-choices label {
    font-size: 17px;
  }
  .chapter-dots {
    display: none;
  }
}
@media (max-height:700px) and (min-width:641px) {
  .opening-scene {
    min-height: 720px;
  }
  .spell-scene {
    min-height: 760px;
  }
  .story-header {
    position: absolute;
  }
  .opening-copy {
    padding-top: 10px;
  }
}
@media (max-width:640px) {
  .atmosphere-owl .scene-art {
    background-position: right 37%;
  }
  .story-footer {
    font-size: 13px;
  }
  .sound-toggle span,.details-link {
    font-size: 13px;
  }
}
.owl-cinema {
  height: 100svh;
  min-height: 480px;
  position: relative;
  overflow: hidden;
  background: #071014;
}
.scene-film {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
}
.scene-film video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.cinema-vignette {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(180deg,#03070c40,transparent 20%,transparent 65%,#03070ca3);
}
.cinema-mark {
  position: absolute;
  top: max(30px,env(safe-area-inset-top));
  left: 0;
  right: 0;
  text-align: center;
  font-family: Potter,Georgia,serif;
  font-size: 34px;
  color: #f0dfbccc;
  text-shadow: 0 2px 14px #0008;
  pointer-events: none;
}
.cinema-mark span {
  display: block;
  font-family: Cinzel,Georgia,serif;
  font-size: 12px;
  letter-spacing: .35em;
  margin-top: 5px;
}
.cinema-caption {
  position: absolute;
  bottom: 17%;
  left: 8%;
  right: 8%;
  font-style: italic;
  font-size: clamp(25px,3vw,38px);
  line-height: 1.2;
  text-align: center;
  text-shadow: 0 2px 18px #000,0 0 60px #000;
  margin: 0;
  pointer-events: none;
}
.cinema-controls {
  position: absolute;
  bottom: max(22px,env(safe-area-inset-bottom));
  left: 5%;
  right: 5%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  color: #e8ddc8;
}
.cinema-controls button {
  font-family: Cormorant,Georgia,serif;
  font-size: 17px;
  min-height: 44px;
  padding: 10px 4px;
  text-shadow: 0 2px 12px #000;
  transition: color .3s;
}
.cinema-controls button:last-child {
  border-bottom: 1px solid #ead9b366;
}
.cinema-controls button:hover {
  color: #fff4db;
}
.cinema-controls button:active {
  transform: translateY(1px);
}
.cinema-sound {
  width: 44px;
  display: grid;
  place-items: center;
  border: 1px solid #e3ce9b4a;
  border-radius: 50%;
  background: #08131b33;
}
.cinema-resume {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: #05101b40;
  text-align: center;
  padding: 24px;
}
.cinema-resume p {
  font-size: 28px;
  max-width: 280px;
  text-shadow: 0 3px 20px #000;
}
.cinema-resume button {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 20px;
  background: #0b1b20d9;
  border: 1px solid #dabd8377;
  font-size: 20px;
}
.film-transition {
  position: absolute;
  inset: 0;
  z-index: 20;
}
.stage-0 {
  height: 100svh;
}
.stage-0 .scene-transition {
  min-height: 100svh;
}
.letter-scene {
  isolation: isolate;
}
.letter-scene .parchment {
  transform-origin: center top;
  background: linear-gradient(90deg,#9e793b19,transparent 6%,transparent 94%,#9e793b19),radial-gradient(ellipse at 50% 10%,#f4e9cd,#d7c095);
  border: 0;
  box-shadow: 0 12px 80px #000a,inset 0 0 90px #855c2529;
}
.letter-scene .parchment:after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 46%;
  height: 1px;
  background: #9c855821;
  box-shadow: 0 1px 1px #fff6;
  pointer-events: none;
}
@media (min-width:900px) {
  .owl-cinema .scene-film video {
    object-position: 50% 45%;
  }
  .cinema-controls {
    left: 40px;
    right: 40px;
  }
}
.motion-toggle {
  display: grid;
  place-items: center;
  width: 38px;
}
.footer-controls {
  gap: 14px;
}
.is-still *, .is-still:before, .is-still:after {
  animation-play-state: paused !important;
}
.scene-film.scene-art {
  inset: 0;
  animation: none;
  background-size: cover;
}
.scene-film.scene-art video {
  object-position: center;
}
.atmosphere-castle .scene-film video {
  object-position: 50% 35%;
}
@media (max-width:640px) {
  .footer-controls {
    gap: 10px;
  }
  .motion-toggle {
    width: 30px;
  }
  .sound-toggle span {
    display: none;
  }
  .story-header .chapter-name {
    font-size: 12px;
  }
  .wordmark {
    font-size: 12px;
  }
  .evening-moments button {
    font-size: 12px;
  }
  .parchment .eyebrow {
    font-size: 12px !important;
  }
  .letter-scene .parchment .eyebrow {
    letter-spacing: .06em;
  }
  .parchment .letter-postscript {
    font-size: 16px !important;
  }
}
.stage-1 .scene-shade {
  background: linear-gradient(90deg,#140c0666,#100b0930,#140c0666);
}
.atmosphere-owl .scene-film.scene-art {
  background-size: cover;
}
.atmosphere-owl .scene-film video {
  object-position: 50% 50%;
}
.atmosphere-train .scene-film video {
  filter: brightness(.75);
  object-position: center;
}
.atmosphere-castle .scene-film video {
  filter: brightness(.9);
}
@media (max-width:640px) {
  .letter-scene {
    padding-top: 88px;
  }
  .atmosphere-castle .scene-film video {
    object-position: 49% 30%;
    height: 100%;
  }
  .atmosphere-castle .scene-shade {
    background: linear-gradient(0deg,#06151bf2 0%,#06151ba6 30%,#06151b05 76%);
  }
}
.letter-crest {
  width: 190px;
  margin: -7px auto 10px;
  mix-blend-mode: multiply;
  filter: grayscale(1) sepia(.55);
}
.letter-crest img {
  width: 100%;
  height: auto;
}
.letter-scene .parchment .eyebrow {
  margin-top: 0;
}
.letter-scene .parchment>p:not(.eyebrow),.letter-scene .salutation {
  animation: ink-arrive 1.3s .3s both;
}
.letter-scene .signature {
  animation-delay: .6s;
}
.story-world {
  display: grid;
  grid-template-columns: minmax(0,1fr);
}
.scene-transition {
  grid-area: 1/1;
  width: 100%;
  align-self: start;
}
@media (max-width:640px) {
  .atmosphere-train .scene-film video {
    object-position: 77% center;
  }
}
.diary-discovery {
  position: relative;
  height: 100svh;
  min-height: 480px;
  overflow: hidden;
  background: #030608;
  isolation: isolate;
}
.diary-discovery .scene-film {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
}
.diary-discovery .scene-film:before {
  content: '';
  position: absolute;
  inset: 0;
  background: inherit;
  filter: blur(30px) brightness(.35);
  transform: scale(1.1);
}
.diary-discovery .scene-film video {
  position: relative;
  width: 100%;
  height: 100%;
  object-fit: contain;
}
.discovery-dark {
  position: absolute;
  inset: 0;
  z-index: 3;
  background: #000;
  opacity: 0;
  pointer-events: none;
  transition: opacity .9s ease-in-out;
}
.discovery-ending .discovery-dark {
  opacity: 1;
}
.discovery-controls {
  position: absolute;
  inset: auto 24px 60px;
  z-index: 2;
  text-align: center;
  display: flex;
  gap: 12px;
  justify-content: center;
  flex-wrap: wrap;
}
.discovery-controls button {
  padding: 14px 23px;
  background: #101a1eef;
  border: 1px solid #bea36d;
  color: #eddfbd;
  font: 17px Cormorant,Georgia,serif;
}
.diary-signature {
  font-size: clamp(28px,5vw,42px);
  font-style: italic;
  margin: 16px 0 25px;
  text-align: center;
}
.anagram-type-label {
  display: block;
  text-align: center;
  font-size: 17px;
  margin: 22px 0 8px;
}
.anagram-type-input {
  display: block;
  width: min(100%,380px);
  margin: auto;
  padding: 12px 10px;
  font: 20px Georgia,serif;
  letter-spacing: .08em;
  text-align: center;
  text-transform: uppercase;
  color: #302719;
  background: #fff7da55;
  border: 1px solid #77684b;
  border-radius: 3px;
}
.anagram-type-input:focus {
  outline: 2px solid #786029;
  outline-offset: 3px;
}
.anagram-type-help {
  font-size: 15px;
  text-align: center;
  margin: 8px 0 20px;
}
.salutation-generic {
  display: block !important;
  font-style: italic;
  font-size: 27px !important;
  margin: 25px 0 20px !important;
}
.party-invitation-stage {
  isolation: isolate;
}
.party-invitation {
  border: 1px solid #c9ab6b !important;
  box-shadow: 0 25px 110px #000c,0 0 80px #d6a74f22 !important;
}
.party-invitation .invitation-gilt-frame {
  border: 1px solid #846b39 !important;
  inset: 17px !important;
}
.party-invitation .invitation-gilt-frame:after {
  content: '';
  position: absolute;
  inset: 6px;
  border: 1px solid #846b3966;
}
.party-overline {
  letter-spacing: .16em !important;
  line-height: 1.7 !important;
  max-width: 310px;
  margin: 0 auto !important;
}
.invitation-constellation {
  font-size: 22px;
  letter-spacing: .3em;
  color: #8f6b32;
  margin: 17px 0;
}
.party-invitation h1 {
  filter: drop-shadow(0 2px 0 #fff3);
}
.party-house-ribbons {
  gap: 9px !important;
  margin: 25px 0 !important;
}
.party-house-ribbons i {
  height: 44px !important;
  width: 30px !important;
  display: grid;
  place-items: center;
  color: #eacf90;
  font-style: normal;
  font: 15px Georgia,serif;
  border-top: 2px solid #c6a467;
  clip-path: polygon(0 0,100% 0,100% 100%,50% 80%,0 100%);
  padding-bottom: 9px;
}
.party-house-ribbons i:nth-child(1) {
  background: #682b2c;
}
.party-house-ribbons i:nth-child(2) {
  background: #274a39;
}
.party-house-ribbons i:nth-child(3) {
  background: #263d58;
}
.party-house-ribbons i:nth-child(4) {
  background: #ae8935;
  color: #352b1e;
}
.party-invite-to {
  font-style: italic !important;
}
.party-details {
  border-top: 1px solid #7b623f66 !important;
  border-bottom: 1px solid #7b623f66 !important;
  padding: 19px 0 !important;
  margin: 26px 0 !important;
}
.invitation-wax-seal {
  box-shadow: inset 0 0 0 4px #753125,inset 0 0 0 6px #a76b42,0 5px 13px #30201155 !important;
}
.feast-candles {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: -1;
}
.feast-candles i {
  position: absolute;
  top: var(--candle-top);
  left: calc(6% + var(--candle)*11%);
  width: 9px;
  height: 62px;
  background: linear-gradient(90deg,#9c845d,#efdaae 45%,#bda171);
  border-radius: 3px;
  box-shadow: 0 0 25px #e8b15333;
  animation: candle-float 6s calc(var(--candle)*-.8s) ease-in-out infinite;
}
.feast-candles i:before {
  content: '';
  position: absolute;
  left: 0;
  top: -18px;
  width: 9px;
  height: 19px;
  border-radius: 70% 35% 65% 30%;
  background: #fff3bd;
  box-shadow: 0 0 13px 6px #e7a14277,0 0 35px 13px #e7a14233;
  animation: candle-flame 1.8s infinite alternate;
}
@keyframes candle-float {
  50% {
    translate: 0 -20px;
  }
}
@keyframes candle-flame {
  to {
    transform: scale(.8,1.1);
    opacity: .8;
  }
}
.plus-one-choice {
  display: flex;
  gap: 12px;
  align-items: center;
  padding: 15px 0;
  border-top: 1px solid #84734455;
  border-bottom: 1px solid #84734455;
  color: #263c31;
  font-size: 20px;
  cursor: pointer;
}
.reply-form .plus-one-choice input {
  width: 20px;
  height: 20px;
  flex-shrink: 0;
  accent-color: #294b35;
  cursor: pointer;
}
.plus-one-choice small {
  display: block;
  font-size: 15px;
  color: #6e7058;
  margin-top: 3px;
}
.optional-label {
  font-size: 15px;
  font-weight: 400;
  color: #686e54;
}
.sorting-ceremony {
  position: relative;
  isolation: isolate;
  text-align: center;
  padding: 9px 10px 20px;
  margin: 4px 0 10px;
  background: radial-gradient(ellipse at 50% 35%,#c2a36838,transparent 70%);
  border-bottom: 1px solid #89713e44;
}
.sorting-hat-art {
  position: relative;
  width: 180px;
  height: 155px;
  margin: auto;
  z-index: 1;
  filter: drop-shadow(0 10px 8px #66513144);
}
.hat-thinking .sorting-hat-art {
  animation: hat-thought 1.1s ease-in-out infinite;
}
.hat-thinking .hat-mouth {
  animation: hat-murmur .6s infinite alternate;
  transform-origin: 120px 144px;
}
.hat-orbit {
  position: absolute;
  top: 50px;
  left: calc(50% - 100px);
  width: 200px;
  height: 90px;
  color: #967336;
}
.hat-orbit span {
  position: absolute;
  font-size: 22px;
}
.hat-orbit span:nth-child(1) {
  left: 0;
  top: 55px;
}
.hat-orbit span:nth-child(2) {
  right: 0;
  top: 10px;
}
.hat-orbit span:nth-child(3) {
  right: 20px;
  top: 80px;
}
.hat-thinking .hat-orbit {
  animation: hat-sparkle 1.4s infinite alternate;
}
.hat-whisper {
  font-style: italic;
  color: #676048;
  font-size: 17px;
  margin: 2px 0 7px;
}
.hat-house {
  font-family: Cinzel,Georgia,serif;
  font-size: 25px;
  color: var(--house-color,#594a2c);
  margin: 0 !important;
}
.hat-house-note {
  font-size: 15px;
  color: #6b644c;
  margin: 8px 0 0;
}
.house-gryffindor {
  --house-color: #81332d;
}
.house-hufflepuff {
  --house-color: #79601d;
}
.house-ravenclaw {
  --house-color: #294d75;
}
.house-slytherin {
  --house-color: #2c5b3f;
}
.hat-revealed .hat-house {
  animation: house-reveal .8s ease-out both;
}
.saved-house-badge {
  border: 1px solid #96805a77;
  padding: 22px;
  margin: 22px 0;
  color: var(--house-color,#4a5938);
  background: #fbebbd44;
}
.saved-house-badge small,.saved-house-badge span {
  display: block;
  font-size: 15px;
}
.saved-house-badge strong {
  display: block;
  font: 27px Cinzel,Georgia,serif;
  margin: 9px 0 12px;
}
@keyframes hat-thought {
  25% {
    rotate: -4deg;
  }
  75% {
    rotate: 4deg;
  }
}
@keyframes hat-murmur {
  to {
    transform: scaleY(.5);
  }
}
@keyframes hat-sparkle {
  to {
    opacity: .3;
    transform: scale(.93);
  }
}
@keyframes house-reveal {
  from {
    opacity: 0;
    transform: translateY(10px);
    filter: blur(4px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
    filter: blur(0);
  }
}
@media (prefers-reduced-motion:reduce) {
  .feast-candles i,.feast-candles i:before,.hat-thinking .sorting-hat-art,.hat-thinking .hat-mouth,.hat-thinking .hat-orbit,.hat-revealed .hat-house {
    animation: none !important;
  }
}
.guest-dashboard {
  min-height: 100svh;
  background: radial-gradient(ellipse at 80% 0,#25403844,transparent 40%),#0c1817;
  color: #e9ddc5;
  padding: 35px max(24px,calc((100vw - 1120px)/2)) 70px;
}
.guest-desk-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  border-bottom: 1px solid #a4895544;
  padding-bottom: 25px;
  gap: 20px;
}
.guest-desk-brand {
  font-family: Potter,Georgia,serif;
  font-size: 44px;
  color: #dfc791;
  text-decoration: none;
  line-height: .9;
}
.guest-desk-brand span {
  display: block;
  font: 10px Cinzel,Georgia,serif;
  letter-spacing: .3em;
  text-transform: uppercase;
  text-align: center;
  margin-top: 10px;
}
.guest-desk-header>span {
  font: 10px Arial,sans-serif;
  letter-spacing: .17em;
  color: #c6b485;
}
.guest-desk-intro {
  padding: 55px 0 35px;
}
.guest-desk-intro .eyebrow {
  margin-bottom: 19px;
}
.guest-desk-intro h1 {
  font-size: clamp(44px,7vw,76px);
  line-height: .95;
  font-weight: 400;
  margin: 0 0 22px;
}
.guest-desk-intro h1 em {
  color: #d8b96f;
}
.guest-desk-intro>p:last-child {
  font-size: 21px;
  color: #aeb9ad;
}
.guest-desk-metrics {
  display: grid;
  grid-template-columns: repeat(4,1fr);
  gap: 14px;
  margin-bottom: 40px;
}
.guest-desk-metrics>div {
  padding: 22px;
  border: 1px solid #a0895155;
  background: #182622;
}
.guest-desk-metrics span {
  display: block;
  font: 11px Arial,sans-serif;
  letter-spacing: .05em;
  text-transform: uppercase;
  color: #d4c49e;
}
.guest-desk-metrics strong {
  display: block;
  font-size: 51px;
  font-weight: 400;
  line-height: 1.3;
  color: #f1dfb5;
}
.guest-desk-metrics small {
  font-size: 15px;
  color: #a5b1a4;
}
.guest-ledger {
  background: #e7dabd;
  color: #283b30;
  padding: 30px;
  box-shadow: 0 15px 50px #0003;
  border: 1px solid #bd9d60;
}
.guest-ledger-heading {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 20px;
  margin-bottom: 25px;
}
.guest-ledger-heading h2 {
  font-size: 33px;
  font-weight: 500;
  margin: 0;
}
.guest-ledger .eyebrow {
  color: #7f683c;
  margin: 0 0 9px;
  font-size: 10px;
}
.guest-dashboard button,.guest-desk-access>a {
  background: #284534;
  color: #f2e0b7;
  padding: 12px 18px;
  border: 1px solid #6c805b;
  font-size: 17px;
  border-radius: 2px;
}
.guest-dashboard button:disabled {
  opacity: .6;
}
.guest-ledger-filters {
  display: grid;
  grid-template-columns: 1fr 200px;
  gap: 20px;
}
.guest-dashboard label {
  display: flex;
  flex-direction: column;
  gap: 7px;
  font-size: 17px;
}
.guest-dashboard input,.guest-dashboard select {
  background: #fff7dd55;
  color: #243c2e;
  border: 1px solid #929676;
  padding: 11px 12px;
  font: 17px Georgia,serif;
  min-width: 0;
  min-height: 44px;
  border-radius: 2px;
}
.guest-dashboard input:focus,.guest-dashboard select:focus {
  outline: 2px solid #8c753f;
  outline-offset: 2px;
}
.guest-ledger-note {
  font-size: 15px;
  color: #69705b;
  margin: 18px 0 25px;
}
.guest-ledger-scroll {
  overflow: auto;
}
.guest-ledger table {
  width: 100%;
  border-collapse: collapse;
  font-size: 17px;
  text-align: left;
  min-width: 660px;
}
.guest-ledger th {
  font: 10px Arial,sans-serif;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: #726340;
  border-bottom: 1px solid #9b8b63;
  padding: 12px 12px 12px 0;
}
.guest-ledger td {
  padding: 17px 12px 17px 0;
  border-bottom: 1px solid #9b8b6333;
  vertical-align: top;
}
.guest-ledger td strong {
  font-size: 21px;
  font-weight: 500;
  overflow-wrap: anywhere;
}
.guest-ledger td small {
  display: block;
  font-size: 15px;
  color: #68725f;
  margin-top: 5px;
}
.guest-house {
  display: inline-block;
  font-size: 14px;
  color: var(--house-color,#56634b);
  padding: 4px 7px;
  border: 1px solid currentColor;
}
.guest-desk-privacy {
  font-size: 15px;
  color: #9fab9d;
  margin: 23px 0;
}
.guest-ledger-empty {
  text-align: center;
  padding: 40px 15px;
}
.guest-ledger-empty>span {
  font-size: 45px;
  color: #967638;
}
.guest-ledger-empty h3 {
  font-size: 27px;
  font-weight: 400;
  margin: 8px 0;
}
.guest-ledger-empty p {
  font-size: 18px;
  color: #65715a;
}
.guest-desk-access {
  max-width: 440px;
  background: #e7dabd;
  color: #2f412f;
  padding: 30px;
  border: 1px solid #b99c66;
}
.guest-desk-access form {
  display: grid;
  gap: 15px;
}
.guest-desk-access h2 {
  font-size: 32px;
  font-weight: 400;
  margin: 0;
}
.guest-desk-access p {
  font-size: 18px;
  margin: 0 0 7px;
}
.guest-desk-error {
  background: #562b27;
  color: #ffe1d1;
  border: 1px solid #a5654e;
  padding: 15px 20px;
  font-size: 18px;
}
.guest-desk-access>a {
  display: inline-block;
}
@media (max-width:680px) {
  .guest-desk-metrics {
    grid-template-columns: repeat(2,1fr);
    gap: 10px;
  }
  .guest-desk-metrics>div {
    padding: 18px;
  }
  .guest-ledger {
    padding: 22px 18px;
  }
  .guest-ledger-heading {
    align-items: flex-start;
  }
  .guest-ledger-heading h2 {
    font-size: 28px;
  }
  .guest-ledger-heading button {
    font-size: 15px;
    padding: 10px;
  }
  .guest-ledger-filters {
    grid-template-columns: 1fr;
  }
  .guest-desk-header>span {
    font-size: 9px;
  }
  .guest-desk-intro {
    padding-top: 42px;
  }
  .guest-dashboard {
    padding-left: 18px;
    padding-right: 18px;
  }
}
.owl-playback-status {
  position: absolute;
  inset: auto 20px 110px;
  z-index: 8;
  text-align: center;
  color: #f4dfb5;
  text-shadow: 0 2px 14px #000;
}
.owl-playback-status p {
  font-size: 21px;
}
.owl-playback-status button {
  padding: 14px 24px;
  border: 1px solid #d9bd7a;
  background: #10201feb;
  color: #f4dfb5;
  font: 19px Cormorant,Georgia,serif;
  border-radius: 3px;
  min-height: 48px;
}
.story-world .warning-letter .salutation-generic {
  font-family: Cormorant,Georgia,serif;
  font-size: 25px !important;
  font-weight: 400;
  font-style: italic;
  line-height: 1.4;
}
.owl-cinema .cinema-caption {
  font-family: Georgia,serif;
  font-style: normal;
  font-weight: 600;
  font-size: clamp(24px,3vw,36px);
  line-height: 1.45;
  letter-spacing: .01em;
  color: #fff8e7;
  padding: 20px 12px;
  text-wrap: balance;
  text-shadow: 0 2px 4px #000,0 0 16px #000,0 0 35px #000;
  background: radial-gradient(ellipse,#02080cb3,transparent 72%);
}
#letter-title:focus {
  outline: none;
  box-shadow: none;
}
.letter-scene .warning-letter .letter-crest {
  width: 165px;
  mix-blend-mode: multiply;
  background: transparent;
  filter: grayscale(1) contrast(1.1);
}
.letter-scene .warning-letter .signature em {
  font-size: 27px;
  line-height: 1.4;
}
.diary-awakened .diary-page {
  animation: diary-recognition 4.5s ease-in both;
}
@keyframes diary-recognition {
  0%,45% {
    box-shadow: 0 18px 80px #0005;
  }
  70% {
    box-shadow: 0 18px 90px #0009,0 0 45px #6496a329;
  }
  100% {
    box-shadow: 0 18px 120px #000,inset 0 0 65px #182d3677;
    filter: brightness(.78);
  }
}
.story-world .smoke-cloud,.story-world .smoke-veil {
  animation-duration: 2s;
}
.story-world .smoke-cloud {
  background: radial-gradient(ellipse at 28% 62%,#02070bf5 4%,#122029ee 18%,#010305 34%,transparent 52%),radial-gradient(ellipse at 68% 45%,#162832ed 6%,#010406f5 31%,transparent 53%);
}
.story-world .smoke-veil {
  background: #020508;
}
@media (prefers-reduced-motion:reduce) {
  .diary-awakened .diary-page {
    animation: none;
  }
}
.patronus-encounter {
  position: relative;
  height: 100svh;
  min-height: 540px;
  overflow: hidden;
  background: #02080c;
  isolation: isolate;
  color: #f1faff;
}
.patronus-encounter .encounter-film {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
}
.patronus-encounter .encounter-film:before {
  content: '';
  position: absolute;
  inset: -5%;
  background: inherit;
  filter: blur(30px) brightness(.3);
}
.patronus-encounter .encounter-film video {
  position: relative;
  width: 100%;
  height: 100%;
  object-fit: contain;
}
.encounter-victory-film {
  position: absolute;
  inset: 0;
  opacity: 0;
  pointer-events: none;
}
.encounter-victory-film.is-visible {
  opacity: 1;
}
.patronus-game {
  position: absolute;
  inset: 0;
  animation: patronus-guide-in .8s ease both;
}
.patronus-game-title {
  position: absolute;
  top: 105px;
  left: 20px;
  right: 20px;
  text-align: center;
  text-shadow: 0 2px 12px #000,0 0 30px #000;
}
.patronus-game-title h1 {
  font: 500 clamp(28px,5vw,40px) Cormorant,Georgia,serif;
  margin: 0;
}
.patronus-game-title h1:focus {
  outline: none;
}
.patronus-game-title p {
  font: italic 17px Cormorant,Georgia,serif;
  margin: 7px 0;
  color: #dce6e7;
}
.patronus-tracing {
  position: absolute;
  width: min(88vw,440px,58svh);
  aspect-ratio: 1;
  top: 49%;
  left: 50%;
  transform: translate(-50%,-50%);
  touch-action: none;
  cursor: crosshair;
  outline: none;
}
.patronus-tracing:focus-visible {
  outline: 1px solid #bce7f577;
  border-radius: 50%;
}
.patronus-tracing svg {
  width: 100%;
  height: 100%;
  overflow: visible;
  filter: drop-shadow(0 0 8px #98e8ff88);
}
.patronus-track {
  stroke: #ceefff99;
  stroke-width: 8;
  fill: none;
  stroke-linecap: round;
}
.patronus-track-filled {
  stroke: #fff;
  stroke-width: 12;
  fill: none;
  stroke-linecap: round;
}
.patronus-start,.patronus-guide-spark {
  fill: #fff;
  filter: drop-shadow(0 0 18px #90e3ff);
}
.patronus-start {
  animation: patronus-start-pulse 1.5s ease infinite;
}
.patronus-arrow {
  stroke: #f0fbff;
  stroke-width: 8;
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.patronus-user-trail {
  stroke: #b8f5ff;
  stroke-width: 6;
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.patronus-instruction {
  position: absolute;
  bottom: 90px;
  left: 20px;
  right: 20px;
  text-align: center;
  text-shadow: 0 2px 10px #000;
}
.patronus-instruction>p {
  font: 20px Cormorant,Georgia,serif;
  margin: 0 0 14px;
}
.patronus-instruction button {
  font: 14px Georgia,serif;
  color: #ecf7fb;
  padding: 10px 15px;
  background: #07131c99;
  border: 1px solid #b5d6e344;
  border-radius: 3px;
}
.patronus-instruction>div:not(.patronus-time) {
  background: #061018ed;
  padding: 12px;
  border: 1px solid #b5d6e344;
  max-width: 390px;
  margin: auto;
  font-size: 17px;
}
.patronus-time {
  width: min(220px,65vw);
  height: 3px;
  margin: 0 auto 12px;
  background: #ffffff33;
  overflow: hidden;
}
.patronus-time i {
  display: block;
  width: 100%;
  height: 100%;
  background: #d8f7ff;
  transform-origin: left;
  transition: transform .2s linear;
}
.patronus-cast-veil {
  position: absolute;
  inset: 0;
  z-index: 5;
  pointer-events: none;
  opacity: 0;
  background: radial-gradient(ellipse,#fff 15%,#eafaff 65%,#bbe9f8);
  transition: opacity .8s ease-out;
}
.patronus-cast-veil.is-bright {
  opacity: 1;
  transition-duration: .28s;
}
.encounter-message {
  position: absolute;
  inset: 0;
  z-index: 6;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  background: #020910d9;
  padding: 30px;
}
.encounter-message h1 {
  font: 42px Cormorant,Georgia,serif;
  margin: 0;
}
.encounter-message p {
  font: 23px Cormorant,Georgia,serif;
}
.encounter-message button {
  padding: 16px 30px;
  border: 1px solid #d1b775;
  background: #21392f;
  color: #f3dfb0;
  font: 20px Cormorant,Georgia,serif;
}
@keyframes patronus-guide-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes patronus-start-pulse {
  50% {
    opacity: .55;
  }
}
@media (prefers-reduced-motion:reduce) {
  .patronus-game,.patronus-start {
    animation: none;
  }
  .patronus-cast-veil {
    transition: none;
  }
}
.soul-label {
  display: block;
  font: 11px Georgia,serif;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: #d4eff7;
  margin: 0 auto 8px;
  text-shadow: 0 1px 8px #000;
}
.patronus-time {
  height: 6px;
  border-radius: 8px;
  border: 1px solid #b8deee66;
  box-shadow: 0 0 18px #7dcced44;
  background: #081320b3;
}
.patronus-time i {
  background: linear-gradient(90deg,#80b1cf,#d3f8ff,#fff);
  box-shadow: 0 0 12px #b6edff;
}
.soul-critical .soul-label {
  color: #f4cfbb;
}
.soul-critical .patronus-time i {
  background: linear-gradient(90deg,#ac7774,#ffded1);
}
@property --tw-translate-x {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-translate-y {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-translate-z {
  syntax: "*";
  inherits: false;
  initial-value: 0;
}
@property --tw-rotate-x {
  syntax: "*";
  inherits: false;
}
@property --tw-rotate-y {
  syntax: "*";
  inherits: false;
}
@property --tw-rotate-z {
  syntax: "*";
  inherits: false;
}
@property --tw-skew-x {
  syntax: "*";
  inherits: false;
}
@property --tw-skew-y {
  syntax: "*";
  inherits: false;
}
@property --tw-border-style {
  syntax: "*";
  inherits: false;
  initial-value: solid;
}
@property --tw-leading {
  syntax: "*";
  inherits: false;
}
@property --tw-font-weight {
  syntax: "*";
  inherits: false;
}
@property --tw-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-shadow-color {
  syntax: "*";
  inherits: false;
}
@property --tw-shadow-alpha {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 100%;
}
@property --tw-inset-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-inset-shadow-color {
  syntax: "*";
  inherits: false;
}
@property --tw-inset-shadow-alpha {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 100%;
}
@property --tw-ring-color {
  syntax: "*";
  inherits: false;
}
@property --tw-ring-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-inset-ring-color {
  syntax: "*";
  inherits: false;
}
@property --tw-inset-ring-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-ring-inset {
  syntax: "*";
  inherits: false;
}
@property --tw-ring-offset-width {
  syntax: "<length>";
  inherits: false;
  initial-value: 0px;
}
@property --tw-ring-offset-color {
  syntax: "*";
  inherits: false;
  initial-value: #fff;
}
@property --tw-ring-offset-shadow {
  syntax: "*";
  inherits: false;
  initial-value: 0 0 #0000;
}
@property --tw-outline-style {
  syntax: "*";
  inherits: false;
  initial-value: solid;
}
@property --tw-duration {
  syntax: "*";
  inherits: false;
}
@keyframes enter {
  from {
    opacity: var(--tw-enter-opacity,1);
    transform: translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));
    filter: blur(var(--tw-enter-blur,0));
  }
}
@keyframes exit {
  to {
    opacity: var(--tw-exit-opacity,1);
    transform: translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));
    filter: blur(var(--tw-exit-blur,0));
  }
}
@layer properties {
  @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
    :root, :host {
      --shimmer-angle: 20deg;
    }
    *, ::before, ::after, ::backdrop {
      --tw-translate-x: 0;
      --tw-translate-y: 0;
      --tw-translate-z: 0;
      --tw-rotate-x: initial;
      --tw-rotate-y: initial;
      --tw-rotate-z: initial;
      --tw-skew-x: initial;
      --tw-skew-y: initial;
      --tw-border-style: solid;
      --tw-leading: initial;
      --tw-font-weight: initial;
      --tw-shadow: 0 0 #0000;
      --tw-shadow-color: initial;
      --tw-shadow-alpha: 100%;
      --tw-inset-shadow: 0 0 #0000;
      --tw-inset-shadow-color: initial;
      --tw-inset-shadow-alpha: 100%;
      --tw-ring-color: initial;
      --tw-ring-shadow: 0 0 #0000;
      --tw-inset-ring-color: initial;
      --tw-inset-ring-shadow: 0 0 #0000;
      --tw-ring-inset: initial;
      --tw-ring-offset-width: 0px;
      --tw-ring-offset-color: #fff;
      --tw-ring-offset-shadow: 0 0 #0000;
      --tw-outline-style: solid;
      --tw-duration: initial;
      --tw-animation-delay: 0s;
      --tw-animation-direction: normal;
      --tw-animation-duration: initial;
      --tw-animation-fill-mode: none;
      --tw-animation-iteration-count: 1;
      --tw-enter-blur: 0;
      --tw-enter-opacity: 1;
      --tw-enter-rotate: 0;
      --tw-enter-scale: 1;
      --tw-enter-translate-x: 0;
      --tw-enter-translate-y: 0;
      --tw-exit-blur: 0;
      --tw-exit-opacity: 1;
      --tw-exit-rotate: 0;
      --tw-exit-scale: 1;
      --tw-exit-translate-x: 0;
      --tw-exit-translate-y: 0;
      --scroll-fade-t: 0px;
      --scroll-fade-b: 0px;
      --scroll-fade-s: 0px;
      --scroll-fade-e: 0px;
      --scroll-fade-mask: initial;
      --shimmer-image: initial;
      --shimmer-text-fill: initial;
    }
  }
}
