What is a Circle?
Informational card. Cream, always first in its row.
A dark, broadcast-flavoured system for a video platform where influencers own their audience and fans get a say. Warm near-black surfaces, cream text, one signal orange for action and the Tandem layer, and a calm blue for the fan side.
aria-pressed, aria-current and hidden.All colors are CSS custom properties on :root in assets/css/qiktube.css. Contrast ratios below are WCAG 2.x, computed against the surface named.
Data pairs (For vs Against, Mara vs Dev) always use orange vs blue, which differ in lightness as well as hue, so they read for color-blind users too.
One copyright claim shouldn’t cost you a channel you spent years building.
See who follows you, export the list whenever you want, and write to them directly.
Reaches every fan you send it to.
Rules: headlines use text-wrap: balance, paragraphs use text-wrap: pretty. Keep line length under ~70 characters (max-width 560–720px). Never set body copy in Archivo.
All three families are self-hosted in assets/fonts/ (latin subset, WOFF2) and licensed under the SIL Open Font License 1.1. License texts ship next to the files. The two variable files are preloaded in every page head.
| Family | File | Axes / weights | Designer | License |
|---|---|---|---|---|
| Archivo | archivo-variable.woff2 | wght 100–900, wdth 62–125% | Omnibus-Type | LICENSE-Archivo.txt (OFL 1.1) |
| Geist | geist-variable.woff2 | wght 100–900 | Vercel | LICENSE-Geist.txt (OFL 1.1) |
| Geist Mono | geist-mono-400.woff2, geist-mono-500.woff2 | 400, 500 | Vercel | LICENSE-GeistMono.txt (OFL 1.1) |
Fallback stacks: display "Arial Narrow", "Helvetica Neue", sans-serif; body "Helvetica Neue", Helvetica, sans-serif; mono ui-monospace, SFMono-Regular, Menlo, monospace. To use Google Fonts instead, replace the @font-face block with family=Archivo:wdth,wght@62..125,400..900&family=Geist:wght@400..700&family=Geist+Mono:wght@400;500.
Component gaps: 8–16. Card padding: 20–24 (32 for pain points). Section padding: 56 (home rows), 72 (landing sections), 96 (hero top). Between sibling sections, a 1px --line-600 rule.
Flat by default: separation comes from surface steps and hairlines. Shadows only on things that float over video: --shadow-layer 0 18px 40px rgba(0,0,0,.5) for the Tandem layer, --shadow-thumb 0 10px 24px rgba(0,0,0,.4) for thumbnail insets. Scrim over video: rgba(12,11,14,.82).
1360px, side gutter 32px, 16px below 640px..grid uses repeat(auto-fit, minmax(min(var(--min), 100%), 1fr)). Typical --min: 240 (circle cards), 280 (video cards), 340 (board), 420–460 (two-up panels)..split: section title left, supporting paragraph right, collapses to one column under ~900px..table-wrap; the page itself never scrolls sideways.One primary (orange) action per view. Ghost for the secondary action. Light (cream) for actions over imagery. Labels are verbs: “Claim your channel”, “Join free”, “Watch in Tandem”.
Chips and togglesSocial sign-inThe dashed 22px square is a logo slot. Replace it with each provider’s official sign-in mark from their brand kit, and follow their button rules (some providers require specific colors or label wording such as “Sign in with …”). Order: Google, Facebook, LinkedIn, TikTok, then email.
CardsInformational card. Cream, always first in its row.
Accent informational card for Tandem explainers.

A Tandem is always drawn as two layers. The base (the original) is plain. The response layer always carries a 2–3px orange border; orange means “this is the Tandem layer” everywhere. Use the same three layouts the editor offers.


data-mode="overlay" · layer 42% wide, bottom-right

data-mode="side" · works in every browser

data-mode="pip" · layer 24% wide, top-rightTwo-track timeline: base track in cream, response track in orange, offset to where the response starts. Credit lines read “Creator A × Creator B” with an overlapping avatar pair.
currentColor.The illustrated stills and avatars in assets/img/ are placeholders. Replace them with real thumbnails and creator photos at the same aspect ratios.
<button>, <a href>, <input> with a <label>. Icon-only buttons carry aria-label.aria-pressed; the carousel uses aria-roledescription, labelled slides, aria-current dots and arrow-key support; the Tandem mode note is aria-live="polite".--accent-soft, 2px offset, on every interactive element.prefers-reduced-motion disables transitions.qiktube-web/ ├── index.html Home: carousel, latest, Circles, Tandems, Board ├── influencers.html “Own your audience!” ├── fans.html “The new Town Square” ├── styleguide.html This page └── assets/ ├── css/qiktube.css Tokens, base, layout, components ├── js/qiktube.js Carousel, toggles, votes, Tandem modes, Topics ├── fonts/ Archivo, Geist, Geist Mono (WOFF2 + OFL licenses) └── img/ Placeholder video stills and avatars (WebP)
No build step and no dependencies. Open index.html directly or serve the folder with any static server. JS behaviour is attached through data attributes (data-carousel, data-toggle, data-radio, data-vote, data-upvote, data-tandem-modes, data-topics), so markup can move into any framework unchanged.