@conduction/docusaurus-preset 3.44.1 → 3.44.3
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/package.json +1 -1
- package/src/components/AgentTrace/AgentTrace.module.css +1 -1
- package/src/components/AiDisclosure/AiDisclosure.module.css +2 -2
- package/src/components/AppCrossLinks/AppCrossLinks.module.css +9 -9
- package/src/components/AppMock/AppMock.module.css +46 -46
- package/src/components/AppsGrid/AppsGrid.module.css +4 -4
- package/src/components/AppsPreview/AppsPreview.module.css +7 -7
- package/src/components/AtomZones/AtomZones.module.css +19 -19
- package/src/components/BlueprintRush/BlueprintRush.module.css +13 -13
- package/src/components/BuildMock/BuildMock.module.css +11 -11
- package/src/components/Clients/Clients.module.css +4 -4
- package/src/components/ContentCard/ContentCard.module.css +13 -13
- package/src/components/ContentDetailHero/ContentDetailHero.module.css +6 -6
- package/src/components/ContentTypeFilter/ContentTypeFilter.module.css +5 -5
- package/src/components/CtaBanner/CtaBanner.module.css +1 -1
- package/src/components/DeadlineDefender/DeadlineDefender.module.css +14 -14
- package/src/components/DetailHero/DetailHero.module.css +11 -11
- package/src/components/DiceDuel/DiceDuel.module.css +16 -16
- package/src/components/DownloadPanel/DownloadPanel.module.css +4 -4
- package/src/components/EmployeeCard/EmployeeCard.module.css +19 -19
- package/src/components/ExternalAppShelf/ExternalAppShelf.module.css +5 -5
- package/src/components/FAQ/FAQ.module.css +4 -4
- package/src/components/FacetedFilters/FacetedFilters.module.css +10 -10
- package/src/components/FeatureGrid/FeatureGrid.module.css +8 -8
- package/src/components/FeatureList/FeatureList.module.css +4 -4
- package/src/components/FeaturedCard/FeaturedCard.module.css +3 -3
- package/src/components/FlowMock/FlowMock.module.css +2 -2
- package/src/components/GameModal/GameModal.jsx +170 -154
- package/src/components/GameModal/GameModal.module.css +84 -37
- package/src/components/Hero/Hero.module.css +4 -4
- package/src/components/HexBackground/HexBackground.module.css +3 -3
- package/src/components/HexCard/HexCard.module.css +4 -4
- package/src/components/HexNetwork/HexNetwork.module.css +6 -6
- package/src/components/HiddenGame/HiddenGame.module.css +2 -2
- package/src/components/HowSteps/HowSteps.module.css +3 -3
- package/src/components/IntegrationIcon/IntegrationIcon.module.css +1 -1
- package/src/components/KanbanMock/KanbanMock.module.css +8 -8
- package/src/components/LeafCard/LeafCard.module.css +15 -15
- package/src/components/LeafMock/LeafMock.module.css +8 -8
- package/src/components/LockPick/LockPick.module.css +14 -14
- package/src/components/ManagedCommonGround/ManagedCommonGround.module.css +1 -1
- package/src/components/McpToolShelf/McpToolShelf.module.css +8 -8
- package/src/components/MockScene/MockScene.module.css +1 -1
- package/src/components/ModuleCard/ModuleCard.module.css +11 -11
- package/src/components/ModulePage/ModulePage.module.css +9 -9
- package/src/components/MonsterRun/MonsterRun.module.css +12 -12
- package/src/components/NewsletterCta/NewsletterCta.module.css +9 -9
- package/src/components/NextSteps/NextSteps.module.css +9 -9
- package/src/components/Outcomes/Outcomes.module.css +5 -5
- package/src/components/PaintByTokens/PaintByTokens.module.css +15 -15
- package/src/components/PairCard/PairCard.module.css +3 -3
- package/src/components/PartnerCard/PartnerCard.module.css +21 -21
- package/src/components/PartnerDirectory/PartnerDirectory.module.css +1 -1
- package/src/components/PartnerSidecard/PartnerSidecard.module.css +9 -9
- package/src/components/PipeFit/PipeFit.module.css +10 -10
- package/src/components/Pipeline/Pipeline.module.css +7 -7
- package/src/components/PlatformOverview/PlatformOverview.module.css +4 -4
- package/src/components/Prerequisites/Prerequisites.module.css +5 -5
- package/src/components/PullQuote/PullQuote.module.css +5 -5
- package/src/components/Reconcile/Reconcile.module.css +15 -15
- package/src/components/RecordRun/RecordRun.module.css +16 -16
- package/src/components/Redaction/Redaction.module.css +13 -13
- package/src/components/ReferenceCard/ReferenceCard.module.css +7 -7
- package/src/components/RelatedPosts/RelatedPosts.module.css +1 -1
- package/src/components/RotatingCards/RotatingCards.module.css +8 -8
- package/src/components/SetupSteps/SetupSteps.module.css +6 -6
- package/src/components/Showcase/Showcase.module.css +12 -12
- package/src/components/SidebarMock/SidebarMock.module.css +2 -2
- package/src/components/SolutionCard/SolutionCard.module.css +5 -5
- package/src/components/StampRush/StampRush.module.css +12 -12
- package/src/components/StatsStrip/StatsStrip.module.css +3 -3
- package/src/components/ThemeSeamMock/ThemeSeamMock.module.css +1 -1
- package/src/components/Troubleshooting/Troubleshooting.module.css +7 -7
- package/src/components/WidgetMock/WidgetMock.module.css +1 -1
- package/src/components/WidgetShelf/WidgetShelf.module.css +11 -11
- package/src/components/primitives/AuthorByline.module.css +5 -5
- package/src/components/primitives/Button.module.css +8 -8
- package/src/components/primitives/Card.module.css +3 -3
- package/src/components/primitives/Eyebrow.module.css +1 -1
- package/src/components/primitives/HexThumbnail.module.css +1 -1
- package/src/components/primitives/Pill.module.css +2 -2
- package/src/components/primitives/Section.module.css +2 -2
- package/src/components/primitives/SectionHead.module.css +2 -2
- package/src/css/brand.css +17 -17
- package/src/css/tokens.css +60 -0
- package/src/theme/ErrorPageContent/styles.module.css +9 -9
- package/src/theme/Navbar/styles.module.css +17 -17
|
@@ -244,174 +244,190 @@ export default function GameModal({games: gamesProp, share: shareConfig, classNa
|
|
|
244
244
|
<div className={styles.overlay} onClick={close} />
|
|
245
245
|
<div className={styles.panel}>
|
|
246
246
|
<button type="button" className={styles.close} onClick={close} aria-label={translate({id: 'preset.gameModal.close', message: 'Close', description: 'Accessible label for the close (×) button on the game-over modal'})}>×</button>
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
247
|
+
{/* Three blocks, laid out in two columns from 880px up: the
|
|
248
|
+
headline top left, what you do with the run top right,
|
|
249
|
+
and the roster of sixteen games across the bottom in two
|
|
250
|
+
columns of eight. In one column the roster alone ran past
|
|
251
|
+
the bottom of the window, which put the total and the
|
|
252
|
+
share buttons out of reach on a laptop. The DOM order is
|
|
253
|
+
the reading order either way; only the grid moves the
|
|
254
|
+
roster above the share block on a wide screen. */}
|
|
255
|
+
<div className={styles.body}>
|
|
256
|
+
<div className={styles.intro}>
|
|
257
|
+
<p className={styles.eyebrow}>{eyebrow}</p>
|
|
258
|
+
<h2 className={styles.title} id="gm-title">{title}</h2>
|
|
259
|
+
<p className={styles.subtitle}>{subtitle}</p>
|
|
250
260
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
261
|
+
{typeof event.score !== 'undefined' && (
|
|
262
|
+
<span className={styles.scorePill}>{event.summary || translate({id: 'preset.gameModal.scorePill', message: 'score: {score}', description: 'Default score pill text. {score} is the numeric score.'}, {score: event.score})}</span>
|
|
263
|
+
)}
|
|
254
264
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
265
|
+
<div className={styles.progress}>
|
|
266
|
+
<div className={styles.progressLabel}>
|
|
267
|
+
<span>
|
|
268
|
+
<Translate
|
|
269
|
+
id="preset.gameModal.progress.found"
|
|
270
|
+
description="Progress label below the game-over copy. {found} bolded count of games discovered; {total} is the total."
|
|
271
|
+
values={{
|
|
272
|
+
found: <strong>{foundCount}</strong>,
|
|
273
|
+
total: total,
|
|
274
|
+
}}>
|
|
275
|
+
{'{found} / {total} mini-games found'}
|
|
276
|
+
</Translate>
|
|
277
|
+
</span>
|
|
278
|
+
<span>{percent}%</span>
|
|
279
|
+
</div>
|
|
280
|
+
<div className={styles.progressBar}>
|
|
281
|
+
<div className={styles.progressFill} style={{width: percent + '%'}} />
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
269
284
|
</div>
|
|
270
|
-
<div className={styles.progressBar}>
|
|
271
|
-
<div className={styles.progressFill} style={{width: percent + '%'}} />
|
|
272
|
-
</div>
|
|
273
|
-
</div>
|
|
274
285
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
286
|
+
<div className={styles.roster}>
|
|
287
|
+
<ul className={styles.grid}>
|
|
288
|
+
{games.map((g) => {
|
|
289
|
+
const best = bestFor(scores, g.id);
|
|
290
|
+
const isFound = Boolean(scores.games[g.id] && scores.games[g.id].found);
|
|
291
|
+
return (
|
|
292
|
+
<li key={g.id} className={isFound ? styles.gridItemFound : styles.gridItem}>
|
|
293
|
+
<span className={styles.gridHex} aria-hidden="true" />
|
|
294
|
+
<span className={styles.gridLabel}>{g.label}</span>
|
|
295
|
+
{best !== null && (
|
|
296
|
+
<span className={styles.gridScore}>{formatScore(best, locale)}</span>
|
|
297
|
+
)}
|
|
298
|
+
</li>
|
|
299
|
+
);
|
|
300
|
+
})}
|
|
301
|
+
</ul>
|
|
302
|
+
</div>
|
|
290
303
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
304
|
+
<div className={styles.aside}>
|
|
305
|
+
{grandTotal > 0 && (
|
|
306
|
+
<p className={styles.total}>
|
|
307
|
+
<Translate
|
|
308
|
+
id="preset.gameModal.totalScore"
|
|
309
|
+
description="Total score line under the games list. {score} is the sum of the player's best score in every game."
|
|
310
|
+
values={{score: <strong>{formatScore(grandTotal, locale)}</strong>}}>
|
|
311
|
+
{'Total score {score}'}
|
|
312
|
+
</Translate>
|
|
313
|
+
</p>
|
|
314
|
+
)}
|
|
301
315
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
316
|
+
<p className={styles.cta}>
|
|
317
|
+
{/* Two messages picked here rather than one ICU plural.
|
|
318
|
+
Docusaurus's translate() only substitutes {placeholder};
|
|
319
|
+
it does not expand plurals, so an ICU string renders to
|
|
320
|
+
the reader verbatim, braces and all, in every locale. */}
|
|
321
|
+
{foundCount < total
|
|
322
|
+
? (total - foundCount === 1
|
|
323
|
+
? translate({
|
|
324
|
+
id: 'preset.gameModal.cta.remaining.one',
|
|
325
|
+
message: 'One more game hidden somewhere. Keep clicking.',
|
|
326
|
+
description: 'CTA on the game-over modal when exactly one mini-game is still hidden.',
|
|
327
|
+
})
|
|
328
|
+
: translate(
|
|
329
|
+
{
|
|
330
|
+
id: 'preset.gameModal.cta.remaining.other',
|
|
331
|
+
message: '{remaining} more games hidden somewhere. Keep clicking.',
|
|
332
|
+
description: 'CTA on the game-over modal when several mini-games are still hidden. {remaining} is how many.',
|
|
333
|
+
},
|
|
334
|
+
{remaining: total - foundCount},
|
|
335
|
+
))
|
|
314
336
|
: translate(
|
|
315
337
|
{
|
|
316
|
-
id: 'preset.gameModal.cta.
|
|
317
|
-
message: '{
|
|
318
|
-
description: 'CTA on the game-over modal when
|
|
338
|
+
id: 'preset.gameModal.cta.allFound',
|
|
339
|
+
message: 'All {total} found. You read the kit.',
|
|
340
|
+
description: 'CTA on the game-over modal when every mini-game has been discovered. {total} is how many games there are.',
|
|
319
341
|
},
|
|
320
|
-
{
|
|
321
|
-
)
|
|
322
|
-
|
|
323
|
-
{
|
|
324
|
-
id: 'preset.gameModal.cta.allFound',
|
|
325
|
-
message: 'All {total} found. You read the kit.',
|
|
326
|
-
description: 'CTA on the game-over modal when every mini-game has been discovered. {total} is how many games there are.',
|
|
327
|
-
},
|
|
328
|
-
{total},
|
|
329
|
-
)}
|
|
330
|
-
</p>
|
|
331
|
-
|
|
332
|
-
{/* Posting a score is the whole competition: there is no
|
|
333
|
-
leaderboard to submit to, so the share block is where a run
|
|
334
|
-
turns into something other people can see. */}
|
|
335
|
-
<div className={styles.share}>
|
|
336
|
-
<p className={styles.shareHead}>
|
|
337
|
-
<Translate id="preset.gameModal.share.head" description="Heading above the share buttons on the game-over modal">
|
|
338
|
-
Post your score
|
|
339
|
-
</Translate>
|
|
340
|
-
</p>
|
|
341
|
-
<p className={styles.shareHint}>
|
|
342
|
-
<Translate id="preset.gameModal.share.hint" description="Line under the share heading telling the player to attach a screenshot of the modal">
|
|
343
|
-
Add a screenshot of this card, so people can see the run behind the number.
|
|
344
|
-
</Translate>
|
|
345
|
-
</p>
|
|
342
|
+
{total},
|
|
343
|
+
)}
|
|
344
|
+
</p>
|
|
346
345
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
<button type="button" className={styles.shareBtn} onClick={shareOnLinkedIn}>
|
|
355
|
-
<Translate id="preset.gameModal.share.linkedin" description="Share-on-LinkedIn button label">LinkedIn</Translate>
|
|
356
|
-
</button>
|
|
357
|
-
<button type="button" className={styles.shareBtn} onClick={copyShareText}>
|
|
358
|
-
<Translate id="preset.gameModal.share.copy" description="Copy-the-post-text button label">Copy the post</Translate>
|
|
359
|
-
</button>
|
|
360
|
-
<span className={styles.shareStatus} role="status" aria-live="polite">
|
|
361
|
-
{copied && (
|
|
362
|
-
<Translate id="preset.gameModal.share.copied" description="Confirmation shown after the post text is copied to the clipboard">
|
|
363
|
-
Copied. Paste it with your screenshot.
|
|
346
|
+
{/* Posting a score is the whole competition: there is no
|
|
347
|
+
leaderboard to submit to, so the share block is where a run
|
|
348
|
+
turns into something other people can see. */}
|
|
349
|
+
<div className={styles.share}>
|
|
350
|
+
<p className={styles.shareHead}>
|
|
351
|
+
<Translate id="preset.gameModal.share.head" description="Heading above the share buttons on the game-over modal">
|
|
352
|
+
Post your score
|
|
364
353
|
</Translate>
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
{askInstance && (
|
|
370
|
-
/* Mastodon has no central share endpoint, so the post can
|
|
371
|
-
only be opened on the player's own instance. Asked once,
|
|
372
|
-
then remembered. */
|
|
373
|
-
<form
|
|
374
|
-
className={styles.instanceRow}
|
|
375
|
-
onSubmit={(e) => { e.preventDefault(); shareOnMastodon(e.target.elements.instance.value); }}>
|
|
376
|
-
<label className={styles.instanceLabel} htmlFor="gm-instance">
|
|
377
|
-
<Translate id="preset.gameModal.share.instanceLabel" description="Label for the input asking which Mastodon instance the player is on">
|
|
378
|
-
Your Mastodon instance
|
|
354
|
+
</p>
|
|
355
|
+
<p className={styles.shareHint}>
|
|
356
|
+
<Translate id="preset.gameModal.share.hint" description="Line under the share heading telling the player to attach a screenshot of the modal">
|
|
357
|
+
Add a screenshot of this card, so people can see the run behind the number.
|
|
379
358
|
</Translate>
|
|
380
|
-
</
|
|
381
|
-
<input
|
|
382
|
-
id="gm-instance"
|
|
383
|
-
name="instance"
|
|
384
|
-
className={styles.instanceInput}
|
|
385
|
-
defaultValue={instance}
|
|
386
|
-
placeholder="mastodon.nl"
|
|
387
|
-
autoComplete="off"
|
|
388
|
-
/>
|
|
389
|
-
<button type="submit" className={styles.shareBtn}>
|
|
390
|
-
<Translate id="preset.gameModal.share.instanceGo" description="Submit button next to the Mastodon instance input">Open</Translate>
|
|
391
|
-
</button>
|
|
392
|
-
</form>
|
|
393
|
-
)}
|
|
359
|
+
</p>
|
|
394
360
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
361
|
+
<div className={styles.shareButtons}>
|
|
362
|
+
<button
|
|
363
|
+
type="button"
|
|
364
|
+
className={styles.shareBtn}
|
|
365
|
+
onClick={() => (instance ? shareOnMastodon(instance) : setAskInstance(true))}>
|
|
366
|
+
<Translate id="preset.gameModal.share.mastodon" description="Share-on-Mastodon button label">Mastodon</Translate>
|
|
367
|
+
</button>
|
|
368
|
+
<button type="button" className={styles.shareBtn} onClick={shareOnLinkedIn}>
|
|
369
|
+
<Translate id="preset.gameModal.share.linkedin" description="Share-on-LinkedIn button label">LinkedIn</Translate>
|
|
370
|
+
</button>
|
|
371
|
+
<button type="button" className={styles.shareBtn} onClick={copyShareText}>
|
|
372
|
+
<Translate id="preset.gameModal.share.copy" description="Copy-the-post-text button label">Copy the post</Translate>
|
|
373
|
+
</button>
|
|
374
|
+
<span className={styles.shareStatus} role="status" aria-live="polite">
|
|
375
|
+
{copied && (
|
|
376
|
+
<Translate id="preset.gameModal.share.copied" description="Confirmation shown after the post text is copied to the clipboard">
|
|
377
|
+
Copied. Paste it with your screenshot.
|
|
378
|
+
</Translate>
|
|
379
|
+
)}
|
|
380
|
+
</span>
|
|
381
|
+
</div>
|
|
382
|
+
|
|
383
|
+
{askInstance && (
|
|
384
|
+
/* Mastodon has no central share endpoint, so the post can
|
|
385
|
+
only be opened on the player's own instance. Asked once,
|
|
386
|
+
then remembered. */
|
|
387
|
+
<form
|
|
388
|
+
className={styles.instanceRow}
|
|
389
|
+
onSubmit={(e) => { e.preventDefault(); shareOnMastodon(e.target.elements.instance.value); }}>
|
|
390
|
+
<label className={styles.instanceLabel} htmlFor="gm-instance">
|
|
391
|
+
<Translate id="preset.gameModal.share.instanceLabel" description="Label for the input asking which Mastodon instance the player is on">
|
|
392
|
+
Your Mastodon instance
|
|
393
|
+
</Translate>
|
|
394
|
+
</label>
|
|
395
|
+
<input
|
|
396
|
+
id="gm-instance"
|
|
397
|
+
name="instance"
|
|
398
|
+
className={styles.instanceInput}
|
|
399
|
+
defaultValue={instance}
|
|
400
|
+
placeholder="mastodon.nl"
|
|
401
|
+
autoComplete="off"
|
|
402
|
+
/>
|
|
403
|
+
<button type="submit" className={styles.shareBtn}>
|
|
404
|
+
<Translate id="preset.gameModal.share.instanceGo" description="Submit button next to the Mastodon instance input">Open</Translate>
|
|
405
|
+
</button>
|
|
406
|
+
</form>
|
|
412
407
|
)}
|
|
413
|
-
|
|
414
|
-
|
|
408
|
+
|
|
409
|
+
{shareConfig && pickLocale(shareConfig.prize) && (
|
|
410
|
+
/* The prize sentence stays text and only the rules link is
|
|
411
|
+
a link: a whole underlined paragraph reads as one long
|
|
412
|
+
link and hides where it goes. */
|
|
413
|
+
<p className={styles.prize}>
|
|
414
|
+
{pickLocale(shareConfig.prize)}
|
|
415
|
+
{shareConfig.prizeHref && (
|
|
416
|
+
<>
|
|
417
|
+
{' '}
|
|
418
|
+
<a href={shareConfig.prizeHref}>
|
|
419
|
+
{pickLocale(shareConfig.prizeLinkLabel) || translate({
|
|
420
|
+
id: 'preset.gameModal.share.rules',
|
|
421
|
+
message: 'Read the rules',
|
|
422
|
+
description: 'Link to the giveaway rules, shown after the prize line in the share block',
|
|
423
|
+
})}
|
|
424
|
+
</a>
|
|
425
|
+
</>
|
|
426
|
+
)}
|
|
427
|
+
</p>
|
|
428
|
+
)}
|
|
429
|
+
</div>
|
|
430
|
+
</div>
|
|
415
431
|
</div>
|
|
416
432
|
|
|
417
433
|
<div className={styles.actions}>
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* <GameModal /> styles. Mirrors preview/components/game-modal.css
|
|
3
3
|
* for the panel + overlay; cobalt-on-white per huisstijl.
|
|
4
|
+
*
|
|
5
|
+
* From 880px the card is a wide two-column grid: the headline and how
|
|
6
|
+
* far you are top left, the total and the share block top right, and
|
|
7
|
+
* the roster of sixteen games across the bottom in two columns of
|
|
8
|
+
* eight. In a single
|
|
9
|
+
* narrow column the roster alone ran past the bottom of the window,
|
|
10
|
+
* which put the total and the share buttons out of reach on a laptop.
|
|
11
|
+
* Below 880px it stacks in DOM order, because two columns of 190px are
|
|
12
|
+
* worse than a long card you can scroll.
|
|
4
13
|
*/
|
|
5
14
|
|
|
6
15
|
.modal {
|
|
@@ -23,13 +32,46 @@
|
|
|
23
32
|
|
|
24
33
|
.panel {
|
|
25
34
|
position: relative;
|
|
26
|
-
background:
|
|
27
|
-
color: var(--
|
|
35
|
+
background: var(--conduction-color-surface-card);
|
|
36
|
+
color: var(--conduction-color-text-body);
|
|
28
37
|
border-radius: var(--radius-xl);
|
|
29
38
|
padding: 40px 36px 32px;
|
|
30
39
|
width: calc(100% - 48px);
|
|
31
40
|
max-width: 520px;
|
|
32
41
|
box-shadow: var(--shadow-3, 0 30px 80px -20px rgba(10, 23, 47, 0.4));
|
|
42
|
+
/* A short window is still a window. Scrolling the card is worse than
|
|
43
|
+
fitting and far better than a Play again button nobody can reach. */
|
|
44
|
+
max-height: calc(100vh - 48px);
|
|
45
|
+
overflow-y: auto;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.body {
|
|
49
|
+
display: grid;
|
|
50
|
+
gap: 0;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@media (min-width: 880px) {
|
|
54
|
+
.panel { max-width: 880px; }
|
|
55
|
+
.body {
|
|
56
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
57
|
+
grid-template-areas:
|
|
58
|
+
'intro aside'
|
|
59
|
+
'roster roster';
|
|
60
|
+
column-gap: 40px;
|
|
61
|
+
}
|
|
62
|
+
.intro { grid-area: intro; }
|
|
63
|
+
.aside { grid-area: aside; }
|
|
64
|
+
.roster { grid-area: roster; }
|
|
65
|
+
|
|
66
|
+
/* Eight and eight rather than sixteen. Multi-column fills downwards,
|
|
67
|
+
so the list still reads in roster order. */
|
|
68
|
+
.grid {
|
|
69
|
+
display: block;
|
|
70
|
+
columns: 2;
|
|
71
|
+
column-gap: 32px;
|
|
72
|
+
}
|
|
73
|
+
.gridItem,
|
|
74
|
+
.gridItemFound { break-inside: avoid; }
|
|
33
75
|
}
|
|
34
76
|
|
|
35
77
|
.close {
|
|
@@ -40,15 +82,15 @@
|
|
|
40
82
|
height: 32px;
|
|
41
83
|
border-radius: 50%;
|
|
42
84
|
border: none;
|
|
43
|
-
background: var(--
|
|
44
|
-
color: var(--
|
|
85
|
+
background: var(--conduction-color-surface-subtle);
|
|
86
|
+
color: var(--conduction-color-text-body);
|
|
45
87
|
font-size: 20px;
|
|
46
88
|
cursor: pointer;
|
|
47
89
|
line-height: 1;
|
|
48
90
|
font-family: inherit;
|
|
49
91
|
transition: background 120ms ease;
|
|
50
92
|
}
|
|
51
|
-
.close:hover { background: var(--
|
|
93
|
+
.close:hover { background: var(--conduction-color-surface-sunken); }
|
|
52
94
|
|
|
53
95
|
.eyebrow {
|
|
54
96
|
font-family: var(--conduction-typography-font-family-code);
|
|
@@ -64,13 +106,13 @@
|
|
|
64
106
|
font-size: 28px;
|
|
65
107
|
font-weight: 700;
|
|
66
108
|
letter-spacing: -0.02em;
|
|
67
|
-
color: var(--
|
|
109
|
+
color: var(--conduction-color-text-strong);
|
|
68
110
|
margin: 0 0 8px;
|
|
69
111
|
}
|
|
70
112
|
|
|
71
113
|
.subtitle {
|
|
72
114
|
font-size: 15px;
|
|
73
|
-
color: var(--
|
|
115
|
+
color: var(--conduction-color-text-body);
|
|
74
116
|
line-height: 1.55;
|
|
75
117
|
margin: 0 0 16px;
|
|
76
118
|
}
|
|
@@ -79,19 +121,22 @@
|
|
|
79
121
|
display: inline-flex;
|
|
80
122
|
align-items: center;
|
|
81
123
|
gap: 6px;
|
|
82
|
-
background: var(--
|
|
83
|
-
color: var(--
|
|
124
|
+
background: var(--conduction-color-surface-subtle);
|
|
125
|
+
color: var(--conduction-color-text-strong);
|
|
84
126
|
font-family: var(--conduction-typography-font-family-code);
|
|
85
127
|
font-size: 12px;
|
|
86
128
|
letter-spacing: 0.04em;
|
|
87
129
|
padding: 6px 12px;
|
|
88
130
|
border-radius: var(--radius-pill);
|
|
89
|
-
margin-bottom:
|
|
131
|
+
margin-bottom: 8px;
|
|
90
132
|
}
|
|
91
133
|
|
|
92
134
|
.progress {
|
|
93
135
|
margin: 24px 0 16px;
|
|
94
136
|
}
|
|
137
|
+
/* Last thing in the headline column, directly above the roster it
|
|
138
|
+
counts. Nothing follows it there, so it needs no tail margin. */
|
|
139
|
+
.intro .progress { margin-bottom: 0; }
|
|
95
140
|
.progressLabel {
|
|
96
141
|
display: flex;
|
|
97
142
|
justify-content: space-between;
|
|
@@ -99,14 +144,14 @@
|
|
|
99
144
|
font-size: 11px;
|
|
100
145
|
letter-spacing: 0.06em;
|
|
101
146
|
text-transform: uppercase;
|
|
102
|
-
color: var(--
|
|
147
|
+
color: var(--conduction-color-text-muted);
|
|
103
148
|
margin-bottom: 8px;
|
|
104
149
|
}
|
|
105
|
-
.progressLabel strong { color: var(--
|
|
150
|
+
.progressLabel strong { color: var(--conduction-color-text-strong); font-weight: 700; }
|
|
106
151
|
|
|
107
152
|
.progressBar {
|
|
108
153
|
height: 6px;
|
|
109
|
-
background: var(--
|
|
154
|
+
background: var(--conduction-color-surface-subtle);
|
|
110
155
|
border-radius: 3px;
|
|
111
156
|
overflow: hidden;
|
|
112
157
|
}
|
|
@@ -122,17 +167,18 @@
|
|
|
122
167
|
margin: 0 0 20px;
|
|
123
168
|
display: flex;
|
|
124
169
|
flex-direction: column;
|
|
125
|
-
gap:
|
|
170
|
+
gap: 4px;
|
|
126
171
|
}
|
|
127
172
|
.gridItem,
|
|
128
173
|
.gridItemFound {
|
|
129
174
|
display: flex;
|
|
130
175
|
align-items: center;
|
|
131
176
|
gap: 10px;
|
|
132
|
-
font-size:
|
|
133
|
-
|
|
177
|
+
font-size: 13px;
|
|
178
|
+
line-height: 1.5;
|
|
179
|
+
color: var(--conduction-color-text-muted);
|
|
134
180
|
}
|
|
135
|
-
.gridItemFound { color: var(--
|
|
181
|
+
.gridItemFound { color: var(--conduction-color-text-strong); font-weight: 500; }
|
|
136
182
|
.gridHex {
|
|
137
183
|
width: 10px;
|
|
138
184
|
height: 12px;
|
|
@@ -147,17 +193,17 @@
|
|
|
147
193
|
.gridScore {
|
|
148
194
|
font-family: var(--conduction-typography-font-family-code);
|
|
149
195
|
font-size: 12px;
|
|
150
|
-
color: var(--
|
|
196
|
+
color: var(--conduction-color-text-body);
|
|
151
197
|
font-variant-numeric: tabular-nums;
|
|
152
198
|
}
|
|
153
199
|
|
|
154
200
|
.total {
|
|
155
|
-
margin:
|
|
201
|
+
margin: 0;
|
|
156
202
|
font-size: 15px;
|
|
157
|
-
color: var(--
|
|
203
|
+
color: var(--conduction-color-text-body);
|
|
158
204
|
}
|
|
159
205
|
.total strong {
|
|
160
|
-
color: var(--
|
|
206
|
+
color: var(--conduction-color-text-strong);
|
|
161
207
|
font-family: var(--conduction-typography-font-family-code);
|
|
162
208
|
font-variant-numeric: tabular-nums;
|
|
163
209
|
}
|
|
@@ -169,7 +215,7 @@
|
|
|
169
215
|
.share {
|
|
170
216
|
margin: 20px 0 0;
|
|
171
217
|
padding: 16px;
|
|
172
|
-
background: var(--
|
|
218
|
+
background: var(--conduction-color-surface-subtle);
|
|
173
219
|
border-radius: var(--radius-md);
|
|
174
220
|
}
|
|
175
221
|
|
|
@@ -177,13 +223,13 @@
|
|
|
177
223
|
margin: 0 0 4px;
|
|
178
224
|
font-weight: 600;
|
|
179
225
|
font-size: 14px;
|
|
180
|
-
color: var(--
|
|
226
|
+
color: var(--conduction-color-text-strong);
|
|
181
227
|
}
|
|
182
228
|
|
|
183
229
|
.shareHint {
|
|
184
230
|
margin: 0 0 12px;
|
|
185
231
|
font-size: 13px;
|
|
186
|
-
color: var(--
|
|
232
|
+
color: var(--conduction-color-text-muted);
|
|
187
233
|
}
|
|
188
234
|
|
|
189
235
|
.shareButtons {
|
|
@@ -194,8 +240,8 @@
|
|
|
194
240
|
}
|
|
195
241
|
|
|
196
242
|
.shareBtn {
|
|
197
|
-
background:
|
|
198
|
-
color: var(--
|
|
243
|
+
background: var(--conduction-color-surface-card);
|
|
244
|
+
color: var(--conduction-color-text-body);
|
|
199
245
|
border: 1px solid var(--c-cobalt-200);
|
|
200
246
|
padding: 8px 14px;
|
|
201
247
|
border-radius: var(--radius-pill);
|
|
@@ -205,7 +251,7 @@
|
|
|
205
251
|
font-family: inherit;
|
|
206
252
|
transition: border-color 120ms ease, color 120ms ease;
|
|
207
253
|
}
|
|
208
|
-
.shareBtn:hover { border-color: var(--c-blue-cobalt); color: var(--
|
|
254
|
+
.shareBtn:hover { border-color: var(--c-blue-cobalt); color: var(--conduction-color-text-default); }
|
|
209
255
|
|
|
210
256
|
.shareStatus {
|
|
211
257
|
font-size: 12px;
|
|
@@ -220,7 +266,7 @@
|
|
|
220
266
|
gap: 8px;
|
|
221
267
|
margin-top: 12px;
|
|
222
268
|
}
|
|
223
|
-
.instanceLabel { font-size: 12px; color: var(--
|
|
269
|
+
.instanceLabel { font-size: 12px; color: var(--conduction-color-text-body); }
|
|
224
270
|
.instanceInput {
|
|
225
271
|
flex: 1;
|
|
226
272
|
min-width: 160px;
|
|
@@ -229,8 +275,8 @@
|
|
|
229
275
|
border-radius: var(--radius-md);
|
|
230
276
|
font-family: var(--conduction-typography-font-family-code);
|
|
231
277
|
font-size: 13px;
|
|
232
|
-
color: var(--
|
|
233
|
-
background:
|
|
278
|
+
color: var(--conduction-color-text-strong);
|
|
279
|
+
background: var(--conduction-color-surface-card);
|
|
234
280
|
}
|
|
235
281
|
.instanceInput:focus {
|
|
236
282
|
outline: 2px solid var(--c-blue-cobalt);
|
|
@@ -241,14 +287,14 @@
|
|
|
241
287
|
.prize {
|
|
242
288
|
margin: 12px 0 0;
|
|
243
289
|
font-size: 13px;
|
|
244
|
-
color: var(--
|
|
290
|
+
color: var(--conduction-color-text-body);
|
|
245
291
|
}
|
|
246
|
-
.prize a { color: var(--
|
|
292
|
+
.prize a { color: var(--conduction-color-text-default); }
|
|
247
293
|
|
|
248
294
|
.cta {
|
|
249
295
|
font-size: 13px;
|
|
250
|
-
color: var(--
|
|
251
|
-
margin:
|
|
296
|
+
color: var(--conduction-color-text-muted);
|
|
297
|
+
margin: 10px 0 0;
|
|
252
298
|
font-style: italic;
|
|
253
299
|
}
|
|
254
300
|
|
|
@@ -256,11 +302,12 @@
|
|
|
256
302
|
display: flex;
|
|
257
303
|
gap: 8px;
|
|
258
304
|
justify-content: flex-end;
|
|
305
|
+
margin-top: 20px;
|
|
259
306
|
}
|
|
260
307
|
|
|
261
308
|
.btnSecondary {
|
|
262
|
-
background:
|
|
263
|
-
color: var(--
|
|
309
|
+
background: var(--conduction-color-surface-card);
|
|
310
|
+
color: var(--conduction-color-text-body);
|
|
264
311
|
border: 1px solid var(--c-cobalt-200);
|
|
265
312
|
padding: 10px 18px;
|
|
266
313
|
border-radius: var(--radius-md);
|
|
@@ -270,7 +317,7 @@
|
|
|
270
317
|
font-family: inherit;
|
|
271
318
|
transition: border-color 120ms ease;
|
|
272
319
|
}
|
|
273
|
-
.btnSecondary:hover { border-color: var(--c-blue-cobalt); color: var(--
|
|
320
|
+
.btnSecondary:hover { border-color: var(--c-blue-cobalt); color: var(--conduction-color-text-default); }
|
|
274
321
|
|
|
275
322
|
.btnPrimary {
|
|
276
323
|
background: var(--c-blue-cobalt);
|