tamga-ui 0.2.0 → 0.3.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/CHANGELOG.md +86 -0
- package/dist/components/appearance.d.ts +78 -0
- package/dist/components/appearance.d.ts.map +1 -0
- package/dist/components/appearance.js +73 -0
- package/dist/components/chrome.d.ts +11 -1
- package/dist/components/chrome.d.ts.map +1 -1
- package/dist/components/chrome.js +19 -6
- package/dist/components/error-state.d.ts +7 -14
- package/dist/components/error-state.d.ts.map +1 -1
- package/dist/components/overlay.d.ts +7 -16
- package/dist/components/overlay.d.ts.map +1 -1
- package/dist/components/primitives.d.ts +7 -16
- package/dist/components/primitives.d.ts.map +1 -1
- package/dist/components/rail-link.d.ts +22 -2
- package/dist/components/rail-link.d.ts.map +1 -1
- package/dist/components/rail-link.js +12 -9
- package/dist/components/square-picker.d.ts +41 -0
- package/dist/components/square-picker.d.ts.map +1 -0
- package/dist/components/square-picker.js +90 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/kit.css +237 -729
- package/dist/lib/color.d.ts +0 -20
- package/dist/lib/color.d.ts.map +1 -1
- package/dist/lib/color.js +0 -22
- package/dist/lib/image.d.ts +46 -0
- package/dist/lib/image.d.ts.map +1 -0
- package/dist/lib/image.js +95 -0
- package/dist/lib/palette.d.ts +0 -16
- package/dist/lib/palette.d.ts.map +1 -1
- package/dist/lib/palette.js +0 -12
- package/dist/patterns/app-shell.d.ts.map +1 -1
- package/dist/patterns/app-shell.js +2 -12
- package/dist/patterns/appearance-template.d.ts +105 -0
- package/dist/patterns/appearance-template.d.ts.map +1 -0
- package/dist/patterns/appearance-template.js +23 -0
- package/dist/patterns/index.d.ts +1 -0
- package/dist/patterns/index.d.ts.map +1 -1
- package/dist/patterns/index.js +1 -0
- package/dist/patterns/settings-template.d.ts +12 -1
- package/dist/patterns/settings-template.d.ts.map +1 -1
- package/dist/patterns/settings-template.js +2 -2
- package/dist/patterns/shared.d.ts +1 -1
- package/dist/patterns/shared.d.ts.map +1 -1
- package/dist/styles.css +1 -3
- package/dist/theme.css +127 -483
- package/package.json +4 -1
package/dist/theme.css
CHANGED
|
@@ -1,146 +1,73 @@
|
|
|
1
|
-
|
|
2
|
-
tamga-ui · TEMA KATMANI
|
|
3
|
-
|
|
4
|
-
Token'lar burada yaşar: renk rampası, semantik renkler, tip skalası,
|
|
5
|
-
ölçü, şekil ve motion. Sınıflar kit.css'te.
|
|
6
|
-
|
|
7
|
-
KULLANIM — tüketici kendi CSS'inde şu sırayı kurar:
|
|
8
|
-
|
|
9
|
-
@import "tailwindcss";
|
|
10
|
-
@import "tamga-ui/styles.css";
|
|
11
|
-
:root { --color-accent: #d6336c; } ← markanın tamamı
|
|
12
|
-
|
|
13
|
-
Bu dosya Tailwind v4 gerektirir (@theme direktifi kullanıyor).
|
|
14
|
-
kit.css gerektirmez — o saf CSS.
|
|
15
|
-
|
|
16
|
-
KURALLAR (guard'larla zorlanır):
|
|
17
|
-
· her token HEM :root HEM .dark içinde (check-token-parity)
|
|
18
|
-
· bileşen token'a adıyla erişir, ham hex yazmaz (check-hardcoded-colors)
|
|
19
|
-
· motion yalnız token üzerinden (check-motion-tokens)
|
|
20
|
-
============================================================== */
|
|
21
|
-
|
|
1
|
+
/*! tamga-ui 0.3.0 · MIT · https://tamga.org.tr */
|
|
22
2
|
@custom-variant dark (&:is(.dark *));
|
|
23
3
|
|
|
24
|
-
/* ============================================================
|
|
25
|
-
TOKEN KATMANI — kitin tek renk, ölçü ve hareket kaynağı.
|
|
26
|
-
|
|
27
|
-
KALICI (mekanizma, tartışmaya kapalı)
|
|
28
|
-
· token isimleri + @theme inline köprüsü
|
|
29
|
-
· her token HEM :root HEM .dark içinde (parite CI'da denetlenir)
|
|
30
|
-
· motion yalnız token üzerinden — ham süre ve eğri yasak
|
|
31
|
-
· yükselme tek formülden gelir: 1px kenar + N px sert offset, bulanıklık yok
|
|
32
|
-
|
|
33
|
-
DEĞİŞTİRİLEBİLİR (ürünün kararı)
|
|
34
|
-
· rampanın DEĞERLERİ. Bir ürün kendi CSS girişinde :root ve .dark blokları
|
|
35
|
-
yazarak markasını verir. Token'ın ADI kitin, DEĞERİ ürünündür.
|
|
36
|
-
|
|
37
|
-
Buradaki bir değeri değiştirmeden önce kitin ilgili karar belgesini güncelle —
|
|
38
|
-
sıra hep aynı: önce doküman, sonra değer.
|
|
39
|
-
============================================================ */
|
|
40
|
-
|
|
41
|
-
/* tamga:sabit-olcek — temadan bağımsız: marka rampası, kırılma noktası,
|
|
42
|
-
hareket eğrileri ve süreler. Gece de gündüz de aynı. */
|
|
43
4
|
@theme {
|
|
44
|
-
|
|
45
|
-
the interface, and a component reaching for --color-brand-500 is skipping the
|
|
46
|
-
layer that makes theming work. Kept in step with the accent so that if anyone
|
|
47
|
-
ever does reach for it they get this product's blue, not the placeholder v2
|
|
48
|
-
shipped with.
|
|
49
|
-
TR: Ham marka rampası. Hiçbir şey doğrudan tüketmiyor: arayüz aşağıdaki anlamsal
|
|
50
|
-
token'lar, ve --color-brand-500'e uzanan bir bileşen temalandırmayı çalıştıran
|
|
51
|
-
katmanı atlıyor. */
|
|
5
|
+
|
|
52
6
|
--color-brand-50: #ecedf3;
|
|
53
|
-
|
|
54
|
-
TR: Ham rampa, ikinci adım. */
|
|
7
|
+
|
|
55
8
|
--color-brand-100: #d6e2f5;
|
|
56
|
-
--color-brand-400: #53a4fa;
|
|
57
|
-
--color-brand-500: #2069c9;
|
|
58
|
-
--color-brand-600: #12245c;
|
|
9
|
+
--color-brand-400: #53a4fa;
|
|
10
|
+
--color-brand-500: #2069c9;
|
|
11
|
+
--color-brand-600: #12245c;
|
|
59
12
|
|
|
60
13
|
--breakpoint-xs: 30rem;
|
|
61
14
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
--
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
--
|
|
71
|
-
|
|
72
|
-
--duration-
|
|
73
|
-
--duration-
|
|
74
|
-
--duration-base: 240ms; /* panels, popovers, toasts, value changes TR: paneller, balonlar, bildirimler, değer değişimleri */
|
|
75
|
-
--duration-slow: 340ms; /* route-level reveals TR: rota düzeyinde açılışlar */
|
|
76
|
-
/* Loops — long by design, the only things allowed past --duration-slow */
|
|
77
|
-
--duration-breath: 1100ms; /* skeleton TR: iskelet */
|
|
78
|
-
--duration-beacon: 1800ms; /* the live mark. 2400ms read as heavy on an instrument. TR: canlı işaret. 2400ms bir göstergede ağır okunuyordu. */
|
|
15
|
+
--ease-instrument: cubic-bezier(0.22, 1, 0.36, 1);
|
|
16
|
+
--ease-press: cubic-bezier(0.22, 1, 0.36, 1);
|
|
17
|
+
|
|
18
|
+
--ease-breath: ease-in-out;
|
|
19
|
+
|
|
20
|
+
--duration-instant: 100ms;
|
|
21
|
+
--duration-quick: 160ms;
|
|
22
|
+
--duration-base: 240ms;
|
|
23
|
+
--duration-slow: 340ms;
|
|
24
|
+
|
|
25
|
+
--duration-breath: 1100ms;
|
|
26
|
+
--duration-beacon: 1800ms;
|
|
79
27
|
}
|
|
80
28
|
|
|
81
|
-
/* İŞARETÇİ YORUMU KENDİNDEN BAŞKA BİR İŞARETÇİNİN ADINI TAŞIMAZ. İlk hâli
|
|
82
|
-
burada koyu bloğun adını da anıyordu; ayrıştırıcı "koyu" işaretçisini
|
|
83
|
-
ararken bu yorumu buluyor ve AÇIK bloğu koyu sanıyordu. Parite kapısı da
|
|
84
|
-
bu yüzden açık bloğu kendisiyle karşılaştırıp sessizce geçiyordu.
|
|
85
|
-
tamga:tema-acik */
|
|
86
29
|
:root {
|
|
87
|
-
--radius: 6px;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
"night edge" (§2). Equal layer counts also guarantee smooth box-shadow interpolation on press. */
|
|
94
|
-
--shadow-color: #d2cec8; /* = --color-edge: the offset IS the edge colour (13 Yasa 1). Darkened from #d9d6d1, which measured ΔL* 9.8 against the page, under this gate's floor of 10. TR: = --color-edge: kaydırmanın kendisi kenarın rengidir (13 Yasa 1). #d9d6d1'den koyulaştırıldı; sayfaya karşı ΔL* 9.8 ölçülmüştü, bu kapının 10 tabanının altında. */
|
|
95
|
-
--shadow-rim: transparent; /* no rim in either theme; see .dark TR: iki temada da çerçeve yok; bkz. .dark */
|
|
96
|
-
--shadow-ambient: rgb(38 34 26 / 0.32); /* scrim/overlay drop, warm ink TR: katman gölgesi, sıcak mürekkep */
|
|
97
|
-
--shadow-raised: 2px 2px 0 0 var(--shadow-color); /* diagonal, blurless (13 Yasa 1) TR: çapraz, bulanıksız (13 Yasa 1) */
|
|
30
|
+
--radius: 6px;
|
|
31
|
+
|
|
32
|
+
--shadow-color: #d2cec8;
|
|
33
|
+
--shadow-rim: transparent;
|
|
34
|
+
--shadow-ambient: rgb(38 34 26 / 0.32);
|
|
35
|
+
--shadow-raised: 2px 2px 0 0 var(--shadow-color);
|
|
98
36
|
--shadow-hover: 3px 3px 0 0 var(--shadow-color);
|
|
99
37
|
--shadow-pressed: 0 0 0 0 var(--shadow-color);
|
|
100
|
-
--shadow-overlay: 6px 6px 0 0 var(--shadow-color);
|
|
101
|
-
--shadow-seated-pressed: inset 0 0 0 0 transparent;
|
|
38
|
+
--shadow-overlay: 6px 6px 0 0 var(--shadow-color);
|
|
39
|
+
--shadow-seated-pressed: inset 0 0 0 0 transparent;
|
|
102
40
|
|
|
103
|
-
--background: #f5f2ec;
|
|
41
|
+
--background: #f5f2ec;
|
|
104
42
|
--foreground: #26221a;
|
|
105
43
|
--card: #fdfcfa;
|
|
106
44
|
--card-foreground: #26221a;
|
|
107
45
|
--popover: #fdfcfa;
|
|
108
46
|
--popover-foreground: #26221a;
|
|
109
47
|
|
|
110
|
-
--primary: #2069c9;
|
|
48
|
+
--primary: #2069c9;
|
|
111
49
|
--primary-foreground: #fdfcfa;
|
|
112
50
|
--secondary: #eceae6;
|
|
113
51
|
--secondary-foreground: #453f34;
|
|
114
52
|
--muted: #eceae6;
|
|
115
|
-
--muted-foreground: #6f695b;
|
|
116
|
-
--accent: #ecedf3;
|
|
53
|
+
--muted-foreground: #6f695b;
|
|
54
|
+
--accent: #ecedf3;
|
|
117
55
|
--accent-foreground: #12245c;
|
|
118
56
|
--destructive: #b3341f;
|
|
119
57
|
--destructive-foreground: #fdfcfa;
|
|
120
|
-
--success: #0a7a5f;
|
|
58
|
+
--success: #0a7a5f;
|
|
121
59
|
--success-foreground: #fdfcfa;
|
|
122
60
|
--warning: #8a5a0b;
|
|
123
61
|
--warning-foreground: #fdfcfa;
|
|
124
|
-
--beacon: #12245c;
|
|
62
|
+
--beacon: #12245c;
|
|
125
63
|
--beacon-foreground: #fdfcfa;
|
|
126
64
|
|
|
127
|
-
--border: #e2ded6;
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
--tick: #bdb8ae; /* scale marks answer to a FLOOR, not to the border's softness: they must read on card, page AND muted (13 §4) TR: ölçek işaretleri kenarın yumuşaklığına değil bir TABANA cevap verir: kartta, sayfada VE soluk zeminde okunmalı (13 §4) */
|
|
132
|
-
--input: #d2cec8; /* = --shadow-color. Yasa 1: the edge and the offset are one colour TR: = --shadow-color. Yasa 1: kenar ile kaydırma tek renktir */
|
|
65
|
+
--border: #e2ded6;
|
|
66
|
+
|
|
67
|
+
--tick: #bdb8ae;
|
|
68
|
+
--input: #d2cec8;
|
|
133
69
|
--ring: #12245c;
|
|
134
70
|
|
|
135
|
-
/* Categorical series: for data that is NOT a status (regions, plans, series).
|
|
136
|
-
Deliberately QUIETER than the status palette: C* 26 against status's 36–65, so a
|
|
137
|
-
chart can never out-shout an event. Hues avoid critical's red (40°) and
|
|
138
|
-
resolved's green (169°) — the two carrying the strongest meaning, and the two a
|
|
139
|
-
reader would most easily mistake on a line. Measured: 22 ΔE between neighbours,
|
|
140
|
-
20 ΔE to the nearest status colour.
|
|
141
|
-
TR: Kategorik seriler: durum OLMAYAN veri için (bölgeler, planlar, seriler). Durum
|
|
142
|
-
paletinden bilerek daha SESSİZ: durumun 36–65'ine karşı C* 26, yani bir grafik bir
|
|
143
|
-
olayın sesini asla bastıramıyor. */
|
|
144
71
|
--chart-1: #887c4f;
|
|
145
72
|
--chart-2: #32888a;
|
|
146
73
|
--chart-3: #4782a5;
|
|
@@ -148,21 +75,15 @@
|
|
|
148
75
|
--chart-5: #a36c84;
|
|
149
76
|
}
|
|
150
77
|
|
|
151
|
-
/* tamga:tema-koyu */
|
|
152
78
|
.dark {
|
|
153
|
-
|
|
154
|
-
/* Elevation (docs/13-design-soul §2 "night edge"): a darkening bottom shadow can't read on a
|
|
155
|
-
near-black ground (measured ceiling ΔL* ~8 vs light's ~16-20), so dark pushes --shadow-color to
|
|
156
|
-
near-black for max bottom separation AND adds the load-bearing cue — a 1px warm-white inset TOP
|
|
157
|
-
rim (light catches the raised top edge at night). Same two-layer formulas as light; on press the
|
|
158
|
-
rim goes transparent → the surface reads pressed flat (1:1 with light's bottom-out). */
|
|
79
|
+
|
|
159
80
|
--shadow-color: #363e6e;
|
|
160
|
-
--shadow-rim: transparent;
|
|
81
|
+
--shadow-rim: transparent;
|
|
161
82
|
--shadow-ambient: rgb(6 6 22 / 0.62);
|
|
162
|
-
--shadow-raised: 2px 2px 0 0 var(--shadow-color);
|
|
83
|
+
--shadow-raised: 2px 2px 0 0 var(--shadow-color);
|
|
163
84
|
--shadow-hover: 3px 3px 0 0 var(--shadow-color);
|
|
164
85
|
--shadow-pressed: 0 0 0 0 var(--shadow-color);
|
|
165
|
-
--shadow-overlay: 6px 6px 0 0 var(--shadow-color);
|
|
86
|
+
--shadow-overlay: 6px 6px 0 0 var(--shadow-color);
|
|
166
87
|
--shadow-seated-pressed: inset 0 0 0 0 transparent;
|
|
167
88
|
|
|
168
89
|
--background: #0f1127;
|
|
@@ -172,8 +93,8 @@
|
|
|
172
93
|
--popover: #131832;
|
|
173
94
|
--popover-foreground: #efeef4;
|
|
174
95
|
|
|
175
|
-
--primary: #53a4fa;
|
|
176
|
-
--primary-foreground: #12245c;
|
|
96
|
+
--primary: #53a4fa;
|
|
97
|
+
--primary-foreground: #12245c;
|
|
177
98
|
--secondary: #1c2241;
|
|
178
99
|
--secondary-foreground: #d4d4df;
|
|
179
100
|
--muted: #1c2241;
|
|
@@ -190,7 +111,7 @@
|
|
|
190
111
|
--beacon-foreground: #0f1127;
|
|
191
112
|
|
|
192
113
|
--border: #262d54;
|
|
193
|
-
--tick: #3f4880;
|
|
114
|
+
--tick: #3f4880;
|
|
194
115
|
--input: #363e6e;
|
|
195
116
|
--ring: #86a7f3;
|
|
196
117
|
|
|
@@ -201,10 +122,6 @@
|
|
|
201
122
|
--chart-5: #ca90a9;
|
|
202
123
|
}
|
|
203
124
|
|
|
204
|
-
/* Köprü: tema ailesinin adlarını kitin `--color-*` ad alanına bağlıyor. Bir
|
|
205
|
-
token'ın Tailwind utility'si üretip üretmediği buradan geçip geçmediğine
|
|
206
|
-
bağlı, o yüzden işaretli.
|
|
207
|
-
tamga:kopru */
|
|
208
125
|
@theme inline {
|
|
209
126
|
--color-background: var(--background);
|
|
210
127
|
--color-foreground: var(--foreground);
|
|
@@ -234,46 +151,30 @@
|
|
|
234
151
|
--color-ring: var(--ring);
|
|
235
152
|
|
|
236
153
|
--color-chart-1: var(--chart-1);
|
|
237
|
-
|
|
238
|
-
never mistaken for a status. */
|
|
154
|
+
|
|
239
155
|
--color-chart-2: var(--chart-2);
|
|
240
|
-
|
|
156
|
+
|
|
241
157
|
--color-chart-3: var(--chart-3);
|
|
242
|
-
|
|
158
|
+
|
|
243
159
|
--color-chart-4: var(--chart-4);
|
|
244
|
-
|
|
245
|
-
and a legend stops helping. */
|
|
160
|
+
|
|
246
161
|
--color-chart-5: var(--chart-5);
|
|
247
162
|
|
|
248
|
-
/* Typographic lock (docs/13-design-soul §6) — DECISION CHANGED 2026-08-16 (Berika).
|
|
249
|
-
The product runs on the SYSTEM UI stack. Outfit and JetBrains Mono were the earlier lock, but
|
|
250
|
-
the prototype everyone judged the design against had a broken variable chain and was silently
|
|
251
|
-
rendering system UI the whole time — that is the typography the design was actually approved
|
|
252
|
-
with, so it is the typography that ships.
|
|
253
|
-
Written out as an explicit value rather than left to a fallback: a stack you can read is a
|
|
254
|
-
stack you can change. Reverting is these three lines. */
|
|
255
163
|
--font-sans: -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
--measure-
|
|
260
|
-
|
|
261
|
-
--
|
|
262
|
-
|
|
263
|
-
--font-display: -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* headings are the same face, heavier — never a separate display cut (13 §6) */
|
|
264
|
-
/* Mono is the same face too — this is what the prototype did, and it is the shape the design was
|
|
265
|
-
approved in. The cost is real and worth stating: digits are no longer tabular by default, so a
|
|
266
|
-
column of numbers stops aligning on its own. `tabular-nums` is still available where a column
|
|
267
|
-
needs it. */
|
|
164
|
+
|
|
165
|
+
--measure-tight: 36ch;
|
|
166
|
+
--measure: 54ch;
|
|
167
|
+
--measure-wide: 70ch;
|
|
168
|
+
|
|
169
|
+
--font-display: -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
170
|
+
|
|
268
171
|
--font-mono: -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
269
172
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
--radius-
|
|
273
|
-
--radius-
|
|
274
|
-
--radius-
|
|
275
|
-
--radius-xl: calc(var(--radius) + 8px); /* 1.25rem — large surfaces */
|
|
276
|
-
--radius-full: 9999px; /* avatars and the live dot ONLY (§5) */
|
|
173
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
174
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
175
|
+
--radius-lg: calc(var(--radius) + 4px);
|
|
176
|
+
--radius-xl: calc(var(--radius) + 8px);
|
|
177
|
+
--radius-full: 9999px;
|
|
277
178
|
}
|
|
278
179
|
|
|
279
180
|
@layer base {
|
|
@@ -285,7 +186,7 @@
|
|
|
285
186
|
background-color: var(--background);
|
|
286
187
|
color: var(--foreground);
|
|
287
188
|
}
|
|
288
|
-
|
|
189
|
+
|
|
289
190
|
h1,
|
|
290
191
|
h2,
|
|
291
192
|
h3 {
|
|
@@ -293,10 +194,6 @@
|
|
|
293
194
|
letter-spacing: -0.01em;
|
|
294
195
|
}
|
|
295
196
|
|
|
296
|
-
/* Skeleton breath — an opacity breath, never a shimmer sweep (13 §8, §10).
|
|
297
|
-
Deep and quick on purpose: it started shallow and slow, which was right in
|
|
298
|
-
principle and useless in practice — at a glance you could not tell a loading
|
|
299
|
-
panel from a settled one, and that is its only job. */
|
|
300
197
|
@keyframes skeleton-breath {
|
|
301
198
|
0%,
|
|
302
199
|
100% {
|
|
@@ -311,8 +208,6 @@
|
|
|
311
208
|
animation-delay: var(--skeleton-delay, 0ms);
|
|
312
209
|
}
|
|
313
210
|
|
|
314
|
-
/* The live mark. Brightness only — never a transform, or it starts competing
|
|
315
|
-
with the mascot's channel and Yasa 4 stops being enforceable (13 §3). */
|
|
316
211
|
@keyframes beacon-breath {
|
|
317
212
|
0%,
|
|
318
213
|
100% {
|
|
@@ -326,9 +221,6 @@
|
|
|
326
221
|
animation: beacon-breath var(--duration-beacon) var(--ease-breath) infinite;
|
|
327
222
|
}
|
|
328
223
|
|
|
329
|
-
/* Decorative motion goes static under reduced motion. MECHANISM — keep in every art direction.
|
|
330
|
-
A stopped skeleton must still READ as a placeholder, so it parks near the middle of the
|
|
331
|
-
breath rather than at either end; an empty box is worse than no skeleton. */
|
|
332
224
|
@media (prefers-reduced-motion: reduce) {
|
|
333
225
|
.animate-skeleton-breath {
|
|
334
226
|
animation: none;
|
|
@@ -340,12 +232,6 @@
|
|
|
340
232
|
}
|
|
341
233
|
}
|
|
342
234
|
|
|
343
|
-
/* ============================================================
|
|
344
|
-
Press choreography (docs/13-design-soul §2) — THE single source for every raised interactive
|
|
345
|
-
surface (buttons, clickable cards). Apply the `press-surface` class; never re-implement it per
|
|
346
|
-
component (no second copy). Decorative, non-clickable surfaces must NOT use it (Law 2).
|
|
347
|
-
No transition-all — the property list is explicit.
|
|
348
|
-
============================================================ */
|
|
349
235
|
.press-surface {
|
|
350
236
|
transform: translateY(0);
|
|
351
237
|
box-shadow: var(--shadow-raised);
|
|
@@ -355,16 +241,7 @@
|
|
|
355
241
|
transition-duration: var(--duration-quick);
|
|
356
242
|
transition-timing-function: var(--ease-instrument);
|
|
357
243
|
}
|
|
358
|
-
|
|
359
|
-
The chrome around it — rail, header, ground — is all --card with no dividing
|
|
360
|
-
line, so it reads as one continuous frame. This is the only thing on top of
|
|
361
|
-
that frame, which is why it takes the CONTROL radius rather than the card
|
|
362
|
-
radius: at this size a softer corner makes the whole screen look like a
|
|
363
|
-
widget, and the sharper one keeps it in the same family as the buttons
|
|
364
|
-
inside it.
|
|
365
|
-
NOT a motion rule: this sat inside the reduced-motion query, so the surface
|
|
366
|
-
had no ground, no edge and no radius for anyone who had not turned reduced
|
|
367
|
-
motion on. */
|
|
244
|
+
|
|
368
245
|
.app-surface {
|
|
369
246
|
background: var(--background);
|
|
370
247
|
border: 1px solid var(--border);
|
|
@@ -372,7 +249,7 @@
|
|
|
372
249
|
}
|
|
373
250
|
|
|
374
251
|
@media (prefers-reduced-motion: reduce) {
|
|
375
|
-
|
|
252
|
+
|
|
376
253
|
.press-surface {
|
|
377
254
|
transition-duration: var(--duration-instant);
|
|
378
255
|
}
|
|
@@ -380,16 +257,9 @@
|
|
|
380
257
|
.press-surface:hover:not(:disabled):not([aria-disabled="true"]):not([data-loading="true"]) {
|
|
381
258
|
transform: translate(-1px, -1px);
|
|
382
259
|
box-shadow: var(--shadow-hover);
|
|
383
|
-
|
|
384
|
-
border to the signature colour; that was dropped deliberately. One event
|
|
385
|
-
should produce one signal, and in this system an accent border already means
|
|
386
|
-
"selected or focused" — spending it on "the pointer is here" would blunt it. */
|
|
260
|
+
|
|
387
261
|
}
|
|
388
|
-
|
|
389
|
-
surface lands beside its own shadow instead of on it. Measured in-browser: a vertical-only
|
|
390
|
-
press against a 2px 2px offset left the button 2px to the left of where it bottomed out.
|
|
391
|
-
If this scale ever changes, keep the press translate EQUAL to --shadow-raised's offset on
|
|
392
|
-
both x and y. */
|
|
262
|
+
|
|
393
263
|
.press-surface:active:not(:disabled):not([aria-disabled="true"]):not([data-loading="true"]) {
|
|
394
264
|
transform: translate(2px, 2px);
|
|
395
265
|
box-shadow: var(--shadow-pressed);
|
|
@@ -397,7 +267,7 @@
|
|
|
397
267
|
transition-timing-function: var(--ease-press);
|
|
398
268
|
}
|
|
399
269
|
.press-surface:focus-visible {
|
|
400
|
-
|
|
270
|
+
|
|
401
271
|
outline-color: var(--beacon);
|
|
402
272
|
}
|
|
403
273
|
.press-surface:disabled,
|
|
@@ -407,46 +277,25 @@
|
|
|
407
277
|
border-color: color-mix(in oklab, var(--border) 50%, transparent);
|
|
408
278
|
}
|
|
409
279
|
.press-surface[data-loading="true"] {
|
|
410
|
-
transform: translateY(0);
|
|
280
|
+
transform: translateY(0);
|
|
411
281
|
box-shadow: var(--shadow-raised);
|
|
412
282
|
}
|
|
413
283
|
|
|
414
|
-
/* ============================================================
|
|
415
|
-
Surfaces (docs/13 §5) — the raised panel, defined once.
|
|
416
|
-
|
|
417
|
-
§5 is explicit and was not being followed: surfaces take --radius-card (6px), the edge is 1px in
|
|
418
|
-
the SHADOW colour (Yasa 1: the edge and the offset are one colour), and emphasis comes from a
|
|
419
|
-
hard diagonal offset. shadcn's `rounded-xl border shadow-sm` broke all three — `shadow-sm` is a
|
|
420
|
-
BLURRED shadow, which Yasa 1 forbids outright, and a blurred shadow is exactly what makes a
|
|
421
|
-
neobrutalist surface read as a generic SaaS card.
|
|
422
|
-
|
|
423
|
-
Role aliases, so call sites read by ROLE rather than by size (§5):
|
|
424
|
-
============================================================ */
|
|
425
|
-
/* tamga:sabit-rol — rol takma adları ve yapısal ölçüler. Temaya bağlı değil. */
|
|
426
284
|
:root {
|
|
427
|
-
--radius-ctl: var(--radius-md);
|
|
428
|
-
--radius-card: var(--radius);
|
|
429
|
-
|
|
430
|
-
/* §5's structural rhythm. `--gutter` is the vertical line every heading, label, row and cell
|
|
431
|
-
starts on; it existed in the decision and nowhere in the code, so each screen was picking its
|
|
432
|
-
own px-6 / px-8 and the left edge wandered from page to page.
|
|
433
|
-
TR: §5'in yapısal ritmi. `--gutter` her başlığın, etiketin, satırın ve hücrenin
|
|
434
|
-
üstünde başladığı dikey çizgi; kararda vardı ama kodda hiçbir yerde yoktu, o yüzden
|
|
435
|
-
her ekran kendi px-6 / px-8'ini seçiyor ve sol kenar sayfadan sayfaya kayıyordu. */
|
|
285
|
+
--radius-ctl: var(--radius-md);
|
|
286
|
+
--radius-card: var(--radius);
|
|
287
|
+
|
|
436
288
|
--gutter: 24px;
|
|
437
|
-
--row: 56px;
|
|
438
|
-
--row-sm: 48px;
|
|
439
|
-
--control: 40px;
|
|
289
|
+
--row: 56px;
|
|
290
|
+
--row-sm: 48px;
|
|
291
|
+
--control: 40px;
|
|
440
292
|
}
|
|
441
293
|
|
|
442
|
-
/* The one left line every page shares. */
|
|
443
294
|
.gutter {
|
|
444
295
|
padding-left: var(--gutter);
|
|
445
296
|
padding-right: var(--gutter);
|
|
446
297
|
}
|
|
447
298
|
|
|
448
|
-
/* A raised panel. Same grammar as .press-surface but with no choreography: it is not pressable, so
|
|
449
|
-
it never lifts and never presses (Law 2). */
|
|
450
299
|
.card-surface {
|
|
451
300
|
background: var(--card);
|
|
452
301
|
border: 1px solid var(--shadow-color);
|
|
@@ -454,49 +303,28 @@
|
|
|
454
303
|
box-shadow: var(--shadow-raised);
|
|
455
304
|
}
|
|
456
305
|
|
|
457
|
-
/* A seated well: content that sits IN the page rather than on it — filter bars, table headers,
|
|
458
|
-
sub-panels. No offset, ever. */
|
|
459
306
|
.sunk-surface {
|
|
460
307
|
background: var(--muted);
|
|
461
308
|
border: 1px solid var(--shadow-color);
|
|
462
309
|
border-radius: var(--radius-card);
|
|
463
310
|
}
|
|
464
311
|
|
|
465
|
-
/* Rayın kendi fiziği artık `kit.css`'te `.tamga-rail-link` olarak yaşıyor ve
|
|
466
|
-
`--color-nav-*` okuyor. Burada duran `.rail-link` bloğu ile onu besleyen
|
|
467
|
-
sekiz `--sidebar-*` token'ı SİLİNDİ: hiçbir bileşen onlara dokunmuyordu, ve
|
|
468
|
-
ölü bir token yalnız yer kaplamıyor, yanlış da söylüyor. Token sayfası
|
|
469
|
-
`--sidebar-primary` için kırmızı bir 1.08 basıyordu; hiçbir yerde
|
|
470
|
-
kullanılmayan bir rengin kontrast uyarısı, gerçek uyarıların arasında
|
|
471
|
-
gürültüdür. */
|
|
472
|
-
|
|
473
312
|
@media (prefers-reduced-motion: reduce) {
|
|
474
313
|
.rail-link {
|
|
475
314
|
transition-duration: var(--duration-instant);
|
|
476
315
|
}
|
|
477
316
|
}
|
|
478
317
|
|
|
479
|
-
/* ============================================================
|
|
480
|
-
Seated choreography (docs/13-design-soul §2) — THE single source for controls that sit IN a track
|
|
481
|
-
(tabs trigger, switch, checkbox, radio, segmented). Sibling of .press-surface, SAME grammar
|
|
482
|
-
(beacon focus ring, beacon hover warm, same tokens, same reduced-motion) — but the seated physics:
|
|
483
|
-
flat at rest, presses INTO the track on active (inset mirror of the raised bottom-out). No translate,
|
|
484
|
-
no scale. Apply the `seated-surface` class + a `border border-transparent` (so the warm shows).
|
|
485
|
-
Never re-implement it per component; decorative surfaces must NOT use it (Law 2).
|
|
486
|
-
============================================================ */
|
|
487
318
|
.seated-surface {
|
|
488
|
-
position: relative;
|
|
489
|
-
box-shadow: inset 0 0 0 0 var(--shadow-color);
|
|
319
|
+
position: relative;
|
|
320
|
+
box-shadow: inset 0 0 0 0 var(--shadow-color);
|
|
490
321
|
outline: 2px solid transparent;
|
|
491
322
|
outline-offset: 2px;
|
|
492
323
|
transition-property: box-shadow, border-color, outline-color, color;
|
|
493
324
|
transition-duration: var(--duration-quick);
|
|
494
325
|
transition-timing-function: var(--ease-instrument);
|
|
495
326
|
}
|
|
496
|
-
|
|
497
|
-
it never replaces the state (a checked switch keeps --primary; an active tab keeps --background).
|
|
498
|
-
Solid color, NOT a gradient (§10). This also sidesteps the specificity clash with the component's
|
|
499
|
-
data-[state]:bg-* utility entirely — it's a different element and a different property. */
|
|
327
|
+
|
|
500
328
|
.seated-surface::after {
|
|
501
329
|
content: "";
|
|
502
330
|
position: absolute;
|
|
@@ -507,25 +335,25 @@
|
|
|
507
335
|
transition: background-color var(--duration-quick) var(--ease-instrument);
|
|
508
336
|
}
|
|
509
337
|
@media (prefers-reduced-motion: reduce) {
|
|
510
|
-
|
|
338
|
+
|
|
511
339
|
.seated-surface,
|
|
512
340
|
.seated-surface::after {
|
|
513
341
|
transition-duration: var(--duration-instant);
|
|
514
342
|
}
|
|
515
343
|
}
|
|
516
344
|
.seated-surface:hover:not(:disabled):not([aria-disabled="true"]) {
|
|
517
|
-
|
|
345
|
+
|
|
518
346
|
}
|
|
519
347
|
.seated-surface:hover:not(:disabled):not([aria-disabled="true"])::after {
|
|
520
348
|
background-color: var(--accent);
|
|
521
349
|
}
|
|
522
350
|
.seated-surface:active:not(:disabled):not([aria-disabled="true"]) {
|
|
523
|
-
box-shadow: var(--shadow-seated-pressed);
|
|
351
|
+
box-shadow: var(--shadow-seated-pressed);
|
|
524
352
|
transition-duration: var(--duration-instant);
|
|
525
353
|
transition-timing-function: var(--ease-press);
|
|
526
354
|
}
|
|
527
355
|
.seated-surface:focus-visible {
|
|
528
|
-
outline-color: var(--beacon);
|
|
356
|
+
outline-color: var(--beacon);
|
|
529
357
|
}
|
|
530
358
|
.seated-surface:disabled,
|
|
531
359
|
.seated-surface[aria-disabled="true"] {
|
|
@@ -533,280 +361,96 @@
|
|
|
533
361
|
border-color: color-mix(in oklab, var(--border) 50%, transparent);
|
|
534
362
|
}
|
|
535
363
|
|
|
536
|
-
/* ==============================================================
|
|
537
|
-
TASLAK tokens (src/taslak) — here rather than in taslak.css because Tailwind generates utilities
|
|
538
|
-
only for the entry that imports it, and the draft needs `bg-shell`, `text-ink`, `text-body`.
|
|
539
|
-
Names are additive: v5 speaks --background/--card and Tailwind's own text scale, so nothing is
|
|
540
|
-
overwritten. `static` because a token reached only through var() in a TSX inline style is
|
|
541
|
-
invisible to the tree-shaker. Dark overrides and the tamga-* classes stay in taslak.css.
|
|
542
|
-
============================================================== */
|
|
543
|
-
/* Kitin kendi ad ailesi (--color-page, --color-ink …). Koyu karşılıkları
|
|
544
|
-
kit.css'te, ayrı bir dosyada: tam olarak bir parite kapısı gerektiren şey.
|
|
545
|
-
tamga:kit-acik */
|
|
546
364
|
@theme static {
|
|
547
365
|
|
|
548
|
-
|
|
549
|
-
/* 1 · neutral ramp — cooled off, one step per layer */
|
|
550
|
-
/* The ground everything sits on. The rail and the band share it: what divides
|
|
551
|
-
them is a 1px line, never a fill.
|
|
552
|
-
TR: Her şeyin üstünde durduğu zemin. Ray ve şerit de aynı zemini kullanıyor: onları
|
|
553
|
-
ayıran şey 1px'lik bir çizgi, asla bir dolgu. */
|
|
554
366
|
--color-page: #f5f2ec;
|
|
555
|
-
|
|
556
|
-
page on purpose; the edge does the lifting.
|
|
557
|
-
TR: Yükseltilmiş yüzey: kartlar, katmanlar, balonlar. Sayfadan bilerek çok az açık;
|
|
558
|
-
yükseltmeyi kenar yapıyor. */
|
|
367
|
+
|
|
559
368
|
--color-shell: #fdfcfa;
|
|
560
|
-
|
|
561
|
-
sunk, different job.
|
|
562
|
-
TR: İmlecin altındaki satır, ve seçili satırın nötr yıkaması. Gömülü ile aynı değer,
|
|
563
|
-
farklı iş. */
|
|
369
|
+
|
|
564
370
|
--color-hover: #eceae6;
|
|
565
|
-
|
|
566
|
-
page, separated by a line.
|
|
567
|
-
TR: Tablonun üstündeki şerit: sayaçlar, sayfa boyu, özet satırları. Sayfanın
|
|
568
|
-
kendisi, bir çizgiyle ayrılmış. */
|
|
371
|
+
|
|
569
372
|
--color-band: #f5f2ec;
|
|
570
|
-
|
|
571
|
-
second surface competing with the content.
|
|
572
|
-
TR: Gezinme rayı. O da sayfa: kendini dolduran bir kenar çubuğu, içerikle yarışan
|
|
573
|
-
ikinci bir yüzeye dönüşüyor. */
|
|
373
|
+
|
|
574
374
|
--color-rail: #f5f2ec;
|
|
575
|
-
|
|
576
|
-
headers, code blocks, sub-panels.
|
|
577
|
-
TR: Sayfanın üstünde değil İÇİNDE duran içerik: filtre çubukları, tablo başlıkları,
|
|
578
|
-
kod blokları, alt paneller. */
|
|
375
|
+
|
|
579
376
|
--color-sunk: #eceae6;
|
|
580
|
-
|
|
581
|
-
TR: tek çizgi rengi: ayraçlar ve kart kenarları */
|
|
377
|
+
|
|
582
378
|
--color-line: #e2ded6;
|
|
583
|
-
|
|
584
|
-
the page, just under the floor of 10 where a raised surface stops reading as
|
|
585
|
-
raised. check-token-contrast now measures it here too, and reproduces that
|
|
586
|
-
same 9.8, which is how we know the two gates share one arithmetic.
|
|
587
|
-
TR: #d9d6d1'den koyulaştırıldı: v5'in kontrast kapısı sayfaya karşı ΔL* 9.8
|
|
588
|
-
ölçmüştü, yükseltilmiş bir yüzeyin yükseltilmiş okunmayı bıraktığı 10 tabanının
|
|
589
|
-
hemen altında. check-token-contrast artık burada da ölçüyor ve aynı 9.8'i üretiyor;
|
|
590
|
-
iki kapının tek bir aritmetiği paylaştığını böyle biliyoruz. */
|
|
379
|
+
|
|
591
380
|
--color-edge: #d2cec8;
|
|
592
|
-
|
|
593
|
-
TR: grafiğin altındaki nötr dolgu: alan gövdesi, kıvılcım çizgisi yıkaması */
|
|
381
|
+
|
|
594
382
|
--color-chart-fill: #eceae6;
|
|
595
|
-
|
|
596
|
-
measured 4.41 against --color-sunk and --color-hover, under the 4.5 floor, so
|
|
597
|
-
secondary text on a filter bar, a table header or a hovered row was failing
|
|
598
|
-
while the same colour passed on the page. Nobody saw it: it fails by 0.09.
|
|
599
|
-
Darkened one step to clear 4.5 on every surface it can land on (4.54 on sunk,
|
|
600
|
-
4.89 on the page, 5.32 on a card). check-token-contrast measures it now.
|
|
601
|
-
TR: Açılmış metin, ve her metin gibi AA'ya cevap veriyor. #716b5d'ydi; --color-sunk
|
|
602
|
-
ve --color-hover'a karşı 4.41 ölçüldü, 4.5 tabanının altında, yani bir filtre
|
|
603
|
-
çubuğundaki ya da tablo başlığındaki ikincil metin, aynı renk sayfada geçerken orada
|
|
604
|
-
kalıyordu. */
|
|
383
|
+
|
|
605
384
|
--color-ink-faint: #6f695b;
|
|
606
|
-
|
|
607
|
-
heading without competing with it.
|
|
608
|
-
TR: İkinci ağırlık: etiketler, ikincil satırlar, başlıkla yarışmadan onu destekleyen
|
|
609
|
-
her şey. */
|
|
385
|
+
|
|
610
386
|
--color-ink-soft: #453f34;
|
|
611
|
-
|
|
612
|
-
on first.
|
|
613
|
-
TR: En ağır ağırlık: başlıklar, tablo değerleri, gözün ilk konması gereken her şey. */
|
|
387
|
+
|
|
614
388
|
--color-ink: #26221a;
|
|
615
389
|
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
colour, and every product primary worth comparing sits at L* 46–62. A
|
|
620
|
-
near-black face leaves no room for a base under it, which is why the offset
|
|
621
|
-
kept having to escape upward. The navy moved to the base, and the face
|
|
622
|
-
sits at L* 45 carrying white ink: 29 ΔL* between the two layers. */
|
|
623
|
-
--color-accent: #2069c9; /* primary fill TR: birincil dolgu */
|
|
624
|
-
--color-accent-hover: #005ab5; /* darkens, not lightens; white ink needs it TR: açılmaz, koyulaşır; beyaz mürekkep bunu istiyor */
|
|
625
|
-
/* The pressed face. It keeps going in the same direction as hover: darker in
|
|
626
|
-
light, brighter in dark.
|
|
627
|
-
TR: Basılı yüz. Üzerine gelmeyle aynı yönde devam ediyor: açıkta daha koyu, koyuda
|
|
628
|
-
daha parlak. */
|
|
390
|
+
--color-accent: #2069c9;
|
|
391
|
+
--color-accent-hover: #005ab5;
|
|
392
|
+
|
|
629
393
|
--color-accent-active: #004c9b;
|
|
630
|
-
--color-accent-ink: #fdfcfa;
|
|
631
|
-
--color-accent-line: #12245c;
|
|
632
|
-
--color-accent-bg: #ecedf3;
|
|
633
|
-
|
|
634
|
-
navy belongs: dark, saturated, and doing the job a shadow is supposed to do
|
|
635
|
-
instead of pretending to be a fill.
|
|
636
|
-
TR: Yüzün üstüne oturduğu taban, ve birincilin kenarı. Marka lacivertinin yeri
|
|
637
|
-
burası: koyu, doygun, ve bir dolgu taklidi yapmak yerine bir gölgenin yapması
|
|
638
|
-
gereken işi yapıyor. */
|
|
394
|
+
--color-accent-ink: #fdfcfa;
|
|
395
|
+
--color-accent-line: #12245c;
|
|
396
|
+
--color-accent-bg: #ecedf3;
|
|
397
|
+
|
|
639
398
|
--color-accent-shadow: #12245c;
|
|
640
399
|
|
|
641
|
-
/* 3 · status — healthy green, silenced neutral */
|
|
642
|
-
/* Something is broken and someone has to act. The only red in the system, and
|
|
643
|
-
it never decorates.
|
|
644
|
-
TR: Bir şey bozuldu ve birinin harekete geçmesi gerekiyor. Sistemdeki tek kırmızı,
|
|
645
|
-
ve asla süslemiyor. */
|
|
646
400
|
--color-critical: #b3341f;
|
|
647
|
-
|
|
648
|
-
text of its own.
|
|
649
|
-
TR: Kritik bir çipin ya da satırın arkasındaki yıkama. Bir dolgu değil bir ton:
|
|
650
|
-
kendi metnini taşımıyor. */
|
|
401
|
+
|
|
651
402
|
--color-critical-bg: #fbeae4;
|
|
652
|
-
|
|
653
|
-
stock running low.
|
|
654
|
-
TR: Henüz bozulmadı ama o yöne gidiyor. Aşılan bir eşik, büyüyen bir kuyruk, azalan
|
|
655
|
-
bir stok. */
|
|
403
|
+
|
|
656
404
|
--color-warn: #8a5a0b;
|
|
657
|
-
|
|
658
|
-
TR: Uyarı çipinin ya da satırının arkasındaki yıkama. */
|
|
405
|
+
|
|
659
406
|
--color-warn-bg: #fbf1dd;
|
|
660
|
-
|
|
661
|
-
not have to learn two.
|
|
662
|
-
TR: Sağlıklı, ve aynı zamanda çözüldü. İkisi için tek yeşil, çünkü okuyanın iki renk
|
|
663
|
-
öğrenmesi gerekmemeli. */
|
|
407
|
+
|
|
664
408
|
--color-resolved: #0a7a5f;
|
|
665
|
-
|
|
666
|
-
TR: Sağlıklı ya da çözülmüş bir çipin arkasındaki yıkama. */
|
|
409
|
+
|
|
667
410
|
--color-resolved-bg: #e3f3ec;
|
|
668
|
-
|
|
669
|
-
is documented against: silent on chart-fill measured 4.41:1, under AA. It
|
|
670
|
-
passed on the card (5.17:1), which is why it went unnoticed: the healthy
|
|
671
|
-
and paused chips are the only place the pair actually meets. Darkened to
|
|
672
|
-
clear the wash (5.02:1) while staying clearly the muted tone. It no longer
|
|
673
|
-
tracks ink-faint, which is correct: they are different roles.
|
|
674
|
-
TR: #716b5d'ydi, ink-faint ile aynı değer, ve belgelendiği tek zeminde kalıyordu:
|
|
675
|
-
chart-fill üstünde 4.41:1, AA'nın altında. Kartta geçiyordu (5.17:1), fark
|
|
676
|
-
edilmemesinin sebebi de bu. */
|
|
411
|
+
|
|
677
412
|
--color-silent: #696256;
|
|
678
413
|
|
|
679
|
-
/* Instrument scale marks: the progress dial's ticks. NOT --color-edge: a tick is
|
|
680
|
-
READ, so it answers to a floor (visible on card, page AND the sunk wash), never
|
|
681
|
-
to the rule line's deliberate softness. On --color-sunk the edge measured ΔL* 7.0
|
|
682
|
-
against a floor of 12.
|
|
683
|
-
TR: Gösterge ölçek işaretleri: ilerleme kadranının çentikleri. --color-edge DEĞİL:
|
|
684
|
-
bir çentik OKUNUR, yani çizginin bilerek seçilmiş yumuşaklığına değil bir tabana
|
|
685
|
-
cevap verir (kartta, sayfada VE gömülü yıkamada görünecek). */
|
|
686
414
|
--color-tick: #bdb8ae;
|
|
687
415
|
|
|
688
|
-
/* Categorical series: data that is NOT a status (regions, plans, series).
|
|
689
|
-
Quieter than the status palette on purpose: C* 26 against status's 36–65, so a
|
|
690
|
-
chart can never out-shout an event. Hues avoid critical's red and resolved's
|
|
691
|
-
green, the two a reader would most easily misread on a line.
|
|
692
|
-
TR: Kategorik seriler: durum OLMAYAN veri (bölgeler, planlar, seriler). Durum
|
|
693
|
-
paletinden bilerek daha sessiz: durumun 36–65'ine karşı C* 26, yani bir grafik bir
|
|
694
|
-
olayın sesini asla bastıramıyor. */
|
|
695
416
|
--color-chart-1: #887c4f;
|
|
696
|
-
|
|
697
|
-
never mistaken for a status.
|
|
698
|
-
TR: Deniz mavisi, ikinci seri. Çözüldü yeşilinden, bir çizginin durum sanılmayacağı
|
|
699
|
-
kadar uzak. */
|
|
417
|
+
|
|
700
418
|
--color-chart-2: #32888a;
|
|
701
|
-
|
|
702
|
-
TR: Mavi, üçüncü seri. */
|
|
419
|
+
|
|
703
420
|
--color-chart-3: #4782a5;
|
|
704
|
-
|
|
705
|
-
TR: Mor, dördüncü seri. */
|
|
421
|
+
|
|
706
422
|
--color-chart-4: #7f76a2;
|
|
707
|
-
|
|
708
|
-
and a legend stops helping.
|
|
709
|
-
TR: Gül, beşinci ve sonuncu. Beşten sonra göz serileri ayırmayı bırakıyor ve bir
|
|
710
|
-
gösterge artık yardım etmiyor. */
|
|
423
|
+
|
|
711
424
|
--color-chart-5: #a36c84;
|
|
712
425
|
|
|
713
|
-
/* rail navigation */
|
|
714
|
-
/* An idle rail label is TEXT, so it answers to AA. Was #8a857a: 3.29 against the
|
|
715
|
-
rail, while dark's counterpart sat at 5.42, and the asymmetry was the tell that
|
|
716
|
-
light had never been measured. Now L* 46, the same band as --color-ink-faint,
|
|
717
|
-
which is what a faint label should be.
|
|
718
|
-
TR: Boştaki bir ray etiketi METİNDİR, yani AA'ya cevap verir. #8a857a'ydı: raya
|
|
719
|
-
karşı 3.29, koyudaki karşılığı 5.42'de dururken. Bu asimetri, açığın hiç
|
|
720
|
-
ölçülmediğinin işaretiydi. */
|
|
721
426
|
--color-nav-idle: #726d62;
|
|
722
|
-
|
|
723
|
-
dark: the label steps toward the reader.
|
|
724
|
-
TR: İmlecin altındaki ray öğesi. Açıkta boştakinden koyu, koyuda daha parlak: etiket
|
|
725
|
-
okuyana doğru bir adım atıyor. */
|
|
427
|
+
|
|
726
428
|
--color-nav-hover: #4a4438;
|
|
727
|
-
|
|
728
|
-
instead, never this fill.
|
|
729
|
-
TR: Üzerine gelinen ray öğesinin arkasındaki yıkama. Bulunulan öğe bunun yerine bir
|
|
730
|
-
dış çizgi alıyor, asla bu dolguyu. */
|
|
429
|
+
|
|
731
430
|
--color-nav-hover-bg: #eae6dd;
|
|
732
431
|
|
|
733
|
-
/* overlay plane: dropdowns, popovers, dialogs, toasts
|
|
734
|
-
TR: katman düzlemi: açılır listeler, balonlar, diyaloglar, bildirimler */
|
|
735
432
|
--color-scrim: rgba(38, 34, 26, 0.32);
|
|
736
433
|
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
*
|
|
746
|
-
* Each step has ONE job. Pick by role, never by how it looks in the
|
|
747
|
-
* spot you happen to be in.
|
|
748
|
-
* ---------------------------------------------------------------- */
|
|
749
|
-
--text-micro: 10px; /* axis ticks, scale ends, the smallest label TR: eksen çentikleri, ölçek uçları, en küçük etiket */
|
|
750
|
-
--text-caption: 11px; /* dense mono identifiers, chip text TR: sık eşaralıklı kimlikler, çip metni */
|
|
751
|
-
--text-small: 12px; /* meta, secondary, table sub-lines TR: üstveri, ikincil satırlar, tablo alt satırları */
|
|
752
|
-
--text-body: 13px; /* THE default: rows, cells, body copy TR: VARSAYILAN: satırlar, hücreler, gövde metni */
|
|
753
|
-
--text-control: 14px; /* inputs, textareas, larger body TR: girdiler, metin alanları, daha büyük gövde */
|
|
754
|
-
--text-subhead: 15px; /* card and section titles TR: kart ve bölüm başlıkları */
|
|
755
|
-
--text-title: 18px; /* page titles TR: sayfa başlıkları */
|
|
756
|
-
/* The small display step: a card's hero number, a score.
|
|
757
|
-
TR: Küçük gösterim adımı: bir kartın öne çıkan sayısı, bir puan. */
|
|
434
|
+
--text-micro: 10px;
|
|
435
|
+
--text-caption: 11px;
|
|
436
|
+
--text-small: 12px;
|
|
437
|
+
--text-body: 13px;
|
|
438
|
+
--text-control: 14px;
|
|
439
|
+
--text-subhead: 15px;
|
|
440
|
+
--text-title: 18px;
|
|
441
|
+
|
|
758
442
|
--text-display-sm: 24px;
|
|
759
|
-
--text-display: 30px;
|
|
760
|
-
|
|
761
|
-
TR: En büyük adım, ve en nadiri. Ekran başına en fazla bir tane. */
|
|
443
|
+
--text-display: 30px;
|
|
444
|
+
|
|
762
445
|
--text-display-lg: 40px;
|
|
763
446
|
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
--
|
|
769
|
-
|
|
770
|
-
--
|
|
771
|
-
|
|
772
|
-
/* ---------------------------------------------------------------- *
|
|
773
|
-
* Shape. One knob, and everything derives from it.
|
|
774
|
-
*
|
|
775
|
-
* Written as a calc scale rather than two loose numbers so "make the
|
|
776
|
-
* product a little softer" stays a one-line edit — v5 inherits the
|
|
777
|
-
* same single-knob structure, and matching it means the values port
|
|
778
|
-
* without redesigning anything.
|
|
779
|
-
*
|
|
780
|
-
* The VALUE is a deliberate departure. v5 carries --radius: 12px with
|
|
781
|
-
* a note pointing at the brand DNA's "soft corners"; this product went
|
|
782
|
-
* the other way on purpose. It is an instrument read at 3am, and a
|
|
783
|
-
* dense table of rows reads faster with corners that stop rather than
|
|
784
|
-
* curve. Recorded as a knowing deviation, not an oversight — the same
|
|
785
|
-
* way v5 records its own amber beacon as one.
|
|
786
|
-
* ---------------------------------------------------------------- */
|
|
787
|
-
|
|
788
|
-
/* aliases kept so call sites read by ROLE rather than by size */
|
|
789
|
-
|
|
790
|
-
/* ---------------------------------------------------------------- *
|
|
791
|
-
* Motion. Durations and curves are tokens for exactly the reason
|
|
792
|
-
* colours are: written inline they drift. Before this block existed
|
|
793
|
-
* the kit held 16 hand-written values doing four jobs, and they had
|
|
794
|
-
* already scattered — a toast appeared in 200ms, a progress bar moved
|
|
795
|
-
* in 240ms, a route revealed in 340ms. Nobody could point at a line
|
|
796
|
-
* and call it wrong; it just felt uneven.
|
|
797
|
-
*
|
|
798
|
-
* --press is its own step and the smallest on purpose: a control that
|
|
799
|
-
* answers a click in 100ms feels mechanical, which is the whole point
|
|
800
|
-
* of a hard-offset button. Anything slower reads as lag.
|
|
801
|
-
* ---------------------------------------------------------------- */
|
|
802
|
-
--duration-press: 100ms; /* hover, press, focus: every control TR: üzerine gelme, basma, odak: her kontrol */
|
|
803
|
-
|
|
804
|
-
--ease-standard: cubic-bezier(0.22, 1, 0.36, 1); /* everything that enters or moves TR: giren ya da hareket eden her şey */
|
|
805
|
-
|
|
806
|
-
/* Loops. Long by design, and the only things allowed past --duration-slow.
|
|
807
|
-
`--duration-spin` and `--ease-linear` lived here for the old CSS `.tamga-spinner`, a rotating
|
|
808
|
-
ring. The kit's spinner is three marching bars (ui/spinner.tsx) — nothing in this product
|
|
809
|
-
rotates any more, so both went with it.
|
|
810
|
-
TR: Döngüler. Bilerek uzun, ve --duration-slow'u geçmesine izin verilen tek şeyler. */
|
|
447
|
+
--measure-tight: 36ch;
|
|
448
|
+
--measure: 54ch;
|
|
449
|
+
--measure-wide: 70ch;
|
|
450
|
+
|
|
451
|
+
--duration-press: 100ms;
|
|
452
|
+
|
|
453
|
+
--ease-standard: cubic-bezier(0.22, 1, 0.36, 1);
|
|
454
|
+
|
|
811
455
|
--duration-bar: 900ms;
|
|
812
456
|
}
|