SPB Git

spb/phi-conseil

Public
6.8 KB · 169 lines tsx
1/**2 * Illustrations vectorielles de remplacement, dans la palette du site.3 * Elles occupent exactement la place des photographies de la capture4 * (bureau avec plante, tasse et ordinateur ; vase et livres) en attendant les5 * photos sous licence du client. Voir docs/ASSET_REGISTER.md.6 */78export function DeskScene({ className = "" }: { className?: string }) {9  return (10    <svg11      className={className}12      viewBox="0 0 640 440"13      role="img"14      aria-labelledby="desk-title"15      preserveAspectRatio="xMidYMid slice"16    >17      <title id="desk-title">18        Illustration : bureau lumineux avec une plante, une tasse et un ordinateur portable19      </title>20      <defs>21        <linearGradient id="desk-light" x1="0" y1="0" x2="1" y2="1">22          <stop offset="0" stopColor="#fbf6ed" />23          <stop offset="0.55" stopColor="#f3e9da" />24          <stop offset="1" stopColor="#e5dccb" />25        </linearGradient>26        <linearGradient id="desk-wood" x1="0" y1="0" x2="1" y2="0">27          <stop offset="0" stopColor="#e4cfae" />28          <stop offset="1" stopColor="#cdb389" />29        </linearGradient>30        <linearGradient id="desk-screen" x1="0" y1="0" x2="0" y2="1">31          <stop offset="0" stopColor="#f6f3ec" />32          <stop offset="1" stopColor="#dfe6ec" />33        </linearGradient>34        <radialGradient id="desk-glow" cx="0.6" cy="0.3" r="0.6">35          <stop offset="0" stopColor="#ffffff" stopOpacity="0.9" />36          <stop offset="1" stopColor="#ffffff" stopOpacity="0" />37        </radialGradient>38      </defs>39      <rect width="640" height="440" fill="url(#desk-light)" />40      {/* fenêtre / lumière */}41      <rect x="360" y="20" width="250" height="260" rx="6" fill="#f7f0e4" />42      <rect x="372" y="32" width="110" height="236" fill="#fbf8f1" />43      <rect x="494" y="32" width="104" height="236" fill="#f9f4ea" />44      <rect width="640" height="440" fill="url(#desk-glow)" />45      {/* plan de travail */}46      <path d="M0 300 L640 282 L640 440 L0 440 Z" fill="url(#desk-wood)" />47      <path d="M0 300 L640 282 L640 292 L0 310 Z" fill="#f0e0c5" opacity="0.7" />48      {/* ordinateur portable */}49      <g transform="translate(372 170)">50        <rect x="0" y="0" width="240" height="140" rx="8" fill="#9aa5ae" />51        <rect x="8" y="8" width="224" height="124" rx="4" fill="url(#desk-screen)" />52        <path53          d="M-18 140 L258 140 L278 160 Q280 166 272 166 L-32 166 Q-40 166 -38 160 Z"54          fill="#aab4bc"55        />56        <rect x="90" y="150" width="60" height="5" rx="2" fill="#8c979f" />57      </g>58      {/* tasse */}59      <g transform="translate(260 240)">60        <ellipse cx="38" cy="86" rx="46" ry="8" fill="#b9a88a" opacity="0.35" />61        <path d="M0 20 Q0 86 38 86 Q76 86 76 20 Z" fill="#fbfaf6" />62        <ellipse cx="38" cy="20" rx="38" ry="9" fill="#efe9dd" />63        <ellipse cx="38" cy="20" rx="30" ry="6" fill="#d9c8ad" />64        <path65          d="M76 36 Q104 36 102 58 Q100 78 74 76"66          fill="none"67          stroke="#fbfaf6"68          strokeWidth="9"69        />70      </g>71      {/* plante */}72      <g transform="translate(150 150)">73        <ellipse cx="40" cy="170" rx="60" ry="9" fill="#b9a88a" opacity="0.3" />74        <path d="M-10 110 L90 110 L80 170 L0 170 Z" fill="#f4eee3" />75        <path d="M-10 110 L90 110 L87 124 L-7 124 Z" fill="#e6dccb" />76        <g fill="#6f8f6a">77          <path d="M40 112 C 20 90, 10 60, 40 40 C 70 60, 60 90, 40 112 Z" />78          <path d="M42 110 C 70 100, 95 80, 110 45 C 80 50, 55 75, 42 110 Z" fill="#7d9c74" />79          <path d="M38 110 C 10 100, -20 85, -30 50 C 0 55, 25 78, 38 110 Z" fill="#86a37c" />80          <path d="M44 112 C 60 118, 95 120, 125 105 C 100 95, 65 100, 44 112 Z" fill="#6a8a66" />81          <path d="M36 112 C 20 118, -15 122, -45 110 C -20 98, 15 100, 36 112 Z" fill="#92ad88" />82          <path83            d="M42 100 C 55 70, 75 45, 95 20 C 70 30, 50 60, 42 100 Z"84            fill="#9db694"85            opacity="0.9"86          />87        </g>88      </g>89    </svg>90  );91}9293export function VaseScene({ className = "" }: { className?: string }) {94  return (95    <svg96      className={className}97      viewBox="0 0 440 560"98      role="img"99      aria-labelledby="vase-title"100      preserveAspectRatio="xMidYMid slice"101    >102      <title id="vase-title">103        Illustration : vase transparent avec feuillage posé sur des livres, lumière douce104      </title>105      <defs>106        <linearGradient id="vase-bg" x1="0" y1="0" x2="1" y2="1">107          <stop offset="0" stopColor="#f6efe4" />108          <stop offset="1" stopColor="#e9dfd0" />109        </linearGradient>110        <linearGradient id="vase-glass" x1="0" y1="0" x2="1" y2="0">111          <stop offset="0" stopColor="#ffffff" stopOpacity="0.75" />112          <stop offset="0.5" stopColor="#dfe8ee" stopOpacity="0.55" />113          <stop offset="1" stopColor="#ffffff" stopOpacity="0.8" />114        </linearGradient>115      </defs>116      <rect width="440" height="560" fill="url(#vase-bg)" />117      <rect x="0" y="0" width="440" height="560" fill="#ffffff" opacity="0.18" />118      {/* table */}119      <path d="M0 470 L440 450 L440 560 L0 560 Z" fill="#dcc6a4" />120      <path d="M0 470 L440 450 L440 460 L0 480 Z" fill="#efe2cc" opacity="0.7" />121      {/* livres */}122      <g transform="translate(20 380)">123        <rect x="0" y="60" width="300" height="34" rx="3" fill="#5f7a94" />124        <rect x="0" y="60" width="300" height="6" rx="2" fill="#7b94ab" />125        <rect x="14" y="26" width="280" height="34" rx="3" fill="#a9b8c6" />126        <rect x="14" y="26" width="280" height="6" rx="2" fill="#c5d1dc" />127        <rect x="6" y="-8" width="290" height="34" rx="3" fill="#e8dfd0" />128        <rect x="6" y="-8" width="290" height="6" rx="2" fill="#f5efe4" />129      </g>130      {/* vase */}131      <g transform="translate(140 200)">132        <path133          d="M30 0 L90 0 L100 60 Q110 150 60 172 Q10 150 20 60 Z"134          fill="url(#vase-glass)"135          stroke="#ffffff"136          strokeWidth="2"137        />138        <path d="M24 90 Q20 150 60 168 Q100 150 96 90 Z" fill="#dbe6ec" opacity="0.55" />139      </g>140      {/* tiges et feuilles */}141      <g fill="#7f9a76" stroke="#5e7858" strokeWidth="1">142        <path d="M200 200 C 190 150, 170 110, 150 60" fill="none" />143        <path d="M205 200 C 215 150, 240 110, 270 70" fill="none" />144        <path d="M198 200 C 180 160, 150 140, 110 120" fill="none" />145        {[146          [150, 60, -30],147          [170, 110, -20],148          [120, 95, -60],149          [270, 70, 25],150          [240, 110, 35],151          [285, 115, 60],152          [110, 120, -70],153          [140, 150, -35],154          [225, 150, 45],155        ].map(([x, y, r], i) => (156          <ellipse157            key={i}158            cx={0}159            cy={-22}160            rx={11}161            ry={24}162            transform={`translate(${x} ${y}) rotate(${r})`}163          />164        ))}165      </g>166    </svg>167  );168}169
Files · main
Menu

Theme