ranranrunforit commited on
Commit
13ee2aa
·
verified ·
1 Parent(s): d0f868c

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
+ }