Tactical Media Broadcast Hub — initial release
Self-hosted multi-platform broadcast newsroom for activist collectives: publishing pipeline with group approval and DST-proof scheduling, TweetDeck-style column wall with hostile-content-safe rendering, live control room with Auto Director, bridged chat governance with polls and quorum, distributed sandboxed transcode workers, encrypted content-addressed archive, monthly analytics. MIT licensed. See README.md and docs/.
This commit is contained in:
commit
aa5e262f3a
880 changed files with 111042 additions and 0 deletions
102
apps/web/src/app/globals.css
Normal file
102
apps/web/src/app/globals.css
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
@import "tailwindcss";
|
||||
|
||||
@theme {
|
||||
--color-bg: oklch(0.11 0.008 25);
|
||||
--color-surface: oklch(0.15 0.01 25);
|
||||
--color-surface-2: oklch(0.19 0.012 25);
|
||||
--color-border: oklch(0.26 0.02 25);
|
||||
--color-border-subtle: oklch(0.22 0.015 25);
|
||||
--color-text: oklch(0.93 0.005 25);
|
||||
--color-text-dim: oklch(0.62 0.02 25);
|
||||
--color-text-faint: oklch(0.46 0.02 25);
|
||||
--color-accent: #ff1610;
|
||||
--color-accent-hover: #e3130e;
|
||||
--color-accent-dim: rgb(255 22 16 / 0.15);
|
||||
--color-live: oklch(0.72 0.19 145);
|
||||
--color-warn: oklch(0.78 0.16 85);
|
||||
--color-danger: oklch(0.55 0.24 15);
|
||||
--color-added: oklch(0.72 0.16 145);
|
||||
--color-removed: oklch(0.55 0.24 15);
|
||||
|
||||
--font-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
|
||||
--font-mono: ui-monospace, "SF Mono", Menlo, monospace;
|
||||
|
||||
--radius-sm: 0.375rem;
|
||||
--radius-md: 0.5rem;
|
||||
--radius-lg: 0.75rem;
|
||||
|
||||
--text-2xs: 0.6875rem;
|
||||
--text-xs: 0.75rem;
|
||||
--text-sm: 0.8125rem;
|
||||
--text-base: 0.875rem;
|
||||
--text-lg: 1rem;
|
||||
|
||||
--mobile-tab-height: 76px;
|
||||
--mobile-fab-size: 64px;
|
||||
--mobile-sheet-radius: 28px;
|
||||
--mobile-safe-bottom: env(safe-area-inset-bottom, 0px);
|
||||
}
|
||||
|
||||
@theme inline {
|
||||
--color-brand: var(--color-accent);
|
||||
}
|
||||
|
||||
html {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
body {
|
||||
background: var(--color-bg);
|
||||
color: var(--color-text);
|
||||
font-family: var(--font-sans);
|
||||
font-size: var(--text-base);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
html, body { max-width: 100%; }
|
||||
|
||||
@media (max-width: 1023px) {
|
||||
body { overflow-x: hidden; }
|
||||
[data-mobile-main] :is(button, a[href], input, select, textarea, [role="tab"]) {
|
||||
min-height: 44px;
|
||||
}
|
||||
[data-mobile-main] :is(button, a[href], [role="tab"]) {
|
||||
min-width: 44px;
|
||||
}
|
||||
[data-mobile-main] p a[href] { display: inline-flex; align-items: center; }
|
||||
[data-mobile-main] .mobile-stack-table,
|
||||
[data-mobile-main] .mobile-stack-table tbody,
|
||||
[data-mobile-main] .mobile-stack-table tr,
|
||||
[data-mobile-main] .mobile-stack-table td { display: block; width: 100%; min-width: 0; }
|
||||
[data-mobile-main] .mobile-stack-table thead { display: none; }
|
||||
[data-mobile-main] .mobile-stack-table tr { padding: 8px 0; }
|
||||
[data-mobile-main] .mobile-stack-table td { overflow-wrap: anywhere; }
|
||||
[data-mobile-main] .mobile-stack-table td > * { max-width: 100%; }
|
||||
}
|
||||
|
||||
::selection {
|
||||
background: var(--color-accent-dim);
|
||||
}
|
||||
|
||||
:focus-visible {
|
||||
outline: 2px solid var(--color-accent);
|
||||
outline-offset: 1px;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
transition-duration: 0.01ms !important;
|
||||
animation-duration: 0.01ms !important;
|
||||
}
|
||||
}
|
||||
|
||||
.scrollbar-thin::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
}
|
||||
.scrollbar-thin::-webkit-scrollbar-thumb {
|
||||
background: var(--color-border);
|
||||
border-radius: 3px;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue