/* Kokiri Green theme for voidauth 1.14.3 — forest surfaces, gold accents,
   Hylia Serif headings, forced-open left sidebar on desktop.
   Load order: generated-mat-theme.css -> custom.css -> app styles bundle,
   so html{} var overrides win vs theme; component fights need !important.
   Sidebar CSS is coupled to voidauth 1.14.3 templates — re-check on image
   bumps: drawer position="end", .mat-drawer* classes, [mat-subheader],
   hamburger = .right-actions > button[mat-icon-button]. */

/* ---- Hylia Serif (display font, latin subset, self-contained) ---- */
@font-face {
  font-family: "Hylia Serif";
  src: url("data:font/woff2;base64,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") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

/* ---- Typography: Hylia Serif everywhere via M3 system tokens ----
   Components + voidauth body{} consume the -font PART tokens; the
   shorthands are emitted flat (family baked in) so recompose them.
   Token route never touches mat-icon (family via .material-icons-round). */
html {
  --brand-font: "Hylia Serif", Georgia, "Times New Roman", serif,
                "Noto Flag Emoji", "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";
  --mono-font: ui-monospace, "SFMono-Regular", Menlo, Consolas, "Liberation Mono", monospace;

  --mat-sys-body-large-font: var(--brand-font);
  --mat-sys-body-medium-font: var(--brand-font);
  --mat-sys-body-small-font: var(--brand-font);
  --mat-sys-display-large-font: var(--brand-font);
  --mat-sys-display-medium-font: var(--brand-font);
  --mat-sys-display-small-font: var(--brand-font);
  --mat-sys-headline-large-font: var(--brand-font);
  --mat-sys-headline-medium-font: var(--brand-font);
  --mat-sys-headline-small-font: var(--brand-font);
  --mat-sys-label-large-font: var(--brand-font);
  --mat-sys-label-medium-font: var(--brand-font);
  --mat-sys-label-small-font: var(--brand-font);
  --mat-sys-title-large-font: var(--brand-font);
  --mat-sys-title-medium-font: var(--brand-font);
  --mat-sys-title-small-font: var(--brand-font);

  --mat-sys-body-large: var(--mat-sys-body-large-weight) var(--mat-sys-body-large-size) / var(--mat-sys-body-large-line-height) var(--mat-sys-body-large-font);
  --mat-sys-body-medium: var(--mat-sys-body-medium-weight) var(--mat-sys-body-medium-size) / var(--mat-sys-body-medium-line-height) var(--mat-sys-body-medium-font);
  --mat-sys-body-small: var(--mat-sys-body-small-weight) var(--mat-sys-body-small-size) / var(--mat-sys-body-small-line-height) var(--mat-sys-body-small-font);
  --mat-sys-display-large: var(--mat-sys-display-large-weight) var(--mat-sys-display-large-size) / var(--mat-sys-display-large-line-height) var(--mat-sys-display-large-font);
  --mat-sys-display-medium: var(--mat-sys-display-medium-weight) var(--mat-sys-display-medium-size) / var(--mat-sys-display-medium-line-height) var(--mat-sys-display-medium-font);
  --mat-sys-display-small: var(--mat-sys-display-small-weight) var(--mat-sys-display-small-size) / var(--mat-sys-display-small-line-height) var(--mat-sys-display-small-font);
  --mat-sys-headline-large: var(--mat-sys-headline-large-weight) var(--mat-sys-headline-large-size) / var(--mat-sys-headline-large-line-height) var(--mat-sys-headline-large-font);
  --mat-sys-headline-medium: var(--mat-sys-headline-medium-weight) var(--mat-sys-headline-medium-size) / var(--mat-sys-headline-medium-line-height) var(--mat-sys-headline-medium-font);
  --mat-sys-headline-small: var(--mat-sys-headline-small-weight) var(--mat-sys-headline-small-size) / var(--mat-sys-headline-small-line-height) var(--mat-sys-headline-small-font);
  --mat-sys-label-large: var(--mat-sys-label-large-weight) var(--mat-sys-label-large-size) / var(--mat-sys-label-large-line-height) var(--mat-sys-label-large-font);
  --mat-sys-label-medium: var(--mat-sys-label-medium-weight) var(--mat-sys-label-medium-size) / var(--mat-sys-label-medium-line-height) var(--mat-sys-label-medium-font);
  --mat-sys-label-small: var(--mat-sys-label-small-weight) var(--mat-sys-label-small-size) / var(--mat-sys-label-small-line-height) var(--mat-sys-label-small-font);
  --mat-sys-title-large: var(--mat-sys-title-large-weight) var(--mat-sys-title-large-size) / var(--mat-sys-title-large-line-height) var(--mat-sys-title-large-font);
  --mat-sys-title-medium: var(--mat-sys-title-medium-weight) var(--mat-sys-title-medium-size) / var(--mat-sys-title-medium-line-height) var(--mat-sys-title-medium-font);
  --mat-sys-title-small: var(--mat-sys-title-small-weight) var(--mat-sys-title-small-size) / var(--mat-sys-title-small-line-height) var(--mat-sys-title-small-font);
}

/* User-typed content stays monospace; floating labels are separate
   elements and keep Hylia via the form-field label token. */
input,
textarea {
  font-family: var(--mono-font) !important;
}

/* ---- Kokiri palette (fine-tune over APP_COLOR seed palette) ----
   All light-dark(): "system" theme mode sets no body class, only color-scheme. */
html {
  --mat-sys-primary: light-dark(#3a6b1c, #8fd45f);
  --mat-sys-on-primary: light-dark(#ffffff, #12300a);
  --mat-sys-primary-container: light-dark(#c9eeae, #2b5313);
  --mat-sys-on-primary-container: light-dark(#0d2900, #c9eeae);
  --mat-sys-surface-tint: var(--mat-sys-primary);

  /* deep forest surfaces */
  --mat-sys-surface: light-dark(#f7faf0, #101c12);
  --mat-sys-background: var(--mat-sys-surface);
  --mat-sys-surface-container-lowest: light-dark(#ffffff, #0b140c);
  --mat-sys-surface-container-low: light-dark(#f1f5ea, #152416);
  --mat-sys-surface-container: light-dark(#ebf1e2, #1a2b1c);
  --mat-sys-surface-container-high: light-dark(#e5ecdb, #203424);
  --mat-sys-surface-container-highest: light-dark(#dfe6d5, #263d2a);
  --mat-sys-on-surface: light-dark(#1a2016, #e2ead9);
  --mat-sys-on-surface-variant: light-dark(#44513c, #b4c2a8);
  --mat-sys-outline: light-dark(#74806a, #8e9b84);
  --mat-sys-outline-variant: light-dark(#c4d0b8, #44513c);

  /* warm gold accents */
  --mat-sys-tertiary: light-dark(#8a6c00, #e8c455);
  --mat-sys-on-tertiary: light-dark(#ffffff, #3d2f00);
  --mat-sys-tertiary-container: light-dark(#f6e3a3, #5c4a00);
  --mat-sys-on-tertiary-container: light-dark(#2a2000, #f6e3a3);

  --mat-sys-inverse-surface: light-dark(#2e352a, #e2ead9);
  --mat-sys-inverse-on-surface: light-dark(#eff2e6, #2e352a);
  --mat-sys-inverse-primary: light-dark(#8fd45f, #3a6b1c);
}

/* ---- Always-open left sidebar on desktop ----
   Drawer ships position="end" mode=over; Angular state stays closed on
   desktop (backdrop never shows). Relocate left, force visible, offset
   content, hide hamburger. Scoped via :has([mat-subheader]) so login page
   and unprivileged users keep stock toggle behavior; old browsers without
   :has() also gracefully keep stock behavior. <1024px stays fully stock. */
@media (min-width: 1024px) {
  body:has(.mat-drawer [mat-subheader]) .mat-drawer.mat-drawer-end {
    left: 0;
    right: auto;
    transform: none !important;
    visibility: visible !important;
    box-shadow: none !important;
    width: 280px !important;
    transition: none !important;
    border-right: 1px solid var(--mat-sys-outline-variant);
    background-color: var(--mat-sys-surface-container-low);
  }
  /* closed state sets display:none here — restore clicks/keyboard focus */
  body:has(.mat-drawer [mat-subheader]) .mat-drawer.mat-drawer-end .mat-drawer-inner-container {
    display: block !important;
  }
  body:has(.mat-drawer [mat-subheader]) .mat-drawer-content {
    margin-left: 280px !important;
  }
  body:has(.mat-drawer [mat-subheader]) app-header .right-actions > button[mat-icon-button] {
    display: none !important;
  }
}

/* ---- Header layout: [hamburger] ......... [theme] [lang] [logo] ----
   Flatten .right-actions so its children join the toolbar flex row,
   then reorder. DOM untouched; the >=1024px hamburger-hide rule above
   still applies. Do not add display to the hamburger rule here. */
app-header mat-toolbar .right-actions {
  display: contents !important;
}

app-header .right-actions > button[mat-icon-button] {
  order: -10;
  margin-left: 0 !important;
  margin-right: 8px !important;
}

/* logged-out login link */
app-header .right-actions > span {
  order: 5;
}

app-header mat-toolbar app-theme-toggle {
  order: 10;
}

app-header mat-toolbar app-lang-switcher {
  order: 20;
}

app-header mat-toolbar .header-logo {
  order: 100;
  margin-left: 12px !important;
}

/* ---- <1024px: drawer slides in from the LEFT (stock is end/right) ----
   3-class specificity beats the bundle's 2-class closed rule; the bundle's
   3-class .mat-drawer-opened rule (transform:none, loads later) still wins
   when open — open/close animation keeps working, now leftward.
   No !important on transform, it would break the opened state. */
@media (max-width: 1023.98px) {
  .mat-drawer.mat-drawer-end.mat-drawer-end {
    left: 0;
    right: auto;
    transform: translate3d(-100%, 0, 0);
  }
}

/* ---- >=1024px with sidebar: "Hyrule" title above the sidebar column ---- */
@media (min-width: 1024px) {
  body:has(.mat-drawer [mat-subheader]) app-header mat-toolbar::before {
    content: "Hyrule";
    order: -20;                 /* first item in the flattened toolbar row */
    width: 264px;               /* 280px sidebar minus 16px toolbar padding */
    flex-shrink: 0;
    font-family: var(--brand-font);
    font-size: 1.5rem;
    color: var(--mat-sys-primary);
  }
}
