tabalyst 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1,411 @@
1
+ :root,
2
+ :root[data-theme="dark"] {
3
+ color-scheme: dark;
4
+ --font-title: "Oswald", "Arial Narrow", sans-serif;
5
+ --font-body: "Roboto", Arial, sans-serif;
6
+ --font-mono: Consolas, "Courier New", monospace;
7
+ --font-hand: "Caveat", cursive;
8
+ --canvas: #070a18;
9
+ --surface: #0d1228;
10
+ --surface-soft: #131a33;
11
+ --surface-hover: #18213e;
12
+ --text: #eef0f7;
13
+ --heading: #ffffff;
14
+ --muted: #a7afc4;
15
+ --border: #29314f;
16
+ --accent: #f98510;
17
+ --accent-ink: #00051a;
18
+ --danger: #bf211e;
19
+ --success: #0e9f8e;
20
+ --concept: #7652d4;
21
+ --interactive: #7652d4;
22
+ --interactive-ink: #ffffff;
23
+ --link: #ffad5c;
24
+ --band: #00051a;
25
+ --field: #101730;
26
+ --shadow: #00000066;
27
+ --report-name-column: 220px;
28
+ --bs-body-font-family: var(--font-body);
29
+ --bs-body-color: var(--text);
30
+ --bs-body-bg: var(--canvas);
31
+ --bs-link-color: var(--link);
32
+ --bs-link-hover-color: #ffad5c;
33
+ --bs-border-color: var(--border);
34
+ --bs-secondary-color: var(--muted);
35
+ --bs-tertiary-bg: var(--surface-soft);
36
+ }
37
+
38
+ :root[data-theme="light"] {
39
+ color-scheme: light;
40
+ --canvas: #ffffff;
41
+ --surface: #ffffff;
42
+ --surface-soft: #f4f5f9;
43
+ --surface-hover: #f8f3ed;
44
+ --text: #1a1f36;
45
+ --heading: #050032;
46
+ --muted: #687086;
47
+ --border: #d9dce6;
48
+ --concept: #3a0ca3;
49
+ --interactive: #3a0ca3;
50
+ --interactive-ink: #ffffff;
51
+ --link: #3a0ca3;
52
+ --field: #ffffff;
53
+ --shadow: #00051a1f;
54
+ }
55
+
56
+ * { box-sizing: border-box; letter-spacing: 0; }
57
+ html { background: var(--canvas); scroll-behavior: smooth; }
58
+ body { margin: 0; font-family: var(--font-body); color: var(--text); background: var(--canvas); font-size: 14px; }
59
+ a { color: var(--link); }
60
+ code, pre, kbd, samp { font-family: var(--font-mono); }
61
+ .report-container { width: min(1180px, calc(100% - 64px)); margin: 0 auto; }
62
+
63
+ .app-shell { display: flex; align-items: stretch; min-height: 100vh; }
64
+ .sidebar { position: sticky; top: 0; align-self: flex-start; width: 240px; height: 100dvh; flex: 0 0 240px; border-right: 1px solid #252c49; background: var(--band); color: #ffffff; }
65
+ .topbar-inner { display: flex; height: 100%; flex-direction: column; align-items: stretch; gap: 34px; padding: 28px 22px; }
66
+ .brand { display: inline-flex; gap: 9px; align-items: center; color: #ffffff; text-decoration: none; font-family: var(--font-title); font-weight: 600; font-size: 19px; }
67
+ .brand-mark { display: grid; place-items: center; width: 32px; height: 32px; background: var(--accent); color: var(--accent-ink); font-family: var(--font-title); font-size: 19px; border-radius: 4px; }
68
+ .sidebar nav { display: flex; flex-direction: column; gap: 3px; }
69
+ .sidebar .nav-label { margin: 14px 0 4px; color: #7f8aaf; font-family: var(--font-title); font-size: 11px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; }
70
+ .sidebar .nav-label:first-child { margin-top: 0; }
71
+ .sidebar nav a { position: relative; display: flex; align-items: center; min-height: 36px; padding: 7px 9px 7px 27px; border-radius: 6px; color: #c9ccda; font-size: 12px; font-weight: 500; text-decoration: none; }
72
+ .sidebar nav a::before { position: absolute; left: 10px; width: 7px; height: 7px; border: 1px solid currentColor; border-radius: 2px; content: ""; }
73
+ .sidebar .nav-count { margin-left: 3px; color: #7f8aaf; font: inherit; font-weight: 400; }
74
+ .sidebar nav a:hover .nav-count, .sidebar nav a:focus-visible .nav-count { color: #a7afc4; }
75
+ .sidebar nav a:hover, .sidebar nav a:focus-visible { background: #151d3c; color: #ffffff; outline: none; }
76
+ .topbar-actions { display: flex; margin-top: auto; align-items: center; justify-content: space-between; gap: 12px; }
77
+ .theme-toggle { display: grid; place-items: center; width: 34px; height: 34px; padding: 0; border: 1px solid #3b4260; border-radius: 4px; background: #0c1229; color: #ffffff; cursor: pointer; font-size: 18px; }
78
+ .theme-toggle:hover, .theme-toggle:focus-visible { border-color: var(--accent); outline: none; }
79
+ .report-page { min-width: 0; flex: 1; }
80
+ .report-content { width: 100%; min-height: calc(100vh - 73px); margin: 0; padding-inline: 32px; }
81
+
82
+ .report-section { padding: 32px 0; border-bottom: 1px solid var(--border); scroll-margin-top: 20px; }
83
+ .report-details { position: relative; padding-block: 24px; border-bottom: 1px solid var(--border); scroll-margin-top: 20px; }
84
+ .report-details:first-child { padding-top: 0; }
85
+ .report-details:last-child { border-bottom: 0; padding-bottom: 0; }
86
+ .report-details > summary { display: inline-flex; align-items: center; gap: 8px; width: fit-content; max-width: calc(100% - 76px); min-height: 31px; color: var(--heading); cursor: pointer; font-family: var(--font-title); font-size: 19px; font-weight: 600; line-height: 1.4; list-style: none; }
87
+ .report-details > summary::-webkit-details-marker { display: none; }
88
+ .report-details > summary::before { width: 9px; height: 9px; flex: 0 0 9px; border-right: 2px solid var(--heading); border-bottom: 2px solid var(--heading); content: ""; transform: rotate(-45deg); transform-origin: center; transition: transform 120ms ease-out; }
89
+ .report-details[open] > summary::before { transform: rotate(45deg); }
90
+ .report-details[data-collapsing] > summary::before { transform: rotate(-45deg); }
91
+ .quality-details[open] > .overview-grid { margin-top: 18px; }
92
+ .secondary-details { margin-top: 0; }
93
+ .report-heading, .section-heading { display: flex; gap: 20px; justify-content: space-between; align-items: center; margin-bottom: 24px; }
94
+ .report-heading > div { min-width: 0; }
95
+ .eyebrow { margin: 0 0 5px; color: var(--concept); font-family: var(--font-hand); font-size: 21px; font-weight: 500; }
96
+ h1, h2, summary, .table thead th, .number-filter-title { color: var(--heading); font-family: var(--font-title); }
97
+ h1 { font-size: 32px; line-height: 1.2; font-weight: 600; margin: 0 0 10px; overflow-wrap: anywhere; }
98
+ h2 { font-size: 19px; line-height: 1.4; font-weight: 600; margin: 0 0 16px; }
99
+ .section-heading h2 { margin: 0; }
100
+ .metadata, .muted { color: var(--muted); font-size: 12px; }
101
+ .metadata { margin: 0; overflow-wrap: anywhere; }
102
+ .metadata code { color: var(--text); }
103
+ .generation { text-align: right; font-size: 12px; white-space: nowrap; }
104
+ .generation time { display: block; margin-top: 6px; color: var(--muted); font-family: var(--font-mono); font-size: 11px; }
105
+ .status-dot { display: inline-block; background: var(--success); width: 7px; height: 7px; border-radius: 50%; margin-right: 5px; }
106
+
107
+ .metric-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border-block: 1px solid var(--border); margin: 0 0 32px; padding: 24px 0; }
108
+ .metric-grid > div { padding: 0 24px; border-left: 1px solid var(--border); min-width: 0; }
109
+ .metric-grid > div:first-child { padding-left: 0; border-left: 0; }
110
+ .metric-grid dt { color: var(--muted); font-family: var(--font-title); font-size: 13px; font-weight: 500; }
111
+ .metric-grid dd { color: var(--heading); font-family: var(--font-mono); font-size: 30px; font-weight: 700; line-height: 1.3; margin: 7px 0 4px; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
112
+ .metric-grid dd small { font-size: 18px; margin-left: 2px; }
113
+ .metric-grid span { color: var(--muted); font-size: 11px; display: block; }
114
+ .metric-grid .metric-warning { color: var(--danger); }
115
+
116
+ .overview-grid { display: grid; grid-template-columns: 1.5fr 1fr; gap: 60px; }
117
+ .overview-grid > div { min-width: 0; }
118
+ .section-count { color: var(--muted); font: inherit; font-weight: 400; }
119
+ .observations { list-style: none; margin: 0; padding: 0; }
120
+ .observations li { display: flex; gap: 10px; align-items: baseline; padding: 8px 0; border-bottom: 1px solid var(--border); font-size: 13px; }
121
+ .observations li:last-child { border-bottom: 0; }
122
+ .observations strong { margin-left: auto; font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
123
+ .observation-dot { width: 6px; height: 6px; border-radius: 50%; flex-shrink: 0; background: var(--danger); }
124
+ .observation-dot.info { background: var(--concept); }
125
+ .type-bar { height: 10px; display: flex; overflow: hidden; border-radius: 3px; margin-bottom: 16px; background: var(--surface-soft); }
126
+ .type-fill { height: 100%; }
127
+ .type-text { background: #7652d4; }
128
+ .type-integer { background: #4f7fe8; }
129
+ .type-number { background: #2f9cc1; }
130
+ .type-date { background: #0e9f8e; }
131
+ .type-boolean { background: #bf62aa; }
132
+ .type-mixed { background: var(--danger); }
133
+ .type-empty { background: #7d8498; }
134
+ .type-legend { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 24px; list-style: none; padding: 0; margin: 0; }
135
+ .type-legend li { display: flex; align-items: center; gap: 8px; font-size: 12px; }
136
+ .type-legend strong { margin-left: auto; font-family: var(--font-mono); }
137
+ .legend-dot { width: 8px; height: 8px; border-radius: 2px; }
138
+
139
+ .column-search { width: 230px; max-width: 100%; }
140
+ .form-control, .form-select { border-color: var(--border); background-color: var(--field); color: var(--text); }
141
+ .form-control::placeholder { color: var(--muted); opacity: 1; }
142
+ .form-control:focus, .form-select:focus { border-color: var(--border); background-color: var(--field); color: var(--text); box-shadow: 0 0 0 2px color-mix(in srgb, var(--interactive) 30%, transparent); }
143
+ .btn-outline-secondary { --bs-btn-color: var(--text); --bs-btn-border-color: var(--border); --bs-btn-hover-color: var(--interactive-ink); --bs-btn-hover-bg: var(--interactive); --bs-btn-hover-border-color: var(--interactive); --bs-btn-active-color: var(--interactive-ink); --bs-btn-active-bg: var(--interactive); --bs-btn-active-border-color: var(--interactive); }
144
+ .table-responsive { overflow-x: auto; max-width: 100%; }
145
+ .table { --bs-table-bg: transparent; --bs-table-color: var(--text); --bs-table-border-color: var(--border); --bs-table-hover-bg: var(--surface-hover); --bs-table-hover-color: var(--text); --bs-table-striped-bg: var(--surface-soft); --bs-table-striped-color: var(--text); margin-bottom: 0; }
146
+ .table thead th { color: var(--heading); background: var(--surface-soft); font-size: 13px; font-weight: 600; white-space: nowrap; padding-block: 11px; }
147
+ .table tbody th, .table tbody td { font-family: var(--font-mono); }
148
+ .column-table { min-width: 1080px; table-layout: fixed; font-size: 12px; }
149
+ .column-table thead th:nth-child(1) { width: var(--report-name-column) !important; }
150
+ .column-table thead th:nth-child(2) { width: 120px !important; max-width: 120px; }
151
+ .column-table thead th:nth-child(3) { width: 105px !important; max-width: 105px; }
152
+ .column-table thead th:nth-child(4), .column-table thead th:nth-child(5) { width: 135px !important; max-width: 135px; }
153
+ .column-table thead th:nth-child(6) { width: 115px !important; max-width: 115px; }
154
+ .column-table thead th:last-child { width: auto !important; }
155
+ .column-table tbody th, .column-table tbody td { padding-block: 13px; }
156
+ .column-table tbody th { font-weight: 700; overflow-wrap: anywhere; }
157
+ .column-index { display: inline-block; width: 26px; color: var(--muted); font-size: 10px; font-weight: 400; vertical-align: top; padding-top: 2px; }
158
+ .column-name { display: inline-block; max-width: calc(100% - 26px); }
159
+ .type-badge { display: inline-block; padding: 4px 8px; border: 0; border-radius: 4px; color: #d8ceff; background: color-mix(in srgb, var(--concept) 30%, transparent); font-family: var(--font-mono); font-size: 10px; font-weight: 700; }
160
+ :root[data-theme="light"] .type-badge { color: var(--concept); background: color-mix(in srgb, var(--concept) 9%, #ffffff); }
161
+ .badge-text { border-color: #7652d4; color: #d8ceff; background: #7652d433; }
162
+ .badge-integer { border-color: #4f7fe8; color: #bcd0ff; background: #4f7fe833; }
163
+ .badge-number { border-color: #2f9cc1; color: #aee8fb; background: #2f9cc133; }
164
+ .badge-date { border-color: #0e9f8e; color: #8ce1d6; background: #0e9f8e33; }
165
+ .badge-boolean { border-color: #bf62aa; color: #f0b9e4; background: #bf62aa33; }
166
+ .badge-mixed { border-color: color-mix(in srgb, var(--danger) 45%, transparent); color: #ffb8b6; background: color-mix(in srgb, var(--danger) 25%, transparent); }
167
+ :root[data-theme="light"] .badge-mixed { color: #8f1715; background: #fae7e7; }
168
+ .badge-empty { border-color: var(--border); color: var(--muted); background: var(--surface-soft); }
169
+ :root[data-theme="light"] .badge-text { border-color: #7652d4; color: #3a0ca3; background: #f0ebff; }
170
+ :root[data-theme="light"] .badge-integer { border-color: #4f7fe8; color: #234f9f; background: #e9f0ff; }
171
+ :root[data-theme="light"] .badge-number { border-color: #2f9cc1; color: #14637e; background: #e4f5fa; }
172
+ :root[data-theme="light"] .badge-date { border-color: #0e9f8e; color: #087c70; background: #e1f6f2; }
173
+ :root[data-theme="light"] .badge-boolean { border-color: #bf62aa; color: #83336f; background: #faeaf6; }
174
+ .semantic-separator { display: inline-block; margin: 0 4px; color: var(--muted); }
175
+ .semantic-badge { border-color: color-mix(in srgb, var(--concept) 65%, transparent); }
176
+ .semantic-enum { border-color: #9b7dea; color: #ded4ff; background: #7652d426; }
177
+ .semantic-date { border-color: #35bbaa; color: #9de8de; background: #0e9f8e26; }
178
+ :root[data-theme="light"] .semantic-enum { border-color: #7652d4; color: #3a0ca3; background: #f3efff; }
179
+ :root[data-theme="light"] .semantic-date { border-color: #0e9f8e; color: #087c70; background: #e8f8f5; }
180
+ .missing-value { display: flex; gap: 6px; justify-content: space-between; font-size: 11px; font-variant-numeric: tabular-nums; }
181
+ .missing-value small { color: var(--muted); }
182
+ .missing-track { height: 3px; margin-top: 5px; border-radius: 2px; background: var(--surface-soft); }
183
+ .missing-track div { height: 100%; background: var(--danger); border-radius: 2px; }
184
+ .percentage-value { display: flex; gap: 6px; justify-content: space-between; font-size: 11px; font-variant-numeric: tabular-nums; }
185
+ .percentage-value small { color: var(--muted); font: inherit; }
186
+ .percentage-track { height: 3px; margin-top: 5px; border-radius: 2px; background: var(--surface-soft); }
187
+ .percentage-track div { height: 100%; border-radius: 2px; }
188
+ .percentage-track.track-danger div { background: var(--danger); }
189
+ .percentage-track.track-concept div { background: var(--concept); }
190
+ .percentage-track.track-success div { background: var(--success); }
191
+ .percentage-track.track-accent div { background: var(--accent); }
192
+ .percentage-track.track-muted div { background: var(--muted); }
193
+ .table th.percentage-column, .table td.percentage-column,
194
+ .table th.dt-type-numeric, .table td.dt-type-numeric { padding-right: 28px !important; }
195
+ .tabular { font-variant-numeric: tabular-nums; }
196
+ .examples { position: relative; color: var(--muted); outline: none; }
197
+ .examples:focus-visible { box-shadow: inset 0 0 0 1px var(--interactive); }
198
+ .example-value { display: inline; overflow-wrap: anywhere; }
199
+ .example-value + .example-value::before { content: " / "; color: var(--border); }
200
+ .example-more { display: inline-block; margin-left: 7px; padding: 1px 5px; border: 1px solid var(--border); border-radius: 3px; color: var(--muted); font: 10px var(--font-mono); line-height: 1.4; }
201
+ .examples:hover .example-more, .examples:focus-within .example-more { border-color: var(--interactive); color: var(--heading); }
202
+ .examples-tooltip, .date-formats-tooltip { position: fixed; z-index: 1060; display: none; width: min(380px, calc(100vw - 24px)); max-height: min(420px, calc(100dvh - 24px)); overflow: hidden; border: 1px solid var(--border); border-radius: 5px; background: var(--surface-soft); box-shadow: 0 5px 18px var(--shadow); color: var(--text); font-family: var(--font-mono); font-size: 11px; }
203
+ .examples:hover .examples-tooltip, .examples:focus-within .examples-tooltip,
204
+ .date-formats-cell:hover .date-formats-tooltip, .date-formats-cell:focus-within .date-formats-tooltip { display: block; }
205
+ .examples-tooltip-title { display: flex; justify-content: space-between; gap: 16px; padding: 7px 9px; border-bottom: 1px solid var(--border); color: var(--heading); font-family: var(--font-title); font-size: 12px; font-weight: 500; }
206
+ .examples-tooltip-title span { color: var(--muted); font: inherit; font-weight: 400; }
207
+ .examples-tooltip-list { max-height: min(380px, calc(100dvh - 64px)); overflow-y: auto; padding: 4px 0; scrollbar-width: thin; scrollbar-color: var(--muted) var(--surface-soft); }
208
+ .examples-tooltip-list > div { display: grid; grid-template-columns: minmax(0, 1fr) max-content; gap: 12px; padding: 4px 9px; }
209
+ .examples-tooltip-list > div + div { border-top: 1px solid color-mix(in srgb, var(--border) 55%, transparent); }
210
+ .examples-tooltip-list span { overflow-wrap: anywhere; }
211
+ .examples-tooltip-list small { color: var(--muted); font: inherit; font-variant-numeric: tabular-nums; }
212
+ .filter-result { margin-top: 12px; }
213
+ .table-actions { display: flex; align-items: center; gap: 12px; max-width: 100%; }
214
+ .table-reset { flex-shrink: 0; font-size: 12px; border-radius: 4px; }
215
+ .report-details > .details-actions { position: absolute; top: 24px; right: 0; min-height: 31px; align-items: center; }
216
+ .report-details:first-child > .details-actions { top: 0; }
217
+ .report-details:not([open]) > .details-actions, .report-details[data-collapsing] > .details-actions { display: none; }
218
+ .columns-details > summary { max-width: calc(100% - 320px); }
219
+ .columns-details > .table-actions { position: absolute; top: 0; right: 0; }
220
+ .columns-details:not([open]) > .table-actions, .columns-details[data-collapsing] > .table-actions { display: none; }
221
+ .columns-details > .table-responsive { margin-top: 18px; }
222
+ .secondary-table-wrap { margin-top: 10px; }
223
+ .transformations-table { min-width: 760px; table-layout: fixed; font-size: 12px; }
224
+ .transformations-table thead th:first-child { width: var(--report-name-column) !important; }
225
+ .transformations-table thead th:not(:first-child) { width: 135px !important; max-width: 150px; }
226
+ .transformations-table td { font-variant-numeric: tabular-nums; }
227
+ .date-table { min-width: 1030px; table-layout: fixed; }
228
+ .date-table thead th:first-child { width: var(--report-name-column) !important; }
229
+ .date-table thead th:nth-child(2) { width: 135px !important; max-width: 135px; }
230
+ .date-table thead th:nth-child(n+3):not(:last-child) { width: 115px !important; max-width: 115px; }
231
+ .date-table thead th:last-child { width: auto !important; }
232
+ .date-table tbody th, .date-table tbody td { font-family: var(--font-mono); font-size: 12px; }
233
+ .date-table td { font-variant-numeric: tabular-nums; }
234
+ .date-formats-cell { position: relative; outline: none; }
235
+ .date-formats-cell:focus-visible { box-shadow: inset 0 0 0 1px var(--interactive); }
236
+ .date-format-count { color: var(--muted); font-size: 11px; white-space: nowrap; }
237
+ .date-formats-cell:hover .date-format-count, .date-formats-cell:focus-within .date-format-count { color: var(--interactive); }
238
+ .date-formats-tooltip .date-breakdown-invalid { margin-top: 6px; padding-top: 8px; border-top: 2px solid var(--border) !important; }
239
+ .date-status { text-transform: none; }
240
+ .status-valid, .status-multiple_formats { border-color: color-mix(in srgb, var(--success) 55%, transparent); color: #83dfd2; background: color-mix(in srgb, var(--success) 20%, transparent); }
241
+ .status-mixed, .status-invalid { border-color: color-mix(in srgb, var(--danger) 45%, transparent); color: #ffb8b6; background: color-mix(in srgb, var(--danger) 25%, transparent); }
242
+ .status-ambiguous { border-color: color-mix(in srgb, var(--accent) 55%, transparent); color: var(--link); background: color-mix(in srgb, var(--accent) 16%, transparent); }
243
+ :root[data-theme="light"] .status-mixed, :root[data-theme="light"] .status-invalid { color: #8f1715; background: #fae7e7; }
244
+ :root[data-theme="light"] .status-ambiguous { color: #8a4700; background: #fff1e2; }
245
+ :root[data-theme="light"] .status-valid, :root[data-theme="light"] .status-multiple_formats { color: #087c70; background: #e1f6f2; }
246
+ .string-very_short { color: #8ce1d6; background: #0e9f8e33; }
247
+ .string-short { border-color: #2f9cc1; color: #aee8fb; background: #2f9cc133; }
248
+ .string-medium { color: #bcd0ff; background: #4f7fe833; }
249
+ .string-long { border-color: #7652d4; color: #d8ceff; background: #7652d433; }
250
+ .string-very_long { border-color: #bf62aa; color: #f0b9e4; background: #bf62aa33; }
251
+ :root[data-theme="light"] .string-very_short { color: #087c70; background: #e1f6f2; }
252
+ :root[data-theme="light"] .string-short { border-color: #2f9cc1; color: #14637e; background: #e4f5fa; }
253
+ :root[data-theme="light"] .string-medium { color: #234f9f; background: #e9f0ff; }
254
+ :root[data-theme="light"] .string-long { border-color: #7652d4; color: #3a0ca3; background: #f0ebff; }
255
+ :root[data-theme="light"] .string-very_long { border-color: #bf62aa; color: #83336f; background: #faeaf6; }
256
+
257
+ .dt-container { width: 100%; }
258
+ table.dataTable thead th { text-align: left !important; }
259
+ table.dataTable thead .dt-column-header { gap: 6px !important; align-items: center; justify-content: flex-start !important; text-align: left; }
260
+ table.dataTable thead > tr > th.dt-type-numeric .dt-column-header { flex-direction: row; justify-content: flex-start !important; }
261
+ table.dataTable > thead > tr > th { background: var(--surface-soft); }
262
+ table.dataTable .dt-column-title { flex-grow: 0 !important; text-align: left; overflow-wrap: anywhere; }
263
+ .dtcc { margin-left: 0; flex-shrink: 0; }
264
+ table.dataTable thead .dt-column-header > .dt-column-title { order: 1; }
265
+ table.dataTable thead .dt-column-header > span.dtcc { display: contents; }
266
+ table.dataTable thead .dtcc-button_dropdown { order: 2; }
267
+ table.dataTable thead .dtcc-button_order { order: 3; }
268
+ table.dataTable thead .dt-column-header:has(.dtcc-button_active) > .dt-column-title { color: var(--heading); text-decoration: underline; text-decoration-color: var(--interactive); text-decoration-thickness: 2px; text-underline-offset: 4px; }
269
+ table.dataTable thead .dtcc-button_order,
270
+ table.dataTable thead .dtcc-button_dropdown { opacity: 0 !important; transition: opacity 120ms ease; }
271
+ table.dataTable thead .dt-column-header:hover .dtcc-button_order,
272
+ table.dataTable thead .dt-column-header:hover .dtcc-button_dropdown,
273
+ table.dataTable thead .dt-column-header:focus-within .dtcc-button_order,
274
+ table.dataTable thead .dt-column-header:focus-within .dtcc-button_dropdown,
275
+ table.dataTable thead .dtcc-button_order.dtcc-button_active,
276
+ table.dataTable thead .dtcc-button_dropdown.dtcc-button_active { opacity: 1 !important; }
277
+ table.dataTable span.dtcc button.dtcc-button { color: var(--muted); }
278
+ table.dataTable span.dtcc button.dtcc-button_dropdown.dtcc-button_active,
279
+ table.dataTable span.dtcc button.dtcc-button_order.dtcc-button_active { --dtcc-button-icon_color: var(--interactive-ink); color: var(--interactive-ink); background: var(--interactive) !important; }
280
+
281
+ div.dtcc-dropdown { --filter-bg: var(--surface-soft); --filter-active: var(--interactive); position: fixed; z-index: 1050; max-width: min(340px, calc(100vw - 24px)); max-height: calc(100dvh - 24px); overflow: hidden; border: 1px solid var(--border); border-radius: 5px; background: var(--filter-bg); box-shadow: 0 5px 18px var(--shadow); color: var(--text); font-family: var(--font-body); font-size: 12px; }
282
+ div.dtcc-dropdown { --dtcc-list-buttons_background: var(--filter-bg); --dtcc-list-buttons_max-height: min(260px, calc(100dvh - 180px)); --dtcc-search-input_background-color: var(--field); --dtcc-search-input_background: var(--field); --dtcc-search-input_border: 1px solid var(--border); --dtcc-search-input_border-radius: 3px; --dtcc-search-input_padding: 3px 7px; padding: 0; }
283
+ div.dtcc-dropdown div.dtcc-dropdown-liner { position: relative; padding: 8px; background: var(--filter-bg); overflow: hidden; }
284
+ div.dtcc-dropdown button.dtcc-button span.dtcc-button-text { white-space: normal; overflow-wrap: anywhere; min-width: 0; }
285
+ div.dtcc-dropdown .dtcc-list { max-height: none; overflow: hidden; background: var(--filter-bg); }
286
+ div.dtcc-dropdown div.dtcc-list div.dtcc-list-controls { background: var(--filter-bg); padding: 0 0 6px; grid-template-columns: max-content 1fr; gap: 4px; }
287
+ div.dtcc-dropdown .dtcc-list .dtcc-list-buttons { max-height: min(260px, calc(100dvh - 180px)); overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--muted) var(--filter-bg); background: var(--filter-bg); }
288
+ div.dtcc-dropdown .dtcc-list .dtcc-list-buttons::-webkit-scrollbar { width: 5px; }
289
+ div.dtcc-dropdown .dtcc-list .dtcc-list-buttons::-webkit-scrollbar-thumb { background: var(--muted); border-radius: 3px; }
290
+ div.dtcc-dropdown .dtcc-list .dtcc-list-buttons button.dtcc-button { display: flex; align-items: center; gap: 8px; padding: 5px 6px; background: var(--filter-bg); color: var(--text); font-size: 12px; }
291
+ div.dtcc-dropdown .dtcc-list .dtcc-list-buttons button.dtcc-button span.dtcc-button-state { display: grid; place-items: center; order: -1; width: 16px; height: 16px; border: 1px solid var(--muted); border-radius: 3px; flex-shrink: 0; }
292
+ div.dtcc-dropdown .dtcc-list .dtcc-list-buttons button.dtcc-button_active span.dtcc-button-state { color: var(--interactive-ink); background: var(--interactive); border-color: var(--interactive); }
293
+ div.dtcc-dropdown div.dtcc-list div.dtcc-list-controls button.dtcc-list-selectAll,
294
+ div.dtcc-dropdown div.dtcc-list div.dtcc-list-controls button.dtcc-list-selectNone,
295
+ div.dtcc-dropdown button.dtcc-button_searchClear { display: inline-flex; align-items: center; width: auto; min-height: 24px; padding: 2px 6px; margin: 2px 4px 2px 0; border: 1px solid var(--border); border-radius: 3px; background: var(--filter-bg); color: var(--muted); font-size: 11px; line-height: 18px; box-shadow: none; }
296
+ div.dtcc-dropdown div.dtcc-list div.dtcc-list-controls button { justify-self: start; }
297
+ div.dtcc-dropdown button.dtcc-button_searchClear { margin: 0; }
298
+ div.dtcc-dropdown button.filter-clear { position: absolute; top: 8px; right: 8px; z-index: 1; }
299
+ div.dtcc-dropdown button.filter-clear:not(.filter-clear-active) { display: none !important; }
300
+ div.dtcc-dropdown button.dtcc-button_searchClear .dtcc-button-icon { width: 13px; margin-right: 4px; }
301
+ div.dtcc-dropdown button.dtcc-button_searchClear svg { width: 13px; height: 13px; }
302
+ div.dtcc-dropdown input, div.dtcc-dropdown select { font-family: var(--font-mono); font-size: 12px; height: 28px; min-height: 28px; max-width: 100%; min-width: 0; padding: 3px 7px; border: 1px solid var(--border); border-radius: 3px; background-color: var(--field); color: var(--text); box-shadow: none; }
303
+ div.dtcc-dropdown input:focus, div.dtcc-dropdown select:focus { border-color: var(--border); box-shadow: none; outline: 1px solid var(--interactive); outline-offset: 1px; }
304
+ div.dtcc-dropdown .dtcc-search { padding: 0; background: var(--filter-bg); }
305
+ div.dtcc-dropdown .dtcc-list-buttons button.dtcc-button:hover,
306
+ div.dtcc-dropdown .dtcc-list-controls button:hover,
307
+ div.dtcc-dropdown .number-operators button:hover { position: relative; z-index: 1; border-color: var(--border); box-shadow: inset 0 0 0 1px var(--interactive) !important; }
308
+ div.dtcc-dropdown button.dtcc-list-selectAll:hover,
309
+ div.dtcc-dropdown button.dtcc-list-selectNone:hover,
310
+ div.dtcc-dropdown button.dtcc-button_searchClear:hover { border-color: var(--border); box-shadow: inset 0 0 0 1px var(--interactive) !important; }
311
+ div.dtcc-dropdown button:focus-visible { outline: 2px solid var(--interactive); outline-offset: -2px; }
312
+ .number-filter { width: 224px; max-width: 100%; }
313
+ .number-filter-title { color: var(--heading); font-size: 12px; font-weight: 500; margin-bottom: 6px; }
314
+ .number-operators { display: grid; grid-template-columns: repeat(6, 1fr); margin-bottom: 8px; }
315
+ .number-operators button { height: 28px; border: 1px solid var(--border); border-right-width: 0; background: transparent; color: var(--text); font-family: var(--font-mono); font-size: 16px; line-height: 1; }
316
+ .number-operators button:first-child { border-radius: 3px 0 0 3px; }
317
+ .number-operators button:last-child { border-right-width: 1px; border-radius: 0 3px 3px 0; }
318
+ .number-operators button[aria-pressed="true"] { color: var(--interactive-ink); background: var(--interactive); font-weight: 700; }
319
+ .number-fields { display: flex; gap: 8px; }
320
+ .number-fields input { flex: 1; width: 0; }
321
+ .number-filter-error { font-size: 11px; color: var(--danger); margin-top: 6px; }
322
+ .filter-option-count { margin-left: 5px; color: var(--muted); font-family: var(--font-mono); font-size: 11px; font-variant-numeric: tabular-nums; }
323
+ .filter-drag-handle { position: relative; height: 26px; display: flex; align-items: center; justify-content: center; gap: 6px; border-bottom: 1px solid var(--border); color: var(--muted); background: var(--filter-bg); cursor: move; user-select: none; touch-action: none; font-size: 10px; text-transform: uppercase; }
324
+ .filter-drag-handle::before { content: "\22ee\22ee"; font-size: 15px; line-height: 1; letter-spacing: -3px; transform: rotate(90deg); }
325
+ .filter-drag-handle:hover { color: var(--text); }
326
+ .filter-drag-handle .filter-close { position: absolute; right: 3px; top: 2px; display: grid; place-items: center; width: 22px; height: 22px; padding: 0; border: 0; border-radius: 3px; background: transparent; color: var(--muted); cursor: pointer; font-size: 18px; line-height: 1; }
327
+ .filter-drag-handle .filter-close:hover { background: var(--surface-hover); color: var(--text); }
328
+ .filter-action-row { display: flex; min-height: 28px; align-items: center; gap: 12px; margin-bottom: 7px; padding-right: 72px; }
329
+ .filter-action-label { min-width: 0; overflow-wrap: anywhere; color: var(--heading); font-family: var(--font-title); font-size: 12px; font-weight: 500; }
330
+ .filter-action-row + .number-filter .number-filter-title { display: none; }
331
+
332
+ summary { width: fit-content; max-width: 100%; cursor: pointer; font-weight: 500; font-size: 14px; }
333
+ .numeric-table { table-layout: fixed; font-size: 12px; min-width: 700px; }
334
+ .numeric-table thead th:first-child { width: var(--report-name-column) !important; }
335
+ .numeric-table thead th:not(:first-child) { width: 120px !important; max-width: 120px; }
336
+ .numeric-table th { overflow-wrap: anywhere; }
337
+ .numeric-table td { font-variant-numeric: tabular-nums; }
338
+ .string-table { min-width: 1220px; table-layout: fixed; font-size: 12px; }
339
+ .string-table thead th:nth-child(1) { width: var(--report-name-column) !important; }
340
+ .string-table thead th:nth-child(2) { width: 125px !important; max-width: 125px; }
341
+ .string-table thead th:nth-child(n+3):not(:last-child) { width: 100px !important; max-width: 100px; }
342
+ .string-table thead th:last-child { width: auto !important; }
343
+ .string-table tbody th { overflow-wrap: anywhere; }
344
+ .string-table td { font-variant-numeric: tabular-nums; }
345
+ .length-examples { color: var(--muted); }
346
+ .length-examples-tooltip { width: min(460px, calc(100vw - 24px)); }
347
+ .length-tooltip-row { grid-template-columns: minmax(0, 1fr) 130px !important; align-items: center; }
348
+ .length-tooltip-copy { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
349
+ .length-tooltip-copy strong { color: var(--heading); }
350
+ .length-tooltip-copy span { color: var(--text); overflow-wrap: anywhere; }
351
+ .length-tooltip-frequency { min-width: 0; }
352
+ .sample-scroll { max-height: 390px; }
353
+ .sample-table { width: max-content; min-width: 100%; font-size: 12px; }
354
+ .sample-table th, .sample-table td { min-width: 72px; max-width: 220px; padding: 8px; overflow-wrap: anywhere; white-space: pre-wrap; }
355
+ .sample-table thead th { position: sticky; top: 0; z-index: 2; }
356
+ .sample-table .row-number { position: sticky; left: 0; min-width: 68px; width: 68px; background: var(--surface-soft); color: var(--muted); text-align: right; z-index: 1; }
357
+ .sample-table thead .row-number { z-index: 3; }
358
+ .settings-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px 40px; margin: 24px 0; font-size: 12px; }
359
+ .settings-grid dt { color: var(--heading); font-family: var(--font-title); font-weight: 500; margin-bottom: 4px; }
360
+ .settings-grid dd { margin: 0; color: var(--muted); overflow-wrap: anywhere; }
361
+ .source-hash { overflow-wrap: anywhere; }
362
+ .empty-state { color: var(--muted); padding: 16px 0; font-size: 13px; }
363
+
364
+ .footer { width: 100%; background: var(--band); color: #b8bdcf; }
365
+ .footer .report-container { width: 100%; margin: 0; padding-inline: 32px; }
366
+ .footer-inner { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 12px; padding-block: 24px; font-size: 11px; }
367
+ .footer-inner > span:first-child { color: #ffffff; font-family: var(--font-title); font-size: 14px; font-weight: 600; }
368
+ .footer a { color: #ffffff; }
369
+ .footer a:hover { color: #a9d8ff; }
370
+
371
+ @media (max-width: 800px) {
372
+ .app-shell { display: block; }
373
+ .sidebar { position: static; width: 100%; height: auto; border-right: 0; border-bottom: 1px solid #252c49; }
374
+ .topbar-inner { gap: 18px; padding: 18px 16px; }
375
+ .sidebar nav { flex-flow: row wrap; gap: 6px; }
376
+ .sidebar .nav-label { width: 100%; margin: 8px 0 1px; }
377
+ .sidebar nav a { min-height: 32px; padding: 6px 8px 6px 23px; }
378
+ .topbar-actions { margin-top: 0; }
379
+ }
380
+
381
+ @media (max-width: 700px) {
382
+ .report-container { width: calc(100% - 32px); }
383
+ .report-content { width: 100%; padding-inline: 16px; }
384
+ .footer .report-container { padding-inline: 16px; }
385
+ .report-heading { align-items: flex-start; flex-direction: column; gap: 12px; }
386
+ .generation { text-align: left; }
387
+ .generation time { display: inline; margin-left: 8px; }
388
+ .metric-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 24px; }
389
+ .metric-grid > div { padding: 0 12px; }
390
+ .metric-grid > div:nth-child(odd) { padding-left: 0; border-left: 0; }
391
+ .metric-grid dd { font-size: 27px; }
392
+ .overview-grid { grid-template-columns: 1fr; gap: 28px; }
393
+ .section-heading { align-items: flex-start; flex-wrap: wrap; gap: 12px; }
394
+ .table-actions { flex-wrap: wrap; }
395
+ .column-search { flex: 1; min-width: 170px; }
396
+ .settings-grid { grid-template-columns: 1fr; }
397
+ .report-section { padding-block: 26px; }
398
+ }
399
+
400
+ @media (prefers-reduced-motion: reduce) {
401
+ .report-details > summary::before { transition: none; }
402
+ }
403
+
404
+ @media print {
405
+ :root { color-scheme: light; --canvas: #ffffff; --surface: #ffffff; --surface-soft: #f4f5f9; --text: #1a1f36; --heading: #050032; --muted: #687086; --border: #d9dce6; }
406
+ .topbar, .theme-toggle, .column-search, .table-reset, .dtcc { display: none; }
407
+ .report-container { width: 100%; }
408
+ .table-responsive { overflow: visible; }
409
+ .sample-scroll { overflow: auto; }
410
+ .report-heading, .metric-grid { break-inside: avoid; }
411
+ }