File size: 11,610 Bytes
e3521a3 | 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 | /* Mountain-climb leaderboard. Companion to mountain.js. Uses the site tokens from
* styles.css (--paper, --surface, --ink, --soft, --muted, --line, --strong-line, --tint, --sans, --mono)
* and defines every colour the drawing needs on the component itself, for light and dark. */
.mountain{
--mtn-sky:#e9eef5;--mtn-sky-low:#ffffff;
--mtn-far:#e3e8ef;--mtn-mid:#d2dae4;--mtn-near:#b9c4d1;--mtn-shade:#6f7f93;--mtn-foot:#a2aebd;
--mtn-snow:#ffffff;--mtn-cap:#ffffff;--mtn-outline:#4b5665;--mtn-haze:#ffffff;
--mtn-line:#7d8794;--mtn-route:#2f3742;--mtn-flag:#d6382a;--mtn-pole:#262a30;
--mtn-gold:#e8b421;--mtn-silver:#c9d0da;--mtn-bronze:#c98a52;--mtn-on-gold:#1a1a1a;
--mtn-marker:#28313c;--mtn-marker-text:#ffffff;--mtn-marker-ring:#ffffff;--mtn-focus:#191919;
--mtn-pill:#20272f;--mtn-pill-text:#ffffff;--mtn-pill-edge:rgba(255,255,255,.55);--mtn-badge:rgba(255,255,255,.16);
--mtn-text:#191919;--mtn-muted:#5d6672;--mtn-halo:rgba(255,255,255,.9);--mtn-trail:#1f262e;
display:block;margin:0;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--ink);overflow:hidden;font-family:var(--sans,Inter,Arial,sans-serif)}
html[data-theme="dark"] .mountain{
--mtn-sky:#0d121a;--mtn-sky-low:#171b22;
--mtn-far:#1e2632;--mtn-mid:#293340;--mtn-near:#38434f;--mtn-shade:#141a22;--mtn-foot:#28313c;
--mtn-snow:#d5dde7;--mtn-cap:#c9d2dd;--mtn-outline:#8892a0;--mtn-haze:#171b22;
--mtn-line:#6c7684;--mtn-route:#dfe5ec;--mtn-flag:#e4493a;--mtn-pole:#e8e8e8;
--mtn-gold:#f2c13d;--mtn-silver:#aeb7c3;--mtn-bronze:#cf925c;--mtn-on-gold:#1a1a1a;
--mtn-marker:#e9edf2;--mtn-marker-text:#151515;--mtn-marker-ring:#111111;--mtn-focus:#eeeeee;
--mtn-pill:#e9ebee;--mtn-pill-text:#151515;--mtn-pill-edge:rgba(0,0,0,.55);--mtn-badge:rgba(0,0,0,.12);
--mtn-text:#eeeeee;--mtn-muted:#a5adb8;--mtn-halo:rgba(17,17,17,.9);--mtn-trail:#e6eaef}
.mountain>script{display:none}
.mountain-canvas{display:block}
/* Header and caption. */
.mountain-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;padding:18px 22px 14px;border-bottom:1px solid var(--line)}
.mountain-title{margin:0;font-size:17px;font-weight:600;letter-spacing:-.015em;line-height:1.35;color:var(--ink)}
.mountain-subtitle{margin:4px 0 0;font-size:13px;line-height:1.6;color:var(--muted)}
.mountain-stamp{margin:0;font-family:var(--mono,ui-monospace,monospace);font-size:12px;line-height:1.6;color:var(--muted);white-space:nowrap}
.mountain-caption{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px 20px;padding:12px 22px 14px;border-top:1px solid var(--line);font-size:12px;line-height:1.6;color:var(--muted)}
.mountain-note{margin:0}
.mountain-legend{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px 16px}
.mountain-legend li{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}
.mtn-key{display:inline-block;width:11px;height:11px;border-radius:50%;background:var(--mtn-marker);border:2px solid var(--mtn-marker-ring);box-sizing:content-box}
.mtn-key--gold{background:var(--mtn-gold)}
.mtn-key--internal{border:1.5px dashed var(--mtn-marker);background:transparent;width:10px;height:10px}
.mtn-key--trail{width:20px;height:0;border:0;border-top:2px dashed var(--mtn-trail);border-radius:0;background:transparent}
/* Stage: the drawing plus the pill overlay. */
.mountain-stage{position:relative;display:block;width:100%;line-height:0}
.mountain-svg{display:block;width:100%;height:auto;font-family:inherit;font-variant-numeric:tabular-nums}
.mountain-svg text{font-family:inherit;line-height:1}
/* Terrain. */
.mtn-sky-top{stop-color:var(--mtn-sky)}
.mtn-sky-low{stop-color:var(--mtn-sky-low)}
.mtn-haze-top{stop-color:var(--mtn-haze);stop-opacity:0}
.mtn-haze-low{stop-color:var(--mtn-haze);stop-opacity:.55}
.mtn-far{fill:var(--mtn-far)}
.mtn-mid{fill:var(--mtn-mid)}
.mtn-cap{fill:var(--mtn-cap);opacity:.85}
.mtn-near{fill:var(--mtn-near)}
.mtn-snow{fill:var(--mtn-snow)}
.mtn-shade{fill:var(--mtn-shade);opacity:.28}
.mtn-stria{fill:none;stroke:var(--mtn-outline);stroke-width:1;opacity:.14;stroke-linejoin:round}
.mtn-foot{fill:var(--mtn-foot)}
.mtn-outline{fill:none;stroke:var(--mtn-outline);stroke-width:1;stroke-linejoin:round;opacity:.42}
.mtn-outline--foot{opacity:.22}
.mtn-contour{stroke:var(--mtn-line);stroke-width:1;stroke-dasharray:2 7;stroke-linecap:round;opacity:.38}
.mtn-contour-label{fill:var(--mtn-muted);font-size:12px;paint-order:stroke;stroke:var(--mtn-halo);stroke-width:3px;stroke-linejoin:round}
.mtn-base{stroke:var(--mtn-line);stroke-width:1}
.mtn-route{stroke:var(--mtn-route);stroke-width:2.2;stroke-dasharray:0 7;stroke-linecap:round;opacity:.72}
.mtn-pole{stroke:var(--mtn-pole);stroke-width:2;stroke-linecap:round}
.mtn-flag{fill:var(--mtn-flag)}
.mtn-peak-label{fill:var(--mtn-text);font-size:12px;font-weight:500;paint-order:stroke;stroke:var(--mtn-halo);stroke-width:3px;stroke-linejoin:round}
.mtn-stamp{fill:var(--mtn-muted);font-family:var(--mono,ui-monospace,monospace);font-size:12px}
/* Connectors, trails. */
.mtn-connector{stroke:var(--mtn-line);stroke-width:1;opacity:.5;transition:opacity .15s,stroke-width .15s}
.mtn-connector.is-active{stroke:var(--mtn-focus);stroke-width:1.5;opacity:1}
.mtn-trail-path{stroke:var(--mtn-trail);stroke-width:1.75;stroke-dasharray:6 5;stroke-linecap:round}
.mtn-trail-head{fill:var(--mtn-trail)}
.mtn-trail-label{fill:var(--mtn-text);font-size:12px;font-weight:600;paint-order:stroke;stroke:var(--mtn-halo);stroke-width:4px;stroke-linejoin:round}
/* Markers. */
.mtn-marker{cursor:default}
.mtn-marker-dot{fill:var(--mtn-marker);stroke:var(--mtn-marker-ring);stroke-width:2;transition:stroke-width .15s}
.mtn-marker--leader .mtn-marker-dot{fill:var(--mtn-gold);stroke-width:2.5}
.mtn-marker--silver .mtn-marker-dot{stroke:var(--mtn-silver);stroke-width:3.5}
.mtn-marker--bronze .mtn-marker-dot{stroke:var(--mtn-bronze);stroke-width:3.5}
.mtn-marker--waypoint .mtn-marker-dot{fill:var(--mtn-sky-low);stroke:var(--mtn-marker);stroke-width:1.5}
.mtn-marker-num{fill:var(--mtn-marker-text);font-size:12px;font-weight:700;pointer-events:none}
.mtn-marker--leader .mtn-marker-num{fill:var(--mtn-on-gold);font-size:14px}
.mtn-marker-halo{fill:none;stroke:var(--mtn-focus);stroke-width:2;opacity:0;transition:opacity .15s}
.mtn-marker--leader .mtn-marker-halo{stroke:var(--mtn-gold);stroke-width:1.5;opacity:.55}
.mtn-marker.is-active .mtn-marker-halo{stroke:var(--mtn-focus);stroke-width:2;opacity:1}
.mtn-marker-ring{fill:none;stroke:var(--mtn-marker);stroke-width:1.25;stroke-dasharray:3 3}
.mtn-marker-val{fill:var(--mtn-text);font-size:12px;font-weight:600;paint-order:stroke;stroke:var(--mtn-halo);stroke-width:4px;stroke-linejoin:round;opacity:0;transition:opacity .15s;pointer-events:none}
.mtn-marker.is-active .mtn-marker-val{opacity:1}
/* Pills: absolute overlay in the wide layout, ranks stacked left (even) and right (odd). */
.mountain-pills{list-style:none;margin:0;padding:0;position:absolute;inset:0;pointer-events:none;line-height:1}
.mountain-pill{position:absolute;display:inline-flex;align-items:center;gap:8px;height:28px;padding:0 11px 0 4px;border-radius:14px;background:var(--mtn-pill);color:var(--mtn-pill-text);border:1px solid var(--mtn-pill-edge);font-size:13px;font-weight:600;white-space:nowrap;pointer-events:auto;cursor:default;box-sizing:border-box;transition:transform .15s,border-color .15s}
.mountain-pill--right{flex-direction:row-reverse;padding:0 4px 0 11px}
.mountain-pill:hover,.mountain-pill.is-active{border-color:var(--mtn-focus);transform:translateY(-1px)}
.mountain-pill:focus{outline:none}
.mountain-pill:focus-visible{outline:2px solid var(--mtn-focus);outline-offset:3px}
.mountain-pill--internal .mountain-badge{box-shadow:inset 0 0 0 1.5px var(--mtn-pill-edge)}
.mountain-badge{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--mtn-badge);font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;flex:none}
.mountain-badge--gold{background:var(--mtn-gold);color:var(--mtn-on-gold)}
.mountain-badge--silver{background:var(--mtn-silver);color:var(--mtn-on-gold)}
.mountain-badge--bronze{background:var(--mtn-bronze);color:var(--mtn-on-gold)}
.mountain-pill-value{display:none}
/* Narrow desktop (700–1000px container): smaller pills leave the drawing more width. */
.mountain--narrow .mountain-pill{font-size:12px;padding:0 9px 0 4px}
.mountain--narrow .mountain-pill--right{padding:0 4px 0 9px}
.mountain-vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
/* Compact layout (container narrower than the breakpoint): 4:3 drawing, pills listed below. */
.mountain--compact .mountain-head{flex-direction:column;gap:2px;padding:16px 16px 12px}
.mountain--compact .mountain-stamp{white-space:normal;margin-top:6px}
.mountain--compact .mountain-caption{padding:12px 16px}
.mountain--compact .mountain-pills{position:static;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:14px 16px 4px;pointer-events:auto;border-top:1px solid var(--line)}
.mountain--compact .mountain-pill{position:static;display:flex;flex-direction:row;height:auto;min-height:32px;padding:5px 10px 5px 5px;border-radius:16px;white-space:normal;font-size:12px;line-height:1.3;gap:7px}
.mountain--compact .mountain-pill-label{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
.mountain--compact .mountain-pill-value{display:inline;font-variant-numeric:tabular-nums;font-weight:500;opacity:.8;flex:none}
.mountain--compact .mountain-pill:hover,.mountain--compact .mountain-pill.is-active{transform:none}
@media(max-width:420px){.mountain--compact .mountain-pills{grid-template-columns:1fr}} /* one column on phones: labels stay on one or two lines */
/* Ranked table (no-JS fallback and screen readers). An authored table with more than
* three columns goes inside <div class="mountain-table-wrap"> so it scrolls sideways on phones. */
.mountain-table-wrap{max-width:100%;overflow-x:auto;overscroll-behavior-x:contain}
.mountain-details{border-top:1px solid var(--line);font-size:13px}
.mountain-details summary{padding:12px 22px;cursor:pointer;color:var(--soft);font-weight:500}
.mountain-details summary:hover{background:var(--tint)}
.mountain-details summary:focus-visible{outline:2px solid var(--ink);outline-offset:-3px}
.mountain-table{width:100%;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums;text-align:left}
.mountain-table caption{padding:0 22px 8px;text-align:left;font-size:12px;color:var(--muted)}
.mountain-table th,.mountain-table td{padding:9px 12px;border-top:1px solid var(--line);vertical-align:top}
.mountain-table thead th{font-size:12px;font-weight:600;color:var(--soft);background:var(--tint)}
.mountain-table tbody th{font-weight:500}
.mountain-table tr>*:first-child{padding-left:22px;width:44px;color:var(--muted)}
.mountain-table tr>*:last-child{padding-right:22px;text-align:right}
.mountain:not(.mountain--ready) .mountain-canvas{display:none}
.mountain:not(.mountain--ready):not(.mountain--error):not(:has(.mountain-table)){display:none}
.mountain:not(.mountain--ready) .mountain-table caption{padding-top:12px}
.mountain--error .mountain-canvas::before{content:"Leaderboard data could not be read.";display:block;padding:18px 22px;font-size:13px;color:var(--muted)}
@media(prefers-reduced-motion:reduce){.mountain *{transition:none!important}}
@media(forced-colors:active){
.mountain-pill{border-color:ButtonText;forced-color-adjust:none;background:ButtonFace;color:ButtonText}
.mtn-marker-dot{stroke:CanvasText}
}
|