logo-preview.html 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  1. <!doctype html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <title>Less and Cosmos Visual Identity</title>
  7. <style>
  8. :root {
  9. --absolute-void: #0B0C10;
  10. --muted-nebula: #1F2833;
  11. --cosmos-white: #F5F5F7;
  12. --mercury-silver: #C5C6C7;
  13. --spark-gold: #E6C687;
  14. --page-bg: #0B0C10;
  15. --page-fg: #F5F5F7;
  16. --page-muted: #C5C6C7;
  17. --panel-bg: rgba(31, 40, 51, 0.46);
  18. --panel-border: rgba(197, 198, 199, 0.16);
  19. --meta-border: rgba(197, 198, 199, 0.12);
  20. --light-stage: #F5F5F7;
  21. --light-grid: rgba(11, 12, 16, 0.07);
  22. }
  23. [data-theme="light"] {
  24. --page-bg: #F5F5F7;
  25. --page-fg: #0B0C10;
  26. --page-muted: #59616A;
  27. --panel-bg: #FFFFFF;
  28. --panel-border: rgba(31, 40, 51, 0.14);
  29. --meta-border: rgba(31, 40, 51, 0.1);
  30. --light-stage: #F5F5F7;
  31. --light-grid: rgba(31, 40, 51, 0.08);
  32. }
  33. * {
  34. box-sizing: border-box;
  35. }
  36. body {
  37. margin: 0;
  38. min-height: 100vh;
  39. color: var(--page-fg);
  40. background: var(--page-bg);
  41. font-family: Inter, "Helvetica Neue", Helvetica, Arial, "PingFang SC", sans-serif;
  42. transition: background 180ms ease, color 180ms ease;
  43. }
  44. main {
  45. width: min(1120px, calc(100vw - 48px));
  46. margin: 0 auto;
  47. padding: 64px 0;
  48. }
  49. .topbar {
  50. display: flex;
  51. align-items: center;
  52. justify-content: space-between;
  53. gap: 18px;
  54. margin-bottom: 32px;
  55. }
  56. .brand-kicker {
  57. margin: 0;
  58. color: var(--page-muted);
  59. font-size: 12px;
  60. letter-spacing: 0.2em;
  61. text-transform: uppercase;
  62. }
  63. .theme-toggle {
  64. display: inline-grid;
  65. grid-template-columns: 1fr 1fr;
  66. gap: 3px;
  67. padding: 3px;
  68. border: 1px solid var(--panel-border);
  69. background: var(--panel-bg);
  70. }
  71. .theme-toggle button {
  72. min-width: 72px;
  73. min-height: 32px;
  74. border: 0;
  75. color: var(--page-muted);
  76. background: transparent;
  77. font: inherit;
  78. font-size: 12px;
  79. letter-spacing: 0.08em;
  80. cursor: pointer;
  81. }
  82. .theme-toggle button[aria-pressed="true"] {
  83. color: var(--cosmos-white);
  84. background: var(--absolute-void);
  85. }
  86. [data-theme="dark"] .theme-toggle button[aria-pressed="true"] {
  87. color: var(--absolute-void);
  88. background: var(--cosmos-white);
  89. }
  90. .preview {
  91. display: grid;
  92. gap: 28px;
  93. }
  94. .section-title {
  95. margin: 56px 0 18px;
  96. color: var(--page-muted);
  97. font-size: 13px;
  98. font-weight: 400;
  99. letter-spacing: 0.18em;
  100. text-transform: uppercase;
  101. }
  102. .surface {
  103. min-height: 260px;
  104. display: grid;
  105. place-items: center;
  106. border: 1px solid var(--panel-border);
  107. background: var(--absolute-void);
  108. }
  109. .surface.nebula {
  110. background: var(--muted-nebula);
  111. }
  112. .surface.compact {
  113. min-height: 180px;
  114. }
  115. .png-grid {
  116. display: grid;
  117. grid-template-columns: repeat(2, minmax(0, 1fr));
  118. gap: 18px;
  119. }
  120. .png-card {
  121. border: 1px solid var(--panel-border);
  122. background: var(--panel-bg);
  123. }
  124. .png-stage {
  125. min-height: 190px;
  126. display: grid;
  127. place-items: center;
  128. padding: 28px;
  129. background: var(--absolute-void);
  130. }
  131. .png-stage.nebula {
  132. background: var(--muted-nebula);
  133. }
  134. .png-stage.checker {
  135. background-color: var(--absolute-void);
  136. background-image:
  137. linear-gradient(45deg, rgba(197, 198, 199, 0.08) 25%, transparent 25%),
  138. linear-gradient(-45deg, rgba(197, 198, 199, 0.08) 25%, transparent 25%),
  139. linear-gradient(45deg, transparent 75%, rgba(197, 198, 199, 0.08) 75%),
  140. linear-gradient(-45deg, transparent 75%, rgba(197, 198, 199, 0.08) 75%);
  141. background-position: 0 0, 0 10px, 10px -10px, -10px 0;
  142. background-size: 20px 20px;
  143. }
  144. [data-theme="light"] .png-stage.checker {
  145. background-color: var(--absolute-void);
  146. }
  147. .png-stage.light-checker {
  148. background-color: var(--light-stage);
  149. background-image:
  150. linear-gradient(45deg, var(--light-grid) 25%, transparent 25%),
  151. linear-gradient(-45deg, var(--light-grid) 25%, transparent 25%),
  152. linear-gradient(45deg, transparent 75%, var(--light-grid) 75%),
  153. linear-gradient(-45deg, transparent 75%, var(--light-grid) 75%);
  154. background-position: 0 0, 0 10px, 10px -10px, -10px 0;
  155. background-size: 20px 20px;
  156. }
  157. .light-mode-ink {
  158. filter: brightness(0) saturate(100%) invert(4%) sepia(11%) saturate(1045%) hue-rotate(176deg) brightness(94%) contrast(95%);
  159. }
  160. .png-meta {
  161. min-height: 46px;
  162. display: flex;
  163. align-items: center;
  164. justify-content: space-between;
  165. flex-wrap: wrap;
  166. gap: 12px;
  167. padding: 12px 14px;
  168. border-top: 1px solid var(--meta-border);
  169. color: var(--page-muted);
  170. font-size: 12px;
  171. letter-spacing: 0.04em;
  172. }
  173. .png-meta span {
  174. overflow-wrap: anywhere;
  175. text-align: right;
  176. }
  177. .png-meta strong {
  178. color: var(--page-fg);
  179. font-size: 12px;
  180. font-weight: 400;
  181. letter-spacing: 0.08em;
  182. }
  183. img {
  184. display: block;
  185. max-width: min(86vw, 820px);
  186. height: auto;
  187. }
  188. .mark {
  189. max-width: 360px;
  190. }
  191. .png-card img {
  192. width: min(100%, 560px);
  193. max-height: 180px;
  194. object-fit: contain;
  195. }
  196. .png-card .mark-png {
  197. max-width: 320px;
  198. }
  199. .palette {
  200. display: grid;
  201. grid-template-columns: repeat(5, minmax(120px, 1fr));
  202. gap: 12px;
  203. margin-top: 28px;
  204. }
  205. .swatch {
  206. min-height: 112px;
  207. padding: 14px;
  208. border: 1px solid rgba(197, 198, 199, 0.14);
  209. display: flex;
  210. flex-direction: column;
  211. justify-content: flex-end;
  212. gap: 5px;
  213. color: var(--cosmos-white);
  214. font-size: 12px;
  215. letter-spacing: 0.08em;
  216. }
  217. .swatch strong {
  218. font-size: 13px;
  219. font-weight: 400;
  220. letter-spacing: 0.1em;
  221. }
  222. .void { background: var(--absolute-void); }
  223. .nebula-color { background: var(--muted-nebula); }
  224. .white { background: var(--cosmos-white); color: var(--absolute-void); }
  225. .silver { background: var(--mercury-silver); color: var(--absolute-void); }
  226. .gold { background: var(--spark-gold); color: var(--absolute-void); }
  227. @media (max-width: 760px) {
  228. main {
  229. width: min(100vw - 28px, 560px);
  230. padding: 32px 0;
  231. }
  232. .surface {
  233. min-height: 190px;
  234. }
  235. .palette {
  236. grid-template-columns: 1fr;
  237. }
  238. .png-grid {
  239. grid-template-columns: 1fr;
  240. }
  241. .png-stage {
  242. min-height: 150px;
  243. padding: 18px;
  244. }
  245. .topbar {
  246. align-items: flex-start;
  247. flex-direction: column;
  248. }
  249. }
  250. </style>
  251. </head>
  252. <body data-theme="dark">
  253. <main>
  254. <header class="topbar">
  255. <p class="brand-kicker">Less and Cosmos Visual Identity</p>
  256. <div class="theme-toggle" aria-label="Theme switcher">
  257. <button type="button" data-theme-value="light" aria-pressed="false">Light</button>
  258. <button type="button" data-theme-value="dark" aria-pressed="true">Dark</button>
  259. </div>
  260. </header>
  261. <h2 class="section-title">SVG master</h2>
  262. <section class="preview" aria-label="Less and Cosmos logo preview">
  263. <div class="surface">
  264. <img src="./logo-less-and-cosmos.svg" alt="less and cosmos. 一念纯粹,万里星辰。">
  265. </div>
  266. <div class="surface nebula">
  267. <img src="./logo-less-and-cosmos.svg" alt="less and cosmos. 一念纯粹,万里星辰。">
  268. </div>
  269. <div class="surface compact">
  270. <img class="mark" src="./logo-mark.svg" alt="Less and Cosmos symbol">
  271. </div>
  272. <div class="surface nebula compact">
  273. <img class="mark" src="./logo-mark-mono.svg" alt="Less and Cosmos monochrome symbol">
  274. </div>
  275. </section>
  276. <h2 class="section-title">PNG exports</h2>
  277. <section class="png-grid" aria-label="Website PNG logo exports">
  278. <article class="png-card">
  279. <div class="png-stage checker">
  280. <img src="./png/logo-full-transparent-2x.png" alt="less and cosmos. transparent PNG">
  281. </div>
  282. <div class="png-meta"><strong>英文完整透明底</strong><span>logo-full-transparent-2x.png</span></div>
  283. </article>
  284. <article class="png-card">
  285. <div class="png-stage">
  286. <img src="./png/logo-full-dark-2x.png" alt="less and cosmos. dark PNG">
  287. </div>
  288. <div class="png-meta"><strong>英文完整深色底</strong><span>logo-full-dark-2x.png</span></div>
  289. </article>
  290. <article class="png-card">
  291. <div class="png-stage checker">
  292. <img class="mark-png" src="./png/logo-mark-transparent-2x.png" alt="Less and Cosmos mark transparent PNG">
  293. </div>
  294. <div class="png-meta"><strong>图腾透明底</strong><span>logo-mark-transparent-2x.png</span></div>
  295. </article>
  296. <article class="png-card">
  297. <div class="png-stage">
  298. <img class="mark-png" src="./png/logo-mark-dark-2x.png" alt="Less and Cosmos mark dark PNG">
  299. </div>
  300. <div class="png-meta"><strong>图腾深色底</strong><span>logo-mark-dark-2x.png</span></div>
  301. </article>
  302. <article class="png-card">
  303. <div class="png-stage checker">
  304. <img src="./png/logo-chinese-transparent-2x.png" alt="纯粹星辰 transparent PNG">
  305. </div>
  306. <div class="png-meta"><strong>中文品牌透明底</strong><span>logo-chinese-transparent-2x.png</span></div>
  307. </article>
  308. <article class="png-card">
  309. <div class="png-stage">
  310. <img src="./png/logo-chinese-dark-2x.png" alt="纯粹星辰 dark PNG">
  311. </div>
  312. <div class="png-meta"><strong>中文品牌深色底</strong><span>logo-chinese-dark-2x.png</span></div>
  313. </article>
  314. <article class="png-card">
  315. <div class="png-stage checker">
  316. <img src="./png/logo-chinese-slogan-transparent-2x.png" alt="纯粹星辰 with slogan transparent PNG">
  317. </div>
  318. <div class="png-meta"><strong>中文加 Slogan 透明底</strong><span>logo-chinese-slogan-transparent-2x.png</span></div>
  319. </article>
  320. <article class="png-card">
  321. <div class="png-stage">
  322. <img src="./png/logo-chinese-slogan-dark-2x.png" alt="纯粹星辰 with slogan dark PNG">
  323. </div>
  324. <div class="png-meta"><strong>中文加 Slogan 深色底</strong><span>logo-chinese-slogan-dark-2x.png</span></div>
  325. </article>
  326. <article class="png-card">
  327. <div class="png-stage light-checker">
  328. <img src="./png/logo-full-light-transparent-2x.png" alt="less and cosmos. light transparent PNG">
  329. </div>
  330. <div class="png-meta"><strong>英文完整白底透明版</strong><span>logo-full-light-transparent-2x.png</span></div>
  331. </article>
  332. <article class="png-card">
  333. <div class="png-stage light-checker">
  334. <img src="./png/logo-full-light-bg-2x.png" alt="less and cosmos. light background PNG">
  335. </div>
  336. <div class="png-meta"><strong>英文完整自带白底</strong><span>logo-full-light-bg-2x.png</span></div>
  337. </article>
  338. <article class="png-card">
  339. <div class="png-stage light-checker">
  340. <img class="mark-png" src="./png/logo-mark-light-transparent-2x.png" alt="Less and Cosmos mark light transparent PNG">
  341. </div>
  342. <div class="png-meta"><strong>图腾白底透明版</strong><span>logo-mark-light-transparent-2x.png</span></div>
  343. </article>
  344. <article class="png-card">
  345. <div class="png-stage light-checker">
  346. <img class="mark-png" src="./png/logo-mark-light-bg-2x.png" alt="Less and Cosmos mark light background PNG">
  347. </div>
  348. <div class="png-meta"><strong>图腾自带白底</strong><span>logo-mark-light-bg-2x.png</span></div>
  349. </article>
  350. <article class="png-card">
  351. <div class="png-stage light-checker">
  352. <img src="./png/logo-chinese-light-transparent-2x.png" alt="纯粹星辰 light transparent PNG">
  353. </div>
  354. <div class="png-meta"><strong>中文品牌白底透明版</strong><span>logo-chinese-light-transparent-2x.png</span></div>
  355. </article>
  356. <article class="png-card">
  357. <div class="png-stage light-checker">
  358. <img src="./png/logo-chinese-light-bg-2x.png" alt="纯粹星辰 light background PNG">
  359. </div>
  360. <div class="png-meta"><strong>中文品牌自带白底</strong><span>logo-chinese-light-bg-2x.png</span></div>
  361. </article>
  362. <article class="png-card">
  363. <div class="png-stage light-checker">
  364. <img src="./png/logo-chinese-slogan-light-transparent-2x.png" alt="纯粹星辰 with slogan light transparent PNG">
  365. </div>
  366. <div class="png-meta"><strong>中文加 Slogan 白底透明版</strong><span>logo-chinese-slogan-light-transparent-2x.png</span></div>
  367. </article>
  368. <article class="png-card">
  369. <div class="png-stage light-checker">
  370. <img src="./png/logo-chinese-slogan-light-bg-2x.png" alt="纯粹星辰 with slogan light background PNG">
  371. </div>
  372. <div class="png-meta"><strong>中文加 Slogan 自带白底</strong><span>logo-chinese-slogan-light-bg-2x.png</span></div>
  373. </article>
  374. <article class="png-card">
  375. <div class="png-stage light-checker">
  376. <img class="light-mode-ink" src="./png/logo-full-mono-transparent-2x.png" alt="less and cosmos. monochrome transparent PNG">
  377. </div>
  378. <div class="png-meta"><strong>英文单色浅底预览</strong><span>logo-full-mono-transparent-2x.png</span></div>
  379. </article>
  380. <article class="png-card">
  381. <div class="png-stage light-checker">
  382. <img class="mark-png light-mode-ink" src="./png/logo-mark-mono-transparent-2x.png" alt="Less and Cosmos mark monochrome transparent PNG">
  383. </div>
  384. <div class="png-meta"><strong>图腾单色浅底预览</strong><span>logo-mark-mono-transparent-2x.png</span></div>
  385. </article>
  386. </section>
  387. <h2 class="section-title">Color system</h2>
  388. <section class="palette" aria-label="Cosmic Morandi color palette">
  389. <div class="swatch void"><strong>纯粹之境</strong><span>#0B0C10</span></div>
  390. <div class="swatch nebula-color"><strong>寂静星云</strong><span>#1F2833</span></div>
  391. <div class="swatch white"><strong>星光极白</strong><span>#F5F5F7</span></div>
  392. <div class="swatch silver"><strong>智慧水星</strong><span>#C5C6C7</span></div>
  393. <div class="swatch gold"><strong>一念微光</strong><span>#E6C687</span></div>
  394. </section>
  395. </main>
  396. <script>
  397. const root = document.body;
  398. const buttons = Array.from(document.querySelectorAll("[data-theme-value]"));
  399. function setTheme(theme) {
  400. root.dataset.theme = theme;
  401. buttons.forEach((button) => {
  402. button.setAttribute("aria-pressed", String(button.dataset.themeValue === theme));
  403. });
  404. }
  405. buttons.forEach((button) => {
  406. button.addEventListener("click", () => setTheme(button.dataset.themeValue));
  407. });
  408. </script>
  409. </body>
  410. </html>