Files
brief/skills/internal-meeting-brief/assets/brief-components.css
T
Bryan Gilliom (via Claude) c98daed984 Add internal-meeting-brief — first real skill in the Brief family
Real-tested 2026-09-21 against the APTA 2026 booth 09-16 planning meeting
(recap mode). Includes:
- skills/internal-meeting-brief/SKILL.md — full workflow: topic resolution,
  continuity manifest, agenda/recap branching, attendee capture/normalization,
  scoped data pulls, synthesis, render, archive.
- assets/brief-components.css — canonical shared component library (cards,
  flow, layerbox/filepill, unitgrid, quad, compare, specbar, actions+status
  pills, note callouts x4 tones, colvis/ring), MPM tokens from CW-028,
  required light/dark toggle, print rules.
- references/section-structure.md — fixed-vs-dynamic section contract,
  explicitly marked unproven beyond one real run.

Known limitation: Plaud MCP connector is currently non-functional (local
server via Claude Desktop, times out). Brief was built from a manually
uploaded transcript, not a live pull.

Five more skills planned, not started: vendor-partner-brief,
status-update-brief, five-whys-brief, kickoff-brief, development-brief.
Full design history in CW-027's Concept.md (Drive).
2026-09-22 17:37:52 +00:00

237 lines
12 KiB
CSS

/* ==========================================================================
Brief — shared component library (CW-027)
Canonical CSS for all Brief skills. Do not fork per-brief — edit here.
Design tokens sourced from CW-028 (@jason/ui-kit, src/lib/tokens.json).
Light theme is default; dark theme via [data-theme="dark"]; print always
forces light regardless of the on-screen toggle state.
Re-pull tokens from git.alwisp.com/jason/ui-kit at each Brief release in
case Jason has updated them — see CW-027 Concept.md, "Design system
source of truth."
========================================================================== */
:root{
--bg:#FAF8F4; --surface:#FFFFFF; --surface-2:#F4F0EA; --border:#DED8D1;
--text:#272326; --muted:#665F62;
--brand:#79640E; --brand-bright:#665308; --brand-dark:#5C4B07; --brand-fg:#FFFFFF;
--success:#217A4A; --success-fg:#FFFFFF;
--warning:#7A5B00; --warning-fg:#FFFFFF;
--danger:#A42D20; --danger-fg:#FFFFFF;
--info:#366B99; --info-fg:#FFFFFF;
--radius-sm:6px; --radius-md:10px; --radius-lg:14px; --radius-xl:20px;
--shadow-sm:0 1px 2px 0 rgb(20 16 18 / .10);
--shadow-md:0 4px 12px -2px rgb(20 16 18 / .14), 0 2px 4px -2px rgb(20 16 18 / .10);
--shadow-lg:0 12px 32px -8px rgb(20 16 18 / .20), 0 4px 8px -4px rgb(20 16 18 / .12);
--shadow-glow:0 0 0 1px rgb(121 100 14 / .18), 0 8px 28px -6px rgb(121 100 14 / .20);
--ease-out:cubic-bezier(0.22,1,0.36,1);
--dur-fast:120ms; --dur-base:180ms; --dur-slow:320ms;
}
[data-theme="dark"]{
--bg:#232022; --surface:#2B282A; --surface-2:#333031; --border:#3A3638;
--text:#F5F1EC; --muted:#A99F97;
--brand:#DCBB4F; --brand-bright:#F5CD15; --brand-dark:#998643; --brand-fg:#232022;
--success:#62C890; --success-fg:#232022;
--warning:#E4C85B; --warning-fg:#232022;
--danger:#D76F4A; --danger-fg:#232022;
--info:#76A9D6; --info-fg:#232022;
--shadow-glow:0 0 0 1px rgb(220 187 79 / .20), 0 8px 28px -6px rgb(220 187 79 / .28);
}
/* Fonts: production should self-host from CW-001's assets/fonts/*.ttf.
This @import is a portability fallback for previewing outside that
pipeline — swap it for local <link>/@font-face at publish time. */
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@600;700&family=Open+Sans:wght@400;600&family=JetBrains+Mono:wght@500&display=swap');
*{box-sizing:border-box;}
body{
margin:0; background:var(--bg); color:var(--text);
font-family:"Open Sans",system-ui,sans-serif; line-height:1.55;
transition:background var(--dur-base) var(--ease-out), color var(--dur-base) var(--ease-out);
}
h1,h2,h3,h4{font-family:"Montserrat",system-ui,sans-serif;}
code,.mono{font-family:"JetBrains Mono",ui-monospace,monospace;}
/* ---- Header ---- */
header{
background:linear-gradient(135deg, var(--brand-dark), var(--brand));
color:#fff; padding:32px 6vw 26px; position:relative;
}
[data-theme="dark"] header{background:linear-gradient(135deg,#3a2f08,var(--brand-dark));}
header .wordmark{
display:inline-flex; align-items:center; gap:8px; font-family:"Montserrat";
font-weight:700; font-size:15px; letter-spacing:1px; opacity:.9; margin-bottom:10px;
}
header .wordmark .dot{width:8px; height:8px; border-radius:50%; background:#fff;}
header .eyebrow{font-size:12.5px; letter-spacing:2px; text-transform:uppercase; opacity:.8;}
header h1{margin:8px 0 4px; font-size:26px; font-weight:700; max-width:860px;}
header .meta{margin-top:12px; font-size:13px; opacity:.9; display:flex; flex-wrap:wrap; gap:18px;}
header .meta b{font-weight:600;}
.theme-toggle{
position:absolute; top:28px; right:6vw; background:rgba(255,255,255,.16);
border:1px solid rgba(255,255,255,.35); color:#fff; border-radius:999px;
padding:7px 14px; font-size:12.5px; font-weight:600; cursor:pointer;
transition:background var(--dur-fast) var(--ease-out);
}
.theme-toggle:hover{background:rgba(255,255,255,.28);}
/* ---- Sticky jump-nav ---- */
nav.toc{
background:var(--surface); border-bottom:1px solid var(--border);
padding:10px 6vw; display:flex; flex-wrap:wrap; gap:6px 16px;
position:sticky; top:0; z-index:50; font-size:12.5px;
}
nav.toc a{color:var(--brand); text-decoration:none; white-space:nowrap; font-weight:600;}
nav.toc a:hover{text-decoration:underline;}
/* ---- Layout & section rhythm ---- */
main{padding:26px 6vw 60px; max-width:1180px; margin:0 auto;}
section{margin-bottom:42px;}
section > .sechead{
display:flex; align-items:baseline; gap:10px; margin-bottom:14px;
border-bottom:3px solid var(--brand); padding-bottom:8px;
}
.secnum{
background:var(--brand); color:var(--brand-fg); font-weight:700; font-size:14px;
width:28px; height:28px; border-radius:var(--radius-sm); display:flex;
align-items:center; justify-content:center; flex-shrink:0;
}
.sechead h2{margin:0; font-size:19px; color:var(--text);}
.sechead .sub{font-size:12px; font-weight:400; color:var(--muted); margin-left:4px;}
.sec-note{font-size:13px; color:var(--muted); margin:8px 0 14px; max-width:75ch;}
/* ---- Cards (c2/c3/c4/c5 densities) ---- */
.cards{display:grid; gap:14px;}
.cards.c2{grid-template-columns:repeat(2,1fr);}
.cards.c3{grid-template-columns:repeat(3,1fr);}
.cards.c4{grid-template-columns:repeat(4,1fr);}
.cards.c5{grid-template-columns:repeat(5,1fr);}
@media(max-width:900px){.cards.c3,.cards.c4,.cards.c5{grid-template-columns:1fr 1fr;}}
@media(max-width:600px){.cards.c2,.cards.c3,.cards.c4,.cards.c5{grid-template-columns:1fr;}}
.card{
background:var(--surface); border:1px solid var(--border); border-radius:var(--radius-md);
padding:16px; box-shadow:var(--shadow-sm);
transition:box-shadow var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out);
}
.card:hover{box-shadow:var(--shadow-md); transform:translateY(-1px);}
.card h3{margin:0 0 6px; font-size:14.5px; color:var(--text);}
.card p{margin:6px 0; font-size:13px; color:var(--muted);}
.icon{
width:36px; height:36px; border-radius:var(--radius-sm); display:flex;
align-items:center; justify-content:center; color:#fff; font-size:17px;
font-weight:700; margin-bottom:8px;
}
.sensorgrid .card{text-align:center;}
.sensorgrid .icon{margin:0 auto 8px;}
/* ---- Flow (sequential process) ---- */
.flow{display:flex; align-items:stretch; gap:10px; flex-wrap:wrap;}
.flow .step{flex:1; min-width:160px;}
.flow .arrow{align-self:center; font-size:20px; color:var(--muted); padding:0 2px;}
/* ---- Layerbox + filepill (tiered component grouping) ---- */
.layerbox{border-radius:var(--radius-lg); padding:16px 18px; margin-bottom:12px; border:2px solid var(--border);}
.layer-base{background:color-mix(in srgb, var(--info) 8%, var(--surface)); border-color:var(--info);}
.layer-ext{background:color-mix(in srgb, var(--warning) 10%, var(--surface)); border-style:dashed; border-color:var(--warning);}
.layerbox .tag{
display:inline-block; font-size:10.5px; font-weight:700; letter-spacing:.5px;
padding:2px 9px; border-radius:999px; color:#fff; margin-bottom:8px;
}
.tag-base{background:var(--info);} .tag-ext{background:var(--warning); color:var(--text);}
.filepill{
display:inline-flex; flex-direction:column; background:var(--surface); border:1px solid var(--border);
border-radius:var(--radius-sm); padding:8px 12px; margin:4px 8px 4px 0; font-size:12.5px; min-width:160px;
}
.filepill b{font-size:13px; color:var(--text);}
.filepill span{color:var(--muted);}
/* ---- Unitgrid (spec/comparison matrix) ---- */
table.unitgrid{border-collapse:collapse; width:100%; margin-top:10px; font-size:12.5px;}
table.unitgrid th, table.unitgrid td{border:1px solid var(--border); padding:8px 10px; text-align:center;}
table.unitgrid th{background:var(--text); color:var(--bg); font-weight:600;}
table.unitgrid td.yes{color:var(--success); font-weight:700;}
table.unitgrid td.no{color:var(--muted);}
table.unitgrid td:first-child{text-align:left; font-weight:600;}
/* ---- Quad (2x2 flagship callouts) ---- */
.quad{display:grid; grid-template-columns:1fr 1fr; gap:14px;}
@media(max-width:700px){.quad{grid-template-columns:1fr;}}
.quadcard{
border-radius:var(--radius-md); padding:14px 16px; background:var(--surface);
border:1px solid var(--border); border-left-width:5px; border-left-style:solid;
}
.q-1{border-left-color:var(--info);}
.q-2{border-left-color:var(--warning);}
.q-3{border-left-color:var(--danger);}
.q-4{border-left-color:var(--success);}
.quadcard h4{margin:0 0 6px; font-size:13.5px; color:var(--text);}
.quadcard p{font-size:12.5px; margin:4px 0; color:var(--muted);}
/* ---- Compare (two-column contrast) ---- */
.compare{display:grid; grid-template-columns:1fr 1fr; gap:16px;}
@media(max-width:700px){.compare{grid-template-columns:1fr;}}
.compare .col{border-radius:var(--radius-md); padding:14px 16px; border:1px solid var(--border);}
.col-a{background:color-mix(in srgb, var(--info) 8%, var(--surface));}
.col-b{background:color-mix(in srgb, var(--brand) 8%, var(--surface));}
.compare h3{margin-top:0; font-size:14px;}
.compare ul{margin:8px 0 0; padding-left:18px; font-size:12.5px; color:var(--muted);}
.compare li{margin-bottom:8px;}
/* ---- Specbar (stat cards) ---- */
.specbar{display:flex; flex-wrap:wrap; gap:14px;}
.spec{flex:1; min-width:160px; background:var(--surface); border:1px solid var(--border); border-radius:var(--radius-md); padding:14px;}
.spec .val{font-size:22px; font-weight:700; color:var(--brand); font-family:"Montserrat";}
.spec .lbl{font-size:11.5px; color:var(--muted); margin-top:2px;}
/* ---- Actions table + status pills ---- */
table.actions{border-collapse:collapse; width:100%; font-size:12.5px;}
table.actions th{background:var(--text); color:var(--bg); padding:8px 10px; text-align:left; font-weight:600;}
table.actions td{padding:9px 10px; border-bottom:1px solid var(--border); vertical-align:top; color:var(--text);}
table.actions tr:nth-child(even) td{background:var(--surface-2);}
.status{display:inline-block; font-size:10.5px; font-weight:700; padding:2px 10px; border-radius:999px; white-space:nowrap;}
.status.info{background:var(--info); color:var(--info-fg);}
.status.warn{background:var(--warning); color:var(--warning-fg);}
.status.danger{background:var(--danger); color:var(--danger-fg);}
.status.success{background:var(--success); color:var(--success-fg);}
.status.muted{background:var(--muted); color:var(--surface);}
/* ---- Note callouts (4 semantic tones) ---- */
.note{border-radius:var(--radius-sm); padding:12px 16px; font-size:13px; border-left:4px solid; margin-bottom:10px;}
.note.info{background:color-mix(in srgb, var(--info) 10%, var(--surface)); border-color:var(--info);}
.note.warn{background:color-mix(in srgb, var(--warning) 12%, var(--surface)); border-color:var(--warning);}
.note.danger{background:color-mix(in srgb, var(--danger) 10%, var(--surface)); border-color:var(--danger);}
.note.success{background:color-mix(in srgb, var(--success) 10%, var(--surface)); border-color:var(--success);}
.note b{color:var(--text);}
/* ---- Colvis / conic-gradient ring (space/percentage allocation) ---- */
.colvis{display:flex; gap:16px; flex-wrap:wrap; align-items:stretch;}
.colvis .colcard{flex:1; min-width:230px; background:var(--surface); border:1px solid var(--border); border-radius:var(--radius-md); padding:16px; text-align:center;}
.colvis .ring{
width:110px; height:110px; border-radius:50%; margin:0 auto 10px; position:relative;
display:flex; align-items:center; justify-content:center; font-weight:700; color:var(--text); font-size:12.5px;
}
.ring-main{background:conic-gradient(var(--brand) 0 35%, var(--info) 35% 65%, var(--warning) 65% 100%);}
.ring-main::after{content:""; position:absolute; width:68px; height:68px; background:var(--surface); border-radius:50%;}
.colvis .ring span{position:relative; z-index:2;}
.legend{display:flex; flex-wrap:wrap; gap:8px; justify-content:center; font-size:11px; margin-top:6px; color:var(--muted);}
.legend .dot{display:inline-block; width:9px; height:9px; border-radius:50%; margin-right:4px;}
/* ---- Footer ---- */
footer{padding:22px 6vw; color:var(--muted); font-size:11.5px; text-align:center; border-top:1px solid var(--border); margin-top:20px;}
/* ==========================================================================
PRINT — always light, no chrome, avoid awkward breaks.
PDF generation at publish time should render this media state.
========================================================================== */
@media print{
.theme-toggle, nav.toc{display:none !important;}
body{background:#FAF8F4 !important; color:#272326 !important;}
header{background:#79640E !important; -webkit-print-color-adjust:exact; print-color-adjust:exact;}
.card, .quadcard, .layerbox, .filepill, table.unitgrid, table.actions, .note, .colcard, .spec{
break-inside:avoid;
}
section{break-inside:avoid-page;}
a{color:inherit; text-decoration:none;}
}