@actual-app/web 3.0.149
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1244 -0
- package/build/Inter/Inter-Black.woff2 +0 -0
- package/build/Inter/Inter-BlackItalic.woff2 +0 -0
- package/build/Inter/Inter-Bold.woff2 +0 -0
- package/build/Inter/Inter-BoldItalic.woff2 +0 -0
- package/build/Inter/Inter-ExtraBold.woff2 +0 -0
- package/build/Inter/Inter-ExtraBoldItalic.woff2 +0 -0
- package/build/Inter/Inter-ExtraLight.woff2 +0 -0
- package/build/Inter/Inter-ExtraLightItalic.woff2 +0 -0
- package/build/Inter/Inter-Italic.woff2 +0 -0
- package/build/Inter/Inter-Light.woff2 +0 -0
- package/build/Inter/Inter-LightItalic.woff2 +0 -0
- package/build/Inter/Inter-Medium.woff2 +0 -0
- package/build/Inter/Inter-MediumItalic.woff2 +0 -0
- package/build/Inter/Inter-Regular.woff2 +0 -0
- package/build/Inter/Inter-SemiBold.woff2 +0 -0
- package/build/Inter/Inter-SemiBoldItalic.woff2 +0 -0
- package/build/Inter/Inter-Thin.woff2 +0 -0
- package/build/Inter/Inter-ThinItalic.woff2 +0 -0
- package/build/Inter/inter.css +178 -0
- package/build/_headers +10 -0
- package/build/_redirects +1 -0
- package/build/android-chrome-192x192.png +0 -0
- package/build/android-chrome-512x512.png +0 -0
- package/build/apple-touch-icon.png +0 -0
- package/build/asset-manifest.json +22 -0
- package/build/browserconfig.xml +9 -0
- package/build/codemirror.css +341 -0
- package/build/data/default-db.sqlite +0 -0
- package/build/data/migrations/.force-copy-windows +0 -0
- package/build/data/migrations/1548957970627_remove-db-version.sql +5 -0
- package/build/data/migrations/1550601598648_payees.sql +23 -0
- package/build/data/migrations/1555786194328_remove_category_group_unique.sql +25 -0
- package/build/data/migrations/1561751833510_indexes.sql +7 -0
- package/build/data/migrations/1567699552727_budget.sql +38 -0
- package/build/data/migrations/1582384163573_cleared.sql +6 -0
- package/build/data/migrations/1597756566448_rules.sql +10 -0
- package/build/data/migrations/1608652596043_parent_field.sql +13 -0
- package/build/data/migrations/1608652596044_trans_views.sql +56 -0
- package/build/data/migrations/1612625548236_optimize.sql +7 -0
- package/build/data/migrations/1614782639336_trans_views2.sql +33 -0
- package/build/data/migrations/1615745967948_meta.sql +10 -0
- package/build/data/migrations/1616167010796_accounts_order.sql +5 -0
- package/build/data/migrations/1618975177358_schedules.sql +28 -0
- package/build/data/migrations/1632571489012_remove_cache.js +135 -0
- package/build/data-file-index.txt +17 -0
- package/build/favicon-16x16.png +0 -0
- package/build/favicon-32x32.png +0 -0
- package/build/favicon.ico +0 -0
- package/build/index.html +1 -0
- package/build/kcab/kcab.worker.dc92c0e92f579968e51f.js +42 -0
- package/build/kcab/kcab.worker.dc92c0e92f579968e51f.js.map +1 -0
- package/build/kcab/xfo.kcab.worker.dc92c0e92f579968e51f.js +1 -0
- package/build/libofx.web.wasm +0 -0
- package/build/monokai.css +36 -0
- package/build/mstile-150x150.png +0 -0
- package/build/precache-manifest.ec84d87f2d2b828c2e9e73764dbee838.js +46 -0
- package/build/safari-pinned-tab.svg +27 -0
- package/build/service-worker.js +34 -0
- package/build/site.webmanifest +19 -0
- package/build/sql-wasm-debug.wasm +0 -0
- package/build/sql-wasm.wasm +0 -0
- package/build/static/css/3.d37e3633.chunk.css +7 -0
- package/build/static/css/3.d37e3633.chunk.css.map +1 -0
- package/build/static/js/1.5b0e59dd.chunk.js +2 -0
- package/build/static/js/1.5b0e59dd.chunk.js.map +1 -0
- package/build/static/js/2.c0b1e834.chunk.js +2 -0
- package/build/static/js/2.c0b1e834.chunk.js.map +1 -0
- package/build/static/js/3.b968e8cf.chunk.js +2 -0
- package/build/static/js/3.b968e8cf.chunk.js.map +1 -0
- package/build/static/js/browser-server.06b54be5.worker.js +2 -0
- package/build/static/js/browser-server.06b54be5.worker.js.map +1 -0
- package/build/static/js/main.24dde65e.chunk.js +2 -0
- package/build/static/js/main.24dde65e.chunk.js.map +1 -0
- package/build/static/js/runtime~main.d358c073.js +2 -0
- package/build/static/js/runtime~main.d358c073.js.map +1 -0
- package/build/static/media/DateSelect.left.1ae92674.png +0 -0
- package/build/static/media/DateSelect.right.2a470dc0.png +0 -0
- package/build/static/media/bg.ad9dce3b.svg +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
BEGIN TRANSACTION;
|
|
2
|
+
|
|
3
|
+
DELETE FROM spreadsheet_cells WHERE
|
|
4
|
+
name NOT LIKE '%!budget\_%' ESCAPE '\' AND
|
|
5
|
+
name NOT LIKE '%!carryover\_%' ESCAPE '\' AND
|
|
6
|
+
name NOT LIKE '%!buffered';
|
|
7
|
+
|
|
8
|
+
UPDATE OR REPLACE spreadsheet_cells SET name = REPLACE(name, '_', '-');
|
|
9
|
+
|
|
10
|
+
UPDATE OR REPLACE spreadsheet_cells SET
|
|
11
|
+
name =
|
|
12
|
+
SUBSTR(name, 1, 28) ||
|
|
13
|
+
'-' ||
|
|
14
|
+
SUBSTR(name, 29, 4) ||
|
|
15
|
+
'-' ||
|
|
16
|
+
SUBSTR(name, 33, 4) ||
|
|
17
|
+
'-' ||
|
|
18
|
+
SUBSTR(name, 37, 4) ||
|
|
19
|
+
'-' ||
|
|
20
|
+
SUBSTR(name, 41, 12)
|
|
21
|
+
WHERE name LIKE '%!budget-%' AND LENGTH(name) = 52;
|
|
22
|
+
|
|
23
|
+
UPDATE OR REPLACE spreadsheet_cells SET
|
|
24
|
+
name =
|
|
25
|
+
SUBSTR(name, 1, 31) ||
|
|
26
|
+
'-' ||
|
|
27
|
+
SUBSTR(name, 32, 4) ||
|
|
28
|
+
'-' ||
|
|
29
|
+
SUBSTR(name, 36, 4) ||
|
|
30
|
+
'-' ||
|
|
31
|
+
SUBSTR(name, 40, 4) ||
|
|
32
|
+
'-' ||
|
|
33
|
+
SUBSTR(name, 44, 12)
|
|
34
|
+
WHERE name LIKE '%!carryover-%' AND LENGTH(name) = 55;
|
|
35
|
+
|
|
36
|
+
UPDATE spreadsheet_cells SET expr = SUBSTR(expr, 2) WHERE name LIKE '%!carryover-%';
|
|
37
|
+
|
|
38
|
+
COMMIT;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
BEGIN TRANSACTION;
|
|
2
|
+
|
|
3
|
+
ALTER TABLE transactions ADD COLUMN parent_id TEXT;
|
|
4
|
+
|
|
5
|
+
UPDATE transactions SET
|
|
6
|
+
parent_id = CASE
|
|
7
|
+
WHEN isChild THEN SUBSTR(id, 1, INSTR(id, '/') - 1)
|
|
8
|
+
ELSE NULL
|
|
9
|
+
END;
|
|
10
|
+
|
|
11
|
+
CREATE INDEX trans_parent_id ON transactions(parent_id);
|
|
12
|
+
|
|
13
|
+
COMMIT;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
BEGIN TRANSACTION;
|
|
2
|
+
|
|
3
|
+
DROP VIEW IF EXISTS v_transactions_layer2;
|
|
4
|
+
CREATE VIEW v_transactions_layer2 AS
|
|
5
|
+
SELECT
|
|
6
|
+
t.id AS id,
|
|
7
|
+
t.isParent AS is_parent,
|
|
8
|
+
t.isChild AS is_child,
|
|
9
|
+
t.acct AS account,
|
|
10
|
+
CASE WHEN t.isChild = 0 THEN NULL ELSE t.parent_id END AS parent_id,
|
|
11
|
+
CASE WHEN t.isParent = 1 THEN NULL ELSE cm.transferId END AS category,
|
|
12
|
+
pm.targetId AS payee,
|
|
13
|
+
t.imported_description AS imported_payee,
|
|
14
|
+
IFNULL(t.amount, 0) AS amount,
|
|
15
|
+
t.notes AS notes,
|
|
16
|
+
t.date AS date,
|
|
17
|
+
t.financial_id AS imported_id,
|
|
18
|
+
t.error AS error,
|
|
19
|
+
t.starting_balance_flag AS starting_balance_flag,
|
|
20
|
+
t.transferred_id AS transfer_id,
|
|
21
|
+
t.sort_order AS sort_order,
|
|
22
|
+
t.cleared AS cleared,
|
|
23
|
+
t.tombstone AS tombstone
|
|
24
|
+
FROM transactions t
|
|
25
|
+
LEFT JOIN category_mapping cm ON cm.id = t.category
|
|
26
|
+
LEFT JOIN payee_mapping pm ON pm.id = t.description
|
|
27
|
+
WHERE
|
|
28
|
+
t.date IS NOT NULL AND
|
|
29
|
+
t.acct IS NOT NULL;
|
|
30
|
+
|
|
31
|
+
CREATE INDEX trans_sorted ON transactions(date desc, starting_balance_flag, sort_order desc, id);
|
|
32
|
+
|
|
33
|
+
DROP VIEW IF EXISTS v_transactions_layer1;
|
|
34
|
+
CREATE VIEW v_transactions_layer1 AS
|
|
35
|
+
SELECT t.* FROM v_transactions_layer2 t
|
|
36
|
+
LEFT JOIN transactions t2 ON (t.is_child = 1 AND t2.id = t.parent_id)
|
|
37
|
+
WHERE IFNULL(t.tombstone, 0) = 0 AND IFNULL(t2.tombstone, 0) = 0;
|
|
38
|
+
|
|
39
|
+
DROP VIEW IF EXISTS v_transactions;
|
|
40
|
+
CREATE VIEW v_transactions AS
|
|
41
|
+
SELECT t.* FROM v_transactions_layer1 t
|
|
42
|
+
ORDER BY t.date desc, t.starting_balance_flag, t.sort_order desc, t.id;
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
DROP VIEW IF EXISTS v_categories;
|
|
46
|
+
CREATE VIEW v_categories AS
|
|
47
|
+
SELECT
|
|
48
|
+
id,
|
|
49
|
+
name,
|
|
50
|
+
is_income,
|
|
51
|
+
cat_group AS "group",
|
|
52
|
+
sort_order,
|
|
53
|
+
tombstone
|
|
54
|
+
FROM categories;
|
|
55
|
+
|
|
56
|
+
COMMIT;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
BEGIN TRANSACTION;
|
|
2
|
+
|
|
3
|
+
-- This adds the isChild/parent_id constraint in `where`
|
|
4
|
+
DROP VIEW IF EXISTS v_transactions_layer2;
|
|
5
|
+
CREATE VIEW v_transactions_layer2 AS
|
|
6
|
+
SELECT
|
|
7
|
+
t.id AS id,
|
|
8
|
+
t.isParent AS is_parent,
|
|
9
|
+
t.isChild AS is_child,
|
|
10
|
+
t.acct AS account,
|
|
11
|
+
CASE WHEN t.isChild = 0 THEN NULL ELSE t.parent_id END AS parent_id,
|
|
12
|
+
CASE WHEN t.isParent = 1 THEN NULL ELSE cm.transferId END AS category,
|
|
13
|
+
pm.targetId AS payee,
|
|
14
|
+
t.imported_description AS imported_payee,
|
|
15
|
+
IFNULL(t.amount, 0) AS amount,
|
|
16
|
+
t.notes AS notes,
|
|
17
|
+
t.date AS date,
|
|
18
|
+
t.financial_id AS imported_id,
|
|
19
|
+
t.error AS error,
|
|
20
|
+
t.starting_balance_flag AS starting_balance_flag,
|
|
21
|
+
t.transferred_id AS transfer_id,
|
|
22
|
+
t.sort_order AS sort_order,
|
|
23
|
+
t.cleared AS cleared,
|
|
24
|
+
t.tombstone AS tombstone
|
|
25
|
+
FROM transactions t
|
|
26
|
+
LEFT JOIN category_mapping cm ON cm.id = t.category
|
|
27
|
+
LEFT JOIN payee_mapping pm ON pm.id = t.description
|
|
28
|
+
WHERE
|
|
29
|
+
t.date IS NOT NULL AND
|
|
30
|
+
t.acct IS NOT NULL AND
|
|
31
|
+
(t.isChild = 0 OR t.parent_id IS NOT NULL);
|
|
32
|
+
|
|
33
|
+
COMMIT;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
BEGIN TRANSACTION;
|
|
2
|
+
|
|
3
|
+
CREATE TABLE schedules
|
|
4
|
+
(id TEXT PRIMARY KEY,
|
|
5
|
+
rule TEXT,
|
|
6
|
+
active INTEGER DEFAULT 0,
|
|
7
|
+
completed INTEGER DEFAULT 0,
|
|
8
|
+
posts_transaction INTEGER DEFAULT 0,
|
|
9
|
+
tombstone INTEGER DEFAULT 0);
|
|
10
|
+
|
|
11
|
+
CREATE TABLE schedules_next_date
|
|
12
|
+
(id TEXT PRIMARY KEY,
|
|
13
|
+
schedule_id TEXT,
|
|
14
|
+
local_next_date INTEGER,
|
|
15
|
+
local_next_date_ts INTEGER,
|
|
16
|
+
base_next_date INTEGER,
|
|
17
|
+
base_next_date_ts INTEGER);
|
|
18
|
+
|
|
19
|
+
CREATE TABLE schedules_json_paths
|
|
20
|
+
(schedule_id TEXT PRIMARY KEY,
|
|
21
|
+
payee TEXT,
|
|
22
|
+
account TEXT,
|
|
23
|
+
amount TEXT,
|
|
24
|
+
date TEXT);
|
|
25
|
+
|
|
26
|
+
ALTER TABLE transactions ADD COLUMN schedule TEXT;
|
|
27
|
+
|
|
28
|
+
COMMIT;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
export default async function runMigration(db, uuid) {
|
|
2
|
+
function getValue(node) {
|
|
3
|
+
return node.expr != null ? node.expr : node.cachedValue;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
db.execQuery(`
|
|
7
|
+
CREATE TABLE zero_budget_months
|
|
8
|
+
(id TEXT PRIMARY KEY,
|
|
9
|
+
buffered INTEGER DEFAULT 0);
|
|
10
|
+
|
|
11
|
+
CREATE TABLE zero_budgets
|
|
12
|
+
(id TEXT PRIMARY KEY,
|
|
13
|
+
month INTEGER,
|
|
14
|
+
category TEXT,
|
|
15
|
+
amount INTEGER DEFAULT 0,
|
|
16
|
+
carryover INTEGER DEFAULT 0);
|
|
17
|
+
|
|
18
|
+
CREATE TABLE reflect_budgets
|
|
19
|
+
(id TEXT PRIMARY KEY,
|
|
20
|
+
month INTEGER,
|
|
21
|
+
category TEXT,
|
|
22
|
+
amount INTEGER DEFAULT 0,
|
|
23
|
+
carryover INTEGER DEFAULT 0);
|
|
24
|
+
|
|
25
|
+
CREATE TABLE notes
|
|
26
|
+
(id TEXT PRIMARY KEY,
|
|
27
|
+
note TEXT);
|
|
28
|
+
|
|
29
|
+
CREATE TABLE kvcache (key TEXT PRIMARY KEY, value TEXT);
|
|
30
|
+
CREATE TABLE kvcache_key (id INTEGER PRIMARY KEY, key REAL);
|
|
31
|
+
`);
|
|
32
|
+
|
|
33
|
+
// Migrate budget amounts and carryover
|
|
34
|
+
let budget = db.runQuery(
|
|
35
|
+
`SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!budget-%'`,
|
|
36
|
+
[],
|
|
37
|
+
true
|
|
38
|
+
);
|
|
39
|
+
db.transaction(() => {
|
|
40
|
+
budget.map(monthBudget => {
|
|
41
|
+
let match = monthBudget.name.match(
|
|
42
|
+
/^(budget-report|budget)(\d+)!budget-(.+)$/
|
|
43
|
+
);
|
|
44
|
+
if (match == null) {
|
|
45
|
+
console.log('Warning: invalid budget month name', monthBudget.name);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
let type = match[1];
|
|
50
|
+
let month = match[2].slice(0, 4) + '-' + match[2].slice(4);
|
|
51
|
+
let dbmonth = parseInt(match[2]);
|
|
52
|
+
let cat = match[3];
|
|
53
|
+
|
|
54
|
+
let amount = parseInt(getValue(monthBudget));
|
|
55
|
+
if (isNaN(amount)) {
|
|
56
|
+
amount = 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
let sheetName = monthBudget.name.split('!')[0];
|
|
60
|
+
let carryover = db.runQuery(
|
|
61
|
+
'SELECT * FROM spreadsheet_cells WHERE name = ?',
|
|
62
|
+
[`${sheetName}!carryover-${cat}`],
|
|
63
|
+
true
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
let table = type === 'budget-report' ? 'reflect_budgets' : 'zero_budgets';
|
|
67
|
+
db.runQuery(
|
|
68
|
+
`INSERT INTO ${table} (id, month, category, amount, carryover) VALUES (?, ?, ?, ?, ?)`,
|
|
69
|
+
[
|
|
70
|
+
`${month}-${cat}`,
|
|
71
|
+
dbmonth,
|
|
72
|
+
cat,
|
|
73
|
+
amount,
|
|
74
|
+
carryover.length > 0 && getValue(carryover[0]) === 'true' ? 1 : 0
|
|
75
|
+
]
|
|
76
|
+
);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
// Migrate buffers
|
|
81
|
+
let buffers = db.runQuery(
|
|
82
|
+
`SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!buffered'`,
|
|
83
|
+
[],
|
|
84
|
+
true
|
|
85
|
+
);
|
|
86
|
+
db.transaction(() => {
|
|
87
|
+
buffers.map(buffer => {
|
|
88
|
+
let match = buffer.name.match(/^budget(\d+)!buffered$/);
|
|
89
|
+
if (match) {
|
|
90
|
+
let month = match[1].slice(0, 4) + '-' + match[1].slice(4);
|
|
91
|
+
let amount = parseInt(getValue(buffer));
|
|
92
|
+
if (isNaN(amount)) {
|
|
93
|
+
amount = 0;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
db.runQuery(
|
|
97
|
+
`INSERT INTO zero_budget_months (id, buffered) VALUES (?, ?)`,
|
|
98
|
+
[month, amount]
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// Migrate notes
|
|
105
|
+
let notes = db.runQuery(
|
|
106
|
+
`SELECT * FROM spreadsheet_cells WHERE name LIKE 'notes!%'`,
|
|
107
|
+
[],
|
|
108
|
+
true
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
let parseNote = str => {
|
|
112
|
+
try {
|
|
113
|
+
let value = JSON.parse(str);
|
|
114
|
+
return value && value !== '' ? value : null;
|
|
115
|
+
} catch (e) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
db.transaction(() => {
|
|
121
|
+
notes.forEach(note => {
|
|
122
|
+
let parsed = parseNote(getValue(note));
|
|
123
|
+
if (parsed) {
|
|
124
|
+
let [, id] = note.name.split('!');
|
|
125
|
+
db.runQuery(`INSERT INTO notes (id, note) VALUES (?, ?)`, [id, parsed]);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
db.execQuery(`
|
|
131
|
+
DROP TABLE spreadsheet_cells;
|
|
132
|
+
ANALYZE;
|
|
133
|
+
VACUUM;
|
|
134
|
+
`);
|
|
135
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
default-db.sqlite
|
|
2
|
+
migrations/1632571489012_remove_cache.js
|
|
3
|
+
migrations/1615745967948_meta.sql
|
|
4
|
+
migrations/1555786194328_remove_category_group_unique.sql
|
|
5
|
+
migrations/1567699552727_budget.sql
|
|
6
|
+
migrations/1608652596044_trans_views.sql
|
|
7
|
+
migrations/1548957970627_remove-db-version.sql
|
|
8
|
+
migrations/1561751833510_indexes.sql
|
|
9
|
+
migrations/1550601598648_payees.sql
|
|
10
|
+
migrations/1582384163573_cleared.sql
|
|
11
|
+
migrations/1618975177358_schedules.sql
|
|
12
|
+
migrations/.force-copy-windows
|
|
13
|
+
migrations/1597756566448_rules.sql
|
|
14
|
+
migrations/1616167010796_accounts_order.sql
|
|
15
|
+
migrations/1608652596043_parent_field.sql
|
|
16
|
+
migrations/1612625548236_optimize.sql
|
|
17
|
+
migrations/1614782639336_trans_views2.sql
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/build/index.html
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><title>Actual</title><link rel="canonical" href="/"/><link rel="shortcut icon" href="/favicon.ico"/><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"/><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"/><link rel="manifest" href="/site.webmanifest"/><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"/><meta name="msapplication-TileColor" content="#da532c"/><meta name="theme-color" content="#ffffff"/><link rel="stylesheet" href="/Inter/inter.css"/><style>body,html{margin:0;padding:0;font-size:13px;color:#272630}body,button,html,input{font-family:Inter,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Fira Sans','Droid Sans','Helvetica Neue',Helvetica,Arial,sans-serif}a{color:#272630;text-decoration-skip:ink}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:focus{outline-color:#2b8fed}input,textarea{font-size:1em;font-family:Inter,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Fira Sans','Droid Sans','Helvetica Neue',Helvetica,Arial,sans-serif}#root,body,html{height:100%}body{overflow:hidden}.view{align-items:stretch;border-width:0;border-style:solid;box-sizing:border-box;display:flex;flex-direction:column;margin:0;padding:0;position:relative;min-height:0;min-width:0}.js-focus-visible :focus:not(.focus-visible){outline:0}</style><link href="/static/css/3.d37e3633.chunk.css" rel="stylesheet"></head><body><div id="root"></div><script src="/static/js/runtime~main.d358c073.js"></script><script src="/static/js/3.b968e8cf.chunk.js"></script><script src="/static/js/main.24dde65e.chunk.js"></script></body></html>
|