mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-05 00:56:23 +00:00
* feat(hyperframes-creative): add frame-preset library Add a library of ready-made visual frame presets (claude, biennale-yellow, blockframe, blue-professional, bold-poster, broadside, capsule, cartesian, cobalt-grid, coral, creative-mode, daisy-days, editorial-forest, …), each with a FRAME.md spec, a frame-showcase.html, and a per-preset caption-skin.html. Registered in the creative design-spec so workflows can remix a preset onto brand tokens. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(hyperframes-media): shared TTS/BGM/SFX audio engine Add a shared audio engine under hyperframes-media (scripts/audio.mjs + lib/ tts.mjs, bgm.mjs, sfx.mjs, heygen.mjs) plus a bundled SFX pack and manifest. Workflows resolve this engine by path (../../hyperframes-media/scripts/ audio.mjs) for text-to-speech, background music, and sound effects, so audio is authored once and reused across skills instead of duplicated per workflow. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(skills): gate render on user review; refresh router, core, general-video - hyperframes-cli: render is now user-gated — preview opens Studio (the timeline editor where the user can hand-edit anything, not just watch); never auto-render once checks pass, pause at preview and render only after approval. - hyperframes (router): tighten the entry SKILL.md description + routing. - hyperframes-core: rewrite SKILL.md and add script-format.md + storyboard-format.md references for the script-driven authoring architecture. - general-video: tidy the fallback-workflow description and routing table. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * style(hyperframes-creative): reformat frame-preset showcase HTML Run the HTML formatter over the frame-showcase.html files (indentation, self-closing void tags, one CSS declaration per line). Formatting only — no content or markup changes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(hyperframes-media): correct wait-bgm field mapping and guard credential parse Two correctness fixes from review (#1632): - wait-bgm.mjs read audioMeta.bgm_path / audioMeta.bgm_enabled, but audio.mjs writes the path nested as bgm.path and the flag as bgm_pending. The detached generate path (Lyria/MusicGen) therefore always saw an empty path and exited status: disabled, silently dropping the music track even while generation was running. Read audioMeta.bgm?.path and gate on bgm_pending. - heygenCredential() had an unguarded JSON.parse despite documenting that it never throws — a malformed ~/.heygen credentials file crashed the engine at startup instead of degrading to no-credential. Wrap the parse and return null. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * chore(hyperframes): add router tag to entry skill metadata Fold the router metadata tag into the foundation rewrite of the entry SKILL.md. This file is owned by this PR (the full router rewrite); keeping the tag tweak here — instead of a separate edit on the pre-rewrite version in another PR — avoids a guaranteed merge conflict between the two. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1373 lines
38 KiB
HTML
1373 lines
38 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||
<title>Blue Professional</title>
|
||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||
<link
|
||
href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600&display=swap"
|
||
rel="stylesheet"
|
||
/>
|
||
<style id="ds-tokens">
|
||
:root {
|
||
--bg: #fdfae7;
|
||
--primary: #1e2bfa;
|
||
--text: #111111;
|
||
--muted: #6b6b6b;
|
||
--light: #9a9a9a;
|
||
--accent-light: rgba(30, 43, 250, 0.08);
|
||
--accent-medium: rgba(30, 43, 250, 0.15);
|
||
--border: rgba(30, 43, 250, 0.2);
|
||
--card-bg: rgba(30, 43, 250, 0.04);
|
||
--positive: #059669;
|
||
--negative: #dc2626;
|
||
--disp: "Space Grotesk", sans-serif;
|
||
--body: "Inter", sans-serif;
|
||
}
|
||
* {
|
||
margin: 0;
|
||
padding: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
html {
|
||
background: #0b0b16;
|
||
}
|
||
body {
|
||
background: var(--bg);
|
||
color: var(--muted);
|
||
font-family: var(--body);
|
||
-webkit-font-smoothing: antialiased;
|
||
}
|
||
.disp {
|
||
font-family: var(--disp);
|
||
}
|
||
.eyebrow {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.08em;
|
||
font-size: 14px;
|
||
color: var(--primary);
|
||
}
|
||
|
||
section {
|
||
padding: 108px 76px;
|
||
position: relative;
|
||
}
|
||
.sec-head {
|
||
display: flex;
|
||
align-items: flex-start;
|
||
gap: 20px;
|
||
margin-bottom: 60px;
|
||
}
|
||
.sec-head .ey {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 14px;
|
||
}
|
||
.sec-head .aline {
|
||
width: 60px;
|
||
height: 4px;
|
||
background: var(--primary);
|
||
border-radius: 2px;
|
||
}
|
||
.sec-head h2 {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
font-size: 42px;
|
||
line-height: 1.1;
|
||
letter-spacing: -0.02em;
|
||
color: var(--text);
|
||
}
|
||
.sec-head .sp {
|
||
flex: 1;
|
||
}
|
||
.sec-head .tagpill {
|
||
background: var(--accent-light);
|
||
color: var(--primary);
|
||
padding: 0.4rem 1rem;
|
||
border-radius: 100px;
|
||
font-family: var(--disp);
|
||
font-weight: 500;
|
||
font-size: 12px;
|
||
align-self: center;
|
||
}
|
||
|
||
/* COVER */
|
||
.cover {
|
||
min-height: 100vh;
|
||
padding: 0 7vw;
|
||
display: flex;
|
||
flex-direction: column;
|
||
justify-content: center;
|
||
position: relative;
|
||
overflow: hidden;
|
||
}
|
||
.cover .deco {
|
||
position: absolute;
|
||
top: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
width: 36%;
|
||
background: var(--accent-light);
|
||
clip-path: polygon(30% 0, 100% 0, 100% 100%, 0% 100%);
|
||
}
|
||
.cover .dots {
|
||
position: absolute;
|
||
top: 14%;
|
||
right: 10%;
|
||
display: grid;
|
||
grid-template-columns: repeat(3, 1fr);
|
||
gap: 12px;
|
||
opacity: 0.25;
|
||
z-index: 2;
|
||
}
|
||
.cover .dots i {
|
||
width: 8px;
|
||
height: 8px;
|
||
border-radius: 50%;
|
||
background: var(--primary);
|
||
}
|
||
.cover .inner {
|
||
position: relative;
|
||
z-index: 3;
|
||
max-width: 64%;
|
||
}
|
||
.cover .aline {
|
||
width: 60px;
|
||
height: 4px;
|
||
background: var(--primary);
|
||
border-radius: 2px;
|
||
margin-bottom: 28px;
|
||
}
|
||
.cover .meta {
|
||
font-family: var(--disp);
|
||
font-weight: 400;
|
||
font-size: 13px;
|
||
letter-spacing: 0.05em;
|
||
color: var(--light);
|
||
margin-bottom: 20px;
|
||
}
|
||
.cover h1 {
|
||
font-family: var(--disp);
|
||
font-weight: 700;
|
||
font-size: clamp(46px, 5.4vw, 76px);
|
||
line-height: 1.08;
|
||
letter-spacing: -0.02em;
|
||
color: var(--text);
|
||
}
|
||
.cover .sub {
|
||
font-family: var(--body);
|
||
font-weight: 400;
|
||
font-size: clamp(16px, 1.4vw, 20px);
|
||
line-height: 1.6;
|
||
color: var(--muted);
|
||
margin-top: 26px;
|
||
max-width: 560px;
|
||
}
|
||
.cover .pbar {
|
||
position: absolute;
|
||
bottom: 0;
|
||
left: 0;
|
||
height: 3px;
|
||
width: 16%;
|
||
background: var(--primary);
|
||
}
|
||
.cover .counter {
|
||
position: absolute;
|
||
bottom: 24px;
|
||
left: 7vw;
|
||
font-family: var(--disp);
|
||
font-weight: 500;
|
||
font-size: 13px;
|
||
letter-spacing: 0.05em;
|
||
color: var(--muted);
|
||
}
|
||
|
||
/* PALETTE */
|
||
.swatches {
|
||
display: grid;
|
||
grid-template-columns: repeat(4, 1fr);
|
||
gap: 20px;
|
||
}
|
||
.sw {
|
||
background: var(--card-bg);
|
||
border: 1.5px solid var(--border);
|
||
border-radius: 14px;
|
||
overflow: hidden;
|
||
}
|
||
.sw .chip {
|
||
height: 92px;
|
||
border-radius: 10px;
|
||
margin: 14px 14px 0;
|
||
}
|
||
.sw .meta {
|
||
padding: 14px 18px 18px;
|
||
}
|
||
.sw .name {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
font-size: 17px;
|
||
color: var(--text);
|
||
letter-spacing: -0.01em;
|
||
}
|
||
.sw .hex {
|
||
font-family: var(--disp);
|
||
font-size: 12px;
|
||
color: var(--muted);
|
||
margin-top: 4px;
|
||
}
|
||
|
||
/* TYPE */
|
||
.type-row {
|
||
display: grid;
|
||
grid-template-columns: 220px 1fr;
|
||
align-items: center;
|
||
padding: 24px 0;
|
||
border-bottom: 1px solid var(--border);
|
||
}
|
||
.type-row .tok {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.06em;
|
||
font-size: 12px;
|
||
color: var(--primary);
|
||
}
|
||
.type-row .m {
|
||
font-size: 12px;
|
||
color: var(--muted);
|
||
margin-top: 8px;
|
||
line-height: 1.5;
|
||
}
|
||
.type-row .spec {
|
||
overflow: hidden;
|
||
}
|
||
|
||
/* COMPONENTS */
|
||
.cnote {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.06em;
|
||
font-size: 12px;
|
||
color: var(--primary);
|
||
margin-bottom: 20px;
|
||
}
|
||
.cgrid {
|
||
display: grid;
|
||
grid-template-columns: repeat(12, 1fr);
|
||
gap: 1.2rem;
|
||
margin-bottom: 48px;
|
||
}
|
||
.s3 {
|
||
grid-column: span 3;
|
||
}
|
||
.s4 {
|
||
grid-column: span 4;
|
||
}
|
||
.s6 {
|
||
grid-column: span 6;
|
||
}
|
||
.s8 {
|
||
grid-column: span 8;
|
||
}
|
||
.card {
|
||
background: var(--card-bg);
|
||
border: 1.5px solid var(--border);
|
||
border-radius: 14px;
|
||
padding: 1.5rem 1.6rem;
|
||
height: 100%;
|
||
}
|
||
.card .mv {
|
||
font-family: var(--disp);
|
||
font-weight: 700;
|
||
font-size: 46px;
|
||
line-height: 1;
|
||
color: var(--primary);
|
||
}
|
||
.card .ml {
|
||
font-family: var(--body);
|
||
font-weight: 600;
|
||
font-size: 16px;
|
||
color: var(--text);
|
||
margin-top: 10px;
|
||
}
|
||
.card .md {
|
||
font-size: 13px;
|
||
line-height: 1.5;
|
||
color: var(--muted);
|
||
margin-top: 8px;
|
||
}
|
||
.card .chg {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
font-size: 12.5px;
|
||
margin-top: 10px;
|
||
}
|
||
.card .chg.pos {
|
||
color: var(--positive);
|
||
}
|
||
.card .chg.neg {
|
||
color: var(--negative);
|
||
}
|
||
.statcell {
|
||
background: var(--card-bg);
|
||
border: 1px solid var(--border);
|
||
border-radius: 12px;
|
||
padding: 1.4rem 1.5rem;
|
||
}
|
||
.statcell .n {
|
||
font-family: var(--disp);
|
||
font-weight: 700;
|
||
font-size: 32px;
|
||
color: var(--primary);
|
||
line-height: 1;
|
||
}
|
||
.statcell .nm {
|
||
font-family: var(--body);
|
||
font-weight: 500;
|
||
font-size: 14px;
|
||
color: var(--text);
|
||
margin-top: 8px;
|
||
}
|
||
.statcell .ctx {
|
||
font-size: 12px;
|
||
color: var(--light);
|
||
margin-top: 8px;
|
||
padding-top: 8px;
|
||
border-top: 1px solid var(--border);
|
||
}
|
||
.bars .row {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 14px;
|
||
margin-bottom: 14px;
|
||
}
|
||
.bars .bl {
|
||
font-family: var(--body);
|
||
font-weight: 500;
|
||
font-size: 14px;
|
||
color: var(--text);
|
||
width: 90px;
|
||
}
|
||
.bars .track {
|
||
flex: 1;
|
||
height: 28px;
|
||
background: var(--accent-light);
|
||
border-radius: 6px;
|
||
overflow: hidden;
|
||
}
|
||
.bars .fill {
|
||
height: 100%;
|
||
display: block;
|
||
background: var(--primary);
|
||
border-radius: 6px;
|
||
}
|
||
.bars .pct {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
font-size: 15px;
|
||
color: var(--primary);
|
||
width: 48px;
|
||
text-align: right;
|
||
}
|
||
.steps {
|
||
display: flex;
|
||
gap: 20px;
|
||
}
|
||
.step {
|
||
flex: 1;
|
||
}
|
||
.step .circ {
|
||
width: 56px;
|
||
height: 56px;
|
||
border-radius: 50%;
|
||
background: var(--primary);
|
||
color: var(--bg);
|
||
display: grid;
|
||
place-items: center;
|
||
font-family: var(--disp);
|
||
font-weight: 700;
|
||
font-size: 21px;
|
||
}
|
||
.step .t {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
font-size: 17px;
|
||
color: var(--text);
|
||
margin-top: 14px;
|
||
}
|
||
.step .d {
|
||
font-size: 13px;
|
||
line-height: 1.5;
|
||
color: var(--muted);
|
||
margin-top: 6px;
|
||
}
|
||
.hilite {
|
||
background: var(--accent-light);
|
||
border-left: 4px solid var(--primary);
|
||
border-radius: 12px;
|
||
padding: 1.3rem 1.5rem;
|
||
}
|
||
.hilite .q {
|
||
font-family: var(--disp);
|
||
font-weight: 500;
|
||
font-size: 22px;
|
||
line-height: 1.4;
|
||
color: var(--text);
|
||
}
|
||
.hilite .c {
|
||
font-family: var(--disp);
|
||
font-weight: 500;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.04em;
|
||
font-size: 12px;
|
||
color: var(--muted);
|
||
margin-top: 14px;
|
||
}
|
||
.cta {
|
||
display: inline-block;
|
||
background: var(--primary);
|
||
color: var(--bg);
|
||
padding: 0.9rem 2.2rem;
|
||
border-radius: 100px;
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
font-size: 15px;
|
||
}
|
||
|
||
/* COMPOSITIONS */
|
||
.gallery {
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr;
|
||
gap: 48px;
|
||
}
|
||
.fw .flabel {
|
||
display: flex;
|
||
gap: 14px;
|
||
align-items: baseline;
|
||
margin-bottom: 16px;
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.06em;
|
||
font-size: 12px;
|
||
color: var(--muted);
|
||
}
|
||
.fw .flabel b {
|
||
color: var(--text);
|
||
}
|
||
.frame {
|
||
aspect-ratio: 16/9;
|
||
container-type: size;
|
||
position: relative;
|
||
overflow: hidden;
|
||
background: var(--bg);
|
||
border: 1px solid var(--border);
|
||
border-radius: 10px;
|
||
}
|
||
.frame > .body {
|
||
position: absolute;
|
||
inset: 0;
|
||
z-index: 3;
|
||
}
|
||
.frame .pbar {
|
||
position: absolute;
|
||
bottom: 0;
|
||
left: 0;
|
||
height: 0.3cqw;
|
||
background: var(--primary);
|
||
z-index: 5;
|
||
}
|
||
|
||
/* f1 cover */
|
||
.gf1 .deco {
|
||
position: absolute;
|
||
top: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
width: 36%;
|
||
background: var(--accent-light);
|
||
clip-path: polygon(30% 0, 100% 0, 100% 100%, 0% 100%);
|
||
z-index: 1;
|
||
}
|
||
.gf1 .dots {
|
||
position: absolute;
|
||
top: 14%;
|
||
right: 9%;
|
||
display: grid;
|
||
grid-template-columns: repeat(3, 1fr);
|
||
gap: 1cqw;
|
||
opacity: 0.25;
|
||
z-index: 2;
|
||
}
|
||
.gf1 .dots i {
|
||
width: 0.7cqw;
|
||
height: 0.7cqw;
|
||
border-radius: 50%;
|
||
background: var(--primary);
|
||
}
|
||
.gf1 .body {
|
||
display: flex;
|
||
flex-direction: column;
|
||
justify-content: center;
|
||
padding: 0 5cqw;
|
||
}
|
||
.gf1 .aline {
|
||
width: 5cqw;
|
||
height: 0.3cqw;
|
||
background: var(--primary);
|
||
border-radius: 0.2cqw;
|
||
margin-bottom: 2cqw;
|
||
}
|
||
.gf1 .ey {
|
||
font-family: var(--disp);
|
||
font-weight: 400;
|
||
font-size: 1cqw;
|
||
letter-spacing: 0.05em;
|
||
color: var(--light);
|
||
margin-bottom: 1.4cqw;
|
||
}
|
||
.gf1 h3 {
|
||
font-family: var(--disp);
|
||
font-weight: 700;
|
||
font-size: 5.6cqw;
|
||
line-height: 1.06;
|
||
letter-spacing: -0.02em;
|
||
color: var(--text);
|
||
max-width: 58cqw;
|
||
}
|
||
.gf1 .sub {
|
||
font-size: 1.4cqw;
|
||
line-height: 1.5;
|
||
color: var(--muted);
|
||
margin-top: 1.8cqw;
|
||
max-width: 48cqw;
|
||
}
|
||
|
||
/* f2 dashboard */
|
||
.gf2 .body {
|
||
padding: 5.5cqw 5cqw;
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
.gf2 .hdr {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: flex-start;
|
||
margin-bottom: 2.4cqw;
|
||
}
|
||
.gf2 .ey {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.08em;
|
||
font-size: 0.95cqw;
|
||
color: var(--primary);
|
||
}
|
||
.gf2 h3 {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
font-size: 3.2cqw;
|
||
letter-spacing: -0.02em;
|
||
color: var(--text);
|
||
margin-top: 0.6cqw;
|
||
}
|
||
.gf2 .tp {
|
||
background: var(--accent-light);
|
||
color: var(--primary);
|
||
padding: 0.4cqw 1cqw;
|
||
border-radius: 100px;
|
||
font-family: var(--disp);
|
||
font-weight: 500;
|
||
font-size: 0.9cqw;
|
||
}
|
||
.gf2 .grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(3, 1fr);
|
||
gap: 1.4cqw;
|
||
flex: 1;
|
||
}
|
||
.gf2 .c {
|
||
background: var(--card-bg);
|
||
border: 0.1cqw solid var(--border);
|
||
border-radius: 1cqw;
|
||
padding: 1.6cqw;
|
||
}
|
||
.gf2 .c .n {
|
||
font-family: var(--disp);
|
||
font-weight: 700;
|
||
font-size: 3.4cqw;
|
||
color: var(--primary);
|
||
line-height: 1;
|
||
}
|
||
.gf2 .c .nm {
|
||
font-family: var(--body);
|
||
font-weight: 600;
|
||
font-size: 1.1cqw;
|
||
color: var(--text);
|
||
margin-top: 0.6cqw;
|
||
}
|
||
.gf2 .c .d {
|
||
font-size: 0.92cqw;
|
||
line-height: 1.45;
|
||
color: var(--muted);
|
||
margin-top: 0.5cqw;
|
||
}
|
||
|
||
/* f3 bars */
|
||
.gf3 .body {
|
||
padding: 5.5cqw 5cqw;
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
.gf3 .ey {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.08em;
|
||
font-size: 0.95cqw;
|
||
color: var(--primary);
|
||
margin-bottom: 0.6cqw;
|
||
}
|
||
.gf3 h3 {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
font-size: 3cqw;
|
||
letter-spacing: -0.02em;
|
||
color: var(--text);
|
||
margin-bottom: 2.4cqw;
|
||
}
|
||
.gf3 .row {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 1.4cqw;
|
||
margin-bottom: 1.4cqw;
|
||
}
|
||
.gf3 .bl {
|
||
font-family: var(--body);
|
||
font-weight: 500;
|
||
font-size: 1.2cqw;
|
||
color: var(--text);
|
||
width: 14cqw;
|
||
}
|
||
.gf3 .track {
|
||
flex: 1;
|
||
height: 2.6cqw;
|
||
background: var(--accent-light);
|
||
border-radius: 0.6cqw;
|
||
overflow: hidden;
|
||
}
|
||
.gf3 .fill {
|
||
height: 100%;
|
||
display: block;
|
||
background: var(--primary);
|
||
border-radius: 0.6cqw;
|
||
}
|
||
.gf3 .pct {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
font-size: 1.4cqw;
|
||
color: var(--primary);
|
||
width: 5cqw;
|
||
text-align: right;
|
||
}
|
||
|
||
/* f4 quote/closing */
|
||
.gf4 {
|
||
position: relative;
|
||
}
|
||
.gf4 .rings {
|
||
position: absolute;
|
||
left: 50%;
|
||
top: 50%;
|
||
transform: translate(-50%, -50%);
|
||
width: 34cqw;
|
||
height: 34cqw;
|
||
border: 0.1cqw solid var(--border);
|
||
border-radius: 50%;
|
||
opacity: 0.4;
|
||
z-index: 1;
|
||
}
|
||
.gf4 .rings::before {
|
||
content: "";
|
||
position: absolute;
|
||
inset: 20%;
|
||
border: 0.1cqw solid var(--border);
|
||
border-radius: 50%;
|
||
}
|
||
.gf4 .body {
|
||
display: flex;
|
||
flex-direction: column;
|
||
justify-content: center;
|
||
align-items: center;
|
||
text-align: center;
|
||
padding: 0 9cqw;
|
||
}
|
||
.gf4 .qm {
|
||
font-family: var(--disp);
|
||
font-weight: 700;
|
||
font-size: 9cqw;
|
||
line-height: 0.5;
|
||
color: var(--primary);
|
||
opacity: 0.15;
|
||
height: 4cqw;
|
||
}
|
||
.gf4 .q {
|
||
font-family: var(--disp);
|
||
font-weight: 500;
|
||
font-size: 3.4cqw;
|
||
line-height: 1.35;
|
||
color: var(--text);
|
||
margin-top: 1cqw;
|
||
}
|
||
.gf4 .c {
|
||
font-family: var(--disp);
|
||
font-weight: 500;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.04em;
|
||
font-size: 1cqw;
|
||
color: var(--muted);
|
||
margin-top: 2cqw;
|
||
}
|
||
|
||
/* PRINCIPLES */
|
||
.dos {
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr;
|
||
gap: 24px;
|
||
}
|
||
.do-card {
|
||
background: var(--card-bg);
|
||
border: 1.5px solid var(--border);
|
||
border-radius: 14px;
|
||
padding: 36px;
|
||
}
|
||
.do-card h4 {
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
font-size: 24px;
|
||
color: var(--text);
|
||
margin-bottom: 8px;
|
||
letter-spacing: -0.01em;
|
||
}
|
||
.do-card .aline {
|
||
width: 48px;
|
||
height: 4px;
|
||
background: var(--primary);
|
||
border-radius: 2px;
|
||
margin-bottom: 22px;
|
||
}
|
||
.do-card ul {
|
||
list-style: none;
|
||
}
|
||
.do-card li {
|
||
font-size: 14px;
|
||
line-height: 1.6;
|
||
padding-left: 24px;
|
||
position: relative;
|
||
margin-bottom: 13px;
|
||
color: var(--muted);
|
||
}
|
||
.do-card li::before {
|
||
position: absolute;
|
||
left: 0;
|
||
font-family: var(--disp);
|
||
font-weight: 700;
|
||
color: var(--primary);
|
||
}
|
||
.do-card.do li::before {
|
||
content: "+";
|
||
}
|
||
.do-card.dont li::before {
|
||
content: "\00d7";
|
||
color: var(--light);
|
||
}
|
||
|
||
.foot {
|
||
padding: 52px 76px;
|
||
border-top: 1px solid var(--border);
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
}
|
||
.foot .l {
|
||
font-family: var(--disp);
|
||
font-weight: 700;
|
||
font-size: 26px;
|
||
color: var(--text);
|
||
letter-spacing: -0.02em;
|
||
}
|
||
.foot .r {
|
||
font-family: var(--disp);
|
||
font-weight: 500;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.06em;
|
||
font-size: 11px;
|
||
color: var(--muted);
|
||
}
|
||
@media (max-width: 1100px) {
|
||
.gallery {
|
||
grid-template-columns: 1fr;
|
||
}
|
||
.swatches {
|
||
grid-template-columns: 1fr 1fr;
|
||
}
|
||
}
|
||
</style>
|
||
<link
|
||
rel="stylesheet"
|
||
href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&display=swap"
|
||
/>
|
||
<link
|
||
rel="stylesheet"
|
||
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
|
||
/>
|
||
<style id="ft-override">
|
||
:root {
|
||
--primary: #fdfae7 !important;
|
||
--secondary: #111111 !important;
|
||
--tertiary: #6b6b6b !important;
|
||
--accent: #1e2bfa !important;
|
||
--f-disp: "Space Grotesk", sans-serif !important;
|
||
--f-body: "Inter", sans-serif !important;
|
||
--bg: #fdfae7 !important;
|
||
--primary: #1e2bfa !important;
|
||
--text: #111111 !important;
|
||
--muted: #6b6b6b !important;
|
||
--disp: "Space Grotesk", sans-serif !important;
|
||
--body: "Inter", sans-serif !important;
|
||
--light: #9a9a9a !important;
|
||
--positive: #059669 !important;
|
||
--negative: #dc2626 !important;
|
||
--accent-light: rgba(30, 43, 250, 0.08) !important;
|
||
--accent-medium: rgba(30, 43, 250, 0.15) !important;
|
||
--border: rgba(30, 43, 250, 0.2) !important;
|
||
--card-bg: rgba(30, 43, 250, 0.04) !important;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<!-- COVER -->
|
||
<section class="cover">
|
||
<div class="deco"></div>
|
||
<div class="dots"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div>
|
||
<div class="inner">
|
||
<div class="aline"></div>
|
||
<div class="meta">FRAME SYSTEM · VOL. 01 · CONFIDENTIAL</div>
|
||
<h1>Restraint, with one strong commitment.</h1>
|
||
<div class="sub">
|
||
A consulting-grade frame system — warm cream, a single saturated cobalt carrying every
|
||
accent, and soft tinted cards that never shout.
|
||
</div>
|
||
</div>
|
||
<div class="counter">01 / 06</div>
|
||
<div class="pbar"></div>
|
||
</section>
|
||
|
||
<!-- PALETTE -->
|
||
<section>
|
||
<div class="sec-head">
|
||
<div class="ey">
|
||
<div class="aline"></div>
|
||
<h2>Palette</h2>
|
||
</div>
|
||
<span class="sp"></span><span class="tagpill">One Accent, Three Grays</span>
|
||
</div>
|
||
<div class="swatches">
|
||
<div class="sw">
|
||
<div
|
||
class="chip"
|
||
style="background: var(--bg); box-shadow: inset 0 0 0 1px var(--border)"
|
||
></div>
|
||
<div class="meta">
|
||
<div class="name">Canvas</div>
|
||
<div class="hex">#fdfae7</div>
|
||
</div>
|
||
</div>
|
||
<div class="sw">
|
||
<div class="chip" style="background: var(--primary)"></div>
|
||
<div class="meta">
|
||
<div class="name">Cobalt</div>
|
||
<div class="hex">#1e2bfa · the only accent</div>
|
||
</div>
|
||
</div>
|
||
<div class="sw">
|
||
<div class="chip" style="background: var(--text)"></div>
|
||
<div class="meta">
|
||
<div class="name">Text</div>
|
||
<div class="hex">#111111</div>
|
||
</div>
|
||
</div>
|
||
<div class="sw">
|
||
<div class="chip" style="background: var(--muted)"></div>
|
||
<div class="meta">
|
||
<div class="name">Muted</div>
|
||
<div class="hex">#6b6b6b · body</div>
|
||
</div>
|
||
</div>
|
||
<div class="sw">
|
||
<div class="chip" style="background: var(--card-bg)"></div>
|
||
<div class="meta">
|
||
<div class="name">Card Tint</div>
|
||
<div class="hex">cobalt · 4%</div>
|
||
</div>
|
||
</div>
|
||
<div class="sw">
|
||
<div class="chip" style="background: var(--border)"></div>
|
||
<div class="meta">
|
||
<div class="name">Border</div>
|
||
<div class="hex">cobalt · 20%</div>
|
||
</div>
|
||
</div>
|
||
<div class="sw">
|
||
<div class="chip" style="background: var(--positive)"></div>
|
||
<div class="meta">
|
||
<div class="name">Positive</div>
|
||
<div class="hex">#059669 · inline only</div>
|
||
</div>
|
||
</div>
|
||
<div class="sw">
|
||
<div class="chip" style="background: var(--negative)"></div>
|
||
<div class="meta">
|
||
<div class="name">Negative</div>
|
||
<div class="hex">#dc2626 · inline only</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- TYPOGRAPHY -->
|
||
<section>
|
||
<div class="sec-head">
|
||
<div class="ey">
|
||
<div class="aline"></div>
|
||
<h2>Typography</h2>
|
||
</div>
|
||
<span class="sp"></span><span class="tagpill">Space Grotesk + Inter</span>
|
||
</div>
|
||
<div class="type-row">
|
||
<div>
|
||
<div class="tok">h1</div>
|
||
<div class="m">Space Grotesk 700 · −0.02em · near-black</div>
|
||
</div>
|
||
<div class="spec">
|
||
<span
|
||
class="disp"
|
||
style="font-weight: 700; font-size: 66px; letter-spacing: -0.02em; color: var(--text)"
|
||
>Measured.</span
|
||
>
|
||
</div>
|
||
</div>
|
||
<div class="type-row">
|
||
<div>
|
||
<div class="tok">h4-eyebrow</div>
|
||
<div class="m">Space Grotesk 600 · uppercase · 0.08em · cobalt</div>
|
||
</div>
|
||
<div class="spec"><span class="eyebrow">Executive Summary</span></div>
|
||
</div>
|
||
<div class="type-row">
|
||
<div>
|
||
<div class="tok">metric-value</div>
|
||
<div class="m">Space Grotesk 700 · cobalt</div>
|
||
</div>
|
||
<div class="spec">
|
||
<span class="disp" style="font-weight: 700; font-size: 54px; color: var(--primary)"
|
||
>$24.3M</span
|
||
>
|
||
</div>
|
||
</div>
|
||
<div class="type-row">
|
||
<div>
|
||
<div class="tok">body</div>
|
||
<div class="m">Inter 400 · line 1.6 · muted gray</div>
|
||
</div>
|
||
<div class="spec">
|
||
<p style="font-size: 17px; line-height: 1.6; max-width: 660px">
|
||
Inter carries every paragraph in muted gray — readable, premium, never competing with
|
||
the cobalt accent or the near-black headline.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="type-row" style="border-bottom: 0">
|
||
<div>
|
||
<div class="tok">cta</div>
|
||
<div class="m">Space Grotesk 600 · cobalt pill · cream text</div>
|
||
</div>
|
||
<div class="spec"><span class="cta">Book a Briefing</span></div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- COMPONENTS -->
|
||
<section>
|
||
<div class="sec-head">
|
||
<div class="ey">
|
||
<div class="aline"></div>
|
||
<h2>Components</h2>
|
||
</div>
|
||
<span class="sp"></span><span class="tagpill">Soft Tints, No Shadows</span>
|
||
</div>
|
||
|
||
<div class="cgrid">
|
||
<div class="s4">
|
||
<div class="cnote">Metric card</div>
|
||
<div class="card">
|
||
<div class="mv">$24.3M</div>
|
||
<div class="ml">Annual Revenue</div>
|
||
<div class="md">Recurring, across every region.</div>
|
||
<div class="chg pos">↑ +18% YoY</div>
|
||
</div>
|
||
</div>
|
||
<div class="s4">
|
||
<div class="cnote">Stat cells</div>
|
||
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1.2rem">
|
||
<div class="statcell">
|
||
<div class="n">94%</div>
|
||
<div class="nm">Retention</div>
|
||
<div class="ctx">Net revenue</div>
|
||
</div>
|
||
<div class="statcell">
|
||
<div class="n">3.4×</div>
|
||
<div class="nm">Multiple</div>
|
||
<div class="ctx">On capital</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="s4">
|
||
<div class="cnote">Bar ranking</div>
|
||
<div class="bars">
|
||
<div class="row">
|
||
<span class="bl">Cobalt</span
|
||
><span class="track"><span class="fill" style="width: 88%"></span></span
|
||
><span class="pct">88</span>
|
||
</div>
|
||
<div class="row">
|
||
<span class="bl">Restraint</span
|
||
><span class="track"><span class="fill" style="width: 64%"></span></span
|
||
><span class="pct">64</span>
|
||
</div>
|
||
<div class="row">
|
||
<span class="bl">Density</span
|
||
><span class="track"><span class="fill" style="width: 46%"></span></span
|
||
><span class="pct">46</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="cgrid" style="margin-bottom: 0">
|
||
<div class="s8">
|
||
<div class="cnote">Step timeline — fade into future</div>
|
||
<div class="steps">
|
||
<div class="step">
|
||
<div class="circ" style="opacity: 1">1</div>
|
||
<div class="t">Survey</div>
|
||
<div class="d">Establish the cream baseline.</div>
|
||
</div>
|
||
<div class="step">
|
||
<div class="circ" style="opacity: 0.85">2</div>
|
||
<div class="t">Tint</div>
|
||
<div class="d">Lift cards with 4% cobalt.</div>
|
||
</div>
|
||
<div class="step">
|
||
<div class="circ" style="opacity: 0.7">3</div>
|
||
<div class="t">Accent</div>
|
||
<div class="d">One cobalt carries emphasis.</div>
|
||
</div>
|
||
<div class="step">
|
||
<div class="circ" style="opacity: 0.55">4</div>
|
||
<div class="t">Deliver</div>
|
||
<div class="d">Executive-ready briefing.</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="s4">
|
||
<div class="cnote">Highlight callout</div>
|
||
<div class="hilite">
|
||
<div class="q">One accent does all the emphasis work.</div>
|
||
<div class="c">— The System Principle</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- COMPOSITIONS -->
|
||
<section>
|
||
<div class="sec-head">
|
||
<div class="ey">
|
||
<div class="aline"></div>
|
||
<h2>Frame Compositions</h2>
|
||
</div>
|
||
<span class="sp"></span><span class="tagpill">True 16:9 · cqw</span>
|
||
</div>
|
||
<div class="gallery">
|
||
<div class="fw">
|
||
<div class="flabel"><b>Cover</b><span>· identity · diagonal accent · left</span></div>
|
||
<div class="frame gf1">
|
||
<div class="deco"></div>
|
||
<div class="dots"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div>
|
||
<div class="body">
|
||
<div class="aline"></div>
|
||
<div class="ey">FRAME SYSTEM · VOL. 01</div>
|
||
<h3>Restraint, with one commitment.</h3>
|
||
<div class="sub">Cream, cobalt, and soft tinted cards.</div>
|
||
</div>
|
||
<div class="pbar" style="width: 16%"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="fw">
|
||
<div class="flabel">
|
||
<b>Dashboard</b><span>· data · 3-up metrics · the dense frame</span>
|
||
</div>
|
||
<div class="frame gf2">
|
||
<div class="body">
|
||
<div class="hdr">
|
||
<div>
|
||
<div class="ey">Performance</div>
|
||
<h3>Q3 At a Glance</h3>
|
||
</div>
|
||
<span class="tp">FY2026</span>
|
||
</div>
|
||
<div class="grid">
|
||
<div class="c">
|
||
<div class="n">$24M</div>
|
||
<div class="nm">Revenue</div>
|
||
<div class="d">Up across every region.</div>
|
||
</div>
|
||
<div class="c">
|
||
<div class="n">94%</div>
|
||
<div class="nm">Retention</div>
|
||
<div class="d">Net revenue, trailing 12mo.</div>
|
||
</div>
|
||
<div class="c">
|
||
<div class="n">+18%</div>
|
||
<div class="nm">Growth</div>
|
||
<div class="d">Year over year, compounding.</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="pbar" style="width: 34%"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="fw">
|
||
<div class="flabel"><b>Bar Ranking</b><span>· data · cobalt fills · left</span></div>
|
||
<div class="frame gf3">
|
||
<div class="body">
|
||
<div class="ey">Drivers</div>
|
||
<h3>What Moves the Number</h3>
|
||
<div class="row">
|
||
<span class="bl">Expansion</span
|
||
><span class="track"><span class="fill" style="width: 88%"></span></span
|
||
><span class="pct">88</span>
|
||
</div>
|
||
<div class="row">
|
||
<span class="bl">New Logos</span
|
||
><span class="track"><span class="fill" style="width: 62%"></span></span
|
||
><span class="pct">62</span>
|
||
</div>
|
||
<div class="row">
|
||
<span class="bl">Pricing</span
|
||
><span class="track"><span class="fill" style="width: 41%"></span></span
|
||
><span class="pct">41</span>
|
||
</div>
|
||
</div>
|
||
<div class="pbar" style="width: 58%"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="fw">
|
||
<div class="flabel">
|
||
<b>Pull Quote</b><span>· quote · concentric rings · centered</span>
|
||
</div>
|
||
<div class="frame gf4">
|
||
<div class="rings"></div>
|
||
<div class="body">
|
||
<div class="qm">“</div>
|
||
<div class="q">Quiet is the most expensive thing on the page.</div>
|
||
<div class="c">— Managing Partner</div>
|
||
</div>
|
||
<div class="pbar" style="width: 82%"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- PRINCIPLES -->
|
||
<section>
|
||
<div class="sec-head">
|
||
<div class="ey">
|
||
<div class="aline"></div>
|
||
<h2>Frame Rules</h2>
|
||
</div>
|
||
<span class="sp"></span><span class="tagpill">Single Accent</span>
|
||
</div>
|
||
<div class="dos">
|
||
<div class="do-card do">
|
||
<h4>Do</h4>
|
||
<div class="aline"></div>
|
||
<ul>
|
||
<li>Start every frame on warm cream; cobalt carries every accent.</li>
|
||
<li>
|
||
Set headlines near-black with −0.02em tracking; eyebrows cobalt, uppercase, 0.08em.
|
||
</li>
|
||
<li>Render every numeral in cobalt Space Grotesk 600–700.</li>
|
||
<li>Use tinted cards — 4% fill, 20% border, 10–14px radius; soft, never outlined.</li>
|
||
<li>Pill chrome at 100px; body in Inter 400, muted gray, line 1.6.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="do-card dont">
|
||
<h4>Don't</h4>
|
||
<div class="aline"></div>
|
||
<ul>
|
||
<li>No second accent color; no cobalt headlines.</li>
|
||
<li>No drop shadows (save the one soft cobalt CTA hover).</li>
|
||
<li>No square corners; no opaque cobalt borders.</li>
|
||
<li>No font substitutes; no uppercase body.</li>
|
||
<li>Don't fill space with heavier borders — add substance, not noise.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- CAPTIONS — preview of caption-skin.html (the preset's lower-third karaoke look) -->
|
||
<style>
|
||
/* mirrors caption-skin.html; the skin's --cap-* vocab mapped to this preset's tokens */
|
||
.capdemo {
|
||
--cap-ink: var(--text);
|
||
--cap-canvas: var(--bg);
|
||
--cap-accent: var(--primary);
|
||
--cap-accent-2: var(--negative);
|
||
}
|
||
.capdemo .stage {
|
||
position: absolute;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
height: 16.67cqh;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
z-index: 4;
|
||
}
|
||
.capdemo .pill {
|
||
max-width: 80cqw;
|
||
padding: 1.4cqw 3cqw 1.7cqw;
|
||
background: color-mix(in srgb, var(--cap-accent) 4%, var(--cap-canvas));
|
||
border: 0.16cqw solid color-mix(in srgb, var(--cap-accent) 20%, transparent);
|
||
border-radius: 1cqw;
|
||
}
|
||
.capdemo .line {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
justify-content: center;
|
||
gap: 0.1em 0.34em;
|
||
font-family: var(--disp);
|
||
font-weight: 600;
|
||
font-size: 3.4cqw;
|
||
line-height: 1.16;
|
||
letter-spacing: -0.02em;
|
||
}
|
||
.capdemo .w {
|
||
display: inline-block;
|
||
padding: 0 0.18em;
|
||
border-radius: 0.32em;
|
||
color: color-mix(in srgb, var(--cap-ink) 52%, var(--cap-canvas));
|
||
}
|
||
.capdemo .w.spoken {
|
||
color: var(--cap-ink);
|
||
}
|
||
.capdemo .w.active {
|
||
color: var(--cap-canvas);
|
||
background: var(--cap-accent);
|
||
}
|
||
.capdemo .bandline {
|
||
position: absolute;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 16.67cqh;
|
||
border-top: 1px dashed var(--border);
|
||
z-index: 3;
|
||
}
|
||
.capdemo .bandtag {
|
||
position: absolute;
|
||
right: 3cqw;
|
||
bottom: calc(16.67cqh + 0.7cqw);
|
||
font-family: var(--disp);
|
||
font-weight: 500;
|
||
font-size: 0.95cqw;
|
||
letter-spacing: 0.04em;
|
||
color: var(--muted);
|
||
opacity: 0.7;
|
||
z-index: 4;
|
||
}
|
||
</style>
|
||
<section>
|
||
<div class="sec-head">
|
||
<div class="ey">
|
||
<div class="aline"></div>
|
||
<h2>Captions</h2>
|
||
</div>
|
||
<span class="sp"></span><span class="tagpill">Lower-third · Karaoke</span>
|
||
</div>
|
||
<div class="gallery">
|
||
<div class="fw">
|
||
<div class="flabel"><b>Active line</b><span>· spoken · current · upcoming</span></div>
|
||
<div class="frame capdemo">
|
||
<div class="deco"></div>
|
||
<div class="bandline"></div>
|
||
<div class="bandtag">caption band · 16.7%</div>
|
||
<div class="stage">
|
||
<div class="pill">
|
||
<div class="line">
|
||
<span class="w spoken">Built</span>
|
||
<span class="w spoken">for</span>
|
||
<span class="w active">teams</span>
|
||
<span class="w">who</span>
|
||
<span class="w">ship.</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="pbar" style="width: 50%"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="fw">
|
||
<div class="flabel"><b>Settled line</b><span>· all spoken · chip cleared</span></div>
|
||
<div class="frame capdemo">
|
||
<div class="stage">
|
||
<div class="pill">
|
||
<div class="line">
|
||
<span class="w spoken">Ship</span>
|
||
<span class="w spoken">faster</span>
|
||
<span class="w spoken">today.</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="pbar" style="width: 100%"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<div class="foot">
|
||
<span class="l">Blue Professional</span>
|
||
<span class="r">Frame Showcase · Atoms Sacred · Composition Free</span>
|
||
</div>
|
||
|
||
<template id="__bundler_thumbnail">
|
||
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||
<rect width="100" height="100" fill="#fdfae7" />
|
||
<rect x="58" y="0" width="42" height="100" fill="#1e2bfa" opacity="0.08" />
|
||
<rect x="14" y="40" width="6" height="20" fill="#1e2bfa" />
|
||
<rect x="26" y="44" width="44" height="6" rx="3" fill="#111111" />
|
||
<rect x="26" y="56" width="30" height="4" rx="2" fill="#1e2bfa" />
|
||
</svg>
|
||
</template>
|
||
</body>
|
||
</html>
|