Repository navigation
Expand file tree
/
Copy pathsolar.css
More file actions
207 lines (199 loc) · 14.9 KB
/
Copy pathsolar.css
File metadata and controls
207 lines (199 loc) · 14.9 KB
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
/* Chapter 01 components. Loaded after styles.css and theme.css. */
@layer components {
:root {
--alt: light-dark(#2479ad, #8bcfff);
--azi: light-dark(#007c9a, #6bd8f0);
--third: light-dark(#6a4fb3, #c3b2ff);
--calc-surface: light-dark(#f6f9fb, #25282c);
}
.sym { font-weight: 650; letter-spacing: .02em; color: var(--ink); }
.sym.alt { color: var(--alt); }
.sym.azi { color: var(--azi); }
.sym.third { color: var(--third); }
/* Inputs directly below each interactive drawing */
.diagram-inputs { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 12px 22px; align-items: start;
margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line); font-size: 11px; }
.inputs-label { grid-column: 1 / -1; margin: 0 0 -4px; font-size: 9px; letter-spacing: .1em; color: var(--muted); font-weight: 650; }
.diagram-inputs label { font-size: 10.5px; font-weight: 650; color: var(--ink); letter-spacing: .02em; }
.diagram-inputs .control-row { margin-top: 0; }
.diagram-inputs input[type=range] { margin-top: 2px; }
.diagram-inputs select { width: 100%; min-height: 32px; padding: 5px 8px; font-size: 11.5px; margin: 4px 0 0; }
.diagram-inputs .input-preset { min-height: 28px; font-size: 10.5px; color: var(--muted); }
.diagram-inputs .segmented { margin: 4px 0 0; }
.diagram-inputs .segmented button { min-height: 24px; padding: 3px 2px; font-size: 9.5px; }
.diagram-inputs .input-check { align-self: center; }
.diagram-inputs .input-check .check-label { margin: 0; }
.diagram-inputs .input-wide { grid-column: 1 / -1; }
.diagram-inputs .input-wide .small-label { margin: 0 0 4px; }
.diagram-inputs output { font-variant-numeric: tabular-nums; }
.play-toggle { font-size: 10px; margin-top: 4px; color: var(--accent); font-weight: 600; }
/* Interactive panels are tagged; numbered figures are static. */
.lab.is-interactive .canvas-heading > .small-label:first-child::before { content: "INTERACTIVE"; display: inline-block; margin-right: 8px; padding: 1px 6px; border: 1px solid var(--accent); border-radius: 3px; color: var(--accent); font-weight: 700; letter-spacing: .08em; }
.lab.is-interactive .canvas-heading-next > .small-label:first-child::before { content: none; }
.canvas-heading-next { margin-top: 18px; padding-top: 14px; border-top: 1px dashed var(--line); }
/* Inputs stay directly under the drawing, whatever the height of the side panel. */
.lab.is-interactive .lab-canvas { justify-content: flex-start; }
.lab-calc .calc { max-width: 760px; }
/* Dashboard: several drawings driven by one input strip, which stays in view while the card scrolls past. */
.lab-dashboard { overflow: clip; }
.dash-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px 26px; margin-top: 6px; }
.dash-panel { min-width: 0; padding-top: 12px; border-top: 1px dashed var(--line); }
.lab.is-interactive .dash-panel .canvas-heading > .small-label:first-child::before { content: none; }
.dash-calc { grid-column: 1 / -1; }
/* Section 03 time-zone dashboard: city picker on top, drawings stacked, values at the side. */
.lab-timezones .diagram-inputs { display: flex; flex-wrap: wrap; align-items: end; gap: 8px 18px; margin: 8px 0 4px; }
.lab-timezones .diagram-inputs .inputs-label { display: none; }
.lab-timezones .diagram-inputs .input:first-of-type { flex: 0 1 230px; }
.lab-timezones .diagram-inputs .input-wide { flex: 1 1 360px; }
.lab-timezones .diagram-inputs .segmented-wrap { flex-wrap: nowrap; }
.lab-timezones .diagram-inputs .segmented-wrap button { flex: 1 1 auto; padding: 3px 6px; }
.lab-timezones .lab-controls .control-kicker { margin-bottom: 8px; }
.lab-timezones .tz-key { margin: 0; }
.tz-panel { min-width: 0; padding-top: 8px; margin-top: 8px; border-top: 1px dashed var(--line); }
.lab.is-interactive .tz-panel .canvas-heading > .small-label:first-child::before { content: none; }
.tz-map svg { cursor: crosshair; }
.lab-timezones .control-note p { margin: 0 0 8px; }
.dash-calc .calc { max-width: 620px; }
.lab-dashboard .diagram-inputs { position: sticky; bottom: 0; z-index: 2; margin: 14px -22px -13px; padding: 12px 22px 13px; background: var(--sage); box-shadow: 0 -6px 12px -10px rgb(0 0 0 / .35); }
/* Text blocks */
.precedents { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); padding: 18px 0 6px; margin: 6px 0 26px; }
.precedents h3 { font-size: 14px; margin-bottom: 4px; }
.precedents p { font-size: 12px; line-height: 1.6; color: var(--body); }
.facts { max-width: 820px; font-size: 14px; padding-left: 20px; margin: 0 0 24px; }
.facts li { padding-left: 4px; margin-bottom: 7px; }
.defs { display: grid; gap: 0; max-width: 860px; margin: 0 0 22px; border-top: 1px solid var(--line); }
.defs > div { display: grid; grid-template-columns: 230px 1fr; gap: 18px; padding: 11px 0; border-bottom: 1px solid var(--line); }
.defs dt { font-size: 13px; font-weight: 650; color: var(--ink); }
.defs dd { margin: 0; font-size: 13px; line-height: 1.65; }
h3.sub { font-size: 18px; margin: 36px 0 12px; }
.callout { display: grid; grid-template-columns: 100px 1fr; gap: 20px; margin: 26px 0; padding: 16px 18px; border-left: 3px solid var(--accent); background: var(--sage); }
.callout > span { font-size: 9px; font-weight: 700; letter-spacing: .1em; color: var(--accent); padding-top: 4px; }
.callout p { margin: 0; font-size: 13px; max-width: 820px; }
.table-wrap { overflow-x: auto; margin: 10px 0 18px; }
.nomenclature { border-collapse: collapse; width: 100%; max-width: 980px; font-size: 12px; line-height: 1.5; }
.nomenclature caption { text-align: left; font-size: 10px; letter-spacing: .1em; font-weight: 650; color: var(--muted); padding-bottom: 8px; text-transform: uppercase; }
.nomenclature th, .nomenclature td { text-align: left; vertical-align: top; padding: 7px 12px 7px 0; border-bottom: 1px solid var(--line); }
.nomenclature thead th { font-size: 10px; color: var(--muted); font-weight: 650; letter-spacing: .05em; }
.nomenclature tbody th { color: var(--ink); font-weight: 650; white-space: nowrap; }
.nomenclature td:nth-child(2) { font-style: italic; white-space: nowrap; }
.nomenclature.compact { max-width: 720px; }
.nomenclature.compact td:nth-child(2) { font-style: normal; font-variant-numeric: tabular-nums; }
/* Equations */
.eq { display: flex; justify-content: space-between; align-items: center; gap: 20px; max-width: 980px; margin: 14px 0; padding: 12px 16px; border: 1px solid var(--line); border-radius: 5px; background: var(--panel); }
.eq-math { display: flex; flex-direction: column; gap: 8px; min-width: 0; max-width: 100%; color: var(--ink); }
.eq-line { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 14px; max-width: 100%; overflow-x: auto; overflow-y: hidden; padding-block: 2px; }
.eq-math math { font-family: "STIX Two Math", "Cambria Math", "Latin Modern Math", math; font-size: 19px; math-style: normal; }
.eq-math math .sym { font-weight: 400; letter-spacing: 0; }
.eq-label, .eq-note, .eq-unit { font-size: 12px; line-height: 1.5; color: var(--muted); }
.eq-label { flex-basis: 100%; letter-spacing: .02em; }
.eq-unit::before { content: "["; } .eq-unit::after { content: "]"; }
.eq-n { font-size: 12px; color: var(--muted); white-space: nowrap; }
.eq:target { border-color: var(--accent); }
/* Calculation panels */
.calc { font-size: 11.5px; line-height: 1.5; font-variant-numeric: tabular-nums; }
.calc hr { border: 0; border-top: 1px solid var(--line); margin: 6px 0; }
.calc-row { display: grid; grid-template-columns: 74px minmax(0, 1fr) auto; gap: 8px; padding: 4px 0; align-items: baseline; }
.calc-k { font-weight: 650; color: var(--ink); }
.calc-e { color: var(--muted); overflow-wrap: anywhere; }
.calc-v { color: var(--ink); text-align: right; white-space: nowrap; }
.calc-key .calc-v { color: var(--accent); font-weight: 700; }
.calc-warn .calc-e { color: var(--red); }
.calc-wide, .calc-inline { max-width: 980px; margin: 14px 0; padding: 12px 16px; border: 1px solid var(--line); border-radius: 5px; background: var(--calc-surface); }
.calc-wide .calc-row, .calc-inline .calc-row { grid-template-columns: 140px minmax(0, 1fr) auto; }
.lab-controls .calc { margin-top: 12px; }
.clock-lab .calc { padding-left: 25px; border-left: 1px solid var(--line); }
.clock-inputs input[type=number] { width: 100%; min-height: 44px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 4px; background: var(--panel); color: var(--ink); }
/* Drawings */
.diagram-host svg, .fig svg { width: 100%; height: auto; display: block; }
/* One line weight and type size across figures drawn at different scales (src/svg.js LINE, TYPE).
Strokes keep their width in screen pixels; text takes its size from --fs, corrected by --u
(src/diagram-scale.js). Hatch tiles scale with the drawing; the sundial stays true to size. */
svg.diagram:not(.exact) :is(line, polyline, polygon, path, circle, rect, ellipse, text):not(pattern *) { vector-effect: non-scaling-stroke; }
svg.diagram text[style*="--fs"] { font-size: calc(var(--fs) * var(--u, 1) * 1px); }
.diagram-host.narrow svg { max-width: 420px; margin: 0 auto; }
#d-sundial svg { max-width: 860px; margin: 0 auto; }
.lab-wide { grid-template-columns: 1fr; }
.lab-wide .lab-canvas { padding-bottom: 16px; }
.steps { font-size: 12px; padding-left: 18px; margin: 0 0 10px; }
.steps li { margin-bottom: 5px; }
.segmented-wrap { flex-wrap: wrap; }
.segmented-wrap button { flex: 1 1 45%; }
.fig { margin: 26px 0; max-width: 1100px; }
.fig-plate { background: var(--sage); border: 1px solid var(--line); border-radius: 7px; padding: 16px 18px; }
.fig figcaption { display: flex; justify-content: space-between; gap: 18px; font-size: 11px; color: var(--muted); padding-top: 8px; line-height: 1.6; }
.fig figcaption strong { color: var(--ink); font-weight: 650; }
.fig figcaption a { white-space: nowrap; text-decoration: none; color: var(--accent); font-weight: 600; }
.math-details .fig { margin: 8px 0; }
.mask-year { margin-top: 18px; font-size: 10px; font-variant-numeric: tabular-nums; }
.bar-row { display: grid; grid-template-columns: 26px 1fr 28px; gap: 6px; align-items: center; margin: 2px 0; }
.bar-row > span:last-child { text-align: right; }
.bar { position: relative; height: 7px; background: var(--line); border-radius: 2px; overflow: hidden; }
.bar i, .bar b { position: absolute; inset: 0 auto 0 0; }
.bar i { background: var(--accent-soft); }
.bar b { background: var(--accent); }
.fig-list { columns: 2; column-gap: 40px; font-size: 12px; padding-left: 18px; }
.fig-list li { margin-bottom: 6px; break-inside: avoid; }
.fig-list a { color: var(--accent); text-decoration: none; font-weight: 600; }
.fig-list span { color: var(--muted); }
/* Figure 1: the site is dragged on the world map or typed as LAT and LONG. */
.coord-stage { position: relative; }
.coord-hit { position: absolute; cursor: crosshair; touch-action: none; }
/* Figure 1 spans the full width of a lab (drawing plus calculation panel), not the 1100px figure cap. */
#fig-coordinates { max-width: none; }
#fig-coordinates .fig-plate { padding: 10px 12px; }
#fig-coordinates .fig-plate:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
/* One line of inputs above the plate: location, LAT, LONG. */
#fig-coordinates .diagram-inputs { grid-template-columns: minmax(220px, 1.6fr) repeat(2, minmax(160px, 1fr)); align-items: end; margin: 0 0 10px; padding-top: 0; border-top: 0; }
#fig-coordinates .inputs-label { display: none; }
#fig-coordinates .diagram-inputs .input-preset { color: var(--ink); }
/* The location dropdown, the number fields and the hemisphere selects share one height. */
#fig-coordinates .diagram-inputs :is(select, input) { box-sizing: border-box; height: 34px; min-height: 0; margin: 0; padding: 0 8px; font-size: 12px; line-height: 1; }
#fig-coordinates .diagram-inputs .input > select { margin-top: 4px; }
@media (max-width: 700px) { #fig-coordinates .diagram-inputs { grid-template-columns: 1fr; } }
#fig-coordinates figcaption .quiet-button { font-size: 11px; }
.coord-entry { display: flex; gap: 6px; margin-top: 4px; }
.coord-entry input { flex: 1; min-width: 0; min-height: 32px; padding: 5px 8px; border: 1px solid var(--line); border-radius: 4px; background: var(--panel); color: var(--ink); font-size: 12px; font-variant-numeric: tabular-nums; }
.coord-entry input[aria-invalid] { border-color: var(--red); }
.diagram-inputs .coord-entry select { width: auto; margin: 0; }
/* Self-test */
.quiz-ref { clear: both; font-size: 10px; letter-spacing: .06em; color: var(--muted); margin: 0 0 10px; }
.quiz-numeric { display: flex; align-items: center; gap: 12px; }
.quiz-numeric input { width: 150px; min-height: 40px; padding: 8px 10px; font-size: 14px; border: 1px solid var(--line); border-radius: 4px; background: var(--panel); color: var(--ink); font-variant-numeric: tabular-nums; }
.quiz-numeric .unit { font-size: 13px; color: var(--muted); min-width: 30px; }
.quiz-feedback { display: block; margin-top: 12px; font-size: 12px; }
.quiz-feedback:empty { display: none; }
.quiz-feedback p { margin-bottom: 6px; }
.quiz-feedback.correct { color: var(--body); border-left: 3px solid var(--accent); padding-left: 12px; }
.quiz-feedback.correct strong { color: var(--accent); }
.quiz-feedback.incorrect { color: var(--body); border-left: 3px solid var(--red); padding-left: 12px; }
.quiz-feedback.incorrect strong { color: var(--red); }
.quiz-feedback.empty { color: var(--muted); }
.quiz-eq { font-variant-numeric: tabular-nums; color: var(--ink); background: var(--calc-surface); padding: 6px 10px; border-radius: 3px; display: inline-block; margin: 2px 0 6px; }
}
@layer responsive {
@media (max-width: 1150px) {
.precedents { grid-template-columns: 1fr 1fr; }
.lab-dashboard .diagram-inputs { margin: 14px -15px -12px; padding: 12px 15px; }
}
@media (max-width: 1000px) {
.dash-grid { grid-template-columns: 1fr; }
}
@media (max-width: 650px) {
.diagram-inputs { grid-template-columns: 1fr 1fr; }
.defs > div { grid-template-columns: 1fr; gap: 3px; }
.callout { grid-template-columns: 1fr; gap: 6px; }
.eq { flex-direction: column; align-items: flex-start; gap: 4px; padding: 10px 12px; }
.eq-math { align-self: stretch; }
.eq-math math { font-size: 16px; }
.calc-wide .calc-row, .calc-inline .calc-row, .calc-row { grid-template-columns: 1fr auto; }
.calc-e { grid-column: 1 / -1; order: 3; }
.clock-lab .calc { padding: 18px 0 0; border-left: 0; border-top: 1px solid var(--line); }
.clock-inputs { grid-template-columns: 1fr 1fr; }
.fig figcaption { flex-direction: column; gap: 4px; }
.fig-list { columns: 1; }
.precedents { grid-template-columns: 1fr; gap: 10px; }
}
}
@layer print {
@media print { .diagram-inputs, .quiet-button, .play-toggle { display: none !important; } }
}