<?xml version="1.0"?>
<template>
    <let n="nightModeEnabled" v="env::style == :dark"/>
    
    <let n="hasUberBackgroundColor" v="$uber.backgroundColor? == true"/>
    <let n="hasUberTitleTextColor" v="$uber.titleTextColor? == true"/>
    <let n="uberBackgroundColor" v="color(color =$uber.backgroundColor)"/>
    <let n="uberTitleTextColor" v="color(color =$uber.titleTextColor)"/>
    
    <let n="isUberPage" v="(hasUberBackgroundColor == true) OR (hasUberTitleTextColor == true)"/>
    <let n="isDarkUberTheme" v="true" c="(hasUberBackgroundColor == true) AND (0.5 > uberBackgroundColor.brightness)"/>
    <let n="isDarkUberTheme" v="false" c="(hasUberBackgroundColor == false) OR (uberBackgroundColor.brightness >= 0.5)"/>
    
    <let n="isDarkBackground" v="($isDarkBackground == 1)"/>
    <let n="isCustomBackground" v="false"/>
    
    <!-- DEBUG: To force isDarkUberTheme, uncomment the following line -->
    <!--    <let n="isDarkUberTheme" v="false"/>-->
    
    <condition n="hasDarkBackground" c="((isUberPage == true) AND (isDarkUberTheme == true))
    OR ((isCustomBackground == true) AND (isDarkBackground == true))
    OR ((isUberPage == false) AND (isCustomBackground == false) AND (nightModeEnabled == true))"/>
    
    <!-- BOOKS COLORS -->
    <let n="color::booksBackground" v="color(color = :system-background)"/>
    <let n="color::booksSecondaryBackground" v="color(color = :secondary-system-background)"/>
    <let n="color::booksTertiaryBackground" v="color(color = :teriary-system-background)"/>
    <let n="color::booksGroupedBackground" v="color(color = :system-grouped-background)"/>
    <let n="color::booksSecondaryGroupedBackground" v="color(color = :secondary-system-grouped-background)"/>
    <let n="color::booksWidgetBackgroundOverlay::Top" v="dynamicColor([style == :light] = rgba(0,0,0,0.0), [style == :dark] = rgba(1,1,1,0.12))"/>
    <let n="color::booksWidgetBackgroundOverlay::Bottom" v="dynamicColor([style == :light] = rgba(0,0,0,0.06), [style == :dark] = rgba(1,1,1,0.0))"/>
    <let n="color::booksBrickBackground" v="color(color = :tertiary-system-background)"/>
    <let n="color::booksKey" v="dynamicColor([style == :light] = rgba(0,0,0,1), [style == :dark] = rgba(1,1,1,1))"/>
    <let n="color::booksKey" v="rgba(1,1,1,1)" cid="hasDarkBackground"/>
    <let n="color::booksLabel" v="color(color = :label)"/>
    <let n="color::booksSecondaryLabel" v="color(color = :secondary-label)"/>
    <let n="color::booksTertiaryLabel" v="color(color = :tertiary-label)"/>
    <let n="color::booksQuaternaryLabel" v="color(color = :quaternary-label)"/>
    
    <let n="color::booksRed" v="dynamicColor([style == :light] = rgba(200/255,60/255,60/255,1), [style == :dark] = rgba(148/255,52/255,52/255,1))"/>
    <let n="color::booksOrange" v="dynamicColor([style == :light] = rgba(255/255,149/255,0/255,1), [style == :dark] = rgba(179/255,93/255,18/255,1))"/>
    <let n="color::booksGreen" v="dynamicColor([style == :light] = rgba(54/255,148/255,98/255,1), [style == :dark] = rgba(40/255,99/255,70/255,1))"/>
    <let n="color::booksCyan" v="dynamicColor([style == :light] = rgba(0/255,157/255,220/255,1), [style == :dark] = rgba(46/255,124/255,184/255,1))"/>
    <let n="color::booksBlue" v="dynamicColor([style == :light] = rgba(7/255,71/255,142/255,1), [style == :dark] = rgba(29/255,70/255,117/255,1))"/>
    <let n="color::booksPurple" v="dynamicColor([style == :light] = rgba(84/255,84/255,148/255,1), [style == :dark] = rgba(63/255,63/255,110/255,1))"/>
    <let n="color::booksMagenta" v="dynamicColor([style == :light] = rgba(239/255,39/255,76/255,1), [style == :dark] = rgba(201/255,60/255,77/255,1))"/>
    <let n="color::booksGray" v="color(color = :system-gray)"/>
    <let n="color::booksBlack" v="color(color = :system-black)"/>
    <let n="color::booksWhite" v="color(color = :system-white)"/>
    
    <let n="color::booksNestedIconGlyph" v="color(color = :system-white)"/>
    <let n="color::booksChevron" v="color(color = :tertiary-label)"/>
    <let n="color::booksIconBackground" v="dynamicColor([style == :light] = rgba(0,0,0,1), [style == :dark] = rgba(235/255,235/255,245/255,0.6))"/>
    <let n="color::booksSecondaryIconBackground" v="dynamicColor([style == :light] = rgba(0/255,0/255,0/255,1), [style == :dark] = rgba(235/255,235/255,245/255,0.22))"/>
    
    <let n="color::booksSeparator" v="color(color = :separator)"/>
    <let n="color::booksAXSeparator" v="dynamicColor([style == :light] = rgba(60/255,60/255,67/255,0.45), [style == :dark] = rgba(235/255,235/255,245/255,0.35))"/>
    <let n="color::booksTableSelection" v="dynamicColor([style == :light] = rgba(4/255,4/255,15/255,0.15), [style == :dark] = rgba(235/255,235/255,245/255,0.12))"/>
    
    <!-- REVISIT: We can revert to rgb() for black and white once <rdar://problem/35126941> is fixed. -->
    
    <let n="color::white" v="rgba(1,1,1,1)"/>
    <let n="color::black" v="rgba(0,0,0,1)"/>
    <let n="color::clear" v="rgba(0,0,0,0)"/>
    
    <!-- colors by color name, non-nightmode -->
    <let n="color::grayBackground" v="color::booksSecondaryBackground"/>
    <!-- See: <rdar://problem/35043993> New Design: Background Custom Grey Tint is hard to see in night mode -->
    <let n="color::grayBackground" v="color::booksSeparator" cid="hasDarkBackground"/>
    
    <!-- REVISIT: Replace these with the official colors -->
    <let n="color::blackGradientStart" v="rgb(31/255,31/255,31/255)"/>
    <let n="color::blackGradientEnd" v="rgb(59/255,59/255,59/255)"/>
    <let n="color::tealGradientStart" v="rgb(41/255,68/255,75/255)"/>
    <let n="color::tealGradientEnd" v="rgb(77/255,126/255,139/255)"/>
    <let n="color::blueGradientStart" v="rgb(30/255,43/255,60/255)"/>
    <let n="color::blueGradientEnd" v="rgb(56/255,80/255,113/255)"/>
    <let n="color::redGradientStart" v="rgb(211/255,53/255,32/255)"/>
    <let n="color::redGradientEnd" v="rgb(218/255,96/255,46/255)"/>
    
    <let n="color::search::icon" v="rgb(175/255,175/255,177/255)"/>
    <let n="color::search::field" v="rgb(0.94,0.94,0.94)"/>
    
    <let n="color::dimmingViewColor" v="color::booksGray"/>
    <let n="color::dimmingViewColor" v="color::booksSeparator" cid="hasDarkBackground"/>
    <let n="color::disabledMoreButtonColor" v="rgba(4/255,4/255,15/255,.25)"/>
    <let n="color::darkButtonColor" v="color::black"/>
    <let n="color::darkButtonColor" v="rgba(0.2, 0.2, 0.2, 1)" cid="hasDarkBackground"/>
    
    <let n="color::orderedList::accessibility::divider" v="rgba(0,0,0,0.4)"/>
    <let n="color::orderedList::accessibility::divider" v="rgba(1,1,1,0.4)" cid="hasDarkBackground"/>
    <let n="color::sectionsBar::button" v="rgb(132/255, 132/255, 137/255)"/>
    <let n="color::sectionsBar::button" v="rgb(51/255, 51/255, 54/255)" cid="hasDarkBackground"/>
    
    <let n="color::highlightedRowColor" v="rgba(0.854902,0.850980,0.847059, 1)"/>
    <let n="color::highlightedRowColor" v="rgba(0.97647, 0.97647, 0.988235, 0.16)" cid="hasDarkBackground"/>
    <let n="color::overlay" v="rgba(0,0,0,.45)"/>
    <let n="color::overlay" v="rgba(1,1,1,.3)" c="nightModeEnabled == true"/>
    
    <let n="color::readingGoalProgressColor" v="rgb(0/255,157/255,220/255)"/>
    <let n="color::readingGoalControlColor" v="color::booksSecondaryBackground"/>
    <let n="color::blueBooksFinished" v="rgb(0/255,157/255,220/255)"/>
    
    <let n="color::readingStreakBackground" v="rgba(60/255,60/255,67/255, 0.3)"/>
    <let n="color::readingStreakBackground" v="rgb(51/255,51/255,51/255)" cid="hasDarkBackground"/>
    <let n="color::readingStreakPreviousDayBorder" v="rgba(0,0,0,.15)"/>
    <let n="color::readingStreakPreviousDayBorder" v="rgba(1,1,1,.15)" cid="hasDarkBackground"/>
    <let n="color::readingStreakControl" v="rgb(229/255,229/255,229/255)"/>
    <let n="color::readingStreakControl" v="rgb(51/255,51/255,51/255)" cid="hasDarkBackground"/>
    <let n="color::readingStreakPreviousOrCompleteDayText" v="color::white"/>
    <let n="color::readingStreakCurrentDayText" v="color::black"/>
    <let n="color::readingStreakCurrentDayText" v="color::white" cid="hasDarkBackground"/>
    <let n="color::readingStreakFutureDayText" v="rgba(0,0,0,.2)"/>
    <let n="color::readingStreakFutureDayText" v="rgb(77/255,77/255,77/255)" cid="hasDarkBackground"/>
    
    <let n="color::tint::nightMode" v="rgba(0,0,0,.2)"/>
    
    <let n="color::textSubdued" v="color::booksGray"/>
    <let n="color::listViewArrow" v="color::booksSeparator"/>
    <let n="color::dividerLine" v="color::booksSeparator"/>
    <let n="color::coverFallback" v="color::booksSecondaryBackground"/>
    
    <let n="color::underline" v="color::textSubdued"/>
    <let n="color::text" v="color::booksKey"/>
    
    <let n="color::buttonSolidNormalBackground" v="color::booksKey"/>
    <let n="color::buttonSolidNormalTitle" v="color::booksBackground"/>
    <let n="color::buttonSolidNormalDetail" v="rgba(0.8, 0.8, 0.8, 1)"/>
    <let n="color::buttonSolidNormalDetail" v="rgba(0.8, 0.8, 0.8, 1)" cid="hasDarkBackground"/>
    <let n="color::buttonSolidNormalBorder" v="color::clear"/>
    <let n="color::buttonSolidHighlightedBackground" v="rgba(color::buttonSolidNormalBackground.r,color::buttonSolidNormalBackground.g,color::buttonSolidNormalBackground.b,color::buttonSolidNormalBackground.a * 0.5)"/>
    <let n="color::buttonSolidHighlightedTitle" v="rgba(color::buttonSolidNormalTitle.r,color::buttonSolidNormalTitle.g,color::buttonSolidNormalTitle.b,color::buttonSolidNormalTitle.a * 0.75)"/>
    <let n="color::buttonSolidHighlightedBorder" v="color::clear"/>
    <let n="color::twoLineButtonBackgroundColor" v="color::darkButtonColor"/>
    
    <let n="color::preorderButtonSolidNormalBackground" v="color::booksOrange"/>
    <let n="color::preorderButtonSolidNormalTitle" v="color::white"/>
    <let n="color::preorderButtonSolidNormalBorder" v="color::clear"/>
    <let n="color::preorderButtonSolidHighlightedBackground" v="rgba(color::preorderButtonSolidNormalBackground.r,color::preorderButtonSolidNormalBackground.g,color::preorderButtonSolidNormalBackground.b,color::preorderButtonSolidNormalBackground.a * 0.5)"/>
    <let n="color::preorderButtonSolidHighlightedTitle" v="rgba(color::preorderButtonSolidNormalTitle.r,color::preorderButtonSolidNormalTitle.g,color::preorderButtonSolidNormalTitle.b,color::preorderButtonSolidNormalTitle.a * 0.75)"/>
    <let n="color::preorderButtonSolidHighlightedBorder" v="color::clear"/>
    
    <let n="color::buttonHollowNormalBackground" v="color::clear"/>
    <let n="color::buttonHollowNormalTitle" v="color::booksKey"/>
    <let n="color::buttonHollowNormalBorder" v="color::booksKey"/>
    <let n="color::buttonHollowHighlightedBackground" v="color::clear"/>
    <let n="color::buttonHollowHighlightedTitle" v="rgba(color::buttonHollowNormalTitle.r,color::buttonHollowNormalTitle.g,color::buttonHollowNormalTitle.b,color::buttonHollowNormalTitle.a * 0.2)"/>
    <let n="color::buttonHollowHighlightedBorder" v="rgba(color::buttonHollowNormalBorder.r,color::buttonHollowNormalBorder.g,color::buttonHollowNormalBorder.b,color::buttonHollowNormalBorder.a * 0.2)"/>
    
    <let n="color::preorderButtonHollowNormalBackground" v="color::clear"/>
    <let n="color::preorderButtonHollowNormalTitle" v="color::booksOrange"/>
    <let n="color::preorderButtonHollowNormalBorder" v="color::booksOrange"/>
    <let n="color::preorderButtonHollowHighlightedBackground" v="color::clear"/>
    <let n="color::preorderButtonHollowHighlightedTitle" v="rgba(color::preorderButtonHollowNormalTitle.r,color::preorderButtonHollowNormalTitle.g,color::preorderButtonHollowNormalTitle.b,color::preorderButtonHollowNormalTitle.a * 0.2)"/>
    <let n="color::preorderButtonHollowHighlightedBorder" v="rgba(color::preorderButtonHollowNormalBorder.r,color::preorderButtonHollowNormalBorder.g,color::preorderButtonHollowNormalBorder.b,color::preorderButtonHollowNormalBorder.a * 0.2)"/>
    
    <let n="color::largeButtonSolidNormalBackground" v="color::buttonSolidNormalBackground"/>
    <let n="color::largeButtonSolidNormalBackground" v="color::booksSeparator" c="hasDarkBackground AND ($isInCard? AND $isInCard == 1)"/>
    <let n="color::largeButtonSolidNormalTitle" v="color::buttonSolidNormalTitle"/>
    <let n="color::largeButtonSolidNormalTitle" v="color::white" c="hasDarkBackground AND ($isInCard? AND $isInCard == 1)"/>
    <let n="color::largeButtonSolidHighlightedBackground" v="rgba(color::largeButtonSolidNormalBackground.r,color::largeButtonSolidNormalBackground.g,color::largeButtonSolidNormalBackground.b,color::largeButtonSolidNormalBackground.a * 0.4)"/>
    <let n="color::largeButtonSolidHighlightedTitle" v="rgba(color::largeButtonSolidNormalTitle.r,color::largeButtonSolidNormalTitle.g,color::largeButtonSolidNormalTitle.b,color::largeButtonSolidNormalTitle.a * 0.75)"/>
    
    <let n="color::largeButtonHollowNormalBackground" v="color::buttonHollowNormalBackground"/>
    <let n="color::largeButtonHollowNormalTitle" v="color::buttonHollowNormalTitle"/>
    <let n="color::largeButtonHollowNormalBorder" v="color::buttonHollowNormalBorder"/>
    <let n="color::largeButtonHollowNormalBorder" v="color::largeButtonSolidNormalBackground" c="hasDarkBackground AND ($isInCard? AND $isInCard == 1)"/>
    <let n="color::largeButtonHollowHighlightedBackground" v="color::buttonHollowHighlightedBackground"/>
    <let n="color::largeButtonHollowHighlightedTitle" v="rgba(color::largeButtonHollowNormalTitle.r,color::largeButtonHollowNormalTitle.g,color::largeButtonHollowNormalTitle.b,color::largeButtonHollowNormalTitle.a * 0.4)"/>
    <let n="color::largeButtonHollowHighlightedBorder" v="rgba(color::largeButtonHollowNormalBorder.r,color::largeButtonHollowNormalBorder.g,color::largeButtonHollowNormalBorder.b,color::largeButtonHollowNormalBorder.a * 0.4)"/>
    
    <let n="color::navBarBackground" v="color::white"/>
    <let n="color::navBarKey" v="color::black"/>
    <!-- This follows [BSUIEnvironmentColorSet appBackgroundColorForMode], which is what BSUINavigationController#applyThemeBasedOnCurrentLightLevel is currently using to set the background color. We also ignore isDarkUberTheme to be consistent with BSUINavigationController#applyThemeBasedOnCurrentLightLevel. -->
    <let n="color::navBarBackground" v="color::black" c="nightModeEnabled"/>
    <let n="color::navBarKey" v="color::white" c="nightModeEnabled"/>
    
    <let n="color::navBarButtonSolidNormalBackground" v="color::navBarKey"/>
    <let n="color::navBarButtonSolidNormalTitle" v="color::navBarBackground"/>
    <let n="color::navBarButtonSolidHighlightedBackground" v="rgba(color::navBarButtonSolidNormalBackground.r,color::navBarButtonSolidNormalBackground.g,color::navBarButtonSolidNormalBackground.b,color::navBarButtonSolidNormalBackground.a * 0.5)"/>
    <let n="color::navBarButtonSolidHighlightedTitle" v="rgba(color::navBarButtonSolidNormalTitle.r,color::navBarButtonSolidNormalTitle.g,color::navBarButtonSolidNormalTitle.b,color::navBarButtonSolidNormalTitle.a * 0.75)"/>
    
    <let n="color::navBarButtonHollowNormalBackground" v="color::clear"/>
    <let n="color::navBarButtonHollowNormalTitle" v="color::navBarKey"/>
    <let n="color::navBarButtonHollowHighlightedBackground" v="color::clear"/>
    <let n="color::navBarButtonHollowHighlightedTitle" v="rgba(color::navBarButtonHollowNormalTitle.r,color::navBarButtonHollowNormalTitle.g,color::navBarButtonHollowNormalTitle.b,color::navBarButtonHollowNormalTitle.a * 0.2)"/>
    
    <let n="color::glyph" v="color(color = :secondary-label)"/>
    <let n="color::shadow" v="color::black"/>
    <let n="color::subHeader" v="color(color = :secondary-label)"/>
    <let n="color::preHeader" v="color(color = :secondary-label)"/>
    
    <let n="color::sample" v="color::booksRed"/>
    <let n="color::preorder" v="color::booksOrange"/>
    <let n="color::nextInSeries" v="color::booksGreen"/>
    <let n="color::new" v="color::booksBlue"/>
    <let n="color::proof" v="color::booksPurple"/>
    <let n="color::ratings" v="color::booksKey"/>
    
    <let n="color::backgroundColor" v="color::booksBackground"/>
    <let n="color::backgroundColor" v="color(color =$altBackgroundColor)" c="$altBackgroundColor?"/>
    <let n="color::backgroundColor" v="uberBackgroundColor" c="hasUberBackgroundColor == true"/>
    
    <!-- override certain colors in uber pages -->
    <let n="color::buttonSolidNormalBackground" v="uberTitleTextColor" c="hasUberTitleTextColor == true"/>
    <let n="color::buttonSolidNormalTitle" v="uberBackgroundColor" c="hasUberBackgroundColor == true"/>
    
    <let n="color::buttonHollowNormalTitle" v="uberTitleTextColor" c="hasUberTitleTextColor == true"/>
    <let n="color::buttonHollowNormalBorder" v="uberTitleTextColor" c="hasUberTitleTextColor == true"/>
    
    <let n="color::preheaderUnderline" v="rgba(uberTitleTextColor.r,uberTitleTextColor.g,uberTitleTextColor.b,uberTitleTextColor.a * 0.3)" c="hasUberTitleTextColor == true"/>
    
    <let n="color::ratings" v="uberTitleTextColor" c="hasUberTitleTextColor == true"/>
</template>
