/* * Citizen - LESS variables * https://starcitizen.tools */ // Import MediaWiki-supplied mixins @import 'mediawiki.mixins'; /* == Breakpoints == */ /** * Minimum available screen width at which a device can be considered a mobile device * Many older feature phones have screens smaller than this value. */ @width-breakpoint-mobile: 320px; /** * Minimum available screen width at which a device can be considered a tablet * The number is currently based on the device width of a Samsung Galaxy S5 mini and is low * enough to cover iPad (768px). */ @width-breakpoint-tablet: 720px; /* Minimum available screen width at which a device can be considered a desktop. */ @width-breakpoint-desktop: 1000px; /* Wider desktop breakpoint */ @width-breakpoint-desktop-wide: 1300px; /* Extra wide desktop breakpoint */ @width-breakpoint-desktop-extrawide: 2000px; /* == Spacing == */ @space-unit: 1rem; @line-height-xs: 1.25; @line-height-sm: 1.375; @line-height-md: 1.6; /* == Fonts == */ /** * Citizen sans-serif font stack * * `Roboto` – Default font * `Noto Sans CJK` - CJK font * system-ui - System UI font stack * `-apple-system` - Firefox fallback for System UI font stack */ @fonts: 'Roboto', 'Noto Sans CJK', system-ui, -apple-system, sans-serif; /** * Citizen serif font stack * * `Noto Serif` - Not included yet * `Noto Serif CJK` - Not included yet * `Georgia` – Windows, Mac * `serif` – (Generic) web font fallback */ @fonts-serif: 'Noto Serif', 'Noto Serif CJK', Georgia, serif; /** * Citizen monospace font stack * * `SFMono-Regular` - macOS 10.12+ * `Menlo` – macOS 10.6+ * `Roboto Mono` - Android 4.0+ * `Consolas` – Windows Vista & newer * `Liberation Mono` – Fedora, Ubuntu, … OFL licensed * `'Courier New', monospace` – (Generic) web font fallback */ @fonts-monospace: 'SFMono-Regular', 'Menlo', 'Roboto Mono', 'Consolas', 'Liberation Mono', 'Courier New', monospace; /* == Colors == */ /* Base theme */ @diff-hoverstate: 2; @color-primary__h: 220; @color-primary__s: 60%; @color-primary__l: 50%; @color-surface-0: ~'hsl( 0, 0%, 100% )'; @color-surface-1: ~'hsl( 0, 0%, 100% )'; @color-surface-2: ~'hsl( 210, 17%, 98% )'; @color-surface-3: ~'hsl( 220, 17%, 93% )'; @color-surface-4: ~'hsl( 213, 9%, 80% )'; @color-surface-2--hover: ~'hsl( 210, 17%, 'unit( 98 + @diff-hoverstate, % )~' )'; @color-surface-2--active: ~'hsl( 210, 17%, 'unit( 98 - @diff-hoverstate, % )~' )'; /* * Syntax highlight colors * Based on Material Theme Lighter * https://material-theme.site */ @color-syntax-red: #e53935; @color-syntax-orange: #f76d47; @color-syntax-yellow: #e2931d; @color-syntax-green: #91b859; @color-syntax-cyan: #39adb5; @color-syntax-blue: #6182b8; @color-syntax-paleblue: #8796b0; @color-syntax-purple: #9c3eda; @color-syntax-brown: #916b53; @color-syntax-pink: #ff5370; @color-syntax-violet: #945eb8; @color-syntax-grey: #90a4ae; /* Dark theme */ @diff-hoverstate-dark: 4; @color-primary__l-dark: 60%; @color-surface-0-dark: ~'hsl( 210, 27%, 10% )'; @color-surface-1-dark: ~'hsl( 212, 15%, 17% )'; @color-surface-2-dark: ~'hsl( 208, 14%, 18% )'; @color-surface-3-dark: ~'hsl( 210, 11%, 21% )'; @color-surface-4-dark: ~'hsl( 210, 10%, 24% )'; @color-surface-2-dark--hover: ~'hsl( 208, 14%, 'unit( 18 + @diff-hoverstate-dark, % )~' )'; @color-surface-2-dark--active: ~'hsl( 208, 14%, 'unit( 18 - @diff-hoverstate-dark, % )~' )'; /* * Syntax highlight colors * Based on Material Theme Palenight * https://material-theme.site */ @color-syntax-red-dark: #f07178; @color-syntax-orange-dark: #f78c6c; @color-syntax-yellow-dark: #ffcb6b; @color-syntax-green-dark: #c3e88d; @color-syntax-cyan-dark: #89ddff; @color-syntax-blue-dark: #82aaff; @color-syntax-paleblue-dark: #b2ccd6; @color-syntax-purple-dark: #c792ea; @color-syntax-brown-dark: #916b53; @color-syntax-pink-dark: #ff9cac; @color-syntax-violet-dark: #bb80b3; @color-syntax-grey-dark: #676E95; /** * Based WikimediaUI (`wmui`) color palette * See https://design.wikimedia.org/style-guide/visual-style_colors.html * Don't use those variables directly, instead define your vars * referring to them as applied further below. */ @color-base0: #000; // = HSB 0°, 0%, 0% @color-base10: #202122; // = HSB 210°, 6%, 13% @color-base20: #54595d; // = HSB 207°, 10%, 36%; WCAG 2.0 level AAA 7.09:1 contrast ratio on `#fff` @color-base30: #72777d; // = HSB 210°, 9%, 49%; WCAG 2.0 level AA at 4.52:1 contrast ratio on `#fff` @color-base50: #a2a9b1; // = HSB 212°, 8%, 69% @color-base70: #c8ccd1; // = HSB 213°, 4%, 82% @color-base80: #eaecf0; // = HSB 220°, 3%, 94% @color-base90: #f8f9fa; // = HSB 210°, 1%, 98% @color-base100: #fff; // = HSB 0°, 0%, 100% @color-accent30: #2a4b8d; // = HSB 220°, 70%, 55% @color-accent50: #36c; // = HSB 220°, 75%, 80% @color-accent90: #eaf3ff; // = HSB 214°, 8%, 100% @color-red30: #b32424; // = HSB 360°, 80%, 70% @color-red50: #d33; // = HSB 360°, 77%, 87% @color-red90: #fee7e6; // = HSB 3°, 9%, 100% @color-yellow30: #ac6600; // = HSB 36°, 100%, 67% @color-yellow50: #fc3; // = HSB 45°, 80%, 100% @color-yellow90: #fef6e7; // = HSB 39°, 9%, 100% @color-green30: #14866d; // = HSB 167°, 85%, 53% @color-green50: #00af89; // = HSB 167°, 100%, 69% @color-green90: #d5fdf4; // = HSB 166°, 16%, 99% @color-accent50--lighten: #5b84d6; @color-red50--lighten: #e35b5b; @color-accent-30--darken: #26437f; @background-color-overlay: rgba( 255, 255, 255, 0.95 ); //base100 95% opacity @background-color-overlay--lighter: rgba( 255, 255, 255, 0.6 ); @background-color-framed: @color-base90; @background-color-framed--hover: @color-base100; @background-color-framed--active: @color-base70; @background-color-input: rgba( 255, 255, 255, 0.5 ); @background-color-icon: rgba( 0, 0, 0, 0.6 ); @background-color-icon--hover: rgba( 0, 0, 0, 0.8 ); @background-color-icon--active: rgba( 0, 0, 0, 1 ); @background-color-quiet: transparent; @background-color-quiet--hover: rgba( 0, 0, 0, 0.07 ); @background-color-quiet--active: rgba( 0, 0, 0, 0.09 ); @background-color-primary--hover: @color-accent90; @background-color-primary--active: rgba( 41, 98, 204, 0.1 ); @background-color-destructive: @color-red90; @background-color-warning: @color-yellow90; @background-color-success: @color-green90; /* Foreground colors */ @color-base: @color-base20; @color-base--emphasized: @color-base10; @color-base--subtle: @color-base30; @color-primary: @color-accent50; @color-primary--hover: @color-accent50--lighten; @color-primary--active: @color-accent30; @color-destructive: @color-red50; @color-destructive--hover: @color-red50--lighten; @color-destructive--active: @color-red30; @color-warning: @color-yellow50; @color-success: @color-green50; @color-link: @color-accent50; @color-link--hover: @color-accent50--lighten; @color-link--active: @color-accent30; @color-link-new: @color-red50; @color-link-new--hover: @color-red50--lighten; @color-link-new--active: @color-red30; /* Opacity */ @opacity-base--disabled: 0.3; @opacity-icon-base: 0.6; @opacity-icon-base--hover: 0.8; @opacity-icon-base--active: 1; /* Z-Index */ // @z-index-base: 0; - WMUI @z-index-page-header: 11; @z-index-site-header: 91; @z-index-overlay: 101; // WMUI /* == Box model properties == */ /* `--*size` variables are used for `*width` & `*height` properties. */ @size-icon: 1.25rem; // Not in the header section it is also used outside of header @header-size: 3.5rem; @width-layout: @width-breakpoint-desktop - 2 * @padding-page; // TODO: Revise this number, fixed value isn't great but we need it for b @width-toc: 240px; /* Paddings */ @padding-page: 16px; /* Border */ /* Border colors */ @border-color-base: rgba( 0, 0, 0, 0.05 ); @border-color-base--lighter: rgba( 0, 0, 0, 0.02 ); @border-color-base--darker: rgba( 0, 0, 0, 0.08 ); // To blend better with OOUI styles @border-color-input: @border-color-base; @border-color-input--hover: rgba( 0, 0, 0, 0.4 ); /* Border radius */ @border-radius--small: 4px; @border-radius--medium: @border-radius--small * 2; @border-radius--large: @border-radius--small * 3; @border-radius--pill: 9999px; @border-radius--circle: 100%; /* Transitions */ @transition-timing-fast: 100ms; @transition-timing-slow: 250ms; @transition-color: color @transition-timing-fast ease; @transition-background: background @transition-timing-fast ease; @transition-border-color: border-color @transition-timing-fast ease; @transition-opacity: opacity @transition-timing-fast ease; @transition-transform: transform @transition-timing-slow cubic-bezier(0.215,0.61,0.355,1); // Only used with transform @transition-opacity--transform: opacity @transition-timing-slow ease; // Execute after every transition is done // Need to use with transition-delay: 0ms @transition-visibility--transform: visibility 0ms linear @transition-timing-slow; @transition-height: height @transition-timing-slow ease; /* Box shadow */ // Based on https://web.dev/building-a-color-scheme/#rad-shadow @box-shadow-card: 0 2.8px 2.2px -4px ~'hsl(var(--surface-shadow) / calc(var(--shadow-strength) + .03))', 0 6.7px 5.3px -4px ~'hsl(var(--surface-shadow) / calc(var(--shadow-strength) + .01))', 0 12.5px 10px -4px ~'hsl(var(--surface-shadow) / calc(var(--shadow-strength) + .02))', 0 22.3px 17.9px -4px ~'hsl(var(--surface-shadow) / calc(var(--shadow-strength) + .02))', 0 41.8px 33.4px -4px ~'hsl(var(--surface-shadow) / calc(var(--shadow-strength) + .03))', 0 100px 80px -4px ~'hsl(var(--surface-shadow) / var(--shadow-strength))'; @box-shadow-dialog: 0 2.8px 2.2px ~'hsl(var(--surface-shadow) / calc(var(--shadow-strength) + .03))', 0 6.7px 5.3px ~'hsl(var(--surface-shadow) / calc(var(--shadow-strength) + .01))', 0 12.5px 10px ~'hsl(var(--surface-shadow) / calc(var(--shadow-strength) + .02))', 0 22.3px 17.9px ~'hsl(var(--surface-shadow) / calc(var(--shadow-strength) + .02))', 0 41.8px 33.4px ~'hsl(var(--surface-shadow) / calc(var(--shadow-strength) + .03))', 0 100px 80px ~'hsl(var(--surface-shadow) / var(--shadow-strength))'; /** * Dark theme color palette * Background color is used instead of shadow to show elevation * and hierarchy in dark theme * See https://material.io/design/color/dark-theme.html#properties */ @dark-color-base0: #131a21; // Surface color @dark-color-base10: #1f262c; // 5% white overlay @dark-color-base20: #242a31; // 7% white overlay @dark-color-base30: #262c32; // 8% white overlay @dark-color-base40: #282f35; // 9% white overlay @dark-color-base50: #2d3339; // 11% white overlay @dark-color-base60: #30363c; // 12% white overlay @dark-color-base70: #343a40; // 14% white overlay @dark-color-base80: #363c42; // 15% white overlay @dark-color-base90: #393f45; // 16% white overlay @dark-background-color-overlay: rgba( 19, 26, 33, 0.95 ); @dark-background-color-overlay--lighter: rgba( 19, 26, 33, 0.6 ); @dark-background-color-framed: @dark-color-base10; @dark-background-color-framed--hover: @dark-color-base30; @dark-background-color-framed--active: @dark-color-base0; @dark-background-color-input: rgba( 0, 0, 0, 0.5 ); @dark-background-color-icon: rgba( 255, 255, 255, 0.6 ); @dark-background-color-icon--hover: rgba( 255, 255, 255, 0.8 ); @dark-background-color-icon--active: rgba( 255, 255, 255, 0.4 ); // @dark-background-color-quiet: transparent; @dark-background-color-quiet--hover: rgba( 255, 255, 255, 0.07 ); @dark-background-color-quiet--active: rgba( 255, 255, 255, 0.03 ); @dark-background-color-primary--hover: @color-accent30; @dark-background-color-primary--active: @color-accent-30--darken; @dark-background-color-destructive: @color-red30; @dark-background-color-warning: @color-yellow30; @dark-background-color-success: @color-green30; /* Foreground colors */ @dark-color-base: rgba( 255, 255, 255, 0.6 ); @dark-color-base--emphasized: rgba( 255, 255, 255, 0.87 ); @dark-color-base--subtle: rgba( 255, 255, 255, 0.38 ); @dark-color-link: @color-accent50--lighten; @dark-color-link--hover: @color-accent90; @dark-color-link--active: @color-accent30; @dark-color-link-new: @color-red50--lighten; @dark-color-link-new--hover: @color-red90; @dark-color-link-new--active: @color-red30; /* Opacity */ // @dark-opacity-icon-base: 0.4; // @dark-opacity-icon-base--hover: 0.6; @dark-opacity-icon-base--active: 0.4; /* Border colors */ @dark-border-color-base: rgba( 255, 255, 255, 0.05 ); @dark-border-color-base--lighter: rgba( 255, 255, 255, 0.02 ); @dark-border-color-base--darker: rgba( 255, 255, 255, 0.08 ); @dark-border-color-input: @dark-border-color-base; @dark-border-color-input--hover: rgba( 255, 255, 255, 0.5 ); /* * Framework */ @html-font-size: 100%; @icon-size: 1.125rem; // 18px, TODO: Replace this var @icon-box-size: @icon-size + @icon-margin * 2; @icon-margin: 3px; /* * Legacy colors * * They are used by the SMW skinstyles and a few MW UI stuff. * Those styles should be updated to the new standard. * After that we can remove all theses LESS variables. */ // Dark mode colors @dark-bg-10: #1d2129; @dark-bg-20: #22262d; @dark-bg-30: #24272f; @dark-bg-40: #2b2f36; @dark-bg-50: #33363d; @dark-bg-60: #34383f;