black.css 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828
  1. ::view-transition-group(*) {
  2. animation-duration: 250ms;
  3. animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  4. }
  5. ::view-transition-old(root),
  6. ::view-transition-new(root) {
  7. animation-duration: 250ms;
  8. animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  9. }
  10. ::view-transition-image-pair(root) {
  11. isolation: isolate;
  12. }
  13. ::view-transition-old(root) {
  14. animation: none;
  15. mix-blend-mode: normal;
  16. }
  17. ::view-transition-new(root) {
  18. animation: none;
  19. mix-blend-mode: normal;
  20. }
  21. @keyframes fade-in {
  22. from {
  23. opacity: 0;
  24. }
  25. to {
  26. opacity: 1;
  27. }
  28. }
  29. @keyframes fade-out {
  30. from {
  31. opacity: 1;
  32. }
  33. to {
  34. opacity: 0;
  35. }
  36. }
  37. @keyframes fade-in-up {
  38. from {
  39. opacity: 0;
  40. transform: translateY(8px);
  41. }
  42. to {
  43. opacity: 1;
  44. transform: translateY(0);
  45. }
  46. }
  47. @keyframes reveal-terms {
  48. from {
  49. mask-position: 0% 200%;
  50. }
  51. to {
  52. mask-position: 0% 50%;
  53. }
  54. }
  55. @keyframes hide-terms {
  56. from {
  57. mask-position: 0% 50%;
  58. }
  59. to {
  60. mask-position: 0% 200%;
  61. }
  62. }
  63. ::view-transition-old(terms-20),
  64. ::view-transition-old(terms-100),
  65. ::view-transition-old(terms-200) {
  66. mask-image: linear-gradient(to bottom, transparent, black 25% 75%, transparent);
  67. mask-repeat: no-repeat;
  68. mask-size: 100% 200%;
  69. animation: hide-terms 200ms cubic-bezier(0.25, 0, 0.5, 1) forwards;
  70. }
  71. ::view-transition-new(terms-20),
  72. ::view-transition-new(terms-100),
  73. ::view-transition-new(terms-200) {
  74. mask-image: linear-gradient(to bottom, transparent, black 25% 75%, transparent);
  75. mask-repeat: no-repeat;
  76. mask-position: 0% 200%;
  77. mask-size: 100% 200%;
  78. animation: reveal-terms 300ms cubic-bezier(0.25, 0, 0.5, 1) 50ms forwards;
  79. }
  80. ::view-transition-old(actions-20),
  81. ::view-transition-old(actions-100),
  82. ::view-transition-old(actions-200) {
  83. animation: fade-out 80ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
  84. }
  85. ::view-transition-new(actions-20),
  86. ::view-transition-new(actions-100),
  87. ::view-transition-new(actions-200) {
  88. animation: fade-in-up 300ms cubic-bezier(0.16, 1, 0.3, 1) 300ms forwards;
  89. opacity: 0;
  90. }
  91. ::view-transition-group(card-20),
  92. ::view-transition-group(card-100),
  93. ::view-transition-group(card-200) {
  94. animation-duration: 250ms;
  95. animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  96. }
  97. [data-page="black"] {
  98. background: #000;
  99. min-height: 100vh;
  100. display: flex;
  101. flex-direction: column;
  102. align-items: center;
  103. justify-content: stretch;
  104. font-family: var(--font-mono);
  105. color: #fff;
  106. [data-component="header-logo"] {
  107. filter: drop-shadow(0 8px 24px rgba(0, 0, 0, 0.25)) drop-shadow(0 4px 16px rgba(0, 0, 0, 0.1));
  108. position: relative;
  109. z-index: 1;
  110. }
  111. .header-light-rays {
  112. position: absolute;
  113. inset: 0 0 auto 0;
  114. height: 30dvh;
  115. pointer-events: none;
  116. z-index: 0;
  117. }
  118. [data-component="header"] {
  119. display: flex;
  120. flex-direction: column;
  121. align-items: center;
  122. justify-content: center;
  123. padding-top: 40px;
  124. flex-shrink: 0;
  125. }
  126. [data-component="content"] {
  127. display: flex;
  128. flex-direction: column;
  129. align-items: center;
  130. width: 100%;
  131. flex-grow: 1;
  132. [data-slot="hero"] {
  133. display: flex;
  134. flex-direction: column;
  135. align-items: center;
  136. text-align: center;
  137. gap: 8px;
  138. margin-top: 40px;
  139. padding: 0 20px;
  140. @media (min-width: 768px) {
  141. margin-top: 60px;
  142. }
  143. h1 {
  144. color: rgba(255, 255, 255, 0.92);
  145. font-size: 16px;
  146. font-style: normal;
  147. font-weight: 400;
  148. line-height: 1.45;
  149. margin: 0;
  150. @media (min-width: 768px) {
  151. font-size: 20px;
  152. }
  153. @media (max-width: 480px) {
  154. font-size: 14px;
  155. }
  156. }
  157. p {
  158. color: rgba(255, 255, 255, 0.59);
  159. font-size: 16px;
  160. font-style: normal;
  161. font-weight: 400;
  162. line-height: 1.45;
  163. margin: 0;
  164. @media (min-width: 768px) {
  165. font-size: 20px;
  166. }
  167. @media (max-width: 480px) {
  168. font-size: 14px;
  169. }
  170. }
  171. }
  172. [data-slot="hero-black"] {
  173. margin-top: 40px;
  174. padding: 0 20px;
  175. position: relative;
  176. @media (min-width: 768px) {
  177. margin-top: 60px;
  178. }
  179. svg {
  180. width: 100%;
  181. max-width: 590px;
  182. height: auto;
  183. overflow: visible;
  184. filter: drop-shadow(0 0 20px rgba(255, 255, 255, calc(0.1 + var(--hero-black-glow-intensity, 0) * 0.15)))
  185. drop-shadow(0 -5px 30px rgba(255, 255, 255, calc(var(--hero-black-glow-intensity, 0) * 0.2)));
  186. mask-image: linear-gradient(to bottom, black, transparent);
  187. stroke-width: 1.5;
  188. [data-slot="black-base"] {
  189. fill: url(#hero-black-fill-gradient);
  190. stroke: url(#hero-black-stroke-gradient);
  191. }
  192. [data-slot="black-glow"] {
  193. fill: url(#hero-black-top-glow);
  194. pointer-events: none;
  195. }
  196. [data-slot="black-shimmer"] {
  197. fill: url(#hero-black-shimmer-gradient);
  198. pointer-events: none;
  199. mix-blend-mode: overlay;
  200. }
  201. }
  202. }
  203. [data-slot="cta"] {
  204. display: flex;
  205. flex-direction: column;
  206. gap: 16px;
  207. align-items: center;
  208. text-align: center;
  209. margin-top: -40px;
  210. width: 100%;
  211. @media (min-width: 768px) {
  212. margin-top: -20px;
  213. }
  214. [data-slot="heading"] {
  215. color: rgba(255, 255, 255, 0.92);
  216. text-align: center;
  217. font-size: 18px;
  218. font-style: normal;
  219. font-weight: 400;
  220. line-height: 160%;
  221. span {
  222. display: inline-block;
  223. }
  224. }
  225. [data-slot="subheading"] {
  226. color: rgba(255, 255, 255, 0.59);
  227. font-size: 15px;
  228. font-style: normal;
  229. font-weight: 400;
  230. line-height: 160%;
  231. @media (min-width: 768px) {
  232. font-size: 18px;
  233. line-height: 160%;
  234. }
  235. }
  236. [data-slot="button"] {
  237. display: inline-flex;
  238. height: 40px;
  239. padding: 0 12px;
  240. justify-content: center;
  241. align-items: center;
  242. gap: 8px;
  243. border-radius: 4px;
  244. background: rgba(255, 255, 255, 0.92);
  245. text-decoration: none;
  246. color: #000;
  247. font-family: "JetBrains Mono Nerd Font";
  248. font-size: 16px;
  249. font-style: normal;
  250. font-weight: 500;
  251. line-height: normal;
  252. &:hover {
  253. background: #e0e0e0;
  254. }
  255. &:active {
  256. transform: scale(0.98);
  257. }
  258. }
  259. [data-slot="back-soon"] {
  260. color: rgba(255, 255, 255, 0.59);
  261. text-align: center;
  262. font-size: 13px;
  263. font-style: normal;
  264. font-weight: 400;
  265. line-height: 160%; /* 20.8px */
  266. }
  267. [data-slot="follow-us"] {
  268. display: inline-flex;
  269. height: 40px;
  270. padding: 0 12px;
  271. justify-content: center;
  272. align-items: center;
  273. gap: 8px;
  274. border-radius: 4px;
  275. border: 1px solid rgba(255, 255, 255, 0.17);
  276. color: rgba(255, 255, 255, 0.59);
  277. font-family: var(--font-mono);
  278. font-size: 14px;
  279. font-style: normal;
  280. font-weight: 400;
  281. line-height: normal;
  282. text-decoration: none;
  283. }
  284. [data-slot="pricing"] {
  285. display: flex;
  286. flex-direction: column;
  287. gap: 16px;
  288. width: 100%;
  289. max-width: 660px;
  290. padding: 0 20px;
  291. @media (min-width: 768px) {
  292. padding: 0;
  293. }
  294. }
  295. [data-slot="pricing-card"] {
  296. display: flex;
  297. flex-direction: column;
  298. gap: 12px;
  299. padding: 24px;
  300. border: 1px solid rgba(255, 255, 255, 0.17);
  301. background: black;
  302. background-clip: padding-box;
  303. border-radius: 4px;
  304. text-decoration: none;
  305. transition: border-color 0.15s ease;
  306. cursor: pointer;
  307. text-align: left;
  308. @media (max-width: 480px) {
  309. padding: 16px;
  310. }
  311. &:hover:not(:active) {
  312. border-color: rgba(255, 255, 255, 0.35);
  313. }
  314. [data-slot="icon"] {
  315. color: rgba(255, 255, 255, 0.59);
  316. }
  317. [data-slot="price"] {
  318. display: flex;
  319. flex-wrap: wrap;
  320. align-items: baseline;
  321. gap: 8px;
  322. }
  323. [data-slot="amount"] {
  324. color: rgba(255, 255, 255, 0.92);
  325. font-size: 24px;
  326. font-weight: 500;
  327. }
  328. [data-slot="period"] {
  329. color: rgba(255, 255, 255, 0.59);
  330. font-size: 14px;
  331. }
  332. [data-slot="multiplier"] {
  333. color: rgba(255, 255, 255, 0.39);
  334. font-size: 14px;
  335. &::before {
  336. content: "·";
  337. margin-right: 8px;
  338. }
  339. }
  340. }
  341. [data-slot="selected-plan"] {
  342. display: flex;
  343. flex-direction: column;
  344. gap: 32px;
  345. width: 100%;
  346. max-width: 660px;
  347. margin: 0 auto;
  348. position: relative;
  349. background-color: rgba(0, 0, 0, 0.75);
  350. z-index: 1;
  351. @media (max-width: 480px) {
  352. margin: 0 20px;
  353. width: calc(100% - 40px);
  354. }
  355. }
  356. [data-slot="selected-card"] {
  357. display: flex;
  358. flex-direction: column;
  359. gap: 12px;
  360. padding: 24px;
  361. border: 1px solid rgba(255, 255, 255, 0.17);
  362. border-radius: 4px;
  363. width: 100%;
  364. [data-slot="icon"] {
  365. color: rgba(255, 255, 255, 0.59);
  366. }
  367. [data-slot="price"] {
  368. display: flex;
  369. flex-wrap: wrap;
  370. align-items: baseline;
  371. gap: 8px;
  372. }
  373. [data-slot="amount"] {
  374. color: rgba(255, 255, 255, 0.92);
  375. font-size: 24px;
  376. font-weight: 500;
  377. }
  378. [data-slot="period"] {
  379. color: rgba(255, 255, 255, 0.59);
  380. font-size: 14px;
  381. }
  382. [data-slot="multiplier"] {
  383. color: rgba(255, 255, 255, 0.39);
  384. font-size: 14px;
  385. &::before {
  386. content: "·";
  387. margin-right: 8px;
  388. }
  389. }
  390. [data-slot="terms"] {
  391. list-style: none;
  392. padding: 0;
  393. margin: 0;
  394. display: flex;
  395. flex-direction: column;
  396. gap: 8px;
  397. text-align: left;
  398. li {
  399. color: rgba(255, 255, 255, 0.59);
  400. font-size: 14px;
  401. line-height: 1.5;
  402. padding-left: 16px;
  403. position: relative;
  404. &::before {
  405. content: "▪";
  406. position: absolute;
  407. left: 0;
  408. color: rgba(255, 255, 255, 0.39);
  409. }
  410. @media (max-width: 768px) {
  411. font-size: 12px;
  412. }
  413. }
  414. }
  415. [data-slot="actions"] {
  416. display: flex;
  417. gap: 16px;
  418. margin-top: 8px;
  419. button,
  420. a {
  421. flex: 1;
  422. display: inline-flex;
  423. height: 48px;
  424. padding: 0 16px;
  425. justify-content: center;
  426. align-items: center;
  427. border-radius: 4px;
  428. font-family: var(--font-mono);
  429. font-size: 16px;
  430. font-weight: 400;
  431. text-decoration: none;
  432. cursor: pointer;
  433. }
  434. [data-slot="cancel"] {
  435. background: rgba(255, 255, 255, 0.05);
  436. border: 1px solid rgba(255, 255, 255, 0.17);
  437. color: rgba(255, 255, 255, 0.92);
  438. transition-property: background-color, border-color;
  439. transition-duration: 150ms;
  440. transition-timing-function: cubic-bezier(0.25, 0, 0.5, 1);
  441. &:hover {
  442. background-color: rgba(255, 255, 255, 0.08);
  443. border-color: rgba(255, 255, 255, 0.25);
  444. }
  445. }
  446. [data-slot="continue"] {
  447. background: rgb(255, 255, 255);
  448. color: rgb(0, 0, 0);
  449. transition: background-color 150ms cubic-bezier(0.25, 0, 0.5, 1);
  450. &:hover {
  451. background: rgba(255, 255, 255, 0.9);
  452. }
  453. }
  454. }
  455. }
  456. [data-slot="fine-print"] {
  457. color: rgba(255, 255, 255, 0.39);
  458. text-align: center;
  459. font-size: 13px;
  460. font-style: normal;
  461. font-weight: 400;
  462. line-height: 160%; /* 20.8px */
  463. font-style: italic;
  464. a {
  465. color: rgba(255, 255, 255, 0.39);
  466. text-decoration: underline;
  467. }
  468. }
  469. }
  470. /* Subscribe page styles */
  471. [data-slot="subscribe-form"] {
  472. display: flex;
  473. flex-direction: column;
  474. gap: 32px;
  475. align-items: center;
  476. margin-top: -18px;
  477. width: 100%;
  478. max-width: 660px;
  479. padding: 0 20px;
  480. @media (min-width: 768px) {
  481. margin-top: 40px;
  482. padding: 0;
  483. }
  484. [data-slot="form-card"] {
  485. width: 100%;
  486. border: 1px solid rgba(255, 255, 255, 0.17);
  487. border-radius: 4px;
  488. padding: 24px;
  489. display: flex;
  490. flex-direction: column;
  491. gap: 20px;
  492. }
  493. [data-slot="plan-header"] {
  494. display: flex;
  495. flex-direction: column;
  496. gap: 8px;
  497. }
  498. [data-slot="title"] {
  499. color: rgba(255, 255, 255, 0.92);
  500. font-size: 16px;
  501. font-weight: 400;
  502. margin-bottom: 8px;
  503. }
  504. [data-slot="icon"] {
  505. color: rgba(255, 255, 255, 0.59);
  506. isolation: isolate;
  507. transform: translateZ(0);
  508. }
  509. [data-slot="price"] {
  510. display: flex;
  511. flex-wrap: wrap;
  512. align-items: baseline;
  513. gap: 8px;
  514. }
  515. [data-slot="amount"] {
  516. color: rgba(255, 255, 255, 0.92);
  517. font-size: 24px;
  518. font-weight: 500;
  519. }
  520. [data-slot="period"] {
  521. color: rgba(255, 255, 255, 0.59);
  522. font-size: 14px;
  523. }
  524. [data-slot="multiplier"] {
  525. color: rgba(255, 255, 255, 0.39);
  526. font-size: 14px;
  527. &::before {
  528. content: "·";
  529. margin: 0 8px;
  530. }
  531. }
  532. [data-slot="divider"] {
  533. height: 1px;
  534. background: rgba(255, 255, 255, 0.17);
  535. }
  536. [data-slot="section-title"] {
  537. color: rgba(255, 255, 255, 0.92);
  538. font-size: 16px;
  539. font-weight: 400;
  540. }
  541. [data-slot="checkout-form"] {
  542. display: flex;
  543. flex-direction: column;
  544. gap: 20px;
  545. }
  546. [data-slot="error"] {
  547. color: #ff6b6b;
  548. font-size: 14px;
  549. }
  550. [data-slot="submit-button"] {
  551. width: 100%;
  552. height: 48px;
  553. background: rgba(255, 255, 255, 0.92);
  554. border: none;
  555. border-radius: 4px;
  556. color: #000;
  557. font-family: var(--font-mono);
  558. font-size: 16px;
  559. font-weight: 500;
  560. cursor: pointer;
  561. transition: background 0.15s ease;
  562. &:hover:not(:disabled) {
  563. background: #e0e0e0;
  564. }
  565. &:disabled {
  566. opacity: 0.5;
  567. cursor: not-allowed;
  568. }
  569. }
  570. [data-slot="charge-notice"] {
  571. color: #d4a500;
  572. font-size: 14px;
  573. text-align: center;
  574. }
  575. [data-slot="loading"] {
  576. display: flex;
  577. justify-content: center;
  578. padding: 40px 0;
  579. p {
  580. color: rgba(255, 255, 255, 0.59);
  581. font-size: 14px;
  582. }
  583. }
  584. [data-slot="fine-print"] {
  585. color: rgba(255, 255, 255, 0.39);
  586. text-align: center;
  587. font-size: 13px;
  588. font-style: italic;
  589. view-transition-name: fine-print;
  590. a {
  591. color: rgba(255, 255, 255, 0.39);
  592. text-decoration: underline;
  593. }
  594. }
  595. [data-slot="workspace-picker"] {
  596. [data-slot="workspace-list"] {
  597. width: 100%;
  598. padding: 0;
  599. margin: 0;
  600. list-style: none;
  601. display: flex;
  602. flex-direction: column;
  603. align-items: flex-start;
  604. gap: 8px;
  605. align-self: stretch;
  606. outline: none;
  607. overflow-y: auto;
  608. max-height: 240px;
  609. scrollbar-width: none;
  610. &::-webkit-scrollbar {
  611. display: none;
  612. }
  613. [data-slot="workspace-item"] {
  614. width: 100%;
  615. display: flex;
  616. padding: 8px 12px;
  617. align-items: center;
  618. gap: 8px;
  619. align-self: stretch;
  620. cursor: pointer;
  621. [data-slot="selected-icon"] {
  622. visibility: hidden;
  623. color: rgba(255, 255, 255, 0.39);
  624. font-family: "IBM Plex Mono", monospace;
  625. font-size: 16px;
  626. font-style: normal;
  627. font-weight: 400;
  628. line-height: 160%;
  629. }
  630. span:last-child {
  631. color: rgba(255, 255, 255, 0.92);
  632. font-size: 16px;
  633. font-style: normal;
  634. font-weight: 400;
  635. line-height: 160%;
  636. }
  637. &:hover,
  638. &[data-active="true"] {
  639. background: #161616;
  640. [data-slot="selected-icon"] {
  641. visibility: visible;
  642. }
  643. }
  644. }
  645. }
  646. }
  647. }
  648. }
  649. [data-component="footer"] {
  650. display: flex;
  651. flex-direction: column;
  652. width: 100%;
  653. justify-content: center;
  654. align-items: center;
  655. gap: 24px;
  656. flex-shrink: 0;
  657. @media (min-width: 768px) {
  658. height: 120px;
  659. }
  660. [data-slot="footer-content"] {
  661. display: flex;
  662. gap: 24px;
  663. align-items: center;
  664. justify-content: center;
  665. @media (min-width: 768px) {
  666. gap: 40px;
  667. }
  668. span,
  669. a {
  670. color: rgba(255, 255, 255, 0.39);
  671. font-family: "JetBrains Mono Nerd Font";
  672. font-size: 16px;
  673. font-style: normal;
  674. font-weight: 400;
  675. line-height: normal;
  676. text-decoration: none;
  677. }
  678. [data-slot="github-stars"] {
  679. color: rgba(255, 255, 255, 0.25);
  680. font-family: "JetBrains Mono Nerd Font";
  681. font-size: 16px;
  682. font-style: normal;
  683. font-weight: 400;
  684. line-height: normal;
  685. }
  686. [data-slot="anomaly"] {
  687. display: none;
  688. @media (min-width: 768px) {
  689. display: block;
  690. }
  691. }
  692. }
  693. [data-slot="anomaly-alt"] {
  694. color: rgba(255, 255, 255, 0.39);
  695. font-family: "JetBrains Mono Nerd Font";
  696. font-size: 16px;
  697. font-style: normal;
  698. font-weight: 400;
  699. line-height: normal;
  700. text-decoration: none;
  701. margin-bottom: 24px;
  702. a {
  703. color: rgba(255, 255, 255, 0.39);
  704. font-family: "JetBrains Mono Nerd Font";
  705. font-size: 16px;
  706. font-style: normal;
  707. font-weight: 400;
  708. line-height: normal;
  709. text-decoration: none;
  710. }
  711. @media (min-width: 768px) {
  712. display: none;
  713. }
  714. }
  715. }
  716. }