Spaces:
Runtime error
Runtime error
Upload 6 files
Browse files
ui_kits/chan-compass/tokens/base.css
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* ============================================================
|
| 2 |
+
BASE — Chan Compass · Spectrum 2
|
| 3 |
+
Light, opinionated element defaults. Body uses the canvas
|
| 4 |
+
background and UI type. Helper classes for the few primitives
|
| 5 |
+
that aren't worth a React component.
|
| 6 |
+
============================================================ */
|
| 7 |
+
|
| 8 |
+
*, *::before, *::after { box-sizing: border-box; }
|
| 9 |
+
|
| 10 |
+
body {
|
| 11 |
+
margin: 0;
|
| 12 |
+
background: var(--canvas);
|
| 13 |
+
color: var(--text-body);
|
| 14 |
+
font: var(--type-body);
|
| 15 |
+
-webkit-font-smoothing: antialiased;
|
| 16 |
+
text-rendering: optimizeLegibility;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
h1, h2, h3, h4 {
|
| 20 |
+
margin: 0;
|
| 21 |
+
color: var(--text-heading);
|
| 22 |
+
letter-spacing: var(--letter-spacing-heading);
|
| 23 |
+
text-wrap: balance;
|
| 24 |
+
}
|
| 25 |
+
h1 { font: var(--type-h1); }
|
| 26 |
+
h2 { font: var(--type-h2); }
|
| 27 |
+
h3 { font: var(--type-h3); letter-spacing: 0; }
|
| 28 |
+
h4 { font: var(--type-h4); letter-spacing: 0; }
|
| 29 |
+
|
| 30 |
+
p { margin: 0; text-wrap: pretty; }
|
| 31 |
+
|
| 32 |
+
a { color: var(--accent-text); text-decoration: none; }
|
| 33 |
+
a:hover { text-decoration: underline; text-underline-offset: 2px; }
|
| 34 |
+
|
| 35 |
+
code, kbd, samp { font-family: var(--font-code); font-size: 0.92em; }
|
| 36 |
+
|
| 37 |
+
::selection { background: var(--accent-subtle); }
|
| 38 |
+
|
| 39 |
+
:focus-visible {
|
| 40 |
+
outline: var(--focus-ring-width) solid var(--focus-ring);
|
| 41 |
+
outline-offset: var(--focus-ring-offset);
|
| 42 |
+
border-radius: var(--radius-sm);
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
/* ---- Eyebrow / overline ---- */
|
| 46 |
+
.s2-eyebrow {
|
| 47 |
+
font: var(--font-weight-bold) var(--font-size-50)/1.2 var(--font-sans);
|
| 48 |
+
letter-spacing: var(--letter-spacing-caps);
|
| 49 |
+
text-transform: uppercase;
|
| 50 |
+
color: var(--text-muted);
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
/* ---- Hairline divider ---- */
|
| 54 |
+
.s2-divider {
|
| 55 |
+
border: none;
|
| 56 |
+
border-top: var(--border-width-100) solid var(--border-hairline);
|
| 57 |
+
margin: var(--space-300) 0;
|
| 58 |
+
}
|
ui_kits/chan-compass/tokens/colors.css
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* ============================================================
|
| 2 |
+
COLOR — Chan Compass · Spectrum 2
|
| 3 |
+
Two layers:
|
| 4 |
+
1. PRIMITIVES — the raw Spectrum 2 scales (--s2-gray-100, --s2-blue-900…)
|
| 5 |
+
2. SEMANTICS — purpose-named aliases the UI references (--text-body,
|
| 6 |
+
--surface-card, --accent…)
|
| 7 |
+
Always consume semantics in components; reach for a primitive only
|
| 8 |
+
when no semantic fits. Light theme is the default; .s2-dark flips the
|
| 9 |
+
semantic layer (primitives are not re-pointed here for simplicity).
|
| 10 |
+
============================================================ */
|
| 11 |
+
|
| 12 |
+
:root {
|
| 13 |
+
/* ---- Gray (light) ---- */
|
| 14 |
+
--s2-gray-25: #ffffff;
|
| 15 |
+
--s2-gray-50: #f8f8f8;
|
| 16 |
+
--s2-gray-75: #f3f3f3;
|
| 17 |
+
--s2-gray-100: #e6e6e6;
|
| 18 |
+
--s2-gray-200: #d5d5d5;
|
| 19 |
+
--s2-gray-300: #b1b1b1;
|
| 20 |
+
--s2-gray-400: #909090;
|
| 21 |
+
--s2-gray-500: #6d6d6d;
|
| 22 |
+
--s2-gray-600: #464646;
|
| 23 |
+
--s2-gray-700: #292929;
|
| 24 |
+
--s2-gray-800: #1b1b1b;
|
| 25 |
+
--s2-gray-900: #000000;
|
| 26 |
+
|
| 27 |
+
/* ---- Blue (accent family) ---- */
|
| 28 |
+
--s2-blue-100: #e0f2ff;
|
| 29 |
+
--s2-blue-200: #cae8ff;
|
| 30 |
+
--s2-blue-300: #98cbfe;
|
| 31 |
+
--s2-blue-400: #6fb7fb;
|
| 32 |
+
--s2-blue-500: #4ba0ec;
|
| 33 |
+
--s2-blue-600: #2c84e0;
|
| 34 |
+
--s2-blue-700: #1473e6;
|
| 35 |
+
--s2-blue-800: #0a6fd6;
|
| 36 |
+
--s2-blue-900: #0265dc; /* accent default */
|
| 37 |
+
--s2-blue-1000: #0054b6; /* accent hover */
|
| 38 |
+
--s2-blue-1100: #00418f; /* accent down */
|
| 39 |
+
|
| 40 |
+
/* ---- Green (positive) ---- */
|
| 41 |
+
--s2-green-100: #ebf9ee;
|
| 42 |
+
--s2-green-400: #6cc788;
|
| 43 |
+
--s2-green-700: #15924a;
|
| 44 |
+
--s2-green-900: #007a39; /* positive default */
|
| 45 |
+
--s2-green-1000: #006d31;
|
| 46 |
+
--s2-green-1100: #00601f;
|
| 47 |
+
|
| 48 |
+
/* ---- Red (negative) ---- */
|
| 49 |
+
--s2-red-100: #ffefef;
|
| 50 |
+
--s2-red-400: #ff9b88;
|
| 51 |
+
--s2-red-700: #e34850;
|
| 52 |
+
--s2-red-900: #d7373f; /* negative default */
|
| 53 |
+
--s2-red-1000: #c0272d;
|
| 54 |
+
--s2-red-1100: #a01a1f;
|
| 55 |
+
|
| 56 |
+
/* ---- Orange (notice) ---- */
|
| 57 |
+
--s2-orange-100: #fdf0e1;
|
| 58 |
+
--s2-orange-400: #f8af5a;
|
| 59 |
+
--s2-orange-700: #cb6f10;
|
| 60 |
+
--s2-orange-900: #b25309; /* notice default */
|
| 61 |
+
--s2-orange-1000: #99490b;
|
| 62 |
+
|
| 63 |
+
/* ---- Indigo (informative accent / charts) ---- */
|
| 64 |
+
--s2-indigo-700: #5258e4;
|
| 65 |
+
--s2-indigo-900: #3d43d0;
|
| 66 |
+
|
| 67 |
+
/* ---- Purple (decorative / hero gradient stop) ---- */
|
| 68 |
+
--s2-purple-700: #8c42d6;
|
| 69 |
+
--s2-purple-900: #7326d3;
|
| 70 |
+
|
| 71 |
+
/* ============================================================
|
| 72 |
+
SEMANTIC ALIASES — what components actually reference
|
| 73 |
+
============================================================ */
|
| 74 |
+
|
| 75 |
+
/* Surfaces & framing (Spectrum 2 background layering) */
|
| 76 |
+
--canvas: var(--s2-gray-50); /* app background */
|
| 77 |
+
--surface-card: var(--s2-gray-25); /* cards, panels */
|
| 78 |
+
--surface-elevated:var(--s2-gray-25); /* popovers, menus */
|
| 79 |
+
--surface-subtle: var(--s2-gray-75); /* table head, wells */
|
| 80 |
+
--surface-sunken: var(--s2-gray-75); /* inset fields */
|
| 81 |
+
|
| 82 |
+
/* Text */
|
| 83 |
+
--text-heading: var(--s2-gray-800);
|
| 84 |
+
--text-body: var(--s2-gray-700);
|
| 85 |
+
--text-secondary: var(--s2-gray-600);
|
| 86 |
+
--text-muted: var(--s2-gray-500);
|
| 87 |
+
--text-disabled: var(--s2-gray-400);
|
| 88 |
+
--text-on-accent: #ffffff;
|
| 89 |
+
|
| 90 |
+
/* Borders & dividers */
|
| 91 |
+
--border-hairline: var(--s2-gray-100);
|
| 92 |
+
--border-default: var(--s2-gray-200);
|
| 93 |
+
--border-strong: var(--s2-gray-300);
|
| 94 |
+
--border-field: var(--s2-gray-300);
|
| 95 |
+
|
| 96 |
+
/* Accent (Spectrum blue) */
|
| 97 |
+
--accent: var(--s2-blue-900);
|
| 98 |
+
--accent-hover: var(--s2-blue-1000);
|
| 99 |
+
--accent-down: var(--s2-blue-1100);
|
| 100 |
+
--accent-subtle: var(--s2-blue-100);
|
| 101 |
+
--accent-text: var(--s2-blue-1000);
|
| 102 |
+
|
| 103 |
+
/* Semantic status */
|
| 104 |
+
--positive: var(--s2-green-900);
|
| 105 |
+
--positive-hover: var(--s2-green-1000);
|
| 106 |
+
--positive-subtle: var(--s2-green-100);
|
| 107 |
+
--negative: var(--s2-red-900);
|
| 108 |
+
--negative-hover: var(--s2-red-1000);
|
| 109 |
+
--negative-subtle: var(--s2-red-100);
|
| 110 |
+
--notice: var(--s2-orange-900);
|
| 111 |
+
--notice-subtle: var(--s2-orange-100);
|
| 112 |
+
--informative: var(--s2-blue-900);
|
| 113 |
+
--informative-subtle: var(--s2-blue-100);
|
| 114 |
+
|
| 115 |
+
/* Focus ring */
|
| 116 |
+
--focus-ring: var(--s2-blue-900);
|
| 117 |
+
|
| 118 |
+
/* Market direction (this product's domain colors) */
|
| 119 |
+
--up: var(--s2-green-900); /* gains / BUY */
|
| 120 |
+
--down: var(--s2-red-900); /* losses / SELL */
|
| 121 |
+
--flat: var(--s2-gray-500); /* HOLD / WAIT */
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
/* ---- Dark theme: flip the semantic layer only ---- */
|
| 125 |
+
.s2-dark {
|
| 126 |
+
--canvas: #1d1d1d;
|
| 127 |
+
--surface-card: #262626;
|
| 128 |
+
--surface-elevated:#2c2c2c;
|
| 129 |
+
--surface-subtle: #222222;
|
| 130 |
+
--surface-sunken: #1a1a1a;
|
| 131 |
+
|
| 132 |
+
--text-heading: #f2f2f2;
|
| 133 |
+
--text-body: #e0e0e0;
|
| 134 |
+
--text-secondary: #b8b8b8;
|
| 135 |
+
--text-muted: #8f8f8f;
|
| 136 |
+
--text-disabled: #6a6a6a;
|
| 137 |
+
|
| 138 |
+
--border-hairline: #383838;
|
| 139 |
+
--border-default: #4a4a4a;
|
| 140 |
+
--border-strong: #5e5e5e;
|
| 141 |
+
--border-field: #5e5e5e;
|
| 142 |
+
|
| 143 |
+
--accent: #2680eb;
|
| 144 |
+
--accent-hover: #4ba0ec;
|
| 145 |
+
--accent-down: #6fb7fb;
|
| 146 |
+
--accent-subtle: #1a3a5c;
|
| 147 |
+
--accent-text: #6fb7fb;
|
| 148 |
+
}
|
ui_kits/chan-compass/tokens/elevation.css
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* ============================================================
|
| 2 |
+
ELEVATION & MOTION — Chan Compass · Spectrum 2
|
| 3 |
+
Soft, low-spread drop shadows; never heavy. Spectrum easing curves.
|
| 4 |
+
============================================================ */
|
| 5 |
+
|
| 6 |
+
:root {
|
| 7 |
+
/* ---- Drop shadows (Spectrum 2 elevation) ---- */
|
| 8 |
+
--shadow-flat: none;
|
| 9 |
+
--shadow-raised: 0 1px 3px rgba(0,0,0,.06), 0 1px 1px rgba(0,0,0,.04);
|
| 10 |
+
--shadow-elevated: 0 2px 8px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.06);
|
| 11 |
+
--shadow-emphasized:0 6px 20px rgba(0,0,0,.12), 0 2px 6px rgba(0,0,0,.08);
|
| 12 |
+
--shadow-dragged: 0 12px 32px rgba(0,0,0,.18), 0 4px 10px rgba(0,0,0,.10);
|
| 13 |
+
|
| 14 |
+
/* Accent-tinted glow (used on AI / focused panels) */
|
| 15 |
+
--shadow-accent: 0 2px 12px rgba(2,101,220,.12);
|
| 16 |
+
|
| 17 |
+
/* ---- Focus ring ---- */
|
| 18 |
+
--focus-ring-width: 2px;
|
| 19 |
+
--focus-ring-offset: 2px;
|
| 20 |
+
|
| 21 |
+
/* ---- Motion ---- */
|
| 22 |
+
--ease-default: cubic-bezier(0.45, 0, 0.4, 1); /* @kind other */
|
| 23 |
+
--ease-in: cubic-bezier(0.5, 0, 1, 1); /* @kind other */
|
| 24 |
+
--ease-out: cubic-bezier(0, 0, 0.4, 1); /* @kind other */
|
| 25 |
+
--ease-in-out: cubic-bezier(0.45, 0, 0.4, 1); /* @kind other */
|
| 26 |
+
|
| 27 |
+
--duration-fast: 130ms; /* @kind other */
|
| 28 |
+
--duration-default: 160ms; /* @kind other */
|
| 29 |
+
--duration-slow: 220ms; /* @kind other */
|
| 30 |
+
|
| 31 |
+
--transition-default: all var(--duration-default) var(--ease-default);
|
| 32 |
+
--transition-colors: color var(--duration-fast) var(--ease-default),
|
| 33 |
+
background-color var(--duration-fast) var(--ease-default),
|
| 34 |
+
border-color var(--duration-fast) var(--ease-default);
|
| 35 |
+
}
|
ui_kits/chan-compass/tokens/fonts.css
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* ============================================================
|
| 2 |
+
FONTS — Chan Compass · Spectrum 2
|
| 3 |
+
Adobe Clean (Spectrum's UI typeface) is proprietary, so this
|
| 4 |
+
system substitutes Adobe's own open-source families:
|
| 5 |
+
· Source Sans 3 → UI / headings (stands in for Adobe Clean)
|
| 6 |
+
· Source Serif 4 → editorial serif (stands in for Adobe Clean Serif)
|
| 7 |
+
· Source Code Pro → mono / code (Spectrum's real code font)
|
| 8 |
+
Loaded from Google Fonts. If you have licensed Adobe Clean,
|
| 9 |
+
swap the @font-face stack and the families resolve automatically.
|
| 10 |
+
============================================================ */
|
| 11 |
+
|
| 12 |
+
@import url('https://fonts.googleapis.com/css2?family=Source+Sans+3:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400&family=Source+Serif+4:ital,wght@0,400;0,600;0,700;1,400&family=Source+Code+Pro:wght@400;500;600&display=swap');
|
ui_kits/chan-compass/tokens/spacing.css
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* ============================================================
|
| 2 |
+
SPACING & SIZING — Chan Compass · Spectrum 2
|
| 3 |
+
Spectrum 2 spacing scale (px): 0 2 4 8 12 16 20 24 28 32 40 48 64 80 96.
|
| 4 |
+
8px is the base rhythm. Padding uses px; layout gaps reuse the same scale.
|
| 5 |
+
============================================================ */
|
| 6 |
+
|
| 7 |
+
:root {
|
| 8 |
+
--space-0: 0;
|
| 9 |
+
--space-50: 2px;
|
| 10 |
+
--space-75: 4px;
|
| 11 |
+
--space-100: 8px; /* base unit */
|
| 12 |
+
--space-150: 12px;
|
| 13 |
+
--space-200: 16px;
|
| 14 |
+
--space-250: 20px;
|
| 15 |
+
--space-300: 24px;
|
| 16 |
+
--space-400: 32px;
|
| 17 |
+
--space-500: 40px;
|
| 18 |
+
--space-600: 48px;
|
| 19 |
+
--space-700: 64px;
|
| 20 |
+
--space-800: 80px;
|
| 21 |
+
--space-900: 96px;
|
| 22 |
+
|
| 23 |
+
/* ---- Corner radii (Spectrum 2) ---- */
|
| 24 |
+
--radius-none: 0;
|
| 25 |
+
--radius-sm: 4px; /* chips, small controls */
|
| 26 |
+
--radius-default: 8px; /* inputs, buttons (square)*/
|
| 27 |
+
--radius-lg: 10px; /* nested cards */
|
| 28 |
+
--radius-xl: 16px; /* cards, panels */
|
| 29 |
+
--radius-2xl: 20px; /* hero, large surfaces */
|
| 30 |
+
--radius-full: 9999px; /* pills, avatars */
|
| 31 |
+
|
| 32 |
+
/* ---- Border widths ---- */
|
| 33 |
+
--border-width-100: 1px;
|
| 34 |
+
--border-width-200: 2px;
|
| 35 |
+
--border-width-400: 4px;
|
| 36 |
+
|
| 37 |
+
/* ---- Control heights (medium scale) ---- */
|
| 38 |
+
--control-height-sm: 28px;
|
| 39 |
+
--control-height-md: 32px;
|
| 40 |
+
--control-height-lg: 40px;
|
| 41 |
+
|
| 42 |
+
/* ---- Layout ---- */
|
| 43 |
+
--container-max: 1280px;
|
| 44 |
+
--field-radius: var(--radius-default);
|
| 45 |
+
--card-radius: var(--radius-xl);
|
| 46 |
+
}
|
ui_kits/chan-compass/tokens/typography.css
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* ============================================================
|
| 2 |
+
TYPOGRAPHY — Chan Compass · Spectrum 2
|
| 3 |
+
Spectrum 2 desktop UI base = 14px, modular scale ratio 1.125.
|
| 4 |
+
Three families: sans (UI/headings), serif (editorial), code (mono).
|
| 5 |
+
============================================================ */
|
| 6 |
+
|
| 7 |
+
:root {
|
| 8 |
+
/* ---- Families ---- */
|
| 9 |
+
--font-sans: 'Source Sans 3', 'Adobe Clean', ui-sans-serif, system-ui, -apple-system, sans-serif;
|
| 10 |
+
--font-serif: 'Source Serif 4', 'Adobe Clean Serif', Georgia, 'Times New Roman', serif;
|
| 11 |
+
--font-code: 'Source Code Pro', ui-monospace, 'SF Mono', Menlo, Monaco, monospace;
|
| 12 |
+
|
| 13 |
+
/* ---- Type scale (ratio 1.125, base 14px) ---- */
|
| 14 |
+
--font-size-50: 11px;
|
| 15 |
+
--font-size-75: 12px;
|
| 16 |
+
--font-size-100: 14px; /* UI base */
|
| 17 |
+
--font-size-200: 16px;
|
| 18 |
+
--font-size-300: 18px;
|
| 19 |
+
--font-size-400: 20px;
|
| 20 |
+
--font-size-500: 22px;
|
| 21 |
+
--font-size-600: 25px;
|
| 22 |
+
--font-size-700: 28px;
|
| 23 |
+
--font-size-800: 32px;
|
| 24 |
+
--font-size-900: 36px;
|
| 25 |
+
--font-size-1000: 40px;
|
| 26 |
+
--font-size-1100: 45px;
|
| 27 |
+
--font-size-1200: 50px;
|
| 28 |
+
|
| 29 |
+
/* ---- Weights (Source Sans 3 axis) ---- */
|
| 30 |
+
--font-weight-regular: 400;
|
| 31 |
+
--font-weight-medium: 500;
|
| 32 |
+
--font-weight-semibold: 600;
|
| 33 |
+
--font-weight-bold: 700;
|
| 34 |
+
--font-weight-black: 800;
|
| 35 |
+
|
| 36 |
+
/* ---- Line heights ---- */
|
| 37 |
+
--line-height-ui: 1.3; /* UI components, tight */
|
| 38 |
+
--line-height-heading: 1.15; /* large display headings */
|
| 39 |
+
--line-height-body: 1.5; /* paragraphs, spacious */
|
| 40 |
+
--line-height-code: 1.45;
|
| 41 |
+
|
| 42 |
+
/* ---- Letter spacing ---- */
|
| 43 |
+
--letter-spacing-heading: -0.015em; /* Spectrum tightens large type */
|
| 44 |
+
--letter-spacing-ui: 0;
|
| 45 |
+
--letter-spacing-caps: 0.06em; /* eyebrows / overlines */
|
| 46 |
+
|
| 47 |
+
/* ============================================================
|
| 48 |
+
SEMANTIC TYPE ROLES
|
| 49 |
+
============================================================ */
|
| 50 |
+
--type-display: var(--font-weight-bold) var(--font-size-1000)/var(--line-height-heading) var(--font-sans);
|
| 51 |
+
--type-h1: var(--font-weight-bold) var(--font-size-800)/var(--line-height-heading) var(--font-sans);
|
| 52 |
+
--type-h2: var(--font-weight-bold) var(--font-size-600)/var(--line-height-heading) var(--font-sans);
|
| 53 |
+
--type-h3: var(--font-weight-semibold) var(--font-size-400)/var(--line-height-ui) var(--font-sans);
|
| 54 |
+
--type-h4: var(--font-weight-semibold) var(--font-size-300)/var(--line-height-ui) var(--font-sans);
|
| 55 |
+
--type-body-lg: var(--font-weight-regular) var(--font-size-300)/var(--line-height-body) var(--font-sans);
|
| 56 |
+
--type-body: var(--font-weight-regular) var(--font-size-100)/var(--line-height-body) var(--font-sans);
|
| 57 |
+
--type-ui: var(--font-weight-regular) var(--font-size-100)/var(--line-height-ui) var(--font-sans);
|
| 58 |
+
--type-ui-bold: var(--font-weight-semibold) var(--font-size-100)/var(--line-height-ui) var(--font-sans);
|
| 59 |
+
--type-detail: var(--font-weight-regular) var(--font-size-75)/var(--line-height-ui) var(--font-sans);
|
| 60 |
+
--type-code: var(--font-weight-regular) var(--font-size-75)/var(--line-height-code) var(--font-code);
|
| 61 |
+
}
|