// Salience — logo/icon system
// Five directions. Each exposes: , ,
const A = {
amber: "#f5a623",
amberLight: "#ffc266",
amberDeep: "#c77a0a",
ink: "#0e0a1e",
inkSoft: "#1a1330",
bone: "#f4f2ff",
dim: "#3a3358",
dimmer: "#2a2346",
};
/* =========================================================
DIRECTION 1 — "Lit Row"
A row of quiet dots, one lit. Pure salience metaphor.
========================================================= */
function Mark1({ size = 64, variant = "onDark" }) {
// 5 dots in a row; 3rd is lit
const dim = variant === "onDark" ? "#3a3358" : "#c5c0dc";
const lit = A.amber;
const glow = "url(#g1)";
return (
);
}
/* =========================================================
DIRECTION 2 — "Notched S"
Heavy S glyph with an amber notch / cut.
========================================================= */
function Mark2({ size = 64, variant = "onDark" }) {
const ink = variant === "onDark" ? A.bone : A.ink;
return (
);
}
/* =========================================================
DIRECTION 3 — "Reticle"
FPS-inspired crosshair with a lit lock-on center.
========================================================= */
function Mark3({ size = 64, variant = "onDark" }) {
const ink = variant === "onDark" ? A.bone : A.ink;
return (
);
}
/* =========================================================
DIRECTION 4 — "Waveform"
Flat telemetry with one spike. Signal in noise.
========================================================= */
function Mark4({ size = 64, variant = "onDark" }) {
const dim = variant === "onDark" ? "#5a5276" : "#9f9ab8";
return (
);
}
/* =========================================================
DIRECTION 5 — "Aperture"
A bracket/aperture closing in on a lit point.
========================================================= */
function Mark5({ size = 64, variant = "onDark" }) {
const ink = variant === "onDark" ? A.bone : A.ink;
return (
);
}
/* =========================================================
Wordmark — logo lockup
========================================================= */
function Wordmark({ Mark, dark = true, label = "Salience" }) {
return (
{label}
);
}
/* =========================================================
App icon — macOS-style rounded square
========================================================= */
function AppIcon({ Mark, size = 120, bg = "dark" }) {
const r = size * 0.225;
const backgrounds = {
dark: `linear-gradient(145deg, #1f1838 0%, #0c0820 100%)`,
darker: `linear-gradient(145deg, #15102a 0%, #050310 100%)`,
amber: `linear-gradient(145deg, ${A.amberLight} 0%, ${A.amberDeep} 100%)`,
bone: `linear-gradient(145deg, #ffffff 0%, #e6e2f0 100%)`,
purple: `linear-gradient(145deg, #4a2a7a 0%, #1a0e3a 100%)`,
};
return (
);
}
/* =========================================================
Dock mockup — shows icon next to other apps
========================================================= */
function Dock({ Mark, bg = "dark", wp = "wp-purple" }) {
const fakeIcons = [
{ bg: "linear-gradient(145deg, #2c2c2e, #1c1c1e)", content: "F" },
{ bg: "linear-gradient(145deg, #5a6dff, #2e3fcc)", content: "M" },
{ bg: "linear-gradient(145deg, #ff9f0a, #ff6b00)", content: "N" },
{ bg: "linear-gradient(145deg, #34c759, #248a3d)", content: "C" },
];
return (
{fakeIcons.slice(0, 2).map((ic, i) => (
{ic.content}
))}
{fakeIcons.slice(2).map((ic, i) => (
{ic.content}
))}
);
}
/* =========================================================
Small scale test (favicon / menu bar)
========================================================= */
function ScaleRow({ Mark, dark = true }) {
const bg = dark ? "#0e0a1e" : "#f4f2ff";
return (
{[16, 22, 32, 48, 72].map(s => (
))}
);
}
Object.assign(window, {
Mark1, Mark2, Mark3, Mark4, Mark5,
Wordmark, AppIcon, Dock, ScaleRow,
});