black.css 19 KB

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