SPB Git forge

spb/rent-ka

Public
8commits 1branches 0releases
7.4 MBsize
maindefault branch
19 days agolast push
Python 68.8% TypeScript 18.6% CSS 8.7% JavaScript 3.3% HTML 0.6%
4.5 KB · 108 lines tsx
Raw Blame History
1// -----------------------------------------------------------------------------2// Rent-Ka — Rental listings aggregator (Canada, outside Québec)3// Author: Simon-Pierre Boucher — contact@spboucher.ai4// components/Logo.tsx: official Rent-Ka icon — the key that opens your next5//   home. Geometry (100 × 100 grid):6//   A. frame: vertical 60 × 90 squircle centred, rx 19, stroke only 7.5 u,7//      cobalt gradient #3D6BFF → #1738A8, rounded caps;8//   B. key: round bow (circle, negative-space keyhole) top-centre + straight9//      shaft going down to the threshold, two teeth pointing right, deep navy10//      #101A3D → #0B1330;11//   C. light mat: trapezoid at the threshold flaring forward, front edge12//      rounded touching the frame's bottom stroke, gradient #6E92FF → #2456E6.13//   Layer order: key → mat → frame → gloss. "Liquid glass" finish: 28 % white14//   highlight on the top curve + soft navy 14 % drop shadow. Flat version15//   (no gradients): favicon + PWA icon.16//   Baseline: "Apartments and homes for rent across Canada."17// -----------------------------------------------------------------------------1819/** Icon alone (transparent background — for light backgrounds; dark = white key). */20export function LogoIcon({ size = 30, dark = false }: { size?: number; dark?: boolean }) {21  // dark = version for navy backgrounds: the key turns white22  const keyTop = dark ? "#ffffff" : "#101a3d";23  const keyBot = dark ? "#e8edf8" : "#0b1330";24  const uid = dark ? "rk-dark" : "rk-light-bg";25  return (26    <svg27      className="logo-ico"28      width={size}29      height={size}30      viewBox="0 0 100 100"31      fill="none"32      aria-hidden="true"33    >34      <defs>35        {/* frame: brighter cobalt on top, deeper at the bottom */}36        <linearGradient id={`${uid}-frame`} x1="0" y1="0" x2="0" y2="1">37          <stop offset="0" stopColor="#3d6bff" />38          <stop offset="1" stopColor="#1738a8" />39        </linearGradient>40        {/* key: micro depth gradient */}41        <linearGradient id={`${uid}-key`} x1="0" y1="0" x2="0" y2="1">42          <stop offset="0" stopColor={keyTop} />43          <stop offset="1" stopColor={keyBot} />44        </linearGradient>45        {/* mat: cool light spreading forward */}46        <linearGradient id={`${uid}-light`} x1="0" y1="0" x2="0" y2="1">47          <stop offset="0" stopColor="#6e92ff" />48          <stop offset="1" stopColor="#2456e6" />49        </linearGradient>50        {/* very soft navy drop shadow — never a hard shadow */}51        <filter id={`${uid}-soft`} x="-25%" y="-25%" width="150%" height="150%">52          <feDropShadow dx="0" dy="2" stdDeviation="3" floodColor="#0b1330" floodOpacity="0.14" />53        </filter>54      </defs>55      <g filter={`url(#${uid}-soft)`}>56        {/* B — the key: bow with negative-space hole, shaft down, teeth right */}57        <path58          d="M50 1459             a 14.5 14.5 0 1 1 -0.01 0 Z60             M50 24 a 5 5 0 1 0 0.01 0 Z"61          fill={`url(#${uid}-key)`}62          fillRule="evenodd"63        />64        <path65          d="M44.5 41 L55.5 41 L55.5 60 L64 60 L64 66.5 L55.5 66.5 L55.5 70 L61 70 L61 76.5 L44.5 76.5 Z"66          fill={`url(#${uid}-key)`}67        />68        {/* C — light mat: from the threshold forward, rounded front edge69            touching the frame's lower stroke */}70        <path71          d="M37 77.4 L63 77.4 L74.8 88.5 Q76.4 92.5 71.6 92.5 L28.5 92.5 Q24.2 92.5 26 88.6 Z"72          fill={`url(#${uid}-light)`}73          opacity="0.9"74        />75        {/* A — frame: stroke only, very rounded corners (vertical squircle) */}76        <rect77          x="20" y="5" width="60" height="90" rx="19"78          stroke={`url(#${uid}-frame)`}79          strokeWidth="7.5"80          strokeLinecap="round"81          strokeLinejoin="round"82        />83        {/* "liquid glass" specular highlight on the top curve */}84        <path85          d="M31 6.8 Q50 4.4 69 6.8"86          stroke="#ffffff"87          strokeOpacity="0.28"88          strokeWidth="2.6"89          strokeLinecap="round"90        />91      </g>92    </svg>93  );94}9596/** Full horizontal logo: icon + "Rent·Ka" wordmark97 *  (Rent navy, ·Ka cobalt; icon↔text gap ≈ 40 % of icon width). */98export default function Logo({ size = 30 }: { size?: number }) {99  return (100    <span style={{ display: "inline-flex", alignItems: "center", gap: size * 0.4 * 0.6 }}>101      <LogoIcon size={size} />102      <span style={{ color: "#0b1330", fontWeight: 700, letterSpacing: "-0.005em" }}>103        Rent<span style={{ color: "#2456e6" }}>·Ka</span>104      </span>105    </span>106  );107}108