@bridger-kr/tokens 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -0
- package/assets/fonts/PretendardVariable.woff2 +0 -0
- package/css/base.css +147 -0
- package/css/colors.css +1 -0
- package/css/contract.css +191 -0
- package/css/fonts.css +15 -0
- package/css/index.css +4 -0
- package/css/spacing.css +1 -0
- package/css/typography.css +1 -0
- package/dist/index.cjs +278 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +504 -0
- package/dist/index.d.ts +504 -0
- package/dist/index.mjs +270 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +41 -0
package/README.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# @bridger-kr/tokens
|
|
2
|
+
|
|
3
|
+
Design tokens for the Bridger Design System. The package publishes the CSS contract, the local Pretendard Variable font asset, and typed JavaScript/TypeScript token objects.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
pnpm add @bridger-kr/tokens
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## CSS
|
|
12
|
+
|
|
13
|
+
Import the full token contract once in your app entrypoint:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import '@bridger-kr/tokens/css';
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The full entrypoint imports files in this order: fonts, colors, typography, spacing, base.
|
|
20
|
+
|
|
21
|
+
Per-file imports are available when you only need part of the contract:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import '@bridger-kr/tokens/css/fonts';
|
|
25
|
+
import '@bridger-kr/tokens/css/colors';
|
|
26
|
+
import '@bridger-kr/tokens/css/typography';
|
|
27
|
+
import '@bridger-kr/tokens/css/spacing';
|
|
28
|
+
import '@bridger-kr/tokens/css/base';
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`@bridger-kr/tokens/styles.css` is an alias for the full CSS entrypoint.
|
|
32
|
+
|
|
33
|
+
## TypeScript Tokens
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
import { colors, spacing, radius, shadows, typography, cssVarName } from '@bridger-kr/tokens';
|
|
37
|
+
|
|
38
|
+
colors.light.accent; // '#ec5e1f'
|
|
39
|
+
colors.dark.accent; // '#ec5e1f'
|
|
40
|
+
spacing[4]; // '24px'
|
|
41
|
+
cssVarName.colors.accent; // '--dt-accent'
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The exported objects are authored from the CSS source of truth and frozen at runtime. They are also declared with literal `as const` values for precise TypeScript types.
|
|
45
|
+
|
|
46
|
+
## Font Asset
|
|
47
|
+
|
|
48
|
+
`css/fonts.css` defines Pretendard Variable with:
|
|
49
|
+
|
|
50
|
+
```css
|
|
51
|
+
src: url('../assets/fonts/PretendardVariable.woff2') format('woff2-variations');
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
That path is relative to the published `css/` directory and resolves to the package's published `assets/fonts/PretendardVariable.woff2`. Bundlers that process CSS from npm packages should copy or serve that referenced asset. If your framework does not automatically serve CSS-referenced package assets, copy `@bridger-kr/tokens/assets/fonts/PretendardVariable.woff2` into your public asset pipeline and rewrite the URL in your app-level CSS.
|
|
Binary file
|
package/css/base.css
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/* ============================================================
|
|
2
|
+
Bridger — Base elements + shared primitive vocabulary (v2)
|
|
3
|
+
Light-first. Premium SaaS depth: hairline ring + layered soft shadow.
|
|
4
|
+
============================================================ */
|
|
5
|
+
|
|
6
|
+
*, *::before, *::after { box-sizing: border-box; }
|
|
7
|
+
|
|
8
|
+
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
|
|
9
|
+
|
|
10
|
+
body {
|
|
11
|
+
margin: 0;
|
|
12
|
+
background: var(--dt-paper);
|
|
13
|
+
color: var(--dt-ink);
|
|
14
|
+
font-family: var(--dt-font-sans);
|
|
15
|
+
font-size: var(--dt-body-size);
|
|
16
|
+
line-height: var(--dt-body-leading);
|
|
17
|
+
font-weight: var(--dt-body-weight);
|
|
18
|
+
-webkit-font-smoothing: antialiased;
|
|
19
|
+
-moz-osx-font-smoothing: grayscale;
|
|
20
|
+
font-feature-settings: "ss06", "cv11", "tnum";
|
|
21
|
+
word-break: keep-all;
|
|
22
|
+
line-break: strict;
|
|
23
|
+
text-rendering: optimizeLegibility;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
::selection { background: color-mix(in srgb, var(--dt-accent) 18%, transparent); color: var(--dt-ink-strong); }
|
|
27
|
+
:focus-visible { outline: 2px solid var(--dt-accent); outline-offset: 2px; border-radius: var(--dt-radius-sm); }
|
|
28
|
+
|
|
29
|
+
h1, h2, h3, h4 { margin: 0; color: var(--dt-ink-strong); text-wrap: balance; letter-spacing: 0; }
|
|
30
|
+
h1 { font-size: var(--dt-h1-size); line-height: var(--dt-h1-leading); letter-spacing: var(--dt-h1-tracking); font-weight: var(--dt-h1-weight); }
|
|
31
|
+
h2 { font-size: var(--dt-h2-size); line-height: var(--dt-h2-leading); letter-spacing: var(--dt-h2-tracking); font-weight: var(--dt-h2-weight); }
|
|
32
|
+
h3 { font-size: var(--dt-h3-size); line-height: var(--dt-h3-leading); letter-spacing: var(--dt-h3-tracking); font-weight: var(--dt-h3-weight); }
|
|
33
|
+
p, li { text-wrap: pretty; margin: 0; }
|
|
34
|
+
|
|
35
|
+
a { color: var(--dt-accent); text-decoration: none; transition: color var(--dt-motion-fast); }
|
|
36
|
+
a:hover { color: var(--dt-accent-strong); }
|
|
37
|
+
|
|
38
|
+
code, pre, kbd, samp { font-family: var(--dt-font-mono); font-size: var(--dt-mono-size); }
|
|
39
|
+
|
|
40
|
+
.mono { font-family: var(--dt-font-mono); }
|
|
41
|
+
.tabular { font-variant-numeric: tabular-nums; }
|
|
42
|
+
|
|
43
|
+
/* ── Layout shell ── */
|
|
44
|
+
.dt-shell { margin-inline: auto; width: 100%; max-width: 1200px; padding-inline: 20px; }
|
|
45
|
+
@media (min-width: 640px) { .dt-shell { padding-inline: 28px; } }
|
|
46
|
+
@media (min-width: 1024px) { .dt-shell { padding-inline: 40px; } }
|
|
47
|
+
.dt-section { padding-block: var(--dt-space-7); }
|
|
48
|
+
|
|
49
|
+
/* ── Badges (status / classification) — crisp tags, not cushiony pills.
|
|
50
|
+
Small radius + hairline so they read as instrument labels. ── */
|
|
51
|
+
.badge {
|
|
52
|
+
display: inline-flex; align-items: center; gap: 6px;
|
|
53
|
+
padding: 3px 8px;
|
|
54
|
+
font-size: 12px; font-weight: 600; letter-spacing: 0;
|
|
55
|
+
border-radius: var(--dt-radius-sm);
|
|
56
|
+
background: var(--dt-surface-sunken); color: var(--dt-muted-strong);
|
|
57
|
+
box-shadow: inset 0 0 0 1px var(--dt-border-strong);
|
|
58
|
+
transition: background-color var(--dt-motion-fast);
|
|
59
|
+
}
|
|
60
|
+
.badge-accent { background: var(--dt-tint-accent); color: var(--dt-accent); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--dt-accent) 32%, transparent); }
|
|
61
|
+
.badge-info { background: var(--dt-tint-cobalt); color: var(--dt-cobalt); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--dt-cobalt) 32%, transparent); }
|
|
62
|
+
.badge-success { background: var(--dt-tint-success); color: var(--dt-success); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--dt-success) 32%, transparent); }
|
|
63
|
+
.badge-warning { background: var(--dt-tint-warning); color: var(--dt-warning); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--dt-warning) 32%, transparent); }
|
|
64
|
+
.badge-danger { background: var(--dt-tint-danger); color: var(--dt-danger); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--dt-danger) 32%, transparent); }
|
|
65
|
+
|
|
66
|
+
/* ── Cards — bordered planes. At rest they sit on a hairline, no lift. ── */
|
|
67
|
+
.card {
|
|
68
|
+
background: var(--dt-surface); color: var(--dt-ink);
|
|
69
|
+
border-radius: var(--dt-radius-lg);
|
|
70
|
+
box-shadow: var(--dt-card-rest);
|
|
71
|
+
transition: box-shadow var(--dt-motion), transform var(--dt-motion);
|
|
72
|
+
}
|
|
73
|
+
.card:hover { box-shadow: var(--dt-card-hover); }
|
|
74
|
+
.card-muted { background: var(--dt-surface-sunken); border: 1px solid var(--dt-border); border-radius: var(--dt-radius-lg); }
|
|
75
|
+
.card-raised { background: var(--dt-surface-raised); border-radius: var(--dt-radius-lg); box-shadow: var(--dt-card-float); }
|
|
76
|
+
.glass-card {
|
|
77
|
+
background: var(--dt-glass-bg);
|
|
78
|
+
backdrop-filter: var(--dt-glass-blur); -webkit-backdrop-filter: var(--dt-glass-blur);
|
|
79
|
+
border: 1px solid var(--dt-border); border-radius: var(--dt-radius-lg); box-shadow: var(--dt-shadow-sm);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* ── Buttons ── */
|
|
83
|
+
/* Buttons build from FILLS on a height grid (40 / 36px), never outlines.
|
|
84
|
+
Hover = background-color shift; press = subtle scale. No translate-lift. */
|
|
85
|
+
.btn-primary {
|
|
86
|
+
display: inline-flex; align-items: center; justify-content: center; gap: 6px; white-space: nowrap;
|
|
87
|
+
height: 40px; padding: 0 16px; font-size: 14px; font-weight: 600; line-height: 1;
|
|
88
|
+
border-radius: var(--dt-radius-md);
|
|
89
|
+
background: var(--dt-accent); color: var(--dt-accent-ink); border: none;
|
|
90
|
+
box-shadow: var(--dt-shadow-xs);
|
|
91
|
+
text-decoration: none; cursor: pointer;
|
|
92
|
+
transition: background-color var(--dt-motion-fast), transform var(--dt-motion-fast);
|
|
93
|
+
}
|
|
94
|
+
.btn-primary:hover { background: var(--dt-accent-strong); }
|
|
95
|
+
.btn-primary:active { transform: scale(var(--dt-press-scale)); }
|
|
96
|
+
|
|
97
|
+
.btn-secondary {
|
|
98
|
+
display: inline-flex; align-items: center; justify-content: center; gap: 6px; white-space: nowrap;
|
|
99
|
+
height: 40px; padding: 0 16px; font-size: 14px; font-weight: 600; line-height: 1;
|
|
100
|
+
border-radius: var(--dt-radius-md);
|
|
101
|
+
background: var(--dt-surface-sunken); color: var(--dt-ink-strong); border: none;
|
|
102
|
+
text-decoration: none; cursor: pointer;
|
|
103
|
+
transition: background-color var(--dt-motion-fast), transform var(--dt-motion-fast);
|
|
104
|
+
}
|
|
105
|
+
.btn-secondary:hover { background: color-mix(in srgb, var(--dt-surface-sunken) 90%, var(--dt-ink)); }
|
|
106
|
+
.btn-secondary:active { transform: scale(var(--dt-press-scale)); }
|
|
107
|
+
|
|
108
|
+
.btn-ghost {
|
|
109
|
+
display: inline-flex; align-items: center; justify-content: center; gap: 6px; white-space: nowrap;
|
|
110
|
+
height: 36px; padding: 0 12px; font-size: 14px; font-weight: 600; line-height: 1;
|
|
111
|
+
border-radius: var(--dt-radius-md);
|
|
112
|
+
background: transparent; color: var(--dt-muted-strong); border: none;
|
|
113
|
+
text-decoration: none; cursor: pointer;
|
|
114
|
+
transition: background-color var(--dt-motion-fast), color var(--dt-motion-fast);
|
|
115
|
+
}
|
|
116
|
+
.btn-ghost:hover { background: var(--dt-tint-muted); color: var(--dt-ink-strong); }
|
|
117
|
+
|
|
118
|
+
/* ── Form fields — filled, no outline. Focus lifts to white + accent ring. ── */
|
|
119
|
+
.dt-field {
|
|
120
|
+
background: var(--dt-surface-sunken); border: none;
|
|
121
|
+
border-radius: var(--dt-radius-md);
|
|
122
|
+
transition: background-color var(--dt-motion-fast), box-shadow var(--dt-motion-fast);
|
|
123
|
+
}
|
|
124
|
+
.dt-field:focus, .dt-field:focus-within { background: var(--dt-surface); box-shadow: var(--dt-shadow-focus); outline: none; }
|
|
125
|
+
.dt-field-invalid { box-shadow: 0 0 0 1.5px var(--dt-danger); }
|
|
126
|
+
|
|
127
|
+
/* ── Spec strip ── */
|
|
128
|
+
.spec-strip {
|
|
129
|
+
display: inline-flex; align-items: center; gap: 12px;
|
|
130
|
+
padding: 7px 15px; border-radius: var(--dt-radius-full);
|
|
131
|
+
background: var(--dt-surface); box-shadow: var(--dt-ring), var(--dt-shadow-xs);
|
|
132
|
+
font-size: 12px; color: var(--dt-muted);
|
|
133
|
+
}
|
|
134
|
+
.spec-strip-item { display: inline-flex; align-items: center; gap: 5px; font-weight: 500; }
|
|
135
|
+
.spec-strip-sep { display: inline-block; width: 1px; height: 12px; background: var(--dt-border-strong); }
|
|
136
|
+
|
|
137
|
+
/* ── Decorative dot grid (hero backdrops only) ── */
|
|
138
|
+
.dt-grid-paper {
|
|
139
|
+
background-image: radial-gradient(circle at 1px 1px, color-mix(in srgb, var(--dt-ink) 9%, transparent) 1px, transparent 0);
|
|
140
|
+
background-size: 26px 26px;
|
|
141
|
+
-webkit-mask-image: radial-gradient(120% 90% at 70% 0%, black 25%, transparent 72%);
|
|
142
|
+
mask-image: radial-gradient(120% 90% at 70% 0%, black 25%, transparent 72%);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@media (prefers-reduced-motion: reduce) {
|
|
146
|
+
*, *::before, *::after { animation-duration: 1ms !important; transition-duration: 1ms !important; }
|
|
147
|
+
}
|
package/css/colors.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import url('./contract.css');
|
package/css/contract.css
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/* ============================================================
|
|
2
|
+
Bridger shared design contract (canonical token source)
|
|
3
|
+
|
|
4
|
+
Canonical source for shared --dt-* token definitions.
|
|
5
|
+
`npm run check:tokens` verifies app mirrors against this file.
|
|
6
|
+
The live landing and dashboard apps intentionally keep local
|
|
7
|
+
runtime mirrors at:
|
|
8
|
+
|
|
9
|
+
- landing/src/styles/tokens.css
|
|
10
|
+
- dashboard/src/styles/tokens.css
|
|
11
|
+
|
|
12
|
+
Do not import this file into those apps in the design-foundation
|
|
13
|
+
lane. Update the app-local mirrors when changing this contract.
|
|
14
|
+
|
|
15
|
+
Theme contract: dark is the default token set; light activates with
|
|
16
|
+
:root[data-theme='light']. Runtime theme state is stored in the
|
|
17
|
+
`datari-theme` localStorage key only after an explicit user choice.
|
|
18
|
+
============================================================ */
|
|
19
|
+
|
|
20
|
+
/*
|
|
21
|
+
Font delivery remains app-local in this lane.
|
|
22
|
+
Runtime mirrors in landing/dashboard own their @font-face src paths.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
:root {
|
|
26
|
+
color-scheme: dark;
|
|
27
|
+
|
|
28
|
+
--dt-paper: #0a0b0f;
|
|
29
|
+
--dt-surface: #111218;
|
|
30
|
+
--dt-surface-raised: #181a22;
|
|
31
|
+
--dt-surface-sunken: #07080b;
|
|
32
|
+
|
|
33
|
+
--dt-ink: #f5f4ee;
|
|
34
|
+
--dt-ink-strong: #ffffff;
|
|
35
|
+
--dt-muted: #9a9ba6;
|
|
36
|
+
--dt-muted-strong: #c3c4cd;
|
|
37
|
+
|
|
38
|
+
--dt-border: #23252e;
|
|
39
|
+
--dt-border-strong: #2f323d;
|
|
40
|
+
|
|
41
|
+
--dt-accent: #ec5e1f;
|
|
42
|
+
--dt-accent-strong: #ec5e1f;
|
|
43
|
+
--dt-accent-ink: #1a1206;
|
|
44
|
+
|
|
45
|
+
--dt-cobalt: #7aa2ff;
|
|
46
|
+
--dt-lime: #d8f24a;
|
|
47
|
+
--dt-accent-soft: color-mix(in srgb, var(--dt-accent) 14%, transparent);
|
|
48
|
+
|
|
49
|
+
--dt-success: #34d399;
|
|
50
|
+
--dt-warning: #fbbf24;
|
|
51
|
+
--dt-danger: #f87171;
|
|
52
|
+
--dt-info: var(--dt-cobalt);
|
|
53
|
+
--dt-status-cobalt: #2f6bff;
|
|
54
|
+
--dt-status-success: #00b04e;
|
|
55
|
+
--dt-status-warning: #ffa71a;
|
|
56
|
+
--dt-status-danger: #dc3a34;
|
|
57
|
+
--dt-alert-ink: #ecfff2;
|
|
58
|
+
|
|
59
|
+
--dt-tint-accent: color-mix(in srgb, var(--dt-accent) 14%, transparent);
|
|
60
|
+
--dt-tint-cobalt: color-mix(in srgb, var(--dt-cobalt) 14%, transparent);
|
|
61
|
+
--dt-tint-success: color-mix(in srgb, var(--dt-success) 16%, transparent);
|
|
62
|
+
--dt-tint-warning: color-mix(in srgb, var(--dt-warning) 16%, transparent);
|
|
63
|
+
--dt-tint-danger: color-mix(in srgb, var(--dt-danger) 16%, transparent);
|
|
64
|
+
--dt-tint-muted: color-mix(in srgb, var(--dt-ink) 6%, transparent);
|
|
65
|
+
|
|
66
|
+
--dt-space-1: 4px;
|
|
67
|
+
--dt-space-2: 8px;
|
|
68
|
+
--dt-space-3: 16px;
|
|
69
|
+
--dt-space-4: 24px;
|
|
70
|
+
--dt-space-5: 40px;
|
|
71
|
+
--dt-space-6: 64px;
|
|
72
|
+
--dt-space-7: 96px;
|
|
73
|
+
--dt-space-8: 128px;
|
|
74
|
+
|
|
75
|
+
--dt-radius-sm: 6px;
|
|
76
|
+
--dt-radius-md: 12px;
|
|
77
|
+
--dt-radius-lg: 40px;
|
|
78
|
+
--dt-radius-button: 18px;
|
|
79
|
+
--dt-radius-xl: 40px;
|
|
80
|
+
--dt-radius-full: 9999px;
|
|
81
|
+
|
|
82
|
+
--dt-shadow-subtle: 0 1px 2px rgba(0, 0, 0, 0.5),
|
|
83
|
+
0 0 0 1px rgba(255, 255, 255, 0.02);
|
|
84
|
+
--dt-shadow-elevated: 0 12px 32px rgba(0, 0, 0, 0.55),
|
|
85
|
+
0 0 0 1px rgba(255, 255, 255, 0.03);
|
|
86
|
+
--dt-shadow-focus: 0 0 0 2px color-mix(in srgb, var(--dt-accent) 60%, transparent);
|
|
87
|
+
--dt-ease: cubic-bezier(0.22, 1, 0.36, 1);
|
|
88
|
+
--dt-ease-in: cubic-bezier(0.55, 0.05, 0.55, 0.2);
|
|
89
|
+
--dt-motion-fast: 120ms var(--dt-ease);
|
|
90
|
+
--dt-motion-base: 160ms var(--dt-ease);
|
|
91
|
+
--dt-motion: 200ms var(--dt-ease);
|
|
92
|
+
--dt-motion-slow: 280ms var(--dt-ease);
|
|
93
|
+
--dt-press-scale: 0.97;
|
|
94
|
+
|
|
95
|
+
--dt-glass-bg: color-mix(in srgb, var(--dt-paper) 72%, transparent);
|
|
96
|
+
--dt-glass-blur: saturate(180%) blur(16px);
|
|
97
|
+
|
|
98
|
+
--dt-font-sans: 'Pretendard Variable', Pretendard, -apple-system, BlinkMacSystemFont, system-ui, 'Apple SD Gothic Neo', 'Noto Sans KR', sans-serif;
|
|
99
|
+
--dt-font-mono: 'JetBrains Mono', 'Geist Mono', SFMono-Regular, ui-monospace, Menlo, monospace;
|
|
100
|
+
|
|
101
|
+
--dt-h1-size: clamp(40px, 6vw, 72px);
|
|
102
|
+
--dt-h1-leading: 1.08;
|
|
103
|
+
--dt-h1-tracking: 0;
|
|
104
|
+
--dt-h1-weight: 560;
|
|
105
|
+
|
|
106
|
+
--dt-h2-size: clamp(28px, 3.5vw, 40px);
|
|
107
|
+
--dt-h2-leading: 1.15;
|
|
108
|
+
--dt-h2-tracking: 0;
|
|
109
|
+
--dt-h2-weight: 540;
|
|
110
|
+
|
|
111
|
+
--dt-h3-size: 18px;
|
|
112
|
+
--dt-h3-leading: 1.3;
|
|
113
|
+
--dt-h3-tracking: 0;
|
|
114
|
+
--dt-h3-weight: 600;
|
|
115
|
+
|
|
116
|
+
--dt-body-size: 16px;
|
|
117
|
+
--dt-body-leading: 1.6;
|
|
118
|
+
--dt-body-weight: 400;
|
|
119
|
+
|
|
120
|
+
--dt-small-size: 13px;
|
|
121
|
+
--dt-small-leading: 1.55;
|
|
122
|
+
|
|
123
|
+
--dt-eyebrow-size: 11px;
|
|
124
|
+
--dt-eyebrow-tracking: 0.18em;
|
|
125
|
+
--dt-eyebrow-weight: 700;
|
|
126
|
+
|
|
127
|
+
--dt-mono-size: 13px;
|
|
128
|
+
--dt-mono-leading: 1.55;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
:root[data-theme='light'] {
|
|
132
|
+
color-scheme: light;
|
|
133
|
+
|
|
134
|
+
--dt-paper: #cfecd8;
|
|
135
|
+
--dt-surface: #ecfff2;
|
|
136
|
+
--dt-surface-raised: #ffffff;
|
|
137
|
+
--dt-surface-sunken: #f4f3ef;
|
|
138
|
+
|
|
139
|
+
--dt-ink: #0c0b08;
|
|
140
|
+
--dt-ink-strong: #0c0b08;
|
|
141
|
+
--dt-muted: #79766e;
|
|
142
|
+
--dt-muted-strong: #423f38;
|
|
143
|
+
|
|
144
|
+
--dt-border: #d8d5ca;
|
|
145
|
+
--dt-border-strong: #ddd9cf;
|
|
146
|
+
|
|
147
|
+
--dt-accent: #ec5e1f;
|
|
148
|
+
--dt-accent-strong: #ec5e1f;
|
|
149
|
+
--dt-accent-ink: #ffffff;
|
|
150
|
+
|
|
151
|
+
--dt-cobalt: #256b5a;
|
|
152
|
+
--dt-lime: #dce95b;
|
|
153
|
+
--dt-accent-soft: color-mix(in srgb, var(--dt-accent) 14%, transparent);
|
|
154
|
+
|
|
155
|
+
--dt-success: #16a34a;
|
|
156
|
+
--dt-warning: #d97706;
|
|
157
|
+
--dt-danger: #dc2626;
|
|
158
|
+
--dt-info: var(--dt-cobalt);
|
|
159
|
+
--dt-status-cobalt: #2f6bff;
|
|
160
|
+
--dt-status-success: #00b04e;
|
|
161
|
+
--dt-status-warning: #ffa71a;
|
|
162
|
+
--dt-status-danger: #dc3a34;
|
|
163
|
+
--dt-alert-ink: #ecfff2;
|
|
164
|
+
|
|
165
|
+
--dt-tint-accent: color-mix(in srgb, var(--dt-accent) 12%, transparent);
|
|
166
|
+
--dt-tint-cobalt: color-mix(in srgb, var(--dt-cobalt) 10%, transparent);
|
|
167
|
+
--dt-tint-success: color-mix(in srgb, var(--dt-success) 12%, transparent);
|
|
168
|
+
--dt-tint-warning: color-mix(in srgb, var(--dt-warning) 14%, transparent);
|
|
169
|
+
--dt-tint-danger: color-mix(in srgb, var(--dt-danger) 12%, transparent);
|
|
170
|
+
--dt-tint-muted: color-mix(in srgb, var(--dt-ink) 5%, transparent);
|
|
171
|
+
|
|
172
|
+
--dt-shadow-subtle: 0 1px 2px rgba(24, 22, 18, 0.07),
|
|
173
|
+
0 0 0 1px rgba(24, 22, 18, 0.03);
|
|
174
|
+
--dt-shadow-elevated: 0 8px 24px rgba(24, 22, 18, 0.10),
|
|
175
|
+
0 0 0 1px rgba(24, 22, 18, 0.04);
|
|
176
|
+
--dt-shadow-focus: 0 0 0 2px color-mix(in srgb, var(--dt-accent) 60%, transparent);
|
|
177
|
+
--dt-ease: cubic-bezier(0.22, 1, 0.36, 1);
|
|
178
|
+
--dt-ease-in: cubic-bezier(0.55, 0.05, 0.55, 0.2);
|
|
179
|
+
--dt-motion-base: 160ms var(--dt-ease);
|
|
180
|
+
--dt-press-scale: 0.97;
|
|
181
|
+
|
|
182
|
+
--dt-glass-bg: color-mix(in srgb, var(--dt-paper) 78%, transparent);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/*
|
|
186
|
+
Primitive class-name contract downstream surfaces can mirror locally:
|
|
187
|
+
.dt-shell, .dt-section, .dt-eyebrow,
|
|
188
|
+
.badge, .badge-accent, .badge-info, .badge-success, .badge-warning,
|
|
189
|
+
.card, .card-muted, .card-raised, .glass-card,
|
|
190
|
+
.btn-primary, .btn-secondary, .btn-ghost.
|
|
191
|
+
*/
|
package/css/fonts.css
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap');
|
|
2
|
+
|
|
3
|
+
/* ============================================================
|
|
4
|
+
Bridger — Fonts
|
|
5
|
+
Pretendard Variable is shipped locally (Korean + product UI).
|
|
6
|
+
JetBrains Mono is loaded from CDN for code / API values.
|
|
7
|
+
============================================================ */
|
|
8
|
+
|
|
9
|
+
@font-face {
|
|
10
|
+
font-family: 'Pretendard Variable';
|
|
11
|
+
font-weight: 45 920;
|
|
12
|
+
font-style: normal;
|
|
13
|
+
font-display: swap;
|
|
14
|
+
src: url('../assets/fonts/PretendardVariable.woff2') format('woff2-variations');
|
|
15
|
+
}
|
package/css/index.css
ADDED
package/css/spacing.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import url('./contract.css');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import url('./contract.css');
|