File size: 10,618 Bytes
69eaa4c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/* The math path (static/math.js). Layout: one narrow column like the Arabic path: progress, "go on here", then each
   unit's skills as a winding trail of circles; a skill opens in a bottom sheet. It sits over the Arabic page, which
   stays loaded underneath. The math class is black in either system theme, as its opening screen is: the path sets
   the app's colour tokens itself, with a blue accent and a colour per unit. */
@import url("https://fonts.googleapis.com/css2?family=STIX+Two+Text:wght@400;600&display=swap");
#mathView{
  color-scheme:dark;
  --bg:#000000; --surface:#121413; --ink:#F4F2EC; --muted:#9EA7A0; --line:#2C312E;
  --ok:#6CC08A; --ok-bg:#12291B; --sumac:#F08A96; --sumac-bg:#33161B; --amber:#E0B45A; --amber-bg:#2E2512;
  --olive:#A6C77A; --olive-soft:#1E2618;
  --mx-accent:#7FA6F0; --mx-accent-soft:#18243A; --mx-on-accent:#06101F;
  --u-f:#A3AD9F; --u-t:#93B85F; --u-n:#5CC2B2; --u-q:#6FB3D2; --u-p:#E0B45A; --u-w:#D98AAE;
  --mx-scrim:rgb(0 0 0 / .7);
  --f-math:"STIX Two Text","Cambria Math","Times New Roman",serif;
}
html.math-on, html.math-on body{overflow:hidden}
#mathView{position:fixed;inset:0;z-index:60;overflow:auto;overscroll-behavior:contain;background:var(--bg);color:var(--ink);
  padding-block:max(12px, env(safe-area-inset-top, 0px)) calc(32px + env(safe-area-inset-bottom, 0px));
  padding-left:max(16px, env(safe-area-inset-left, 0px));padding-right:max(16px, env(safe-area-inset-right, 0px))}
#mathView[hidden]{display:none}
#mathView .u-f{--uc:var(--u-f)} #mathView .u-t{--uc:var(--u-t)} #mathView .u-n{--uc:var(--u-n)}
#mathView .u-q{--uc:var(--u-q)} #mathView .u-p{--uc:var(--u-p)} #mathView .u-w{--uc:var(--u-w)}
#mathView h1,#mathView h2,#mathView h3{font-family:var(--f-display);font-weight:400;margin:0;text-wrap:balance}
#mathView button{font-family:var(--f-body)}
#mathView button:focus-visible{outline:3px solid var(--mx-accent);outline-offset:2px}
#mathView .m{font-family:var(--f-math);direction:ltr;unicode-bidi:isolate;white-space:nowrap;font-size:1.05em}
.mx-wrap{max-width:680px;margin:0 auto;display:flex;flex-direction:column;gap:16px}
.mx-top{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.mx-top h1{font-size:28px;line-height:1.15;color:var(--mx-accent)}
.mx-sub{margin:2px 0 0;color:var(--muted);font-size:15px}
.mx-acts{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.mx-btn{border:1px solid var(--mx-accent);background:transparent;color:var(--mx-accent);font:700 14px/1 var(--f-body);padding:9px 14px;border-radius:999px;cursor:pointer}
.mx-btn.solid{background:var(--mx-accent);color:var(--mx-on-accent)}
.mx-note{margin:0;color:var(--muted);font-size:14px}

/* progress: a ring for the whole path, a bar per unit */
.mx-progress{display:flex;gap:16px;align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:14px}
.mx-ring{flex:none;width:92px;height:92px;border-radius:50%;display:grid;place-content:center;text-align:center;
  background:radial-gradient(closest-side,var(--surface) 78%,transparent 80%),conic-gradient(var(--mx-accent) calc(var(--p)*1%),var(--line) 0)}
.mx-ring b{font:400 28px/1 var(--f-display);color:var(--mx-accent);font-variant-numeric:tabular-nums}
.mx-ring small{font-size:12px;color:var(--muted)}
.mx-units{flex:1;min-width:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px 12px}
.mx-su{display:flex;flex-direction:column;gap:4px;min-width:0}
.mx-su b{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mx-su small{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.mx-bar{height:6px;border-radius:3px;background:var(--line);overflow:hidden}
.mx-bar i{display:block;height:100%;background:var(--uc)}
@media (max-width:480px){.mx-progress{flex-direction:column;align-items:stretch}.mx-ring{align-self:center}.mx-units{grid-template-columns:repeat(2,minmax(0,1fr))}}

.mx-next{display:flex;flex-direction:column;gap:2px;align-items:flex-start;text-align:start;border:0;border-radius:16px;padding:14px 16px;cursor:pointer;
  background:var(--mx-accent);color:var(--mx-on-accent)}
.mx-next small{font-size:13px;opacity:.85}
.mx-next b{font-size:19px}

/* the trail */
.mx-unit{display:flex;flex-direction:column;gap:4px}
.mx-uhead{display:flex;align-items:baseline;gap:4px 10px;flex-wrap:wrap;border-bottom:2px solid var(--uc);padding-bottom:6px}
.mx-uhead h2{font-size:21px;color:var(--uc)}
.mx-uhead span{font-size:13px;color:var(--muted)}
.mx-trail{display:flex;flex-direction:column;gap:4px;padding-top:8px}
.mx-node{display:flex;align-items:center;gap:12px;width:min(76%,330px);padding:6px 8px;border:0;border-radius:14px;background:none;color:inherit;text-align:start;cursor:pointer}
.mx-node:hover{background:var(--surface)}
.mx-trail .mx-node:nth-child(4n+2){margin-inline-start:12%}
.mx-trail .mx-node:nth-child(4n+3){margin-inline-start:24%}
.mx-trail .mx-node:nth-child(4n+4){margin-inline-start:12%}
.mx-dot{flex:none;width:54px;height:54px;border-radius:50%;display:grid;place-items:center;background:var(--surface);border:3px solid var(--uc);color:var(--uc);font:400 20px/1 var(--f-display)}
.mx-lbl{display:flex;flex-direction:column;gap:3px;min-width:0}
.mx-lbl b{font-size:16px;line-height:1.25}
.mx-lbl small{display:flex;gap:6px;flex-wrap:wrap}
.st-done .mx-dot{background:var(--uc);color:var(--surface)}
.st-locked .mx-dot{border-style:dashed;border-color:var(--line);color:var(--muted)}
.st-locked .mx-lbl b{color:var(--muted)}
.mx-node.here .mx-dot{box-shadow:0 0 0 5px var(--mx-accent-soft)}
.mx-core,.mx-go{font:700 11px/1 var(--f-body);padding:4px 7px;border-radius:999px;white-space:nowrap}
.mx-core{background:var(--olive-soft);color:var(--olive)}
.mx-go{background:var(--mx-accent);color:var(--mx-on-accent)}

/* a skill's sheet */
.mx-layer[hidden]{display:none}
.mx-scrim{position:fixed;inset:0;z-index:61;background:var(--mx-scrim)}
.mx-sheet{position:fixed;inset:auto 0 0 0;z-index:62;max-height:88vh;overflow:auto;background:var(--surface);border-radius:20px 20px 0 0;
  box-shadow:0 -6px 30px rgb(0 0 0/.2);display:flex;flex-direction:column;gap:14px;
  padding-block:16px calc(24px + env(safe-area-inset-bottom, 0px));
  padding-left:max(18px, env(safe-area-inset-left, 0px));padding-right:max(18px, env(safe-area-inset-right, 0px))}
@media (min-width:720px){.mx-sheet{inset:auto calc(50% - 330px) 0 calc(50% - 330px)}}
.mx-sheet>p{margin:0}
.mx-shtop{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}
.mx-shtop h3{font-size:24px;line-height:1.2;margin-top:8px}
.mx-uchip{display:inline-block;font:700 13px/1 var(--f-body);color:var(--uc);border:1px solid var(--uc);padding:5px 10px;border-radius:999px}
.mx-src{display:block;color:var(--muted);font-size:13px;margin-top:4px}
.mx-x{border:0;background:none;color:var(--muted);font-size:22px;line-height:1;padding:6px 10px;border-radius:8px;cursor:pointer}
.mx-hint{background:var(--amber-bg);color:var(--ink);border-radius:12px;padding:10px 12px;font-size:15px;display:flex;flex-direction:column;gap:6px}
.mx-q{background:var(--bg);border-radius:14px;padding:14px;display:flex;flex-direction:column;gap:10px}
.mx-q>p{margin:0;font-size:19px}
.mx-choices{display:grid;grid-template-columns:1fr 1fr;gap:8px}
@media (max-width:420px){.mx-choices{grid-template-columns:1fr}}
.mx-choices button{padding:12px;border-radius:12px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font:600 17px/1.3 var(--f-body);cursor:pointer}
.mx-choices button:hover{border-color:var(--mx-accent)}
.mx-choices button.right{background:var(--ok-bg);border-color:var(--ok)}
.mx-choices button.wrong{background:var(--sumac-bg);border-color:var(--sumac)}
.mx-ok,.mx-bad{border-radius:12px;padding:12px;display:flex;flex-direction:column;gap:6px;align-items:flex-start}
.mx-ok{background:var(--ok-bg);color:var(--ok)}
.mx-bad{background:var(--sumac-bg)}
.mx-bad b{color:var(--sumac)}
.mx-small{font-size:13px;color:var(--muted)}
.mx-sec h4{margin:0 0 6px;font:700 12px/1 var(--f-body);letter-spacing:.06em;color:var(--muted)}
.mx-chips{display:flex;gap:6px;flex-wrap:wrap}
.mx-chips em{font-style:normal;color:var(--muted);font-size:14px}
.mx-chip{border:1px solid var(--uc);background:var(--bg);color:var(--ink);font:600 14px/1 var(--f-body);padding:7px 10px;border-radius:999px;cursor:pointer}
.mx-chip.is-done{background:var(--uc);color:var(--surface)}
.mx-plot{direction:ltr;align-self:center;width:100%;max-width:340px}
.mx-plot svg{display:block;width:100%;height:auto}
.mx-plot .g{stroke:var(--line);stroke-width:1}
.mx-plot .a{stroke:var(--muted);stroke-width:1.5}
.mx-plot .c{fill:none;stroke:var(--uc);stroke-width:2.5}
.mx-plot circle{fill:var(--uc)}
.mx-plot text{font:11px var(--f-body);fill:var(--muted)}
/* a photographed problem */
.mx-photo{display:flex;flex-direction:column;gap:3px;align-items:flex-start;text-align:start;border:1.5px dashed var(--mx-accent);border-radius:16px;
  padding:14px 16px;background:transparent;color:var(--ink);cursor:pointer}
.mx-photo b{font-size:18px;color:var(--mx-accent)}
.mx-photo small{font-size:14px;color:var(--muted)}
.mx-thumb{display:block;max-width:100%;max-height:180px;object-fit:contain;align-self:center;border-radius:10px;border:1px solid var(--line)}
.mx-pbody{display:flex;flex-direction:column;gap:12px}
.mx-wait{display:flex;flex-direction:column;align-items:center;gap:6px;padding:16px;text-align:center}
.mx-wait small{color:var(--muted)}
.mx-spin{width:26px;height:26px;border-radius:50%;border:3px solid var(--line);border-top-color:var(--mx-accent);animation:mx-spin 1s linear infinite}
@keyframes mx-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.mx-spin{animation:none}}
.mx-read{background:var(--bg);border-radius:12px;padding:10px 12px;display:flex;flex-direction:column;gap:2px;align-items:flex-start}
.mx-read small{color:var(--muted);font-size:13px}
.mx-read p{margin:0;font-size:20px}
.mx-link{border:0;background:none;padding:2px 0;color:var(--mx-accent);font:600 14px/1.3 var(--f-body);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.mx-steps{margin:0;padding-inline-start:22px;display:flex;flex-direction:column;gap:10px}
.mx-steps li{padding-inline-start:4px;line-height:1.5}
.mx-steps li::marker{color:var(--mx-accent);font-weight:700}
.mx-work{margin-top:6px;padding:8px 10px;border-radius:10px;background:var(--mx-accent-soft)}
.mx-row{display:flex;gap:8px;flex-wrap:wrap}
@media (prefers-reduced-motion:no-preference){.mx-sheet{animation:mx-up .22s ease-out}@keyframes mx-up{from{transform:translateY(30px);opacity:.4}}}