// ui/icons.jsx — the line-icon set and the product logo.
/* ---------------------------------------------------------------- icons */
// Minimal single/dual-path line glyphs for UI affordances only.
const ICONS = {
  dashboard: "M3 3h7v7H3zM14 3h7v4h-7zM14 10h7v11h-7zM3 13h7v8H3z",
  ledger:    "M4 5h16M4 10h16M4 15h16M4 20h10",
  browse:    "M12 3l8 4-8 4-8-4 8-4zM4 12l8 4 8-4M4 17l8 4 8-4",
  search:    "M11 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14zM20 20l-3.5-3.5",
  filter:    "M3 5h18l-7 8v5l-4 2v-7z",
  bell:      "M6 9a6 6 0 0 1 12 0c0 5 2 6 2 6H4s2-1 2-6M10 21h4",
  chevR:     "M9 6l6 6-6 6",
  chevD:     "M6 9l6 6 6-6",
  sortUp:    "M12 4v16M6 10l6-6 6 6",
  sortDown:  "M12 20V4M6 14l6 6 6-6",
  close:     "M6 6l12 12M18 6L6 18",
  menu:      "M4 6h16M4 12h16M4 18h16",
  check:     "M5 12l5 5 9-11",
  clock:     "M12 3a9 9 0 1 0 0 18 9 9 0 0 0 0-18zM12 7v5l3 3",
  ext:       "M14 4h6v6M20 4l-9 9M18 13v6H5V6h6",
  shield:    "M12 3l8 3v6c0 5-4 8-8 9-4-1-8-4-8-9V6z",
  chip:      "M7 7h10v10H7zM9 3v2M15 3v2M9 19v2M15 19v2M3 9h2M3 15h2M19 9h2M19 15h2",
  car:       "M3 13l2-5a3 3 0 0 1 3-2h8a3 3 0 0 1 3 2l2 5v5h-3v-2H6v2H3zM7 16h.01M17 16h.01",
  user:      "M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM4 21a8 8 0 0 1 16 0",
  logout:    "M15 4h4v16h-4M11 8l-4 4 4 4M7 12h9",
  sun:       "M12 7a5 5 0 1 0 0 10 5 5 0 0 0 0-10zM12 2v2M12 20v2M4 12H2M22 12h-2M5 5l1.5 1.5M17.5 17.5L19 19M19 5l-1.5 1.5M6.5 17.5L5 19",
  moon:      "M20 14a8 8 0 0 1-10-10 8 8 0 1 0 10 10z",
  sliders:   "M4 6h10M18 6h2M4 12h2M10 12h10M4 18h14M18 18h2M14 4v4M6 10v4M16 16v4",
  bolt:      "M13 2L4 14h7l-1 8 9-12h-7z",
  pulse:     "M3 12h4l2-6 4 14 2-8h6",
  layers:    "M12 3l8 4-8 4-8-4zM4 12l8 4 8-4M4 16l8 4 8-4",
  target:    "M12 3a9 9 0 1 0 0 18 9 9 0 0 0 0-18zM12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8zM12 11.5a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1z",
  download:  "M12 3v12M7 11l5 5 5-5M5 21h14",
  flag:      "M5 21V4M5 4h11l-2 4 2 4H5",
  link:      "M9 15l6-6M10 6l1-1a4 4 0 0 1 6 6l-1 1M14 18l-1 1a4 4 0 0 1-6-6l1-1",
  dot:       "M12 12a3 3 0 1 0 0-.001",
  arrowR:    "M5 12h14M13 6l6 6-6 6",
  arrowL:    "M19 12H5M11 6l-6 6 6 6",
  plus:      "M12 5v14M5 12h14",
  upload:    "M12 15V4M8 8l4-4 4 4M5 20h14",
  doc:       "M6 4a1 1 0 0 1 1-1h7l4 4v13a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1zM14 3v5h5",
  pencil:    "M4 20h4L19 9l-4-4L4 16zM14 6l4 4",
  trash:     "M4 7h16M9 7V4h6v3M6 7l1 13h10l1-13",
  package:   "M12 3l8 4v10l-8 4-8-4V7zM4 7l8 4 8-4M12 11v10",
  sparkle:   "M12 3l2 6 6 2-6 2-2 6-2-6-6-2 6-2z",
  grip:      "M9 6h.01M15 6h.01M9 12h.01M15 12h.01M9 18h.01M15 18h.01",
  copy:      "M9 9h11v11H9zM5 15H4V4h11v1",
  refresh:   "M20 11a8 8 0 0 0-14-5L3 9M3 4v5h5M4 13a8 8 0 0 0 14 5l3-3M21 20v-5h-5",
  alert:     "M12 4l9 16H3zM12 10v4M12 17h.01",
  xcircle:   "M12 3a9 9 0 1 0 0 18 9 9 0 0 0 0-18zM9 9l6 6M15 9l-6 6",
};
function Icon({ name, size = 16, className = "", style = {} }) {
  const d = ICONS[name] || "";
  const fill = name === "dot" ? "currentColor" : "none";
  return (
    <svg className={"ic " + className} width={size} height={size} viewBox="0 0 24 24"
      fill={fill} stroke="currentColor" strokeWidth="1.6" strokeLinecap="round"
      strokeLinejoin="round" style={style} aria-hidden="true">
      <path d={d} />
    </svg>
  );
}

/* ----------------------------------------------------------------- logo */
function Logo({ size = 22, withWord = true, withMark = true }) {
  return (
    <span className="logo" style={{ ["--lz"]: size + "px" }}>
      {withMark && (
        <span className="logo-mark" aria-hidden="true">
          <svg viewBox="0 0 24 24" width={size} height={size}>
            <path d="M12 2l8.5 4.6v8.8L12 22l-8.5-6.6V6.6z" fill="none"
              stroke="var(--accent)" strokeWidth="1.5" strokeLinejoin="round" />
            <path d="M12 8.2l3.6 2v3.6L12 16l-3.6-2.2V10.2z" fill="var(--accent)" opacity="0.9" />
          </svg>
        </span>
      )}
      {withWord && (
        <span className="logo-word">vulnerability<span className="logo-word-2">.core</span></span>
      )}
    </span>
  );
}

Object.assign(window, { Icon, Logo });
