:root {
  /* Surfaces */
  --paper: oklch(92% 0.012 260);
  --pageBackground: var(--paper);
  --paperWarm: oklch(88% 0.014 260);
  --paperCard: oklch(97% 0.010 260);
  --hairline: oklch(84% 0.012 260);
  --hairlineStrong: oklch(76% 0.014 260);

  /* Text */
  --ink: oklch(18% 0.014 260);
  --inkSoft: oklch(32% 0.012 260);
  --inkMuted: oklch(44% 0.012 260);
  --inkFaint: oklch(72% 0.007 260);

  /* Accent */
  --accent: oklch(78% 0.130 215);
  --accentDeep: oklch(50% 0.130 215);
  --accentGlow: oklch(85% 0.100 215);

  /* Status */
  --statusAiring: oklch(62% 0.105 195);
  --statusUpcoming: oklch(72% 0.130 65);
  --statusFinished: oklch(60% 0.008 260);
  --statusHiatus: oklch(58% 0.008 260);
  --statusMissing: oklch(58% 0.165 28);
  --statusGrabbing: oklch(60% 0.130 305);
  --statusUnaired: oklch(70% 0.035 245);

  /* Semantic & brand aliases */
  --textColor: oklch(32% 0.012 260);
  --defaultColor: oklch(18% 0.014 260);
  --disabledColor: oklch(56% 0.010 260);
  --dimColor: oklch(52% 0.010 260);
  --black: oklch(18% 0.014 260);
  --white: oklch(100% 0 0);
  --offWhite: var(--paper);
  --primaryColor: oklch(100% 0 0);
  --selectedColor: oklch(78% 0.130 215);
  --successColor: oklch(62% 0.115 148);
  --dangerColor: oklch(58% 0.165 28);
  --warningColor: oklch(72% 0.130 65);
  --infoColor: oklch(50% 0.130 215);
  --purple: oklch(44% 0.180 305);
  --pink: oklch(74% 0.180 0);
  --sonarrBlue: oklch(78% 0.130 215);
  --helpTextColor: oklch(52% 0.010 260);
  --darkGray: oklch(52% 0.010 260);
  --gray: oklch(72% 0.007 260);
  --lightGray: var(--hairline);
  --mediumGray: oklch(52% 0.010 260);
  --themeBlue: oklch(78% 0.130 215);
  --themeAlternateBlue: oklch(50% 0.130 215);
  --themeRed: oklch(58% 0.165 28);
  --themeDarkColor: oklch(18% 0.014 260);
  --themeLightColor: oklch(32% 0.012 260);
  --pageFooterBackground: var(--paperWarm);
  --torrentColor: oklch(62% 0.115 148);
  --usenetColor: oklch(85% 0.100 215);
  --inverseLabelColor: oklch(90% 0.007 260);
  --inverseLabelTextColor: oklch(32% 0.012 260);
  --disabledLabelColor: oklch(72% 0.007 260);
  --infoTextColor: oklch(100% 0 0);

  /* Links */
  --defaultLinkHoverColor: oklch(18% 0.014 260);
  --linkColor: oklch(44% 0.130 215);
  --linkHoverColor: oklch(36% 0.130 215);

  /* Page header & sidebar */
  --pageHeaderBackgroundColor: oklch(86% 0.013 260);
  --sidebarColor: var(--ink);
  --sidebarBackgroundColor: var(--pageHeaderBackgroundColor);
  --sidebarActiveBackgroundColor: var(--paper);
  --toolbarColor: oklch(32% 0.012 260);
  --toolbarBackgroundColor: var(--paperWarm);
  --toolbarMenuItemBackgroundColor: var(--paperWarm);
  --toolbarMenuItemHoverBackgroundColor: var(--paperCard);
  --toolbarLabelColor: oklch(52% 0.010 260);
  --borderColor: var(--hairline);

  /* Forms, buttons, modals, popovers, alerts */
  --inputBorderColor: var(--hairlineStrong);
  --inputBoxShadowColor: oklch(0% 0 0 / 0.04);
  --inputFocusBorderColor: oklch(78% 0.130 215);
  --inputFocusBoxShadowColor: color-mix(in oklch, var(--accent) 16%, transparent);
  --inputErrorBorderColor: oklch(58% 0.165 28);
  --inputErrorBoxShadowColor: oklch(58% 0.165 28 / 0.16);
  --inputWarningBorderColor: oklch(72% 0.130 65);
  --inputWarningBoxShadowColor: oklch(72% 0.130 65 / 0.16);
  --defaultButtonTextColor: oklch(18% 0.014 260);
  --defaultBackgroundColor: var(--paperCard);
  --defaultBorderColor: var(--hairlineStrong);
  --defaultHoverBackgroundColor: var(--paperWarm);
  --defaultHoverBorderColor: oklch(78% 0.130 215);
  --primaryBackgroundColor: oklch(80% 0.055 245);
  --primaryBorderColor: oklch(80% 0.055 245);
  --primaryButtonColor: oklch(18% 0 0);
  --primaryHoverBackgroundColor: oklch(74% 0.055 245);
  --primaryHoverBorderColor: oklch(74% 0.055 245);
  --successBackgroundColor: oklch(62% 0.115 148);
  --successBorderColor: oklch(62% 0.115 148);
  --successHoverBackgroundColor: oklch(55% 0.100 148);
  --successHoverBorderColor: oklch(51% 0.090 148);
  --warningBackgroundColor: oklch(72% 0.130 65);
  --warningBorderColor: oklch(72% 0.130 65);
  --warningHoverBackgroundColor: oklch(66% 0.125 65);
  --warningHoverBorderColor: oklch(60% 0.115 65);
  --dangerBackgroundColor: oklch(58% 0.165 28);
  --dangerBorderColor: oklch(58% 0.165 28);
  --dangerHoverBackgroundColor: oklch(52% 0.150 28);
  --dangerHoverBorderColor: oklch(48% 0.135 28);
  --iconButtonDisabledColor: oklch(72% 0.007 260);
  --iconButtonHoverColor: oklch(32% 0.012 260);
  --iconButtonHoverLightColor: oklch(18% 0.014 260);
  --modalBackdropBackgroundColor: oklch(0% 0 0 / 0.45);
  --modalBackgroundColor: var(--paperCard);
  --modalCloseButtonHoverColor: oklch(32% 0.012 260);
  --menuItemColor: oklch(32% 0.012 260);
  --menuItemHoverColor: oklch(18% 0.014 260);
  --menuItemHoverBackgroundColor: var(--paperWarm);
  --toolbarButtonHoverColor: oklch(78% 0.130 215);
  --scrollbarBackgroundColor: var(--hairlineStrong);
  --scrollbarHoverBackgroundColor: oklch(52% 0.010 260);
  --cardBackgroundColor: var(--paperCard);
  --cardShadowColor: oklch(0% 0 0 / 0.08);
  --cardAlternateBackgroundColor: var(--paperWarm);
  --cardCenterBackgroundColor: var(--paperCard);
  --alertDangerBorderColor: oklch(58% 0.165 28);
  --alertDangerBackgroundColor: oklch(58% 0.165 28 / 0.08);
  --alertDangerColor: oklch(44% 0.130 28);
  --alertInfoBorderColor: oklch(78% 0.130 215);
  --alertInfoBackgroundColor: color-mix(in oklch, var(--accent) 8%, transparent);
  --alertInfoColor: oklch(50% 0.130 215);
  --alertSuccessBorderColor: oklch(62% 0.115 148);
  --alertSuccessBackgroundColor: oklch(62% 0.115 148 / 0.08);
  --alertSuccessColor: oklch(47% 0.085 148);
  --alertWarningBorderColor: oklch(72% 0.130 65);
  --alertWarningBackgroundColor: oklch(72% 0.130 65 / 0.08);
  --alertWarningColor: oklch(52% 0.095 65);
  --sliderAccentColor: oklch(52% 0.125 220);
  --inputBackgroundColor: var(--paper);
  --inputReadOnlyBackgroundColor: var(--paperWarm);
  --inputHoverBackgroundColor: var(--paperCard);
  --searchInputBackgroundColor: oklch(84% 0.013 260);
  --searchInputFocusBackgroundColor: oklch(92% 0.012 260);
  --inputSelectedBackgroundColor: color-mix(in oklch, var(--accent) 6%, transparent);
  --advancedFormLabelColor: oklch(72% 0.130 65);
  --disabledCheckInputColor: var(--hairline);
  --disabledInputColor: oklch(72% 0.007 260);
  --popoverTitleBackgroundColor: var(--paperWarm);
  --popoverTitleBorderColor: var(--hairline);
  --popoverBodyBackgroundColor: var(--paperCard);
  --popoverShadowColor: oklch(0% 0 0 / 0.18);
  --popoverArrowBorderColor: var(--paperCard);
  --popoverTitleBackgroundInverseColor: oklch(18% 0.014 260);
  --popoverTitleBorderInverseColor: oklch(32% 0.012 260);
  --popoverShadowInverseColor: oklch(0% 0 0 / 0.32);
  --popoverArrowBorderInverseColor: oklch(18% 0.014 260 / 0.92);

  /* Calendar, series, progress */
  --calendarTodayBackgroundColor: var(--paperWarm);
  --calendarBackgroundColor: var(--paper);
  --calendarBorderColor: var(--hairline);
  --calendarTextDim: oklch(52% 0.010 260);
  --calendarTextDimAlternate: oklch(32% 0.012 260);
  --calendarFullColorFilter: saturate(0.9) contrast(0.95);
  --tableRowHoverBackgroundColor: oklch(0% 0 0 / 0.04);
  --addSeriesBackgroundColor: var(--paperWarm);
  --seriesBackgroundColor: var(--paperWarm);

  /* Sit on artwork, so theme-independent: no dark-block override */
  --seriesOverlayBackdrop: oklch(15% 0.008 260 / 0.82);
  --seriesOverlayInk: oklch(90% 0.007 260);

  --searchIconContainerBackgroundColor: var(--paper);
  --collapseButtonBackgroundColor: var(--paper);
  --seasonBackgroundColor: var(--paperCard);
  --episodesBackgroundColor: var(--paper);
  --progressBarFrontTextColor: oklch(100% 0 0);
  --progressBarBackTextColor: oklch(32% 0.012 260);
  --progressBarBackgroundColor: var(--hairline);
  --logEventsBackgroundColor: var(--paperCard);

  --shadowChip: 0 1px 4px oklch(0% 0 0 / 0.06);
  --shadowDropdown:
    0 12px 32px -12px oklch(0% 0 0 / 0.32),
    0 2px 8px -2px oklch(0% 0 0 / 0.12);
  --shadowSidebar: 0 24px 60px -16px oklch(0% 0 0 / 0.32);
  --chipSize: 34px;
  --transitionSmooth: 160ms cubic-bezier(0.25, 1, 0.5, 1);

  color-scheme: light;
}

[data-theme=dark] {
  /* Surfaces */
  --paper: oklch(24% 0.014 260);
  --paperWarm: oklch(27% 0.014 260);
  --paperCard: oklch(29% 0.015 260);
  --hairline: oklch(36% 0.016 260);
  --hairlineStrong: oklch(45% 0.017 260);

  /* Text */
  --ink: oklch(90% 0.007 260);
  --inkSoft: oklch(82% 0.009 260);
  --inkMuted: oklch(68% 0.011 260);
  --inkFaint: oklch(53% 0.011 260);

  /* Accent */
  --accent: oklch(82% 0.115 215);
  --accentDeep: oklch(70% 0.130 215);
  --accentGlow: oklch(85% 0.100 215);

  /* Status */
  --statusAiring: oklch(66% 0.105 195);
  --statusUpcoming: oklch(76% 0.120 65);
  --statusFinished: oklch(60% 0.008 260);
  --statusHiatus: oklch(58% 0.008 260);
  --statusMissing: oklch(62% 0.150 28);
  --statusGrabbing: oklch(65% 0.130 305);
  --statusUnaired: oklch(58% 0.040 245);

  /* Semantic & brand aliases */
  --textColor: oklch(90% 0.007 260);
  --defaultColor: oklch(90% 0.007 260);
  --disabledColor: oklch(53% 0.011 260);
  --dimColor: oklch(66% 0.011 260);
  --black: oklch(18% 0.014 260);
  --white: oklch(90% 0.007 260);
  --offWhite: oklch(24% 0.014 260);
  --primaryColor: oklch(82% 0.115 215);
  --selectedColor: oklch(82% 0.115 215);
  --successColor: oklch(66% 0.115 148);
  --dangerColor: oklch(62% 0.150 28);
  --warningColor: oklch(76% 0.120 65);
  --infoColor: oklch(82% 0.115 215);
  --purple: oklch(44% 0.180 305);
  --pink: oklch(74% 0.180 0);
  --sonarrBlue: oklch(82% 0.115 215);
  --helpTextColor: oklch(66% 0.011 260);
  --darkGray: oklch(53% 0.011 260);
  --gray: oklch(66% 0.011 260);
  --lightGray: oklch(36% 0.016 260);
  --mediumGray: oklch(66% 0.011 260);
  --themeBlue: oklch(82% 0.115 215);
  --themeAlternateBlue: oklch(70% 0.130 215);
  --themeRed: oklch(62% 0.150 28);
  --themeDarkColor: oklch(27% 0.014 260);
  --themeLightColor: oklch(29% 0.015 260);
  --pageFooterBackground: oklch(0% 0 0 / 0.25);
  --torrentColor: oklch(72% 0.165 148);
  --usenetColor: oklch(82% 0.140 215);
  --inverseLabelColor: oklch(36% 0.016 260);
  --inverseLabelTextColor: oklch(90% 0.007 260);
  --disabledLabelColor: oklch(53% 0.011 260);
  --infoTextColor: oklch(90% 0.007 260);

  /* Links */
  --defaultLinkHoverColor: oklch(90% 0.007 260);
  --linkColor: oklch(74% 0.125 215);
  --linkHoverColor: oklch(88% 0.095 215);

  /* Page header & sidebar */
  --pageHeaderBackgroundColor: oklch(20% 0.015 260);
  --sidebarColor: oklch(90% 0.007 260);
  --sidebarBackgroundColor: var(--pageHeaderBackgroundColor);
  --sidebarActiveBackgroundColor: oklch(29% 0.015 260);
  --toolbarColor: oklch(90% 0.007 260);
  --toolbarBackgroundColor: oklch(27% 0.014 260);
  --toolbarMenuItemBackgroundColor: oklch(29% 0.015 260);
  --toolbarMenuItemHoverBackgroundColor: oklch(33% 0.015 260);
  --toolbarLabelColor: oklch(76% 0.011 260);
  --borderColor: oklch(36% 0.016 260);

  /* Forms, buttons, modals, popovers, alerts */
  --inputBorderColor: oklch(45% 0.017 260);
  --inputBoxShadowColor: oklch(0% 0 0 / 0.18);
  --inputFocusBorderColor: oklch(82% 0.115 215);
  --inputFocusBoxShadowColor: color-mix(in oklch, var(--accent) 18%, transparent);
  --inputErrorBorderColor: oklch(62% 0.150 28);
  --inputErrorBoxShadowColor: oklch(62% 0.150 28 / 0.18);
  --inputWarningBorderColor: oklch(76% 0.120 65);
  --inputWarningBoxShadowColor: oklch(76% 0.120 65 / 0.18);
  --defaultButtonTextColor: oklch(90% 0.007 260);
  --defaultBackgroundColor: oklch(29% 0.015 260);
  --defaultBorderColor: oklch(45% 0.017 260);
  --defaultHoverBackgroundColor: oklch(33% 0.015 260);
  --defaultHoverBorderColor: oklch(82% 0.115 215);
  --primaryBackgroundColor: oklch(40% 0.022 260);
  --primaryBorderColor: oklch(40% 0.022 260);
  --primaryButtonColor: oklch(96% 0.006 260);
  --primaryHoverBackgroundColor: oklch(46% 0.022 260);
  --primaryHoverBorderColor: oklch(46% 0.022 260);
  --successBackgroundColor: oklch(66% 0.115 148);
  --successBorderColor: oklch(66% 0.115 148);
  --successHoverBackgroundColor: oklch(59% 0.100 148);
  --successHoverBorderColor: oklch(54% 0.090 148);
  --warningBackgroundColor: oklch(76% 0.120 65);
  --warningBorderColor: oklch(76% 0.120 65);
  --warningHoverBackgroundColor: oklch(70% 0.115 65);
  --warningHoverBorderColor: oklch(64% 0.105 65);
  --dangerBackgroundColor: oklch(62% 0.150 28);
  --dangerBorderColor: oklch(62% 0.150 28);
  --dangerHoverBackgroundColor: oklch(56% 0.135 28);
  --dangerHoverBorderColor: oklch(52% 0.120 28);
  --iconButtonDisabledColor: oklch(53% 0.011 260);
  --iconButtonHoverColor: oklch(66% 0.011 260);
  --iconButtonHoverLightColor: oklch(90% 0.007 260);
  --modalBackdropBackgroundColor: oklch(0% 0 0 / 0.65);
  --modalBackgroundColor: oklch(29% 0.015 260);
  --modalCloseButtonHoverColor: oklch(66% 0.011 260);
  --menuItemColor: oklch(90% 0.007 260);
  --menuItemHoverColor: oklch(82% 0.115 215);
  --menuItemHoverBackgroundColor: oklch(33% 0.015 260);
  --toolbarButtonHoverColor: oklch(82% 0.115 215);
  --scrollbarBackgroundColor: oklch(45% 0.017 260);
  --scrollbarHoverBackgroundColor: oklch(53% 0.011 260);
  --cardBackgroundColor: oklch(29% 0.015 260);
  --cardShadowColor: oklch(0% 0 0 / 0.45);
  --cardAlternateBackgroundColor: oklch(29% 0.015 260);
  --cardCenterBackgroundColor: oklch(27% 0.014 260);
  --alertDangerBorderColor: oklch(62% 0.150 28);
  --alertDangerBackgroundColor: oklch(62% 0.150 28 / 0.10);
  --alertDangerColor: oklch(90% 0.007 260);
  --alertInfoBorderColor: oklch(82% 0.115 215);
  --alertInfoBackgroundColor: color-mix(in oklch, var(--accent) 10%, transparent);
  --alertInfoColor: oklch(90% 0.007 260);
  --alertSuccessBorderColor: oklch(66% 0.115 148);
  --alertSuccessBackgroundColor: oklch(66% 0.115 148 / 0.10);
  --alertSuccessColor: oklch(90% 0.007 260);
  --alertWarningBorderColor: oklch(76% 0.120 65);
  --alertWarningBackgroundColor: oklch(76% 0.120 65 / 0.10);
  --alertWarningColor: oklch(90% 0.007 260);
  --sliderAccentColor: oklch(58% 0.105 218);
  --inputBackgroundColor: oklch(27% 0.014 260);
  --inputReadOnlyBackgroundColor: oklch(24% 0.014 260);
  --inputHoverBackgroundColor: oklch(29% 0.015 260);
  --searchInputBackgroundColor: oklch(27% 0.014 260);
  --searchInputFocusBackgroundColor: oklch(32% 0.015 260);
  --inputSelectedBackgroundColor: color-mix(in oklch, var(--accent) 6%, transparent);
  --advancedFormLabelColor: oklch(76% 0.120 65);
  --disabledCheckInputColor: oklch(45% 0.017 260);
  --disabledInputColor: oklch(53% 0.011 260);
  --popoverTitleBackgroundColor: oklch(33% 0.015 260);
  --popoverTitleBorderColor: oklch(36% 0.016 260);
  --popoverBodyBackgroundColor: oklch(29% 0.015 260);
  --popoverShadowColor: oklch(0% 0 0 / 0.32);
  --popoverArrowBorderColor: oklch(29% 0.015 260);
  --popoverTitleBackgroundInverseColor: oklch(90% 0.007 260);
  --popoverTitleBorderInverseColor: oklch(66% 0.011 260);
  --popoverShadowInverseColor: oklch(0% 0 0 / 0.32);
  --popoverArrowBorderInverseColor: oklch(90% 0.007 260 / 0.92);

  /* Calendar, series, progress */
  --calendarTodayBackgroundColor: oklch(29% 0.015 260);
  --calendarBackgroundColor: oklch(27% 0.014 260);
  --calendarBorderColor: oklch(36% 0.016 260);
  --calendarTextDim: oklch(66% 0.011 260);
  --calendarTextDimAlternate: oklch(90% 0.007 260);
  --calendarFullColorFilter: saturate(0.9) contrast(1.05) brightness(0.92);
  --tableRowHoverBackgroundColor: oklch(100% 0 0 / 0.04);
  --addSeriesBackgroundColor: oklch(27% 0.014 260);
  --seriesBackgroundColor: oklch(27% 0.014 260);
  --searchIconContainerBackgroundColor: oklch(27% 0.014 260);
  --collapseButtonBackgroundColor: oklch(27% 0.014 260);
  --seasonBackgroundColor: oklch(29% 0.015 260);
  --episodesBackgroundColor: oklch(27% 0.014 260);
  --progressBarFrontTextColor: oklch(90% 0.007 260);
  --progressBarBackTextColor: oklch(90% 0.007 260);
  --progressBarBackgroundColor: oklch(36% 0.016 260);
  --logEventsBackgroundColor: oklch(27% 0.014 260);

  --shadowChip: 0 1px 4px oklch(0% 0 0 / 0.45);
  --shadowDropdown:
    0 12px 32px -12px oklch(0% 0 0 / 0.65),
    0 2px 8px -2px oklch(0% 0 0 / 0.35);
  --shadowSidebar: 0 24px 60px -16px oklch(0% 0 0 / 0.65);

  color-scheme: dark;
}

[data-color-impaired] {
  --statusMissing:   oklch(62.1% 0.170 48);   /* Vermillion     #D55E00 */
  --statusAiring:    oklch(73.5% 0.117 236);  /* Sky blue       #56B4E9 */
  --statusUpcoming:  oklch(75.3% 0.158 77);   /* Orange         #E69F00 */
  --statusGrabbing:  oklch(67.9% 0.118 346);  /* Reddish purple #CC79A7 */

  --dangerColor:     oklch(62.1% 0.170 48);
  --successColor:    oklch(62.0% 0.130 165);  /* Bluish green   #009E73 */
  --warningColor:    oklch(75.3% 0.158 77);
  --infoColor:       oklch(73.5% 0.117 236);
  --primaryColor:    oklch(73.5% 0.117 236);
  --accent:          oklch(73.5% 0.117 236);
  --pink:            oklch(67.9% 0.118 346);  /* Reddish purple #CC79A7 */

  --alertDangerBorderColor:      color-mix(in oklch, var(--dangerColor) 30%, transparent);
  --alertSuccessBorderColor:     color-mix(in oklch, var(--successColor) 30%, transparent);
  --alertWarningBorderColor:     color-mix(in oklch, var(--warningColor) 30%, transparent);
  --alertDangerBackgroundColor:  color-mix(in oklch, var(--dangerColor) 8%, transparent);
  --alertSuccessBackgroundColor: color-mix(in oklch, var(--successColor) 8%, transparent);
  --alertWarningBackgroundColor: color-mix(in oklch, var(--warningColor) 8%, transparent);
}

[data-theme=dark][data-color-impaired] {
  --statusMissing:   oklch(68% 0.170 48);    /* Vermillion     */
  --statusAiring:    oklch(78% 0.117 236);   /* Sky blue       */
  --statusUpcoming:  oklch(82% 0.158 77);    /* Orange         */
  --statusGrabbing:  oklch(73% 0.118 346);   /* Reddish purple */

  --dangerColor:     oklch(68% 0.170 48);
  --successColor:    oklch(70% 0.130 165);   /* Bluish green   */
  --warningColor:    oklch(82% 0.158 77);
  --infoColor:       oklch(78% 0.117 236);
  --primaryColor:    oklch(78% 0.117 236);
  --accent:          oklch(78% 0.117 236);
  --pink:            oklch(73% 0.118 346);   /* Reddish purple */

  --alertDangerBorderColor:      color-mix(in oklch, var(--dangerColor) 30%, transparent);
  --alertSuccessBorderColor:     color-mix(in oklch, var(--successColor) 30%, transparent);
  --alertWarningBorderColor:     color-mix(in oklch, var(--warningColor) 30%, transparent);
  --alertDangerBackgroundColor:  color-mix(in oklch, var(--dangerColor) 8%, transparent);
  --alertSuccessBackgroundColor: color-mix(in oklch, var(--successColor) 8%, transparent);
  --alertWarningBackgroundColor: color-mix(in oklch, var(--warningColor) 8%, transparent);
}
