/* Kingstoring Vector — shared components
Logo, nav, footer, terminal-style ornaments.
*/
/* =========================================================
VECTOR LOGO — radar sweep mark
========================================================= */
function VectorMark({ size = 64, color = "currentColor", accent = "var(--vk-amber)", signal = "var(--vk-blue)" }) {
return (
);
}
function VectorLockup({ height = 32, color = "var(--vk-ivory)", accent = "var(--vk-amber)", signal = "var(--vk-blue)", subColor = "var(--vk-mist)" }) {
return (
kingstoring
// signal · over · noise
);
}
/* =========================================================
TICKER BAR — top of every page (Bloomberg style)
========================================================= */
function TickerBar() {
const items = [
{ l: "ASSOCIÉS·CONTACTÉS·CUMUL", v: "5000+", t: "+12.4%", up: true },
{ l: "AG·MOBILISÉES·2018-2026", v: "12", t: "+3", up: true },
{ l: "QUORUM·MOYEN·ATTEINT", v: "74%", t: "+2.1pt", up: true },
{ l: "LANGUES·SUPPORTÉES", v: "4", t: "FR·EN·IT·ES", up: null },
{ l: "CANAUX·ACTIFS", v: "4", t: "MAIL·SMS·POST·WEB", up: null },
{ l: "DÉLAI·MOBILISATION·MÉDIAN", v: "45j", t: "-3j", up: true },
{ l: "BUREAU", v: "NICE", t: "—", up: null },
{ l: "ANNÉE·FONDATION", v: "2018", t: "—", up: null },
];
return (
{[...items, ...items, ...items].map((x, i) => (
{x.l}
{x.v}
{x.up === true ? "▲" : x.up === false ? "▼" : "■"} {x.t}
))}
);
}
/* =========================================================
NAV — sticky, dark
========================================================= */
function Nav({ active = "home" }) {
const links = [
{ id: "home", label: "Cabinet", href: "index.html" },
{ id: "osint", label: "OSINT & data research", href: "osint.html" },
{ id: "timeshare", label: "Timeshare", href: "timeshare.html" },
{ id: "quorum", label: "Quorum", href: "quorum.html" },
{ id: "contact", label: "Contact", href: "contact.html" },
];
return (
);
}
/* =========================================================
FOOTER
========================================================= */
function Footer() {
return (
);
}
/* Status pill */
function Pill({ kind = "live", text }) {
const colors = { live: "var(--vk-green)", verified: "var(--vk-blue)", focal: "var(--vk-amber)" };
const c = colors[kind] || colors.live;
return (
{text}
);
}
/* Corner brackets */
function Brackets({ color = "var(--vk-amber)", inset = 12, size = 12 }) {
const s = { position: "absolute", width: size, height: size, borderColor: color };
return (
<>
>
);
}
/* Page header (for inner pages) */
function PageHeader({ section, code, title, lead }) {
return (
// {code}
{section}
● LIVE
{title}
{lead &&
{lead}
}
);
}
Object.assign(window, { VectorMark, VectorLockup, TickerBar, Nav, Footer, Pill, Brackets, PageHeader });