UNPKG

tanuki-ui

Version:

HTML-first React component library with semantic elements, multi-OS themes, and production-ready visual node editor

777 lines (694 loc) 28.6 kB
/** * iOS 17+ Design System for Tanuki UI * Implements Apple's latest Human Interface Guidelines with authentic iOS styling * Supports both light and dark modes with dynamic color system */ :root { /* iOS Typography System */ --themeDefaultFontFamily: -apple-system, "SF Pro Display", "SF Pro Text", "SF Pro Icons", BlinkMacSystemFont, "Helvetica Neue", "Helvetica", "Arial", sans-serif; --themeControlFontFamily: var(--themeDefaultFontFamily); --themeLabelFontFamily: var(--themeDefaultFontFamily); --themeMonospacedFont: "SF Mono", "Monaco", "Menlo", "Courier New", monospace; --themeSystemFont: var(--themeDefaultFontFamily); /* iOS Font Weights */ --fontWeightUltraLight: 100; --fontWeightThin: 200; --fontWeightLight: 300; --fontWeightRegular: 400; --fontWeightMedium: 500; --fontWeightSemibold: 600; --fontWeightBold: 700; --fontWeightHeavy: 800; --fontWeightBlack: 900; /* iOS Dynamic Type Scale */ --textFont: normal normal var(--fontWeightRegular) 17px/1.294118 var(--themeDefaultFontFamily); --titleFont: normal normal var(--fontWeightSemibold) 28px/1.285714 var(--themeDefaultFontFamily); --title2Font: normal normal var(--fontWeightRegular) 22px/1.272727 var(--themeDefaultFontFamily); --title3Font: normal normal var(--fontWeightRegular) 20px/1.25 var(--themeDefaultFontFamily); --headlineFont: normal normal var(--fontWeightSemibold) 17px/1.294118 var(--themeDefaultFontFamily); --bodyFont: normal normal var(--fontWeightRegular) 17px/1.294118 var(--themeDefaultFontFamily); --calloutFont: normal normal var(--fontWeightRegular) 16px/1.3125 var(--themeDefaultFontFamily); --subheadlineFont: normal normal var(--fontWeightRegular) 15px/1.333333 var(--themeDefaultFontFamily); --footnoteFont: normal normal var(--fontWeightRegular) 13px/1.384615 var(--themeDefaultFontFamily); --caption1Font: normal normal var(--fontWeightRegular) 12px/1.333333 var(--themeDefaultFontFamily); --caption2Font: normal normal var(--fontWeightRegular) 11px/1.363636 var(--themeDefaultFontFamily); --labelFont: var(--bodyFont); --controlTextFont: var(--bodyFont); /* iOS System Colors - Light Mode */ --textColor: rgba(0, 0, 0, 1); --labelColor: rgba(0, 0, 0, 1); --secondaryLabelColor: rgba(60, 60, 67, 0.6); --tertiaryLabelColor: rgba(60, 60, 67, 0.3); --quaternaryLabelColor: rgba(60, 60, 67, 0.18); --placeholderTextColor: rgba(60, 60, 67, 0.3); --linkColor: rgba(0, 122, 255, 1); --separatorColor: rgba(60, 60, 67, 0.29); --opaqueSeparatorColor: rgba(198, 198, 200, 1); /* iOS Accent Colors */ --accentColor: rgba(0, 122, 255, 1); /* iOS Blue */ --systemBlueColor: rgba(0, 122, 255, 1); --systemGreenColor: rgba(52, 199, 89, 1); --systemIndigoColor: rgba(88, 86, 214, 1); --systemOrangeColor: rgba(255, 149, 0, 1); --systemPinkColor: rgba(255, 45, 85, 1); --systemPurpleColor: rgba(175, 82, 222, 1); --systemRedColor: rgba(255, 59, 48, 1); --systemTealColor: rgba(90, 200, 250, 1); --systemYellowColor: rgba(255, 204, 0, 1); --systemBrownColor: rgba(162, 132, 94, 1); --systemMintColor: rgba(0, 199, 190, 1); --systemCyanColor: rgba(50, 173, 230, 1); /* iOS Gray Scale */ --systemGrayColor: rgba(142, 142, 147, 1); --systemGray2Color: rgba(174, 174, 178, 1); --systemGray3Color: rgba(199, 199, 204, 1); --systemGray4Color: rgba(209, 209, 214, 1); --systemGray5Color: rgba(229, 229, 234, 1); --systemGray6Color: rgba(242, 242, 247, 1); /* iOS Background Colors */ --windowBackgroundColor: rgba(255, 255, 255, 1); --systemBackgroundColor: rgba(255, 255, 255, 1); --secondarySystemBackgroundColor: rgba(242, 242, 247, 1); --tertiarySystemBackgroundColor: rgba(255, 255, 255, 1); --systemGroupedBackgroundColor: rgba(242, 242, 247, 1); --secondarySystemGroupedBackgroundColor: rgba(255, 255, 255, 1); --tertiarySystemGroupedBackgroundColor: rgba(242, 242, 247, 1); /* iOS Fill Colors */ --systemFillColor: rgba(120, 120, 128, 0.2); --secondarySystemFillColor: rgba(120, 120, 128, 0.16); --tertiarySystemFillColor: rgba(118, 118, 128, 0.12); --quaternarySystemFillColor: rgba(116, 116, 128, 0.08); /* Selection Colors */ --selectedTextColor: rgba(255, 255, 255, 1); --selectedTextBackgroundColor: var(--accentColor); --selectedContentBackgroundColor: rgba(0, 122, 255, 0.15); --unemphasizedSelectedTextColor: rgba(0, 0, 0, 1); --unemphasizedSelectedTextBackgroundColor: rgba(0, 0, 0, 0.15); --selectedMenuItemTextColor: rgba(255, 255, 255, 1); /* Focus Indicators */ --keyboardFocusIndicatorColor: var(--accentColor); --focusRingWidth: 3px; --focusRingOffset: 2px; --focusRingOpacity: 0.5; /* iOS Material Effects */ --materialThick: blur(30px) saturate(180%); --materialRegular: blur(20px) saturate(180%); --materialThin: blur(10px) saturate(180%); --materialUltraThin: blur(6px) saturate(180%); --backgroundBackdropFilter: none; --windowBackdropFilter: none; /* iOS Elevation System */ --windowLevelElevation: 24; --dialogLevelElevation: 24; --popupLevelElevation: 16; --tooltipLevelElevation: 8; --cardLevelElevation: 2; --controlsLevelElevation: 1; --layerLevelElevation: 0; /* iOS Shadows */ --shadowOpacity: 0.15; --shadowRadius: 10; --shadowOffset: 0 3px; /* Semantic Aliases */ --cautionColor: var(--systemRedColor); --dangerColor: var(--systemRedColor); --warningColor: var(--systemOrangeColor); --successColor: var(--systemGreenColor); --infoColor: var(--systemBlueColor); /* Animation Properties */ --animationDuration: 250ms; --animationEasing: cubic-bezier(0.25, 0.46, 0.45, 0.94); --springAnimation: cubic-bezier(0.68, -0.55, 0.265, 1.55); /* Layout Metrics */ --statusBarHeight: 44px; --navigationBarHeight: 44px; --tabBarHeight: 49px; --toolbarHeight: 44px; --searchBarHeight: 36px; --appMainToolbarHeight: var(--navigationBarHeight); --contentInset: 16px; --contentInsetCompact: 8px; --interItemSpacing: 8px; --sectionSpacing: 20px; --cornerRadius: 10px; --cornerRadiusLarge: 13px; --cornerRadiusSmall: 6px; /* Safe Area Support */ --safeAreaInsetTop: env(safe-area-inset-top, 0); --safeAreaInsetRight: env(safe-area-inset-right, 0); --safeAreaInsetBottom: env(safe-area-inset-bottom, 0); --safeAreaInsetLeft: env(safe-area-inset-left, 0); --headerHeight: calc(var(--navigationBarHeight) + var(--safeAreaInsetTop)); --footerHeight: calc(var(--tabBarHeight) + var(--safeAreaInsetBottom)); --fullScreenHeight: calc(100vh - var(--safeAreaInsetTop) - var(--safeAreaInsetBottom)); } /* iOS Controls */ :root { /* Control Base Properties */ --controlHeight: 44px; --controlHeightLarge: 50px; --controlHeightSmall: 34px; --controlMinWidth: 44px; --controlBorderRadius: var(--cornerRadius); --controlBorderRadiusPill: 100px; --controlPadding: 0 16px; --controlPaddingCompact: 0 12px; --controlTextLetterSpacing: -0.01em; --controlTransition: all var(--animationDuration) var(--animationEasing); /* Default Control (Secondary Style) */ --controlBackground: var(--systemGray5Color); --controlTextColor: var(--labelColor); --controlBorder: none; --controlBoxShadow: none; --controlHoverBackground: var(--systemGray4Color); --controlActiveBackground: var(--systemGray3Color); --controlDisabledBackground: var(--quaternarySystemFillColor); --disabledControlTextColor: var(--tertiaryLabelColor); --controlFocusBoxShadow: 0 0 0 var(--focusRingWidth) rgba(0, 122, 255, var(--focusRingOpacity)); /* Primary Control (Filled Blue) */ --controlBackground--primary: var(--accentColor); --controlTextColor--primary: rgba(255, 255, 255, 1); --controlBorder--primary: none; --controlBoxShadow--primary: none; --controlHoverBackground--primary: rgba(0, 112, 233, 1); --controlActiveBackground--primary: rgba(0, 100, 210, 1); --controlFocusBackground--primary: var(--controlHoverBackground--primary); --controlDisabledBackground--primary: var(--quaternarySystemFillColor); /* Secondary Control (Tinted) */ --controlBackground--secondary: rgba(0, 122, 255, 0.15); --controlTextColor--secondary: var(--accentColor); --controlBorder--secondary: none; --controlBoxShadow--secondary: none; --controlHoverBackground--secondary: rgba(0, 122, 255, 0.20); --controlActiveBackground--secondary: rgba(0, 122, 255, 0.25); --controlFocusBackground--secondary: var(--controlHoverBackground--secondary); /* CTA Control (Prominent) */ --controlBackground--cta: var(--accentColor); --controlTextColor--cta: rgba(255, 255, 255, 1); --controlBorder--cta: none; --controlBoxShadow--cta: 0 2px 8px rgba(0, 122, 255, 0.3); --controlHoverBackground--cta: rgba(0, 112, 233, 1); --controlActiveBackground--cta: rgba(0, 100, 210, 1); /* Destructive Control */ --controlBackground--destructive: var(--systemRedColor); --controlTextColor--destructive: rgba(255, 255, 255, 1); --controlHoverBackground--destructive: rgba(235, 45, 39, 1); --controlActiveBackground--destructive: rgba(215, 35, 33, 1); /* Plain Control (Borderless) */ --controlBackground--plain: transparent; --controlTextColor--plain: var(--accentColor); --controlBorder--plain: none; --controlHoverBackground--plain: var(--quaternarySystemFillColor); --controlActiveBackground--plain: var(--tertiarySystemFillColor); } /* iOS Input Fields */ :root { --inputHeight: 44px; --inputPadding: 11px 16px; --inputFont: var(--textFont); --inputBorder: 0.5px solid var(--separatorColor); --inputBorderRadius: var(--cornerRadius); --inputBackground: var(--secondarySystemBackgroundColor); --inputBoxShadow: none; --inputPlaceholderColor: var(--placeholderTextColor); --inputFocusBorder: 0.5px solid var(--accentColor); --inputFocusBoxShadow: 0 0 0 var(--focusRingWidth) rgba(0, 122, 255, var(--focusRingOpacity)); --inputHoverBorder: 0.5px solid var(--systemGray3Color); --inputDisabledBackground: var(--quaternarySystemFillColor); --inputDisabledBorder: 0.5px solid var(--quaternarySystemFillColor); /* Search Input */ --searchInputHeight: var(--searchBarHeight); --searchInputPadding: 7px 8px 7px 30px; --searchInputBorderRadius: 10px; --searchInputBackground: rgba(118, 118, 128, 0.12); --searchInputIcon: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z' fill='%238E8E93'/%3E%3C/svg%3E"); } /* iOS Form Controls */ :root { /* Checkbox */ --checkboxSize: 22px; --checkboxBorderRadius: 6px; --checkboxBorder: 1.5px solid var(--systemGray3Color); --checkboxBackground: transparent; --checkboxCheckedBackground: var(--accentColor); --checkboxCheckedBorder: 1.5px solid var(--accentColor); --checkboxCheckmark: url("data:image/svg+xml,%3Csvg width='14' height='11' viewBox='0 0 14 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 5L5 9L13 1' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); /* Radio */ --radioSize: 22px; --radioBorder: 1.5px solid var(--systemGray3Color); --radioBackground: transparent; --radioCheckedBackground: var(--accentColor); --radioCheckedBorder: 1.5px solid var(--accentColor); --radioDotSize: 8px; /* Switch */ --switchWidth: 51px; --switchHeight: 31px; --switchBorderRadius: 15.5px; --switchBackground: var(--systemGray5Color); --switchCheckedBackground: var(--systemGreenColor); --switchThumbSize: 27px; --switchThumbBackground: rgba(255, 255, 255, 1); --switchThumbShadow: 0 3px 8px rgba(0, 0, 0, 0.15), 0 3px 1px rgba(0, 0, 0, 0.06); /* Slider */ --sliderTrackHeight: 4px; --sliderTrackBackground: var(--systemGray5Color); --sliderTrackFillBackground: var(--accentColor); --sliderThumbSize: 28px; --sliderThumbBackground: rgba(255, 255, 255, 1); --sliderThumbShadow: 0 3px 7px rgba(0, 0, 0, 0.15), 0 0.5px 0.5px rgba(0, 0, 0, 0.12); /* Select/Dropdown */ --selectBoxHeight: var(--inputHeight); --selectBoxPadding: 11px 36px 11px 16px; --selectBoxBorder: var(--inputBorder); --selectBoxBorderRadius: var(--inputBorderRadius); --selectBoxBackground: var(--inputBackground); --selectBoxArrowSize: 12px; --selectBoxArrowColor: var(--secondaryLabelColor); --selectDropdownBackground: rgba(246, 246, 246, 0.92); --selectDropdownBackdropFilter: var(--materialRegular); --selectDropdownBorderRadius: var(--cornerRadiusLarge); --selectDropdownShadow: 0 10px 40px rgba(0, 0, 0, 0.19), 0 2px 12px rgba(0, 0, 0, 0.12); } /* iOS Navigation Components */ :root { /* Navigation Bar */ --navBarBackground: rgba(249, 249, 249, 0.94); --navBarBackdropFilter: var(--materialRegular); --navBarBorder: 0.5px solid var(--separatorColor); --navBarTitleFont: var(--headlineFont); --navBarButtonFont: var(--bodyFont); --navBarButtonColor: var(--accentColor); /* Tab Bar */ --tabBarBackground: rgba(249, 249, 249, 0.94); --tabBarBackdropFilter: var(--materialRegular); --tabBarBorder: 0.5px solid var(--separatorColor); --tabBarBoxShadow: none; --tabItemHeight: var(--tabBarHeight); --tabItemPadding: 0; --tabItemIconSize: 24px; --tabItemFont: var(--caption1Font); --tabItemTextColor: var(--secondaryLabelColor); --tabItemBackground: transparent; --tabItemActiveBackground: transparent; --tabItemTextColor-selected: var(--accentColor); --tabItemBackground-selected: transparent; /* Toolbar */ --toolbarBackground: rgba(249, 249, 249, 0.94); --toolbarBackdropFilter: var(--materialRegular); --toolbarBorder: 0.5px solid var(--separatorColor); --toolbarItemColor: var(--accentColor); --toolbarItemFont: var(--bodyFont); /* Segmented Control */ --segmentControlHeight: 32px; --segmentControlPadding: 2px; --segmentControlBackground: rgba(118, 118, 128, 0.12); --segmentControlBorderRadius: 9px; --segmentControlSegmentPadding: 0 16px; --segmentControlSegmentBackground: transparent; --segmentControlSegmentSelectedBackground: rgba(255, 255, 255, 1); --segmentControlSegmentSelectedShadow: 0 3px 8px rgba(0, 0, 0, 0.12), 0 3px 1px rgba(0, 0, 0, 0.04); --segmentControlSegmentFont: var(--footnoteFont); --segmentControlSegmentColor: var(--labelColor); --segmentControlBackdropFilter: none; } /* iOS Cards and Lists */ :root { /* List/Table Styles */ --tableBackgroundColor: var(--systemBackgroundColor); --tableGroupedBackgroundColor: var(--systemGroupedBackgroundColor); --tableCellBackground: var(--secondarySystemGroupedBackgroundColor); --tableCellPadding: 11px 16px; --tableCellMinHeight: 44px; --tableCellBorder: 0.5px solid var(--separatorColor); --tableCellSelectedBackground: var(--selectedContentBackgroundColor); --tableHeaderBackground: var(--systemGroupedBackgroundColor); --tableHeaderFont: var(--footnoteFont); --tableHeaderTextColor: var(--secondaryLabelColor); --tableHeaderPadding: 6px 16px; --tableFooterFont: var(--footnoteFont); --tableFooterTextColor: var(--secondaryLabelColor); --tableFooterPadding: 6px 16px; --tableAccessoryColor: var(--tertiaryLabelColor); /* Card Styles */ --cardBackground: var(--secondarySystemGroupedBackgroundColor); --cardBorderRadius: var(--cornerRadius); --cardBorder: none; --cardBoxShadow: 0 2px 8px rgba(0, 0, 0, 0.04); --cardPadding: 16px; --cardHeaderFont: var(--headlineFont); --cardBodyFont: var(--bodyFont); --cardHoverTransform: scale(0.98); --cardActiveTransform: scale(0.95); --cardTransition: transform var(--animationDuration) var(--animationEasing); } /* iOS Dialogs and Popovers */ :root { /* Alert/Dialog */ --dialogBackground: rgba(255, 255, 255, 0.95); --dialogBackdropFilter: var(--materialThick); --dialogBorderRadius: var(--cornerRadiusLarge); --dialogBoxShadow: 0 10px 50px rgba(0, 0, 0, 0.25), 0 2px 12px rgba(0, 0, 0, 0.12); --dialogPadding: 20px; --dialogTitleFont: var(--headlineFont); --dialogBodyFont: var(--footnoteFont); --dialogBackdrop: rgba(0, 0, 0, 0.4); --dialogMaxWidth: 270px; --dialogButtonSeparator: 0.5px solid var(--separatorColor); /* Action Sheet */ --actionSheetBackground: rgba(255, 255, 255, 0.95); --actionSheetBackdropFilter: var(--materialThick); --actionSheetBorderRadius: var(--cornerRadiusLarge); --actionSheetItemHeight: 57px; --actionSheetItemFont: var(--title3Font); --actionSheetItemColor: var(--accentColor); --actionSheetDestructiveColor: var(--systemRedColor); --actionSheetCancelFont: var(--fontWeightSemibold) 20px/1.25 var(--themeDefaultFontFamily); /* Popover */ --popoverBackground: rgba(255, 255, 255, 0.95); --popoverBackdropFilter: var(--materialRegular); --popoverBorderRadius: var(--cornerRadiusLarge); --popoverBoxShadow: 0 10px 40px rgba(0, 0, 0, 0.19), 0 2px 12px rgba(0, 0, 0, 0.12); --popoverArrowSize: 13px; --popoverMinWidth: 200px; /* Context Menu */ --contextualMenuBackground: rgba(255, 255, 255, 0.95); --contextualMenuBackdropFilter: var(--materialRegular); --contextualMenuBorderRadius: var(--cornerRadiusLarge); --contextualMenuBoxShadow: 0 10px 40px rgba(0, 0, 0, 0.19), 0 2px 12px rgba(0, 0, 0, 0.12); --contextualMenuPadding: 4px 0; --contextualMenuItemHeight: 44px; --contextualMenuItemPadding: 0 16px; --contextualMenuItemFont: var(--bodyFont); --contextualMenuItemHoverBackground: var(--quaternarySystemFillColor); --contextualMenuSeparatorColor: var(--separatorColor); --contextualMenuIconSize: 20px; --contextualMenuIconColor: var(--secondaryLabelColor); } /* iOS Activity Indicators */ :root { /* Progress Bar */ --progressHeight: 4px; --progressBorderRadius: 2px; --progressBackground: var(--quaternarySystemFillColor); --progressForeground: var(--accentColor); /* Activity Indicator */ --activityIndicatorSize: 20px; --activityIndicatorColor: var(--secondaryLabelColor); /* Page Control */ --pageControlDotSize: 7px; --pageControlDotSpacing: 9px; --pageControlDotColor: rgba(0, 0, 0, 0.2); --pageControlDotActiveColor: var(--labelColor); } /* iOS Sidebar/Source List */ :root { --sidebarBackground: var(--secondarySystemBackgroundColor); --sidebarWidth: 320px; --sidebarItemHeight: 44px; --sidebarItemPadding: 0 16px; --sidebarItemFont: var(--bodyFont); --sidebarItemTextColor: var(--labelColor); --sidebarItemIconSize: 20px; --sidebarItemIconColor: var(--secondaryLabelColor); --sidebarItemHoverBackground: var(--quaternarySystemFillColor); --sidebarItemActiveBackground: var(--tertiarySystemFillColor); --selectedSidebarListItemBackground: var(--selectedContentBackgroundColor); --selectedSidebarListItemTextColor: var(--labelColor); --sidebarSectionHeaderFont: var(--footnoteFont); --sidebarSectionHeaderColor: var(--secondaryLabelColor); --sidebarSectionHeaderPadding: 8px 16px 4px; /* Sidebar Section Title - iOS Style */ --sidebarSectionTitleFont: var(--footnoteFont); --sidebarSectionTitleLetterSpacing: 0; --sidebarSectionTitleMargin: 20px 0 4px 0; --sidebarSectionTitlePadding: 0 16px; --sidebarSectionTitleColor: var(--secondaryLabelColor); --sidebarSectionTitleBackground: transparent; --sidebarSectionTitleBorderRadius: 0; --sidebarSectionTitleTextTransform: uppercase; } /* iOS Window Chrome */ :root { --windowBorderRadius: 0; --windowBoxShadow: none; --windowBackdropFilter: none; --windowPadding: 0; --windowHeaderHeight: var(--navigationBarHeight); --windowFooterHeight: var(--tabBarHeight); --windowResizeHandleSize: 0; --windowTitleFont: var(--headlineFont); --windowTitleColor: var(--labelColor); } /* iOS Animations and Transitions */ :root { --transitionDefault: all var(--animationDuration) var(--animationEasing); --transitionFast: all 150ms var(--animationEasing); --transitionSlow: all 350ms var(--animationEasing); --transitionSpring: all 500ms var(--springAnimation); } /* iOS Dark Mode Support */ @media (prefers-color-scheme: dark) { :root { /* Dark Mode Text Colors */ --textColor: rgba(255, 255, 255, 1); --labelColor: rgba(255, 255, 255, 1); --secondaryLabelColor: rgba(235, 235, 245, 0.6); --tertiaryLabelColor: rgba(235, 235, 245, 0.3); --quaternaryLabelColor: rgba(235, 235, 245, 0.18); --placeholderTextColor: rgba(235, 235, 245, 0.3); --separatorColor: rgba(84, 84, 88, 0.6); --opaqueSeparatorColor: rgba(56, 56, 58, 1); /* Dark Mode Backgrounds */ --windowBackgroundColor: rgba(0, 0, 0, 1); --systemBackgroundColor: rgba(0, 0, 0, 1); --secondarySystemBackgroundColor: rgba(28, 28, 30, 1); --tertiarySystemBackgroundColor: rgba(44, 44, 46, 1); --systemGroupedBackgroundColor: rgba(0, 0, 0, 1); --secondarySystemGroupedBackgroundColor: rgba(28, 28, 30, 1); --tertiarySystemGroupedBackgroundColor: rgba(44, 44, 46, 1); /* Dark Mode Fills */ --systemFillColor: rgba(120, 120, 128, 0.36); --secondarySystemFillColor: rgba(120, 120, 128, 0.32); --tertiarySystemFillColor: rgba(118, 118, 128, 0.24); --quaternarySystemFillColor: rgba(118, 118, 128, 0.18); /* Dark Mode Controls */ --controlBackground: rgba(72, 72, 74, 1); --controlHoverBackground: rgba(84, 84, 86, 1); --controlActiveBackground: rgba(99, 99, 102, 1); /* Dark Mode Inputs */ --inputBackground: rgba(44, 44, 46, 1); --inputBorder: 0.5px solid rgba(84, 84, 88, 0.6); /* Dark Mode Cards */ --cardBackground: rgba(28, 28, 30, 1); --cardBoxShadow: 0 2px 8px rgba(0, 0, 0, 0.3); /* Dark Mode Navigation */ --navBarBackground: rgba(28, 28, 30, 0.94); --tabBarBackground: rgba(28, 28, 30, 0.94); --toolbarBackground: rgba(28, 28, 30, 0.94); /* Dark Mode Dialogs */ --dialogBackground: rgba(44, 44, 46, 0.95); --dialogBackdrop: rgba(0, 0, 0, 0.6); --actionSheetBackground: rgba(44, 44, 46, 0.95); --popoverBackground: rgba(44, 44, 46, 0.95); --contextualMenuBackground: rgba(44, 44, 46, 0.95); /* Dark Mode Tables */ --tableBackgroundColor: var(--systemBackgroundColor); --tableCellBackground: rgba(28, 28, 30, 1); --tableGroupedBackgroundColor: var(--systemBackgroundColor); /* Dark Mode Sidebar */ --sidebarBackground: rgba(28, 28, 30, 1); /* Dark Mode Misc */ --searchInputBackground: rgba(118, 118, 128, 0.24); --segmentControlBackground: rgba(118, 118, 128, 0.24); --segmentControlSegmentSelectedBackground: rgba(72, 72, 74, 1); --switchBackground: rgba(99, 99, 102, 1); --checkboxBorder: 1.5px solid rgba(142, 142, 147, 1); --radioBorder: 1.5px solid rgba(142, 142, 147, 1); --sliderTrackBackground: rgba(56, 56, 58, 1); --progressBackground: rgba(56, 56, 58, 1); --pageControlDotColor: rgba(255, 255, 255, 0.2); --pageControlDotActiveColor: rgba(255, 255, 255, 1); } } /* iOS High Contrast Mode */ @media (prefers-contrast: high) { :root { --focusRingWidth: 4px; --focusRingOpacity: 1; --controlBorder: 1px solid currentColor; --inputBorder: 1px solid currentColor; --checkboxBorder: 2px solid currentColor; --radioBorder: 2px solid currentColor; } } /* iOS Reduced Motion */ @media (prefers-reduced-motion: reduce) { :root { --animationDuration: 0ms; --transitionDefault: none; --transitionFast: none; --transitionSlow: none; --transitionSpring: none; --cardHoverTransform: none; --cardActiveTransform: none; } } /* iOS-Specific Component Enhancements */ /* iOS Button Styles */ :root { --buttonTransform: scale(0.95); --buttonActiveOpacity: 0.6; --buttonTapHighlight: rgba(0, 0, 0, 0); } /* iOS List Hover Effects */ :root { --listItemHoverBackground: var(--quaternarySystemFillColor); --listItemActiveBackground: var(--tertiarySystemFillColor); --listItemTransition: background-color 150ms ease; } /* iOS Modal Presentation */ :root { --modalSlideDistance: 100%; --modalScaleDown: 0.93; --modalBorderRadius: var(--cornerRadiusLarge); --modalShadow: 0 10px 50px rgba(0, 0, 0, 0.25); } /* iOS Notification Badge */ :root { --badgeMinWidth: 20px; --badgeHeight: 20px; --badgePadding: 0 6px; --badgeBackground: var(--systemRedColor); --badgeTextColor: rgba(255, 255, 255, 1); --badgeFont: var(--fontWeightMedium) 13px/1 var(--themeDefaultFontFamily); --badgeBorderRadius: 10px; } /* iOS Loading States */ :root { --loadingSpinnerSize: 20px; --loadingSpinnerBorderWidth: 2px; --loadingSpinnerColor: var(--secondaryLabelColor); --loadingSpinnerTrackColor: var(--quaternarySystemFillColor); --loadingSpinnerDuration: 0.8s; } /* iOS Accessibility */ :root { --voiceOverFocusRing: 0 0 0 4px var(--accentColor); --reducedTransparencyBackground: rgba(255, 255, 255, 1); --increasedContrastBorder: 1px solid var(--labelColor); } /* iOS Gesture Hints */ :root { --gestureIndicatorHeight: 5px; --gestureIndicatorWidth: 134px; --gestureIndicatorBackground: var(--labelColor); --gestureIndicatorBorderRadius: 2.5px; --gestureIndicatorOpacity: 0.2; } /* iOS Dynamic Island Support */ :root { --dynamicIslandHeight: 37px; --dynamicIslandExpandedHeight: 120px; --dynamicIslandPadding: 16px; --dynamicIslandBackground: rgba(0, 0, 0, 1); --dynamicIslandBorderRadius: 20px; } /* iOS SF Symbols Integration */ :root { --symbolRenderingMode: monochrome; --symbolWeight: medium; --symbolScale: medium; --symbolHierarchical: true; } /* iOS Vibrancy Effects */ :root { --vibrancyLight: rgba(255, 255, 255, 0.5); --vibrancyDark: rgba(0, 0, 0, 0.5); --vibrancyExtraLight: rgba(255, 255, 255, 0.7); --vibrancyUltraDark: rgba(0, 0, 0, 0.7); } /* iOS Sheet Presentation */ :root { --sheetCornerRadius: 10px; --sheetGrabberWidth: 36px; --sheetGrabberHeight: 5px; --sheetGrabberBackground: var(--tertiaryLabelColor); --sheetDetentMedium: 50vh; --sheetDetentLarge: 90vh; } /* iOS Keyboard Appearance */ :root { --keyboardAppearance: light; --keyboardReturnKeyType: default; --keyboardToolbarHeight: 44px; --keyboardToolbarBackground: var(--secondarySystemBackgroundColor); } /* iOS Date/Time Picker */ :root { --datePickerHeight: 216px; --datePickerWheelBackground: var(--secondarySystemGroupedBackgroundColor); --datePickerSelectionBackground: var(--tertiarySystemFillColor); --datePickerTextColor: var(--labelColor); --datePickerSelectedTextColor: var(--labelColor); } /* iOS Alert Dialog Specific */ :root { --alertTitleFont: var(--headlineFont); --alertMessageFont: var(--footnoteFont); --alertButtonHeight: 44px; --alertButtonSeparator: 0.5px solid var(--separatorColor); --alertPreferredActionColor: var(--accentColor); --alertDestructiveActionColor: var(--systemRedColor); } /* iOS Pull to Refresh */ :root { --pullToRefreshHeight: 60px; --pullToRefreshThreshold: 80px; --pullToRefreshSpinnerSize: 20px; --pullToRefreshTextFont: var(--footnoteFont); --pullToRefreshTextColor: var(--secondaryLabelColor); } /* iOS App Icon Styles */ :root { --appIconSize: 60px; --appIconBorderRadius: 13.5px; --appIconShadow: 0 2px 4px rgba(0, 0, 0, 0.2); --appIconNotificationBadgeSize: 20px; --appIconNotificationBadgeOffset: -5px; } /* iOS Widget Styles */ :root { --widgetSmallSize: 155px; --widgetMediumWidth: 329px; --widgetMediumHeight: 155px; --widgetLargeSize: 329px; --widgetCornerRadius: 22px; --widgetPadding: 16px; --widgetBackground: var(--secondarySystemGroupedBackgroundColor); } /* iOS Spotlight Search */ :root { --spotlightBackground: rgba(255, 255, 255, 0.9); --spotlightBackdropFilter: var(--materialThick); --spotlightInputHeight: 36px; --spotlightResultHeight: 60px; --spotlightResultSeparator: 0.5px solid var(--separatorColor); } /* iOS Floating Action Button */ :root { --fabSize: 56px; --fabMiniSize: 40px; --fabBackground: var(--accentColor); --fabTextColor: rgba(255, 255, 255, 1); --fabShadow: 0 4px 12px rgba(0, 122, 255, 0.4); --fabHoverTransform: scale(1.05); --fabActiveTransform: scale(0.95); } /* iOS Privacy Indicators */ :root { --privacyIndicatorSize: 6px; --privacyIndicatorMicrophoneColor: var(--systemOrangeColor); --privacyIndicatorCameraColor: var(--systemGreenColor); --privacyIndicatorLocationColor: var(--systemBlueColor); --privacyIndicatorScreenRecordingColor: var(--systemRedColor); }