/* Author: Simon-Pierre Boucher */ /* Mail: contact@spboucher.ai */ /* coinexplorer design system v4 — color roles from the validated dataviz reference palette; chrome, depth and rhythm layered on top. */ :root { color-scheme: light; --page: #f7f7f4; --surface: #fdfdfc; --surface-2: #f2f1ed; --ink: #0b0b0b; --ink-2: #52514e; --muted: #898781; --grid: #e1e0d9; --baseline: #c3c2b7; --ring: rgba(11,11,11,.08); --s1: #2a78d6; --s2: #eb6834; --s3: #1baf7a; --s4: #eda100; --seq-150: #b7d3f6; --good-text: #006300; --bad: #d03b3b; --div-neg: #e34948; --shadow-1: 0 1px 2px rgba(11,11,11,.04), 0 2px 8px rgba(11,11,11,.04); --shadow-2: 0 2px 6px rgba(11,11,11,.06), 0 10px 28px rgba(11,11,11,.08); --glass: rgba(253,253,252,.82); --radius: 14px; } @media (prefers-color-scheme: dark) { :root { color-scheme: dark; --page: #0c0c0b; --surface: #171716; --surface-2: #1f1f1d; --ink: #ffffff; --ink-2: #c3c2b7; --muted: #898781; --grid: #2c2c2a; --baseline: #383835; --ring: rgba(255,255,255,.09); --s1: #3987e5; --s2: #d95926; --s3: #199e70; --s4: #c98500; --seq-150: #184f95; --good-text: #0ca30c; --bad: #e66767; --div-neg: #e66767; --shadow-1: none; --shadow-2: 0 12px 32px rgba(0,0,0,.5); --glass: rgba(20,20,19,.82); } } * { box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; } body { margin: 0; background: var(--page); color: var(--ink); font: 14px/1.5 system-ui, -apple-system, "Segoe UI", sans-serif; background-image: radial-gradient(1100px 380px at 50% -180px, color-mix(in oklab, var(--s1) 7%, transparent), transparent); background-repeat: no-repeat; } a { color: var(--s1); text-decoration: none; } a:hover { text-decoration: underline; text-underline-offset: 2px; } :focus-visible { outline: 2px solid var(--s1); outline-offset: 2px; border-radius: 4px; } /* ================= top nav ================= */ .topnav { position: sticky; top: 0; z-index: 40; background: var(--glass); backdrop-filter: blur(14px) saturate(1.4); -webkit-backdrop-filter: blur(14px) saturate(1.4); border-bottom: 1px solid var(--ring); display: flex; align-items: center; gap: 14px; padding: 0 clamp(12px, 3vw, 24px); min-height: 54px; flex-wrap: wrap; } .topnav .logo { font-weight: 800; font-size: 16px; letter-spacing: -.02em; color: var(--ink); white-space: nowrap; padding: 12px 0; } .topnav .logo span { background: linear-gradient(100deg, var(--s1), color-mix(in oklab, var(--s1) 55%, var(--s3))); -webkit-background-clip: text; background-clip: text; color: transparent; } .topnav nav { display: flex; gap: 2px; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; max-width: 100%; } .topnav nav::-webkit-scrollbar { display: none; } .topnav nav a { color: var(--ink-2); padding: 7px 12px; border-radius: 99px; font-size: 13px; font-weight: 500; white-space: nowrap; } .topnav nav a:hover { background: color-mix(in oklab, var(--s1) 9%, transparent); text-decoration: none; color: var(--ink); } .topnav nav a.active { color: #fff; font-weight: 600; background: linear-gradient(135deg, var(--s1), color-mix(in oklab, var(--s1) 80%, #000)); box-shadow: 0 2px 8px color-mix(in oklab, var(--s1) 35%, transparent); } .searchbox { margin-left: auto; display: flex; min-width: 150px; flex: 0 1 320px; padding: 8px 0; } .searchbox input { width: 100%; background: var(--surface-2); color: var(--ink); border: 1px solid var(--ring); border-radius: 99px; padding: 8px 16px; font: inherit; transition: box-shadow .15s, background .15s; } .searchbox input:focus { outline: none; background: var(--surface); box-shadow: 0 0 0 2px color-mix(in oklab, var(--s1) 55%, transparent); } @media (max-width: 760px) { .searchbox { order: 9; flex-basis: 100%; margin-left: 0; padding-top: 0; } .topnav .logo { padding: 10px 0 6px; } } /* ================= layout ================= */ main { display: grid; gap: clamp(10px, 1.6vw, 16px); padding: clamp(12px, 2.5vw, 20px) clamp(12px, 3vw, 24px) 48px; grid-template-columns: repeat(12, 1fr); max-width: 1320px; margin: 0 auto; } .card { background: var(--surface); border: 1px solid var(--ring); border-radius: var(--radius); padding: clamp(12px, 2vw, 18px); grid-column: span 12; box-shadow: var(--shadow-1); min-width: 0; } @media (min-width: 980px) { .tile { grid-column: span 3; } .half { grid-column: span 6; } .third { grid-column: span 4; } .twothird { grid-column: span 8; } } @media (min-width: 560px) and (max-width: 979px) { .tile { grid-column: span 6; } .half, .third, .twothird { grid-column: span 12; } } .card h2 { font-size: 12px; margin: 0 0 10px; color: var(--muted); font-weight: 700; text-transform: uppercase; letter-spacing: .06em; display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; } .card h2 .sub { color: var(--muted); font-weight: 400; font-size: 12px; text-transform: none; letter-spacing: 0; } .tile { position: relative; overflow: hidden; } .tile::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 3px; background: linear-gradient(180deg, var(--s1), color-mix(in oklab, var(--s1) 40%, transparent)); border-radius: 3px 0 0 3px; } .tile .big { font-size: clamp(22px, 2.4vw, 28px); font-weight: 800; letter-spacing: -.02em; font-variant-numeric: tabular-nums; } .tile .note { color: var(--muted); font-size: 12px; margin-top: 3px; } .up { color: var(--good-text); } .down { color: var(--bad); } .pagehead { grid-column: span 12; display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; } .pagehead h1 { font-size: clamp(19px, 2.6vw, 23px); margin: 6px 0 0; letter-spacing: -.02em; } .pagehead .sub { color: var(--muted); font-size: 13px; } .badge { font-size: 10.5px; font-weight: 600; padding: 3px 9px; border-radius: 99px; border: 1px solid var(--ring); color: var(--ink-2); text-transform: uppercase; letter-spacing: .04em; } .badge.native { color: var(--good-text); border-color: color-mix(in oklab, var(--good-text) 45%, transparent); background: color-mix(in oklab, var(--good-text) 7%, transparent); } .badge.bridged { color: var(--s2); border-color: color-mix(in oklab, var(--s2) 45%, transparent); background: color-mix(in oklab, var(--s2) 8%, transparent); } .badge.discontinued { color: var(--bad); border-color: color-mix(in oklab, var(--bad) 45%, transparent); background: color-mix(in oklab, var(--bad) 7%, transparent); } /* ================= filters ================= */ .filters { grid-column: span 12; display: flex; gap: 8px; flex-wrap: wrap; align-items: center; } .filters select, .filters input, .filters button, .btn { background: var(--surface); color: var(--ink); border: 1px solid var(--ring); border-radius: 10px; padding: 8px 13px; font: inherit; font-size: 13px; cursor: pointer; box-shadow: var(--shadow-1); min-height: 38px; } .filters input { cursor: text; } .filters button:hover, .btn:hover { border-color: color-mix(in oklab, var(--s1) 45%, var(--ring)); } .presets { display: flex; gap: 0; border: 1px solid var(--ring); border-radius: 10px; overflow: hidden; box-shadow: var(--shadow-1); } .presets button { border: 0; border-radius: 0; box-shadow: none; background: var(--surface); min-height: 38px; } .presets button + button { border-left: 1px solid var(--ring); } .presets button[aria-pressed="true"] { background: var(--s1); color: #fff; font-weight: 700; } /* ================= tables ================= */ .scroll { max-height: 420px; overflow: auto; border-radius: 8px; } table { width: 100%; border-collapse: collapse; font-size: 12.5px; min-width: 520px; } th { text-align: left; color: var(--muted); font-weight: 700; padding: 7px 9px; border-bottom: 1px solid var(--grid); position: sticky; top: 0; z-index: 1; background: var(--surface); font-size: 11px; text-transform: uppercase; letter-spacing: .05em; } td { padding: 7px 9px; border-bottom: 1px solid color-mix(in oklab, var(--grid) 55%, transparent); font-variant-numeric: tabular-nums; white-space: nowrap; } tr:hover td { background: color-mix(in oklab, var(--s1) 5%, transparent); } td.num, th.num { text-align: right; } td.mono, .mono { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11.5px; color: var(--ink-2); max-width: 150px; overflow: hidden; text-overflow: ellipsis; } .dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--s1); margin-right: 7px; box-shadow: 0 0 0 3px color-mix(in oklab, var(--s1) 15%, transparent); } .mint { color: var(--good-text); font-weight: 700; } .burn { color: var(--bad); font-weight: 700; } .feed-wrap { max-height: 320px; overflow: auto; } /* ================= bars (magnitude) ================= */ .bars { display: flex; flex-direction: column; gap: 2px; } .bar-row { display: grid; grid-template-columns: minmax(72px, 100px) 1fr minmax(72px, 96px); align-items: center; gap: 8px; padding: 4px 6px; border-radius: 8px; min-height: 24px; } .bar-row:hover { background: color-mix(in oklab, var(--s1) 8%, transparent); } .bar-label { color: var(--ink-2); font-size: 12.5px; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .bar-label a { color: inherit; } .bar-track { height: 13px; border-radius: 0 5px 5px 0; border-left: 2px solid var(--baseline); position: relative; background: color-mix(in oklab, var(--grid) 30%, transparent); } .bar-fill { position: absolute; inset: 0 auto 0 0; background: linear-gradient(90deg, color-mix(in oklab, var(--s1) 88%, #fff0), var(--s1)); border-radius: 0 5px 5px 0; min-width: 2px; } .bar-val { text-align: right; font-variant-numeric: tabular-nums; font-size: 12.5px; font-weight: 600; } /* ================= charts ================= */ .chart { width: 100%; } .chart svg { display: block; width: 100%; height: auto; } .legend { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 8px; font-size: 12px; color: var(--ink-2); } .legend .sw { display: inline-block; width: 10px; height: 10px; border-radius: 3px; margin-right: 5px; vertical-align: -1px; } #tooltip { position: fixed; pointer-events: none; background: var(--surface); border: 1px solid var(--ring); border-radius: 10px; padding: 8px 11px; font-size: 12px; box-shadow: var(--shadow-2); display: none; z-index: 60; font-variant-numeric: tabular-nums; max-width: 260px; } #tooltip b { display: block; margin-bottom: 3px; } .empty { color: var(--muted); font-size: 12.5px; padding: 14px 4px; } /* ================= api docs ================= */ .docwrap { display: grid; grid-template-columns: 220px 1fr; gap: 18px; grid-column: span 12; align-items: start; } @media (max-width: 900px) { .docwrap { grid-template-columns: 1fr; } } .toc { position: sticky; top: 66px; display: flex; flex-direction: column; gap: 2px; background: var(--surface); border: 1px solid var(--ring); border-radius: var(--radius); padding: 10px; box-shadow: var(--shadow-1); } @media (max-width: 900px) { .toc { position: static; flex-direction: row; flex-wrap: wrap; } } .toc a { color: var(--ink-2); font-size: 12.5px; padding: 6px 10px; border-radius: 8px; } .toc a:hover { background: color-mix(in oklab, var(--s1) 8%, transparent); text-decoration: none; } .toc .group { font-size: 10.5px; text-transform: uppercase; letter-spacing: .07em; color: var(--muted); font-weight: 700; padding: 10px 10px 3px; } .docbody { display: flex; flex-direction: column; gap: 14px; min-width: 0; } .ep { background: var(--surface); border: 1px solid var(--ring); border-radius: var(--radius); padding: 16px 18px; box-shadow: var(--shadow-1); scroll-margin-top: 70px; } .ep .head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; } .method { font-size: 11px; font-weight: 800; letter-spacing: .05em; padding: 4px 9px; border-radius: 7px; color: #fff; background: var(--s1); } .method.ws { background: var(--s3); } .ep .path { font-family: ui-monospace, Menlo, monospace; font-size: 13.5px; font-weight: 600; word-break: break-all; } .ep .desc { color: var(--ink-2); font-size: 13px; margin: 8px 0 0; } .ep .params { margin-top: 10px; } .ep .params table { min-width: 0; } pre.code { background: var(--surface-2); border: 1px solid var(--ring); border-radius: 10px; padding: 12px 14px; font-family: ui-monospace, Menlo, monospace; font-size: 12px; overflow-x: auto; margin: 10px 0 0; line-height: 1.55; position: relative; } pre.code .cm { color: var(--muted); } .tryrow { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; align-items: center; } .try-out { display: none; max-height: 280px; overflow: auto; } .copybtn { margin-left: auto; font-size: 11px; padding: 4px 10px; min-height: 0; } .hero { grid-column: span 12; padding: clamp(18px, 4vw, 34px) clamp(16px, 3vw, 28px); border-radius: 18px; border: 1px solid var(--ring); background: linear-gradient(140deg, color-mix(in oklab, var(--s1) 14%, var(--surface)), var(--surface) 55%, color-mix(in oklab, var(--s3) 8%, var(--surface))); box-shadow: var(--shadow-1); } .hero h1 { margin: 0 0 6px; font-size: clamp(21px, 3.4vw, 30px); letter-spacing: -.02em; } .hero p { margin: 0; color: var(--ink-2); max-width: 62ch; } .hero .kpis { display: flex; gap: 18px; margin-top: 14px; flex-wrap: wrap; } .hero .kpis b { font-size: 17px; font-variant-numeric: tabular-nums; } .hero .kpis span { display: block; color: var(--muted); font-size: 11.5px; text-transform: uppercase; letter-spacing: .05em; } /* ================= asset icons ================= */ .asset { display: inline-flex; align-items: center; gap: 6px; color: inherit; } .asset span { line-height: 1; } .asset:hover { text-decoration: none; } .asset:hover span { text-decoration: underline; text-underline-offset: 2px; } td .asset { color: var(--s1); } .coin { position: relative; display: inline-grid; place-items: center; width: var(--sz, 16px); height: var(--sz, 16px); flex: 0 0 auto; vertical-align: -3px; border-radius: 50%; } .coin i { position: absolute; inset: 0; border-radius: 50%; font-style: normal; display: grid; place-items: center; font-size: calc(var(--sz, 16px) * 0.52); font-weight: 800; box-shadow: inset 0 0 0 1px rgba(255,255,255,.18), 0 1px 3px rgba(0,0,0,.18); } .coin img { position: absolute; inset: 0; width: 100%; height: 100%; border-radius: 50%; z-index: 1; background: transparent; } .pagehead .coin { vertical-align: -5px; margin-right: 2px; } .bar-label .asset { max-width: 100%; overflow: hidden; } footer { text-align: center; color: var(--muted); font-size: 12px; padding: 0 16px 32px; }