@telemetryos/development-application-host-ui 1.6.0 → 1.7.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.
@@ -0,0 +1,446 @@
1
+ import { z } from 'zod';
2
+ import type { Bridge } from '@telemetryos/root-sdk/bridge';
3
+ import type { WeatherConditions, WeatherForecast } from '@telemetryos/root-sdk';
4
+ import type { Message } from './sdk-bridge';
5
+ type WeatherListener = () => void;
6
+ export declare function handleWeatherMessage(bridge: Bridge, message: Message): void;
7
+ export declare function getConditions(): WeatherConditions;
8
+ export declare function getDailyForecast(): WeatherForecast[];
9
+ export declare function getHourlyForecast(): WeatherForecast[];
10
+ export declare function setConditions(value: WeatherConditions): void;
11
+ export declare function setDailyForecast(value: WeatherForecast[]): void;
12
+ export declare function setHourlyForecast(value: WeatherForecast[]): void;
13
+ export declare function onWeatherChange(listener: WeatherListener): () => void;
14
+ export declare function resetWeatherToDefaults(units?: UnitSystem): void;
15
+ export declare function getUnits(): UnitSystem;
16
+ export declare function setUnits(units: UnitSystem): void;
17
+ export declare function convertAllWeatherData(fromUnit: UnitSystem, toUnit: UnitSystem): void;
18
+ export declare const WeatherConditionsSchema: z.ZodObject<{
19
+ CityEnglish: z.ZodString;
20
+ CityLocalized: z.ZodString;
21
+ CountryCode: z.ZodString;
22
+ Latitude: z.ZodNumber;
23
+ Longitude: z.ZodNumber;
24
+ Pod: z.ZodString;
25
+ Precip: z.ZodNumber;
26
+ Pressure: z.ZodNumber;
27
+ RelativeHumidity: z.ZodNumber;
28
+ State: z.ZodString;
29
+ Temp: z.ZodNumber;
30
+ Timestamp: z.ZodNumber;
31
+ Timezone: z.ZodString;
32
+ Visibility: z.ZodNumber;
33
+ WeatherCode: z.ZodString;
34
+ WeatherText: z.ZodString;
35
+ WindAbbr: z.ZodString;
36
+ WindDirectionDegrees: z.ZodString;
37
+ WindDirectionEnglish: z.ZodString;
38
+ WindDirectionLocalized: z.ZodString;
39
+ WindSpeed: z.ZodNumber;
40
+ }, "strip", z.ZodTypeAny, {
41
+ CityEnglish: string;
42
+ CityLocalized: string;
43
+ CountryCode: string;
44
+ Latitude: number;
45
+ Pod: string;
46
+ Precip: number;
47
+ Pressure: number;
48
+ RelativeHumidity: number;
49
+ State: string;
50
+ Temp: number;
51
+ Timestamp: number;
52
+ Timezone: string;
53
+ Visibility: number;
54
+ WeatherCode: string;
55
+ WeatherText: string;
56
+ WindAbbr: string;
57
+ WindDirectionDegrees: string;
58
+ WindDirectionEnglish: string;
59
+ WindDirectionLocalized: string;
60
+ WindSpeed: number;
61
+ Longitude: number;
62
+ }, {
63
+ CityEnglish: string;
64
+ CityLocalized: string;
65
+ CountryCode: string;
66
+ Latitude: number;
67
+ Pod: string;
68
+ Precip: number;
69
+ Pressure: number;
70
+ RelativeHumidity: number;
71
+ State: string;
72
+ Temp: number;
73
+ Timestamp: number;
74
+ Timezone: string;
75
+ Visibility: number;
76
+ WeatherCode: string;
77
+ WeatherText: string;
78
+ WindAbbr: string;
79
+ WindDirectionDegrees: string;
80
+ WindDirectionEnglish: string;
81
+ WindDirectionLocalized: string;
82
+ WindSpeed: number;
83
+ Longitude: number;
84
+ }>;
85
+ export declare const WeatherForecastSchema: z.ZodObject<{
86
+ Datetime: z.ZodString;
87
+ Pod: z.ZodString;
88
+ Label: z.ZodString;
89
+ WeatherCode: z.ZodString;
90
+ Timestamp: z.ZodNumber;
91
+ Temp: z.ZodNumber;
92
+ MinTemp: z.ZodNumber;
93
+ MaxTemp: z.ZodNumber;
94
+ }, "strip", z.ZodTypeAny, {
95
+ Pod: string;
96
+ Temp: number;
97
+ Timestamp: number;
98
+ WeatherCode: string;
99
+ Datetime: string;
100
+ Label: string;
101
+ MinTemp: number;
102
+ MaxTemp: number;
103
+ }, {
104
+ Pod: string;
105
+ Temp: number;
106
+ Timestamp: number;
107
+ WeatherCode: string;
108
+ Datetime: string;
109
+ Label: string;
110
+ MinTemp: number;
111
+ MaxTemp: number;
112
+ }>;
113
+ export declare const DailyForecastArraySchema: z.ZodArray<z.ZodObject<{
114
+ Datetime: z.ZodString;
115
+ Pod: z.ZodString;
116
+ Label: z.ZodString;
117
+ WeatherCode: z.ZodString;
118
+ Timestamp: z.ZodNumber;
119
+ Temp: z.ZodNumber;
120
+ MinTemp: z.ZodNumber;
121
+ MaxTemp: z.ZodNumber;
122
+ }, "strip", z.ZodTypeAny, {
123
+ Pod: string;
124
+ Temp: number;
125
+ Timestamp: number;
126
+ WeatherCode: string;
127
+ Datetime: string;
128
+ Label: string;
129
+ MinTemp: number;
130
+ MaxTemp: number;
131
+ }, {
132
+ Pod: string;
133
+ Temp: number;
134
+ Timestamp: number;
135
+ WeatherCode: string;
136
+ Datetime: string;
137
+ Label: string;
138
+ MinTemp: number;
139
+ MaxTemp: number;
140
+ }>, "many">;
141
+ export declare const HourlyForecastArraySchema: z.ZodArray<z.ZodObject<{
142
+ Datetime: z.ZodString;
143
+ Pod: z.ZodString;
144
+ Label: z.ZodString;
145
+ WeatherCode: z.ZodString;
146
+ Timestamp: z.ZodNumber;
147
+ Temp: z.ZodNumber;
148
+ MinTemp: z.ZodNumber;
149
+ MaxTemp: z.ZodNumber;
150
+ }, "strip", z.ZodTypeAny, {
151
+ Pod: string;
152
+ Temp: number;
153
+ Timestamp: number;
154
+ WeatherCode: string;
155
+ Datetime: string;
156
+ Label: string;
157
+ MinTemp: number;
158
+ MaxTemp: number;
159
+ }, {
160
+ Pod: string;
161
+ Temp: number;
162
+ Timestamp: number;
163
+ WeatherCode: string;
164
+ Datetime: string;
165
+ Label: string;
166
+ MinTemp: number;
167
+ MaxTemp: number;
168
+ }>, "many">;
169
+ export declare function validateConditionsJson(json: string): {
170
+ success: boolean;
171
+ data?: WeatherConditions;
172
+ error?: string;
173
+ };
174
+ export declare function validateDailyForecastJson(json: string): {
175
+ success: boolean;
176
+ data?: WeatherForecast[];
177
+ error?: string;
178
+ };
179
+ export declare function validateHourlyForecastJson(json: string): {
180
+ success: boolean;
181
+ data?: WeatherForecast[];
182
+ error?: string;
183
+ };
184
+ export declare const weatherConditions: readonly [{
185
+ readonly code: "1";
186
+ readonly label: "Clear sky";
187
+ readonly temp: 28;
188
+ readonly precip: 0;
189
+ readonly humidity: 35;
190
+ readonly visibility: 20;
191
+ readonly windSpeed: 3;
192
+ readonly pressure: 1020;
193
+ }, {
194
+ readonly code: "2";
195
+ readonly label: "Few clouds";
196
+ readonly temp: 24;
197
+ readonly precip: 0;
198
+ readonly humidity: 45;
199
+ readonly visibility: 18;
200
+ readonly windSpeed: 6;
201
+ readonly pressure: 1018;
202
+ }, {
203
+ readonly code: "3";
204
+ readonly label: "Scattered clouds";
205
+ readonly temp: 21;
206
+ readonly precip: 0;
207
+ readonly humidity: 50;
208
+ readonly visibility: 15;
209
+ readonly windSpeed: 8;
210
+ readonly pressure: 1015;
211
+ }, {
212
+ readonly code: "4";
213
+ readonly label: "Broken clouds";
214
+ readonly temp: 18;
215
+ readonly precip: 0;
216
+ readonly humidity: 55;
217
+ readonly visibility: 12;
218
+ readonly windSpeed: 10;
219
+ readonly pressure: 1012;
220
+ }, {
221
+ readonly code: "8";
222
+ readonly label: "Overcast clouds";
223
+ readonly temp: 15;
224
+ readonly precip: 0;
225
+ readonly humidity: 65;
226
+ readonly visibility: 8;
227
+ readonly windSpeed: 12;
228
+ readonly pressure: 1008;
229
+ }, {
230
+ readonly code: "18";
231
+ readonly label: "Light rain";
232
+ readonly temp: 14;
233
+ readonly precip: 2;
234
+ readonly humidity: 80;
235
+ readonly visibility: 6;
236
+ readonly windSpeed: 12;
237
+ readonly pressure: 1005;
238
+ }, {
239
+ readonly code: "19";
240
+ readonly label: "Moderate rain";
241
+ readonly temp: 12;
242
+ readonly precip: 5;
243
+ readonly humidity: 88;
244
+ readonly visibility: 4;
245
+ readonly windSpeed: 15;
246
+ readonly pressure: 1000;
247
+ }, {
248
+ readonly code: "20";
249
+ readonly label: "Heavy rain";
250
+ readonly temp: 11;
251
+ readonly precip: 12;
252
+ readonly humidity: 95;
253
+ readonly visibility: 2;
254
+ readonly windSpeed: 20;
255
+ readonly pressure: 995;
256
+ }, {
257
+ readonly code: "21";
258
+ readonly label: "Light snow";
259
+ readonly temp: -2;
260
+ readonly precip: 1;
261
+ readonly humidity: 85;
262
+ readonly visibility: 4;
263
+ readonly windSpeed: 8;
264
+ readonly pressure: 1010;
265
+ }, {
266
+ readonly code: "22";
267
+ readonly label: "Snow";
268
+ readonly temp: -5;
269
+ readonly precip: 4;
270
+ readonly humidity: 90;
271
+ readonly visibility: 2;
272
+ readonly windSpeed: 12;
273
+ readonly pressure: 1005;
274
+ }, {
275
+ readonly code: "29";
276
+ readonly label: "Thunderstorm";
277
+ readonly temp: 18;
278
+ readonly precip: 20;
279
+ readonly humidity: 95;
280
+ readonly visibility: 1;
281
+ readonly windSpeed: 28;
282
+ readonly pressure: 985;
283
+ }];
284
+ export declare function getRandomCondition(): {
285
+ readonly code: "1";
286
+ readonly label: "Clear sky";
287
+ readonly temp: 28;
288
+ readonly precip: 0;
289
+ readonly humidity: 35;
290
+ readonly visibility: 20;
291
+ readonly windSpeed: 3;
292
+ readonly pressure: 1020;
293
+ } | {
294
+ readonly code: "2";
295
+ readonly label: "Few clouds";
296
+ readonly temp: 24;
297
+ readonly precip: 0;
298
+ readonly humidity: 45;
299
+ readonly visibility: 18;
300
+ readonly windSpeed: 6;
301
+ readonly pressure: 1018;
302
+ } | {
303
+ readonly code: "3";
304
+ readonly label: "Scattered clouds";
305
+ readonly temp: 21;
306
+ readonly precip: 0;
307
+ readonly humidity: 50;
308
+ readonly visibility: 15;
309
+ readonly windSpeed: 8;
310
+ readonly pressure: 1015;
311
+ } | {
312
+ readonly code: "4";
313
+ readonly label: "Broken clouds";
314
+ readonly temp: 18;
315
+ readonly precip: 0;
316
+ readonly humidity: 55;
317
+ readonly visibility: 12;
318
+ readonly windSpeed: 10;
319
+ readonly pressure: 1012;
320
+ } | {
321
+ readonly code: "8";
322
+ readonly label: "Overcast clouds";
323
+ readonly temp: 15;
324
+ readonly precip: 0;
325
+ readonly humidity: 65;
326
+ readonly visibility: 8;
327
+ readonly windSpeed: 12;
328
+ readonly pressure: 1008;
329
+ } | {
330
+ readonly code: "18";
331
+ readonly label: "Light rain";
332
+ readonly temp: 14;
333
+ readonly precip: 2;
334
+ readonly humidity: 80;
335
+ readonly visibility: 6;
336
+ readonly windSpeed: 12;
337
+ readonly pressure: 1005;
338
+ } | {
339
+ readonly code: "19";
340
+ readonly label: "Moderate rain";
341
+ readonly temp: 12;
342
+ readonly precip: 5;
343
+ readonly humidity: 88;
344
+ readonly visibility: 4;
345
+ readonly windSpeed: 15;
346
+ readonly pressure: 1000;
347
+ } | {
348
+ readonly code: "20";
349
+ readonly label: "Heavy rain";
350
+ readonly temp: 11;
351
+ readonly precip: 12;
352
+ readonly humidity: 95;
353
+ readonly visibility: 2;
354
+ readonly windSpeed: 20;
355
+ readonly pressure: 995;
356
+ } | {
357
+ readonly code: "21";
358
+ readonly label: "Light snow";
359
+ readonly temp: -2;
360
+ readonly precip: 1;
361
+ readonly humidity: 85;
362
+ readonly visibility: 4;
363
+ readonly windSpeed: 8;
364
+ readonly pressure: 1010;
365
+ } | {
366
+ readonly code: "22";
367
+ readonly label: "Snow";
368
+ readonly temp: -5;
369
+ readonly precip: 4;
370
+ readonly humidity: 90;
371
+ readonly visibility: 2;
372
+ readonly windSpeed: 12;
373
+ readonly pressure: 1005;
374
+ } | {
375
+ readonly code: "29";
376
+ readonly label: "Thunderstorm";
377
+ readonly temp: 18;
378
+ readonly precip: 20;
379
+ readonly humidity: 95;
380
+ readonly visibility: 1;
381
+ readonly windSpeed: 28;
382
+ readonly pressure: 985;
383
+ };
384
+ export declare const cityPresets: readonly [{
385
+ readonly name: "Vancouver";
386
+ readonly latitude: 49.24966;
387
+ readonly longitude: -123.11934;
388
+ readonly timezone: "America/Vancouver";
389
+ readonly countryCode: "CA";
390
+ readonly state: "";
391
+ }, {
392
+ readonly name: "Sydney";
393
+ readonly latitude: -33.86785;
394
+ readonly longitude: 151.20732;
395
+ readonly timezone: "Australia/Sydney";
396
+ readonly countryCode: "AU";
397
+ readonly state: "";
398
+ }, {
399
+ readonly name: "Tokyo";
400
+ readonly latitude: 35.6762;
401
+ readonly longitude: 139.6503;
402
+ readonly timezone: "Asia/Tokyo";
403
+ readonly countryCode: "JP";
404
+ readonly state: "";
405
+ }, {
406
+ readonly name: "London";
407
+ readonly latitude: 51.5074;
408
+ readonly longitude: -0.1278;
409
+ readonly timezone: "Europe/London";
410
+ readonly countryCode: "GB";
411
+ readonly state: "";
412
+ }, {
413
+ readonly name: "New York";
414
+ readonly latitude: 40.7128;
415
+ readonly longitude: -74.006;
416
+ readonly timezone: "America/New_York";
417
+ readonly countryCode: "US";
418
+ readonly state: "NY";
419
+ }];
420
+ export declare function degreesToDirection(degrees: number): {
421
+ abbr: string;
422
+ english: string;
423
+ };
424
+ export declare function getPodForHour(hour: number): string;
425
+ export declare function getCurrentPod(): string;
426
+ export declare function createDefaultConditions(): WeatherConditions;
427
+ export declare function createDefaultDailyForecast(): WeatherForecast[];
428
+ export declare function createDefaultHourlyForecast(): WeatherForecast[];
429
+ export declare function generateWarmerDailyForecast(currentTemp: number, units?: UnitSystem): WeatherForecast[];
430
+ export declare function generateColderDailyForecast(currentTemp: number, units?: UnitSystem): WeatherForecast[];
431
+ export declare function generateWarmerHourlyForecast(currentTemp: number, units?: UnitSystem): WeatherForecast[];
432
+ export declare function generateColderHourlyForecast(currentTemp: number, units?: UnitSystem): WeatherForecast[];
433
+ export type UnitSystem = 'metric' | 'imperial';
434
+ export declare function celsiusToFahrenheit(c: number): number;
435
+ export declare function fahrenheitToCelsius(f: number): number;
436
+ export declare function msToMph(ms: number): number;
437
+ export declare function mphToMs(mph: number): number;
438
+ export declare function hPaToInHg(hPa: number): number;
439
+ export declare function inHgToHPa(inHg: number): number;
440
+ export declare function kmToMiles(km: number): number;
441
+ export declare function milesToKm(miles: number): number;
442
+ export declare function mmToInches(mm: number): number;
443
+ export declare function inchesToMm(inches: number): number;
444
+ export declare function convertConditionsToUnits(cond: WeatherConditions, fromUnit: UnitSystem, toUnit: UnitSystem): WeatherConditions;
445
+ export declare function convertForecastToUnits(forecast: WeatherForecast[], fromUnit: UnitSystem, toUnit: UnitSystem): WeatherForecast[];
446
+ export {};
@@ -0,0 +1,12 @@
1
+ export declare class WorkerRunner {
2
+ onMessage: ((message: any) => void) | null;
3
+ _workers: Map<string, Worker>;
4
+ _currentDependencies: Record<string, string[]>;
5
+ _unsubscribeConfig: (() => void) | null;
6
+ constructor();
7
+ setDependencies(applicationSpecifiers: Record<string, string[]>): Promise<void>;
8
+ send(message: any): void;
9
+ _reconcileWorkers(): void;
10
+ destroy(): void;
11
+ }
12
+ export declare const workerRunner: WorkerRunner;
@@ -25,7 +25,7 @@ export interface MediaFolderStubConfig {
25
25
  children: MediaFolderStubConfig[];
26
26
  }
27
27
  export interface EnvironmentStubConfig {
28
- colorScheme: 'dark' | 'light';
28
+ colorScheme: 'dark' | 'light' | 'system';
29
29
  }
30
30
  export type ApplicationStubConfig = {
31
31
  name: string;
@@ -87,9 +87,6 @@ export type WeatherStubConfig = {
87
87
  conditions?: WeatherConditionsStub;
88
88
  dailyForecast?: WeatherForecastStub[];
89
89
  hourlyForecast?: WeatherForecastStub[];
90
- accuWeatherConditions?: Record<string, any>;
91
- accuWeatherDailyForecast?: Record<string, any>;
92
- accuWeatherHourlyForecast?: Record<string, any>;
93
90
  };
94
91
  export interface StubsConfig {
95
92
  device: DeviceStubConfig;
@@ -0,0 +1 @@
1
+ export declare function doAsync(fn: () => Promise<any> | any, onRejected?: (err: any) => void): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telemetryos/development-application-host-ui",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "description": "The official TelemetryOS application CLI package. Use it to build applications that run on the TelemetryOS platform",
5
5
  "type": "module",
6
6
  "files": [
@@ -24,8 +24,6 @@
24
24
  "@types/node": "^22.15.3",
25
25
  "@types/react": "^19.1.12",
26
26
  "@types/react-dom": "^19.1.9",
27
- "@typescript-eslint/eslint-plugin": "^8.32.0",
28
- "@typescript-eslint/parser": "^8.32.0",
29
27
  "@vitejs/plugin-react": "^5.0.2",
30
28
  "eslint": "^9.26.0",
31
29
  "eslint-config-prettier": "^10.1.2",
@@ -33,19 +31,21 @@
33
31
  "globals": "^16.0.0",
34
32
  "prettier": "^3.5.3",
35
33
  "typescript": "^5.8.3",
36
- "typescript-eslint": "^8.32.0",
34
+ "typescript-eslint": "^8.49.0",
37
35
  "vite": "^6.3.5",
38
36
  "vitest": "^3.1.3"
39
37
  },
40
38
  "dependencies": {
41
39
  "@hugeicons/core-free-icons": "^1.0.5",
42
40
  "@hugeicons/react": "^1.0.5",
43
- "@telemetryos/root-sdk": "^1.6.0",
41
+ "@telemetryos/root-sdk": "^1.7.0",
44
42
  "react": "^19.1.1",
45
- "react-dom": "^19.1.1"
43
+ "react-dom": "^19.1.1",
44
+ "zod": "^3.24.0"
46
45
  },
47
46
  "scripts": {
48
47
  "build": "vite build",
49
- "dev": "vite"
48
+ "dev": "vite",
49
+ "watch": "vite build -w --emptyOutDir false"
50
50
  }
51
51
  }
@@ -1 +0,0 @@
1
- *{box-sizing:border-box}html{height:100%;font-family:Arial,sans-serif}body{display:flex;flex-direction:column;min-height:100%;margin:0;background:#1b1b1d;font-family:Rubik,sans-serif}#app{display:flex;flex:1}.app__canvas-surround{display:flex;flex:1;padding:20px;min-width:0;min-height:0}.canvas{display:flex;flex-direction:column;flex:1;align-items:center;justify-content:center}.canvas__application-container{position:relative;display:flex;flex-direction:column;border:1px solid rgb(54,52,55);border-radius:8px;background:#1b1b1d}.canvas__application-container iframe{flex:1;border:none}.canvas__application-container-drag-handle{position:absolute;bottom:2px;right:2px;display:flex;align-items:center;justify-content:center;width:12px;height:12px;opacity:.3;cursor:se-resize}.canvas__application-container-drag-handle svg{width:12px;height:12px}.application-info{display:flex;flex-direction:column;height:100%;overflow-y:auto;padding:16px;background:#17191c;font-family:Rubik,sans-serif}.application-info__loading,.application-info__empty{padding:20px;color:#94a3b8;font-size:13px;text-align:center;font-style:italic}.application-info__section{margin-bottom:24px}.application-info__section:last-child{margin-bottom:0}.application-info__section-title{color:#d4e0ed;font-size:14px;font-weight:600;margin:0 0 12px}.application-info__field{margin-bottom:12px}.application-info__field:last-child{margin-bottom:0}.application-info__label{display:block;color:#94a3b8;font-size:12px;font-weight:500;margin-bottom:6px}.application-info__value{color:#d4e0ed;font-size:13px;padding:8px 12px;background:#22252a;border:1px solid hsl(220,10%,20%);border-radius:6px;word-break:break-all}.application-settings{display:flex;flex-direction:column;height:100%;overflow-y:auto;padding:16px;background:#17191c;font-family:Rubik,sans-serif}.application-settings__loading,.application-settings__empty{padding:20px;color:#94a3b8;font-size:13px;text-align:center;font-style:italic}.device-config{display:flex;flex-direction:column;height:100%;overflow-y:auto;padding:16px;background:#17191c;font-family:Rubik,sans-serif}.device-config__section{margin-bottom:24px}.device-config__section:last-child{margin-bottom:0}.device-config__section-title{color:#d4e0ed;font-size:14px;font-weight:600;margin:0 0 12px}.device-config__field{margin-bottom:12px}.device-config__field:last-child{margin-bottom:0}.device-config__label{display:block;color:#94a3b8;font-size:12px;font-weight:500;margin-bottom:6px}.device-config__input,.device-config__select{width:100%;height:40px;padding:8px 12px;background:#22252a;border:1px solid rgba(255,255,255,.08);border-radius:6px;color:#d4e0ed;font-size:13px;font-family:inherit;transition:border-color .2s ease-linear}.device-config__input::placeholder,.device-config__select::placeholder{color:#94a3b8}.device-config__input:focus,.device-config__select:focus{outline:1px solid hsl(39,93%,59%);outline-offset:0;border-color:#f8b435;box-shadow:none}.account-config{display:flex;flex-direction:column;height:100%;overflow-y:auto;padding:16px;background:#17191c;font-family:Rubik,sans-serif}.account-config__loading,.account-config__empty{padding:20px;color:#94a3b8;font-size:13px;text-align:center;font-style:italic}.account-config__section{margin-bottom:24px}.account-config__section:last-child{margin-bottom:0}.account-config__section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.account-config__section-title{color:#d4e0ed;font-size:14px;font-weight:600;margin:0 0 12px}.account-config__section-header .account-config__section-title{margin:0}.account-config__field{margin-bottom:12px}.account-config__field:last-child{margin-bottom:0}.account-config__label{display:block;color:#94a3b8;font-size:12px;font-weight:500;margin-bottom:6px}.account-config__value{color:#d4e0ed;font-size:13px;padding:8px 12px;background:#22252a;border:1px solid hsl(220,10%,20%);border-radius:6px;word-break:break-all}.account-config__input,.account-config__select{width:100%;height:40px;padding:8px 12px;background:#22252a;border:1px solid rgba(255,255,255,.08);border-radius:6px;color:#d4e0ed;font-size:13px;font-family:inherit;transition:border-color .2s ease-linear}.account-config__input::placeholder,.account-config__select::placeholder{color:#94a3b8}.account-config__input:focus,.account-config__select:focus{outline:1px solid hsl(39,93%,59%);outline-offset:0;border-color:#f8b435;box-shadow:none}.account-config__button{height:36px;padding:6px 12px;background:#f8b435;border:none;border-radius:6px;color:#000;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease-linear}.account-config__button:hover{background:#f7a918}.account-config__button:active{background:#ec9d09}.account-config__button--small{height:32px;padding:4px 8px;font-size:12px}.account-config__button--danger{background:#f15746;border:none;color:#f8fafc}.account-config__button--danger:hover{background:#ef3d2a}.account-config__button--danger:active{background:#ed2812}.account-config__item{padding:12px;margin-bottom:12px;background:#22252a;border:1px solid hsl(220,10%,20%);border-radius:8px}.account-config__item:last-child{margin-bottom:0}.account-config__item-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid hsl(220,10%,20%)}.account-config__item-title{color:#d4e0ed;font-size:12px;font-weight:600}.media-config{display:flex;flex-direction:column;height:100%;overflow-y:auto;padding:16px;background:#17191c;font-family:Rubik,sans-serif}.media-config__empty{padding:20px;color:#94a3b8;font-size:13px;text-align:center;font-style:italic}.media-config__section{margin-bottom:24px}.media-config__section:last-child{margin-bottom:0}.media-config__section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.media-config__section-title{color:#d4e0ed;font-size:14px;font-weight:600;margin:0 0 12px}.media-config__section-header .media-config__section-title{margin:0}.media-config__field{margin-bottom:12px}.media-config__field:last-child{margin-bottom:0}.media-config__label{display:block;color:#94a3b8;font-size:12px;font-weight:500;margin-bottom:6px}.media-config__input{width:100%;height:40px;padding:8px 12px;background:#22252a;border:1px solid rgba(255,255,255,.08);border-radius:6px;color:#d4e0ed;font-size:13px;font-family:inherit;transition:border-color .2s ease-linear}.media-config__input::placeholder{color:#94a3b8}.media-config__input:focus{outline:1px solid hsl(39,93%,59%);outline-offset:0;border-color:#f8b435;box-shadow:none}.media-config__button{height:36px;padding:6px 12px;background:#f8b435;border:none;border-radius:6px;color:#000;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease-linear}.media-config__button:hover{background:#f7a918}.media-config__button:active{background:#ec9d09}.media-config__button--small{height:32px;padding:4px 8px;font-size:12px}.media-config__button--danger{background:#f15746;border:none;color:#f8fafc}.media-config__button--danger:hover{background:#ef3d2a}.media-config__button--danger:active{background:#ed2812}.media-config__item{padding:12px;margin-bottom:12px;background:#22252a;border:1px solid hsl(220,10%,20%);border-radius:8px}.media-config__item:last-child{margin-bottom:0}.media-config__item-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid hsl(220,10%,20%)}.media-config__item-title{color:#d4e0ed;font-size:12px;font-weight:600}.right-sidebar{display:flex;flex-direction:row;width:400px}.right-sidebar__nav{display:flex;flex-direction:column;width:64px;padding:16px 8px;gap:4px;background:#121416;border-right:1px solid hsl(220,10%,15%);align-items:center}.right-sidebar__nav-button{display:flex;align-items:center;justify-content:center;width:48px;height:48px;background:transparent;border:1px solid rgba(255,255,255,.05);border-radius:8px;color:#fff6;font-size:20px;font-family:Rubik,sans-serif;font-weight:400;cursor:pointer;transition:all .15s ease}.right-sidebar__nav-button:hover{border-color:#ffffff26;color:#fff9}.right-sidebar__nav-button--active{border-color:#f8b435;color:#f8b435}.right-sidebar__nav-icon{display:block}.right-sidebar__container{display:flex;flex-direction:column;flex:1;overflow:hidden;background:#17191c;font-family:Rubik,sans-serif}.right-sidebar__header{display:flex;align-items:center;height:48px;padding:0 16px;border-bottom:1px solid hsl(220,10%,20%);background:#17191c;flex-shrink:0}.right-sidebar__header-title{color:#d4e0ed;font-size:14px;font-weight:600}.right-sidebar__content{flex:1;overflow:hidden;display:flex;flex-direction:column;background:#17191c}.scaling-container{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:0;min-height:0}.scaling-container__inner{display:flex;flex-direction:column}