Source
This app’s code and revision history are public. Download a copy or explore the files below.
Public
The app’s code and revision history are public.
Run it yourself
Take the whole tree and run it on your own machine. The download needs no account. Cloning needs a sign-in.
Download .zip
bounded clone 3151231032497ed786b88a0a
A copy you download is not bounded. The guarantees this app runs under - declared egress, proven invariants, writes that fail closed - live in the runtime serving this page, not in the files. What you get is auditable source you can read and run, with no runtime guarantees attached.
src/styles.css
/* Links. Shared look comes from /kit.css; this is the app's own layout. */
body.app-mode .landing-only { display: none !important; }
/* The page fills the screen edge to edge (viewport-fit=cover), so keep content clear of a landscape notch. */
:root { --page: min(1180px, calc(100% - 48px - var(--safe-left) - var(--safe-right))); }
body:not(.app-mode) #app:empty { display: none; }
.page-pad { padding-block: 56px 80px; }
.narrow { max-width: 640px; }
.small { font-size: 14px; }
#mine, #how, #api { scroll-margin-top: calc(72px + var(--safe-top)); }
:where(.empty-state, .error-state) > h1 { font: var(--type-title); letter-spacing: -.02em; color: var(--ink-solid); text-wrap: balance; }
:where(.error-state) > h1 { color: #7c2f1d; }
.pad { padding: 20px; }
fieldset { min-width: 0; margin: 0; padding: 0; border: 0; }
legend { padding: 0; }
/* Landing hero with the shortener */
.app-hero { padding: 48px 0 72px; background: var(--paper-warm); border-bottom: 1px solid #ece2cf; }
.app-hero-grid { display: grid; grid-template-columns: minmax(0, 1fr) 460px; gap: 56px; align-items: start; }
.app-hero h1 { margin-top: 14px; }
.app-hero .lede { margin-top: 18px; }
.hero-points { list-style: none; padding: 0; margin-top: 26px; display: grid; gap: 10px; font-size: 15.5px; color: #3c4048; }
.hero-points li { display: flex; gap: 10px; align-items: baseline; }
.hero-points li::before { content: ""; flex: 0 0 8px; height: 8px; border-radius: 50%; background: var(--cobalt); transform: translateY(-2px); }
.hero-art { width: 200px; height: auto; margin-bottom: -8px; }
@media (max-width: 900px) {
.app-hero { padding: 20px 0 40px; }
.app-hero-grid { grid-template-columns: minmax(0, 1fr); gap: 22px; }
.hero-art { width: 88px; margin-bottom: 0; }
.app-hero h1 { margin-top: 10px; }
.app-hero .lede { margin-top: 12px; font-size: 16.5px; }
.hero-points { display: none; }
}
#create { min-height: 325px; } /* holds the form's place until it mounts */
.create, .result { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; padding: 24px; }
@media (max-width: 520px) { .create, .result { padding: 18px; } }
.optional { margin-left: 6px; font-weight: 500; color: var(--faint); }
.prefix-input { display: flex; min-width: 0; align-items: center; min-height: 46px; border: 1px solid var(--line-strong); border-radius: var(--radius); background: #fff; transition: border-color var(--motion-fast) var(--ease-out), box-shadow var(--motion-fast) var(--ease-out); }
@media (hover: hover) { .prefix-input:hover { border-color: #b5bdc8; } }
.prefix-input:focus-within { border-color: var(--cobalt); box-shadow: 0 0 0 3px #2e5ec41f; }
.prefix-input.is-invalid { border-color: var(--brick); }
.prefix-input.is-invalid:focus-within { box-shadow: 0 0 0 3px #a8442c24; }
.prefix-input span { flex: 0 1 auto; min-width: 0; padding-left: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--muted); font: 400 15px/1 var(--sans); }
.prefix-input input { flex: 1 0 84px; min-width: 84px; height: 44px; padding: 0 13px 0 1px; border: 0; outline: 0; background: transparent; color: var(--ink); font: var(--type-input); }
/* Result */
.short-link { display: block; min-width: 0; color: var(--ink-solid); font: 380 30px/1.15 var(--serif); letter-spacing: -.015em; overflow-wrap: anywhere; }
.short-host { display: block; margin-bottom: 4px; font: 500 14px/1.3 var(--sans); letter-spacing: 0; color: var(--muted); }
.short-link strong { font-weight: 520; }
@media (hover: hover) { .short-link:hover { color: var(--cobalt-ink); } }
.dest { margin-top: -10px; font-size: 14px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dest span { color: #3c4048; }
.result-actions { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); gap: 10px; }
.result-actions .btn { width: 100%; }
.edit-note { display: grid; gap: 10px; padding: 14px; border-radius: var(--radius); background: var(--paper-warm); border: 1px solid #ece2cf; font-size: 14.5px; color: #3a3e46; }
.edit-note strong { color: var(--ink-solid); }
.edit-actions { display: flex; flex-wrap: wrap; gap: 8px; }
/* QR panel */
.qr { display: grid; grid-template-columns: 176px minmax(0, 1fr); gap: 20px; align-items: center; }
.qr-preview { border: 1px solid var(--line); border-radius: 12px; overflow: hidden; background: #fff; }
.qr-preview svg { display: block; width: 100%; height: auto; }
.qr-side { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; }
.qr-colors legend { margin-bottom: 9px; }
.swatches { display: flex; flex-wrap: wrap; gap: 6px; }
.swatch { position: relative; display: grid; place-items: center; width: 28px; height: 28px; border: 2px solid #fff; border-radius: 50%; box-shadow: 0 0 0 1px var(--line-strong); cursor: pointer; transition: box-shadow var(--motion-fast) var(--ease-out); }
.swatch input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; }
.swatch:has(input:checked), .swatch.is-on { box-shadow: 0 0 0 2px var(--ink-solid); }
.swatch:has(input:focus-visible) { outline: 2px solid var(--cobalt); outline-offset: 3px; }
.swatch-custom { border: 1px dashed var(--faint); box-shadow: none; background: #fff; }
.swatch-custom::after { content: "+"; font: 400 20px/1 var(--sans); color: var(--muted); }
.swatch-custom.is-on { border: 2px solid #fff; }
.swatch-custom.is-on::after { content: none; }
.qr-downloads { display: grid; gap: 8px; }
@media (pointer: coarse) {
.swatch { width: 36px; height: 36px; }
.swatches { gap: 10px; }
.swatch::before { content: ""; position: absolute; inset: -6px; border-radius: 50%; } /* 44px to tap */
}
@media (max-width: 440px) {
.qr { grid-template-columns: minmax(0, 1fr); justify-items: center; }
.qr-preview { width: 200px; }
.qr-side { width: 100%; justify-items: center; text-align: center; }
.qr-colors { justify-items: center; }
.swatches { justify-content: center; }
.qr-downloads { grid-template-columns: 1fr 1fr; width: 100%; }
}
/* Toast with an undo */
.toast { display: flex; align-items: center; gap: 14px; }
.toast-action { flex: none; min-height: 32px; padding: 0 12px; border: 1px solid #ffffff40; border-radius: 8px; background: none; color: #fff; font: var(--type-control); cursor: pointer; }
@media (hover: hover) { .toast-action:hover { background: #ffffff1a; } }
/* Your links */
#mine:empty { display: none; }
.mine-head { display: flex; align-items: center; gap: 12px; }
.find { position: relative; margin-top: 18px; max-width: 420px; }
.find svg { position: absolute; left: 13px; top: 50%; transform: translateY(-50%); color: var(--faint); pointer-events: none; }
.find .input { padding-left: 40px; }
.find-none { margin-top: 18px; }
.link-list { list-style: none; padding: 0; margin-top: 18px; border: 1px solid var(--line); border-radius: 14px; background: #fff; }
.link-row { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 16px; align-items: center; padding: 12px 12px 12px 16px; }
.link-row + .link-row { border-top: 1px solid var(--line); }
.link-main { display: grid; gap: 3px; min-width: 0; }
.link-short { color: var(--ink-solid); font: 600 15.5px/1.3 var(--sans); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.link-short .muted { font-weight: 500; }
@media (hover: hover) { .link-short:hover { color: var(--cobalt-ink); } }
.link-dest { font-size: 13.5px; line-height: 1.35; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.link-skel { width: min(260px, 70%); height: 11px; margin-block: 3px; }
.link-clicks { display: inline-flex; align-items: center; gap: 6px; min-width: 64px; justify-content: flex-end; font-size: 14px; color: var(--muted); white-space: nowrap; font-variant-numeric: tabular-nums; }
.link-clicks strong { color: var(--ink); font-weight: 600; }
.chip-off { background: var(--brick-wash); border-color: #efcfc5; color: #7c2f1d; }
.link-actions { display: inline-flex; align-items: center; gap: 6px; }
.more { margin-top: 10px; }
.mine-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px 20px; flex-wrap: wrap; margin-top: 16px; }
.mine-foot p { flex: 1 1 280px; }
.phone-only { display: none !important; }
@media (max-width: 640px) {
.link-row { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "short actions" "dest actions" "clicks actions"; gap: 2px 10px; padding: 12px 10px 12px 14px; }
.link-main { display: contents; }
.link-short { grid-area: short; }
.link-dest, .link-skel { grid-area: dest; }
.link-clicks { grid-area: clicks; justify-content: flex-start; min-width: 0; font-size: 13.5px; }
.link-actions { grid-area: actions; }
.link-short .muted, .link-edit { display: none; }
/* With no Edit button on phones, the whole row opens the link's page; Copy and the menu sit above it. */
.link-row { position: relative; }
.link-short::after { content: ""; position: absolute; inset: 0; }
.link-actions { position: relative; }
.phone-only { display: flex !important; }
.mine-foot .row { width: 100%; }
.mine-foot .row .btn { flex: 1 1 0; }
}
/* Landing sections */
.steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; margin-top: 28px; padding: 0; counter-reset: step; }
.steps li { list-style: none; counter-increment: step; }
.steps li::before { content: counter(step); display: grid; place-items: center; width: 34px; height: 34px; margin-bottom: 14px; border-radius: 50%; background: var(--ink-solid); color: #fff; font: 650 15px var(--sans); }
.steps h3 { font: 600 18px/1.3 var(--sans); }
.steps p { margin-top: 8px; color: #4a4e56; }
@media (max-width: 760px) { .steps { grid-template-columns: 1fr; } }
.api-grid { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 40px; align-items: start; }
.api-grid .code { font-size: 12.5px; }
@media (max-width: 900px) { .api-grid { grid-template-columns: minmax(0, 1fr); } }
.more-apps { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; list-style: none; padding: 0; margin-top: 22px; }
.more-apps a { display: grid; gap: 4px; padding: 16px 18px; border: 1px solid var(--line); border-radius: 14px; background: #fff; color: var(--ink); transition: border-color var(--motion-fast) var(--ease-out), box-shadow var(--motion-fast) var(--ease-out); }
@media (hover: hover) { .more-apps a:hover { border-color: var(--line-strong); box-shadow: var(--shadow); color: var(--ink); } }
.more-apps strong { font: 400 22px/1.1 var(--serif); }
.more-apps span { color: var(--muted); font-size: 14px; }
.compare td:first-child { font-weight: 600; }
.compare { min-width: 520px; }
@media (max-width: 600px) {
.compare { min-width: 0; table-layout: fixed; font-size: 14px; }
.compare th, .compare td { padding: 11px 10px; overflow-wrap: anywhere; }
.compare th:first-child, .compare td:first-child { width: 36%; }
}
.not-yet { margin-top: 18px; color: #4a4e56; max-width: 70ch; }
/* Edit page */
.edit-wait { min-height: 80vh; }
.edit-head { border-bottom: 1px solid #ece2cf; background: var(--paper-warm); }
.edit-head-inner { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; flex-wrap: wrap; padding: 22px 0 24px; }
.edit-name { min-width: 0; }
.back-link { display: inline-flex; align-items: center; gap: 4px; min-height: 44px; margin-left: -4px; padding-right: 8px; color: var(--muted); font: var(--type-control); }
@media (hover: hover) { .back-link:hover { color: var(--ink-solid); } }
.edit-title { margin-top: 2px; font: 360 clamp(30px, 4vw, 44px)/1.1 var(--serif); letter-spacing: -.025em; overflow-wrap: anywhere; }
.edit-head-actions { display: flex; gap: 8px; }
.edit-body { display: grid; grid-template-columns: minmax(0, 1fr) 440px; gap: 24px; align-items: start; padding-top: 28px; padding-bottom: 80px; }
.edit-main { display: grid; grid-template-columns: minmax(0, 1fr); gap: 20px; }
.edit-side { display: grid; grid-template-columns: minmax(0, 1fr); gap: 20px; }
.edit-qr { display: grid; gap: 16px; }
.edit-key { grid-column: 1 / -1; display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; }
.edit-key p { flex: 1 1 320px; }
.clicks-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.clicks-total { margin-top: 8px; font: 600 40px/1 var(--sans); letter-spacing: -.02em; color: var(--ink-solid); font-variant-numeric: tabular-nums; }
.clicks-head .small { margin-top: 6px; }
.clicks-readout { min-height: 20px; font-size: 14px; color: var(--muted); }
.clicks-readout strong { color: var(--ink); font-weight: 600; }
.chart { display: flex; align-items: flex-end; gap: 2px; height: 112px; margin-top: 18px; border-bottom: 1px solid var(--line-strong); touch-action: pan-y; cursor: crosshair; }
.bar { flex: 1 1 0; display: flex; align-items: flex-end; justify-content: center; height: 100%; }
.bar i { width: 100%; max-width: 24px; border-radius: 4px 4px 0 0; background: var(--cobalt); transition: background-color var(--motion-fast) var(--ease-out); }
.bar.is-picked { background: #2e5ec40f; border-radius: 4px 4px 0 0; }
.bar.is-picked i { background: var(--cobalt-ink); }
.chart-empty { align-self: center; width: 100%; color: var(--muted); font-size: 14px; text-align: center; }
.chart-axis { display: flex; justify-content: space-between; margin-top: 8px; font-size: 12.5px; }
.status-card { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; }
.status-text { display: flex; align-items: center; gap: 12px; flex: 1 1 260px; min-width: 0; }
.status-text p { color: #3a3e46; font-size: 14.5px; }
@media (max-width: 900px) {
.edit-body { grid-template-columns: minmax(0, 1fr); padding-top: 20px; }
.edit-head-inner { padding: 12px 0 18px; }
.edit-head-actions { width: 100%; }
.edit-head-actions .btn { flex: 1 1 0; }
}
@media (max-width: 420px) { .clicks-total { font-size: 36px; } }
code.inline { font: 500 .86em/1 var(--mono); padding: .15em .38em; border-radius: 5px; background: var(--panel); border: 1px solid var(--panel-line); overflow-wrap: anywhere; }
Change history
Quality pass: clicks per day, CSV export, links on other devices
Bounded source sync
Bounded source sync
Bounded source sync
Bounded source sync
Bounded source sync
Bounded source sync
Bounded source sync