WebOrbiton
v2.0.0.1

Publisium

3,116 lines · 53.8 KB
  1. body[data-theme="light"] {
  2. --bg: #ffffff;
  3. --bg-alt: #fafafa;
  4. --panel: #ffffff;
  5. --panel-raised: #ffffff;
  6. --border: #ececef;
  7. --border-strong: #e0e0e5;
  8. --text: #16161a;
  9. --muted: #6b6b76;
  10. --muted-dim: #9d9da5;
  11. --accent: #6c5ce7;
  12. --accent-hover: #5b4bd6;
  13. --accent-soft: rgba(108, 92, 231, 0.08);
  14. --shadow-card: 0 1px 2px rgba(20, 20, 30, 0.04), 0 8px 24px rgba(20, 20, 30, 0.06);
  15. --shadow-card-hover: 0 4px 12px rgba(20, 20, 30, 0.06), 0 16px 40px rgba(20, 20, 30, 0.10);
  16. }
  17. ​
  18. body[data-theme="dark"] {
  19. --bg: #08080a;
  20. --bg-alt: #0d0d10;
  21. --panel: #131316;
  22. --panel-raised: #18181c;
  23. --border: #232327;
  24. --border-strong: #2e2e34;
  25. --text: #f4f4f6;
  26. --muted: #9a9aa4;
  27. --muted-dim: #6c6c76;
  28. --accent: #8b7bf5;
  29. --accent-hover: #9d8ff7;
  30. --accent-soft: rgba(139, 123, 245, 0.12);
  31. --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.3), 0 8px 24px rgba(0, 0, 0, 0.35);
  32. --shadow-card-hover: 0 4px 12px rgba(0, 0, 0, 0.35), 0 20px 48px rgba(0, 0, 0, 0.5);
  33. }
  34. ​
  35. * {
  36. box-sizing: border-box;
  37. }
  38. ​
  39. .icon {
  40. width: 18px;
  41. height: 18px;
  42. flex-shrink: 0;
  43. }
  44. ​
  45. .icon-sm {
  46. width: 15px;
  47. height: 15px;
  48. }
  49. ​
  50. .icon-lg {
  51. width: 22px;
  52. height: 22px;
  53. }
  54. ​
  55. .nav-item-icon {
  56. width: 15px;
  57. height: 15px;
  58. margin-right: 6px;
  59. flex-shrink: 0;
  60. }
  61. ​
  62. .nav-item-icon svg {
  63. width: 100%;
  64. height: 100%;
  65. display: block;
  66. }
  67. ​
  68. .auth-page {
  69. align-items: center;
  70. justify-content: center;
  71. padding: 24px;
  72. }
  73. ​
  74. .auth-card {
  75. width: 100%;
  76. max-width: 380px;
  77. padding: 32px;
  78. background: var(--panel);
  79. border: 1px solid var(--border);
  80. border-radius: 14px;
  81. }
  82. ​
  83. .auth-card-disabled {
  84. text-align: center;
  85. }
  86. ​
  87. .auth-card h1 {
  88. margin: 0 0 4px;
  89. font-size: 18px;
  90. }
  91. ​
  92. .auth-subtitle {
  93. margin: 0 0 24px;
  94. color: var(--muted);
  95. font-size: 13px;
  96. line-height: 1.6;
  97. }
  98. ​
  99. .auth-tabs {
  100. display: flex;
  101. gap: 4px;
  102. margin-bottom: 20px;
  103. border-bottom: 1px solid var(--border);
  104. }
  105. ​
  106. .auth-tabs a {
  107. flex: 1;
  108. padding: 10px;
  109. color: var(--muted);
  110. font-size: 13px;
  111. text-align: center;
  112. text-decoration: none;
  113. border-bottom: 2px solid transparent;
  114. }
  115. ​
  116. .auth-tabs a.active {
  117. color: var(--text);
  118. border-bottom-color: var(--accent);
  119. }
  120. ​
  121. .auth-card label {
  122. display: block;
  123. margin: 14px 0 6px;
  124. color: var(--muted);
  125. font-size: 13px;
  126. }
  127. ​
  128. .auth-card input {
  129. width: 100%;
  130. padding: 10px 12px;
  131. color: var(--text);
  132. font-size: 14px;
  133. background: var(--bg-alt);
  134. border: 1px solid var(--border);
  135. border-radius: 8px;
  136. }
  137. ​
  138. .auth-card input:focus {
  139. outline: 2px solid var(--accent);
  140. outline-offset: 1px;
  141. border-color: var(--accent);
  142. }
  143. ​
  144. .auth-card button {
  145. width: 100%;
  146. margin-top: 24px;
  147. padding: 12px;
  148. color: var(--bg);
  149. font-size: 14px;
  150. font-weight: 600;
  151. background: var(--accent);
  152. border: 0;
  153. border-radius: 8px;
  154. cursor: pointer;
  155. }
  156. ​
  157. .auth-card button:hover {
  158. background: var(--accent-hover);
  159. }
  160. ​
  161. .auth-legal {
  162. margin: 18px 0 0;
  163. color: var(--muted);
  164. font-size: 12px;
  165. text-align: center;
  166. }
  167. ​
  168. .auth-legal a {
  169. color: var(--muted);
  170. text-decoration: underline;
  171. }
  172. ​
  173. .auth-legal a:hover {
  174. color: var(--accent);
  175. }
  176. ​
  177. .auth-error {
  178. margin-bottom: 14px;
  179. padding: 10px 12px;
  180. color: #ff9aa2;
  181. font-size: 13px;
  182. background: color-mix(in srgb, #e40035 16%, var(--panel));
  183. border: 1px solid color-mix(in srgb, #e40035 42%, var(--border));
  184. border-radius: 8px;
  185. }
  186. ​
  187. .contact-form {
  188. margin: 28px 0;
  189. padding: 24px;
  190. background: var(--panel);
  191. border: 1px solid var(--border);
  192. border-radius: 12px;
  193. }
  194. ​
  195. .contact-form-row {
  196. display: grid;
  197. grid-template-columns: repeat(2, minmax(0, 1fr));
  198. gap: 0 16px;
  199. }
  200. ​
  201. .contact-form label {
  202. display: block;
  203. margin: 14px 0 6px;
  204. color: var(--muted);
  205. font-size: 13px;
  206. }
  207. ​
  208. .contact-form input,
  209. .contact-form select,
  210. .contact-form textarea {
  211. width: 100%;
  212. box-sizing: border-box;
  213. padding: 10px 12px;
  214. color: var(--text);
  215. font: inherit;
  216. font-size: 14px;
  217. background: var(--bg-alt);
  218. border: 1px solid var(--border);
  219. border-radius: 8px;
  220. }
  221. ​
  222. .contact-form textarea {
  223. min-height: 140px;
  224. resize: vertical;
  225. }
  226. ​
  227. .contact-form input:focus,
  228. .contact-form select:focus,
  229. .contact-form textarea:focus {
  230. outline: 2px solid var(--accent);
  231. outline-offset: 1px;
  232. border-color: var(--accent);
  233. }
  234. ​
  235. .contact-form .antibot-box {
  236. max-width: 260px;
  237. }
  238. ​
  239. .contact-form button {
  240. margin-top: 20px;
  241. padding: 12px 22px;
  242. color: var(--bg);
  243. font-size: 14px;
  244. font-weight: 600;
  245. background: var(--accent);
  246. border: 0;
  247. border-radius: 8px;
  248. cursor: pointer;
  249. }
  250. ​
  251. .contact-form button:hover {
  252. background: var(--accent-hover);
  253. }
  254. ​
  255. .contact-form-success,
  256. .contact-form-error {
  257. margin-bottom: 6px;
  258. padding: 10px 12px;
  259. font-size: 13px;
  260. border-radius: 8px;
  261. }
  262. ​
  263. .contact-form-success {
  264. background: color-mix(in srgb, #1f9d55 14%, var(--panel));
  265. border: 1px solid color-mix(in srgb, #1f9d55 42%, var(--border));
  266. }
  267. ​
  268. .contact-form-error {
  269. background: color-mix(in srgb, #e40035 16%, var(--panel));
  270. border: 1px solid color-mix(in srgb, #e40035 42%, var(--border));
  271. }
  272. ​
  273. @media (max-width: 600px) {
  274. .contact-form {
  275. padding: 18px 16px;
  276. }
  277. ​
  278. .contact-form-row {
  279. grid-template-columns: 1fr;
  280. }
  281. ​
  282. .contact-form .antibot-box {
  283. max-width: none;
  284. }
  285. }
  286. ​
  287. .antibot-trap {
  288. position: absolute !important;
  289. left: -10000px !important;
  290. width: 1px !important;
  291. height: 1px !important;
  292. opacity: 0 !important;
  293. pointer-events: none !important;
  294. }
  295. ​
  296. .antibot-box {
  297. margin-top: 18px;
  298. }
  299. ​
  300. .antibot-image {
  301. width: 100%;
  302. overflow: hidden;
  303. margin-bottom: 6px;
  304. border: 1px solid var(--border);
  305. border-radius: 8px;
  306. line-height: 0;
  307. }
  308. ​
  309. .antibot-image img {
  310. display: block;
  311. width: 100%;
  312. height: auto;
  313. user-select: none;
  314. -webkit-user-drag: none;
  315. }
  316. ​
  317. button {
  318. -webkit-tap-highlight-color: transparent;
  319. outline: none;
  320. }
  321. ​
  322. button:focus-visible {
  323. outline: 2px solid var(--accent);
  324. outline-offset: 2px;
  325. }
  326. ​
  327. html {
  328. height: 100%;
  329. overflow-x: hidden;
  330. }
  331. ​
  332. body {
  333. margin: 0;
  334. min-height: 100vh;
  335. display: flex;
  336. flex-direction: column;
  337. font-family: var(--font-body, Georgia, serif);
  338. background: var(--bg);
  339. color: var(--text);
  340. transition: background .15s, color .15s;
  341. -webkit-font-smoothing: antialiased;
  342. }
  343. ​
  344. h1,
  345. h2,
  346. h3,
  347. .site-brand,
  348. .article-title,
  349. .article-card-body h3,
  350. .category-title,
  351. .latest-banner h2,
  352. .related-section h2,
  353. .hero-title,
  354. .subscription-offer-name {
  355. font-family: var(--font-heading, -apple-system, BlinkMacSystemFont, sans-serif);
  356. letter-spacing: -0.02em;
  357. }
  358. ​
  359. .site-nav,
  360. .site-nav a,
  361. .site-auth-links,
  362. .site-auth-links a,
  363. .article-card-category,
  364. .article-category-link,
  365. .badge-paid,
  366. .unlock-btn,
  367. .subscription-divider,
  368. .subscription-offer-price,
  369. .hero-eyebrow,
  370. .section-heading,
  371. .latest-banner h2,
  372. .related-section h2,
  373. .article-meta,
  374. .site-footer,
  375. .site-footer-row,
  376. .site-footer-links a,
  377. .consent-banner,
  378. .consent-banner p,
  379. .consent-banner-actions button,
  380. .comments-placeholder,
  381. button,
  382. input,
  383. select,
  384. textarea {
  385. font-family: var(--font-ui, -apple-system, BlinkMacSystemFont, sans-serif);
  386. }
  387. ​
  388. a {
  389. color: inherit;
  390. }
  391. ​
  392. .site-shell {
  393. display: flex;
  394. flex-direction: column;
  395. flex: 0 0 auto;
  396. width: 100%;
  397. }
  398. ​
  399. .site-footer {
  400. flex: 1 0 auto;
  401. }
  402. ​
  403. .site-header {
  404. display: flex;
  405. align-items: center;
  406. justify-content: space-between;
  407. padding: 18px 40px;
  408. border-bottom: 1px solid var(--border);
  409. gap: 24px;
  410. flex-wrap: wrap;
  411. position: sticky;
  412. top: 0;
  413. z-index: 50;
  414. background: color-mix(in srgb, var(--bg) 88%, transparent);
  415. backdrop-filter: blur(10px);
  416. -webkit-backdrop-filter: blur(10px);
  417. }
  418. ​
  419. .site-header-row {
  420. display: flex;
  421. align-items: center;
  422. gap: 16px;
  423. min-width: 0;
  424. }
  425. ​
  426. .site-menu-toggle {
  427. display: none;
  428. align-items: center;
  429. justify-content: center;
  430. width: 38px;
  431. height: 38px;
  432. border-radius: 999px;
  433. border: 1px solid var(--border);
  434. background: var(--panel-raised);
  435. color: var(--text);
  436. cursor: pointer;
  437. flex-shrink: 0;
  438. z-index: 999;
  439. }
  440. ​
  441. .site-menu-toggle-icon-close {
  442. display: none;
  443. }
  444. ​
  445. .site-menu-toggle[aria-expanded="true"] .site-menu-toggle-icon-open {
  446. display: none;
  447. }
  448. ​
  449. .site-menu-toggle[aria-expanded="true"] .site-menu-toggle-icon-close {
  450. display: block;
  451. }
  452. ​
  453. .site-auth-links.site-auth-links-mobile {
  454. display: none;
  455. }
  456. ​
  457. .site-nav-backdrop {
  458. display: none;
  459. }
  460. ​
  461. .site-brand {
  462. font-weight: 800;
  463. font-size: 20px;
  464. text-decoration: none;
  465. display: flex;
  466. align-items: center;
  467. gap: 8px;
  468. }
  469. ​
  470. .site-brand-short {
  471. display: none;
  472. }
  473. ​
  474. .site-brand.use-short .site-brand-full {
  475. display: none;
  476. }
  477. ​
  478. .site-brand.use-short .site-brand-short {
  479. display: inline;
  480. }
  481. ​
  482. .site-brand-logo {
  483. height: 34px;
  484. width: auto;
  485. max-width: 150px;
  486. object-fit: contain;
  487. display: block;
  488. flex-shrink: 0;
  489. }
  490. ​
  491. .site-header-no-auth .site-nav {
  492. margin-left: auto;
  493. }
  494. ​
  495. .site-search-center {
  496. display: none;
  497. }
  498. ​
  499. @media (min-width: 861px) {
  500. body:not(.site-menu-side) .site-header-center-search {
  501. display: grid;
  502. grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  503. align-items: center;
  504. }
  505. ​
  506. body:not(.site-menu-side) .site-header-center-search .site-search-center {
  507. display: flex;
  508. justify-content: center;
  509. min-width: 0;
  510. }
  511. ​
  512. body:not(.site-menu-side) .site-header-center-search .site-nav {
  513. justify-content: flex-end;
  514. margin-left: 0;
  515. min-width: 0;
  516. }
  517. ​
  518. body:not(.site-menu-side) .site-header-center-search .site-nav > .site-search-form,
  519. body:not(.site-menu-side) .site-header-center-search .site-nav > .site-search-icon-link {
  520. display: none;
  521. }
  522. }
  523. ​
  524. .site-nav {
  525. display: flex;
  526. align-items: center;
  527. gap: 26px;
  528. flex-wrap: wrap;
  529. }
  530. ​
  531. .site-nav a {
  532. display: flex;
  533. align-items: center;
  534. text-decoration: none;
  535. font-size: 14px;
  536. font-weight: 600;
  537. line-height: 1.2;
  538. color: var(--muted);
  539. transition: color .12s;
  540. }
  541. ​
  542. .site-nav a:hover {
  543. color: var(--text);
  544. }
  545. ​
  546. .site-search-icon-link {
  547. display: flex;
  548. align-items: center;
  549. justify-content: center;
  550. width: 34px;
  551. height: 34px;
  552. border-radius: 999px;
  553. color: var(--muted);
  554. transition: background .12s, color .12s;
  555. flex-shrink: 0;
  556. }
  557. ​
  558. .site-search-icon-link:hover {
  559. color: var(--text);
  560. background: var(--panel-raised);
  561. }
  562. ​
  563. .site-search-icon-link svg {
  564. width: 17px;
  565. height: 17px;
  566. }
  567. ​
  568. .site-search-form {
  569. display: flex;
  570. align-items: center;
  571. gap: 8px;
  572. background: var(--panel-raised);
  573. border: 1px solid var(--border);
  574. border-radius: 999px;
  575. padding: 6px 14px;
  576. flex-shrink: 0;
  577. line-height: 1;
  578. }
  579. ​
  580. .site-search-form-icon {
  581. display: flex;
  582. align-items: center;
  583. color: var(--muted);
  584. flex-shrink: 0;
  585. line-height: 0;
  586. }
  587. ​
  588. .site-search-form-icon svg {
  589. width: 15px;
  590. height: 15px;
  591. display: block;
  592. }
  593. ​
  594. .site-search-input {
  595. margin: 0;
  596. padding: 0;
  597. border: none;
  598. background: transparent;
  599. outline: none;
  600. font-size: 13.5px;
  601. line-height: 1.4;
  602. color: var(--text);
  603. min-width: 0;
  604. width: 140px;
  605. vertical-align: middle;
  606. }
  607. ​
  608. .site-search-input:focus,
  609. .site-search-input:focus-visible {
  610. outline: none;
  611. }
  612. ​
  613. .site-search-form-page {
  614. max-width: 480px;
  615. padding: 10px 16px;
  616. margin: 4px 0 24px;
  617. }
  618. ​
  619. .site-search-form-page .site-search-input {
  620. width: auto;
  621. flex: 1;
  622. }
  623. ​
  624. .site-search-submit {
  625. flex-shrink: 0;
  626. border: none;
  627. background: var(--accent);
  628. color: #fff;
  629. font-size: 13.5px;
  630. font-weight: 700;
  631. padding: 9px 20px;
  632. border-radius: 999px;
  633. cursor: pointer;
  634. transition: background .12s;
  635. font-family: inherit;
  636. }
  637. ​
  638. .site-search-submit:hover {
  639. background: var(--accent-hover);
  640. }
  641. ​
  642. .search-hint {
  643. color: var(--muted);
  644. font-size: 13.5px;
  645. margin: 0 0 20px;
  646. }
  647. ​
  648. .site-auth-links {
  649. display: flex;
  650. gap: 10px;
  651. align-items: center;
  652. }
  653. ​
  654. .site-auth-links a {
  655. text-decoration: none;
  656. font-size: 13.5px;
  657. font-weight: 600;
  658. color: var(--muted);
  659. padding: 8px 16px;
  660. border-radius: 999px;
  661. transition: background .12s, color .12s;
  662. }
  663. ​
  664. .site-auth-links a:hover {
  665. color: var(--text);
  666. background: var(--panel-raised);
  667. }
  668. ​
  669. .site-auth-links a.site-auth-cta {
  670. background: var(--accent);
  671. color: #fff;
  672. }
  673. ​
  674. .site-auth-links a.site-auth-cta:hover {
  675. background: var(--accent-hover);
  676. color: #fff;
  677. }
  678. ​
  679. body.site-menu-bottom .site-shell {
  680. flex-direction: column-reverse;
  681. }
  682. ​
  683. body.site-menu-side .site-shell {
  684. flex-direction: row;
  685. }
  686. ​
  687. body.site-menu-side .site-header {
  688. flex-direction: column;
  689. align-items: flex-start;
  690. border-right: 1px solid var(--border);
  691. border-bottom: none;
  692. width: 240px;
  693. height: 100vh;
  694. position: sticky;
  695. top: 0;
  696. backdrop-filter: none;
  697. background: var(--panel);
  698. }
  699. ​
  700. body.site-menu-side .site-nav {
  701. flex-direction: column;
  702. align-items: stretch;
  703. }
  704. ​
  705. body.site-menu-side .site-nav .site-search-form {
  706. width: 100%;
  707. }
  708. ​
  709. body.site-menu-side .site-nav .site-search-input {
  710. width: 100%;
  711. }
  712. ​
  713. body.site-menu-side .site-main {
  714. flex: 1;
  715. }
  716. ​
  717. .site-main {
  718. flex: 1;
  719. padding: 40px;
  720. max-width: 1180px;
  721. margin: 0 auto;
  722. width: 100%;
  723. }
  724. ​
  725. .latest-banner {
  726. padding: 28px 40px;
  727. background: linear-gradient(180deg, var(--accent-soft), transparent);
  728. border-bottom: 1px solid var(--border);
  729. }
  730. ​
  731. .latest-banner h2 {
  732. font-size: 12.5px;
  733. text-transform: uppercase;
  734. letter-spacing: .08em;
  735. color: var(--muted);
  736. margin: 0 0 14px;
  737. font-weight: 700;
  738. }
  739. ​
  740. .latest-banner-row {
  741. display: flex;
  742. gap: 16px;
  743. overflow-x: auto;
  744. padding-bottom: 4px;
  745. }
  746. ​
  747. .latest-banner-item {
  748. flex: 0 0 220px;
  749. text-decoration: none;
  750. color: var(--text);
  751. font-size: 13.5px;
  752. font-weight: 600;
  753. }
  754. ​
  755. .latest-banner-item img {
  756. width: 100%;
  757. height: 120px;
  758. object-fit: cover;
  759. border-radius: 14px;
  760. margin-bottom: 8px;
  761. box-shadow: var(--shadow-card);
  762. }
  763. ​
  764. .hero-section {
  765. padding: 8px 0 40px;
  766. }
  767. ​
  768. .hero-eyebrow {
  769. font-size: 12.5px;
  770. text-transform: uppercase;
  771. letter-spacing: .1em;
  772. color: var(--accent);
  773. font-weight: 700;
  774. margin-bottom: 12px;
  775. }
  776. ​
  777. .hero-title {
  778. font-size: 44px;
  779. font-weight: 800;
  780. line-height: 1.08;
  781. margin: 0 0 16px;
  782. max-width: 760px;
  783. }
  784. ​
  785. .hero-subtitle {
  786. font-size: 17px;
  787. color: var(--muted);
  788. max-width: 560px;
  789. line-height: 1.6;
  790. margin: 0;
  791. }
  792. ​
  793. .section-heading-row {
  794. display: flex;
  795. align-items: baseline;
  796. justify-content: space-between;
  797. margin-bottom: 20px;
  798. gap: 16px;
  799. flex-wrap: wrap;
  800. }
  801. ​
  802. .section-heading {
  803. font-size: 13px;
  804. text-transform: uppercase;
  805. letter-spacing: .07em;
  806. color: var(--muted);
  807. font-weight: 700;
  808. margin: 0;
  809. }
  810. ​
  811. .article-grid {
  812. display: grid;
  813. grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  814. gap: 24px;
  815. }
  816. ​
  817. .article-grid-small {
  818. grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
  819. }
  820. ​
  821. .featured-banner {
  822. display: grid;
  823. grid-template-columns: 2fr 1fr 1fr;
  824. grid-template-rows: repeat(2, minmax(150px, 1fr));
  825. gap: 14px;
  826. margin-bottom: 32px;
  827. }
  828. ​
  829. .featured-banner-item {
  830. position: relative;
  831. min-height: 150px;
  832. overflow: hidden;
  833. border-radius: 2px;
  834. background: var(--panel-raised);
  835. color: #fff;
  836. text-decoration: none;
  837. }
  838. ​
  839. .featured-banner-item-large {
  840. grid-row: span 2;
  841. }
  842. ​
  843. .featured-banner-item-small:nth-child(2) {
  844. grid-column: 2;
  845. }
  846. ​
  847. .featured-banner-item-small:nth-child(3) {
  848. grid-column: 3;
  849. }
  850. ​
  851. .featured-banner-item-small:nth-child(4) {
  852. grid-column: 2;
  853. }
  854. ​
  855. .featured-banner-item-small:nth-child(5) {
  856. grid-column: 3;
  857. }
  858. ​
  859. .featured-banner-item img {
  860. width: 100%;
  861. height: 100%;
  862. min-height: 150px;
  863. display: block;
  864. object-fit: cover;
  865. transition: transform .2s ease;
  866. }
  867. ​
  868. .featured-banner-item:hover img {
  869. transform: scale(1.04);
  870. }
  871. ​
  872. .featured-banner-item::after {
  873. content: '';
  874. position: absolute;
  875. inset: 35% 0 0;
  876. background: linear-gradient(transparent, rgba(0, 0, 0, .78));
  877. }
  878. ​
  879. .featured-banner-title {
  880. position: absolute;
  881. z-index: 1;
  882. right: 18px;
  883. bottom: 16px;
  884. left: 18px;
  885. font-family: var(--font-heading, -apple-system, BlinkMacSystemFont, sans-serif);
  886. font-size: 18px;
  887. font-weight: 700;
  888. line-height: 1.15;
  889. text-shadow: 0 1px 2px rgba(0, 0, 0, .7);
  890. }
  891. ​
  892. .featured-banner-item-large .featured-banner-title {
  893. font-size: 28px;
  894. }
  895. ​
  896. .pagination-numbered {
  897. display: flex;
  898. flex-wrap: wrap;
  899. align-items: center;
  900. justify-content: center;
  901. gap: 6px;
  902. margin: 40px 0 0;
  903. }
  904. ​
  905. .pagination-link {
  906. display: inline-flex;
  907. align-items: center;
  908. justify-content: center;
  909. min-width: 38px;
  910. height: 38px;
  911. padding: 0 12px;
  912. border-radius: 999px;
  913. border: 1px solid var(--border);
  914. color: var(--text);
  915. text-decoration: none;
  916. font-size: 13.5px;
  917. font-weight: 600;
  918. transition: background .12s, border-color .12s;
  919. }
  920. ​
  921. .pagination-link:hover {
  922. background: var(--panel-raised);
  923. border-color: var(--border-strong);
  924. }
  925. ​
  926. .pagination-link.pagination-current {
  927. background: var(--accent);
  928. border-color: var(--accent);
  929. color: #fff;
  930. }
  931. ​
  932. .pagination-link.pagination-prev,
  933. .pagination-link.pagination-next {
  934. padding: 0 16px;
  935. }
  936. ​
  937. .pagination-ellipsis {
  938. display: inline-flex;
  939. align-items: center;
  940. justify-content: center;
  941. min-width: 38px;
  942. height: 38px;
  943. color: var(--muted-dim);
  944. font-size: 13.5px;
  945. }
  946. ​
  947. .pagination-load-more {
  948. display: flex;
  949. justify-content: center;
  950. margin: 40px 0 0;
  951. }
  952. ​
  953. .pagination-load-more-btn {
  954. padding: 12px 28px;
  955. border-radius: 999px;
  956. font-size: 14px;
  957. }
  958. ​
  959. .pagination-infinite-marker {
  960. height: 1px;
  961. margin: 40px 0 0;
  962. }
  963. ​
  964. .pagination-end {
  965. text-align: center;
  966. color: var(--muted);
  967. font-size: 13px;
  968. margin: 40px 0 0;
  969. }
  970. ​
  971. .article-card {
  972. text-decoration: none;
  973. color: var(--text);
  974. display: block;
  975. border: 1px solid var(--border);
  976. border-radius: 18px;
  977. overflow: hidden;
  978. background: var(--panel);
  979. box-shadow: var(--shadow-card);
  980. transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
  981. }
  982. ​
  983. .article-card a {
  984. text-decoration: none;
  985. }
  986. ​
  987. .article-card:hover {
  988. transform: translateY(-3px);
  989. box-shadow: var(--shadow-card-hover);
  990. border-color: var(--border-strong);
  991. }
  992. ​
  993. .article-card-image {
  994. width: 100%;
  995. height: 180px;
  996. object-fit: cover;
  997. display: block;
  998. background: var(--panel-raised);
  999. }
  1000. ​
  1001. .article-card-body {
  1002. padding: 18px 20px 20px;
  1003. }
  1004. ​
  1005. .article-card-category {
  1006. display: inline-block;
  1007. font-size: 11px;
  1008. text-transform: uppercase;
  1009. letter-spacing: .05em;
  1010. color: var(--accent);
  1011. font-weight: 700;
  1012. background: var(--accent-soft);
  1013. padding: 3px 10px;
  1014. border-radius: 999px;
  1015. }
  1016. ​
  1017. .article-card-body h3 {
  1018. font-size: 17.5px;
  1019. margin: 10px 0 6px;
  1020. line-height: 1.3;
  1021. }
  1022. ​
  1023. .article-card-body p {
  1024. font-size: 13.5px;
  1025. color: var(--muted);
  1026. margin: 0;
  1027. line-height: 1.5;
  1028. }
  1029. ​
  1030. .badge-paid {
  1031. display: inline-block;
  1032. margin-top: 10px;
  1033. padding: 4px 12px;
  1034. background: color-mix(in srgb, #eab23d 18%, transparent);
  1035. color: #c8871f;
  1036. border-radius: 999px;
  1037. font-size: 11px;
  1038. font-weight: 700;
  1039. }
  1040. ​
  1041. body[data-theme="dark"] .badge-paid {
  1042. color: #eab23d;
  1043. }
  1044. ​
  1045. .category-title {
  1046. font-size: 32px;
  1047. font-weight: 800;
  1048. margin-bottom: 6px;
  1049. }
  1050. ​
  1051. .category-description {
  1052. color: var(--muted);
  1053. margin-bottom: 32px;
  1054. font-size: 15px;
  1055. max-width: 600px;
  1056. }
  1057. ​
  1058. .category-rss-link {
  1059. display: inline-flex;
  1060. align-items: center;
  1061. gap: 6px;
  1062. margin: 4px 0 32px;
  1063. color: var(--muted);
  1064. font-size: 13px;
  1065. text-decoration: none;
  1066. }
  1067. ​
  1068. .category-description + .category-rss-link {
  1069. margin-top: -20px;
  1070. }
  1071. ​
  1072. .category-rss-link:hover {
  1073. color: var(--accent);
  1074. }
  1075. ​
  1076. .article-view {
  1077. margin: 0 auto;
  1078. }
  1079. ​
  1080. .article-category-link {
  1081. font-size: 11.5px;
  1082. text-transform: uppercase;
  1083. letter-spacing: .06em;
  1084. color: var(--accent);
  1085. font-weight: 700;
  1086. text-decoration: none;
  1087. background: var(--accent-soft);
  1088. padding: 4px 12px;
  1089. border-radius: 999px;
  1090. display: inline-block;
  1091. }
  1092. ​
  1093. .article-title {
  1094. font-size: 40px;
  1095. font-weight: 800;
  1096. margin: 16px 0 14px;
  1097. line-height: 1.12;
  1098. }
  1099. ​
  1100. .article-meta {
  1101. color: var(--muted);
  1102. font-size: 13.5px;
  1103. margin-bottom: 16px;
  1104. font-weight: 500;
  1105. }
  1106. ​
  1107. .article-share {
  1108. position: relative;
  1109. display: inline-block;
  1110. margin-bottom: 28px;
  1111. }
  1112. ​
  1113. .share-toggle-btn {
  1114. display: inline-flex;
  1115. align-items: center;
  1116. gap: 8px;
  1117. padding: 9px 16px;
  1118. border: 1px solid var(--border);
  1119. border-radius: 999px;
  1120. background: var(--panel);
  1121. color: var(--text);
  1122. font-size: 13.5px;
  1123. font-weight: 600;
  1124. cursor: pointer;
  1125. }
  1126. ​
  1127. .share-toggle-btn:hover {
  1128. border-color: var(--border-strong);
  1129. }
  1130. ​
  1131. .share-panel {
  1132. display: none;
  1133. position: absolute;
  1134. top: calc(100% + 8px);
  1135. left: 0;
  1136. min-width: 200px;
  1137. padding: 8px;
  1138. border: 1px solid var(--border);
  1139. border-radius: 14px;
  1140. background: var(--panel-raised);
  1141. box-shadow: var(--shadow-card-hover);
  1142. z-index: 30;
  1143. }
  1144. ​
  1145. .share-panel.is-open {
  1146. display: block;
  1147. }
  1148. ​
  1149. .share-panel-item {
  1150. display: flex;
  1151. align-items: center;
  1152. gap: 10px;
  1153. width: 100%;
  1154. padding: 9px 10px;
  1155. border: none;
  1156. border-radius: 9px;
  1157. background: transparent;
  1158. color: var(--text);
  1159. font-size: 13.5px;
  1160. font-weight: 500;
  1161. text-decoration: none;
  1162. text-align: left;
  1163. cursor: pointer;
  1164. }
  1165. ​
  1166. .share-panel-item:hover {
  1167. background: var(--accent-soft);
  1168. }
  1169. ​
  1170. .share-panel-item-icon {
  1171. width: 18px;
  1172. height: 18px;
  1173. flex-shrink: 0;
  1174. display: flex;
  1175. }
  1176. ​
  1177. .share-panel-item-icon svg {
  1178. width: 100%;
  1179. height: 100%;
  1180. fill: currentColor;
  1181. }
  1182. ​
  1183. .share-panel-item-icon-email svg,
  1184. .share-panel-item-copy .share-panel-item-icon svg {
  1185. fill: none;
  1186. stroke: currentColor;
  1187. stroke-width: 2;
  1188. stroke-linecap: round;
  1189. stroke-linejoin: round;
  1190. }
  1191. ​
  1192. @media (max-width: 480px) {
  1193. .share-panel {
  1194. left: auto;
  1195. right: 0;
  1196. }
  1197. }
  1198. ​
  1199. .app-banner {
  1200. display: none;
  1201. align-items: center;
  1202. gap: 12px;
  1203. position: fixed;
  1204. left: 12px;
  1205. right: 12px;
  1206. bottom: 12px;
  1207. padding: 12px 14px;
  1208. padding-bottom: calc(12px + env(safe-area-inset-bottom));
  1209. border: 1px solid var(--border);
  1210. border-radius: 16px;
  1211. background: var(--panel-raised);
  1212. box-shadow: var(--shadow-card-hover);
  1213. z-index: 210;
  1214. }
  1215. ​
  1216. .app-banner.is-visible {
  1217. display: flex;
  1218. }
  1219. ​
  1220. .app-banner-icon {
  1221. width: 38px;
  1222. height: 38px;
  1223. border-radius: 10px;
  1224. object-fit: cover;
  1225. flex-shrink: 0;
  1226. }
  1227. ​
  1228. .app-banner-text {
  1229. flex: 1;
  1230. font-size: 13.5px;
  1231. font-weight: 600;
  1232. color: var(--text);
  1233. }
  1234. ​
  1235. .app-banner-link {
  1236. padding: 8px 16px;
  1237. border-radius: 999px;
  1238. background: var(--accent);
  1239. color: #fff;
  1240. font-size: 13px;
  1241. font-weight: 700;
  1242. text-decoration: none;
  1243. white-space: nowrap;
  1244. }
  1245. ​
  1246. .app-banner-link:hover {
  1247. background: var(--accent-hover);
  1248. }
  1249. ​
  1250. .app-banner-close {
  1251. border: none;
  1252. background: transparent;
  1253. color: var(--muted);
  1254. font-size: 20px;
  1255. line-height: 1;
  1256. cursor: pointer;
  1257. padding: 4px;
  1258. flex-shrink: 0;
  1259. }
  1260. ​
  1261. .app-banner-close:hover {
  1262. color: var(--text);
  1263. }
  1264. ​
  1265. .article-cover {
  1266. width: 100%;
  1267. border-radius: 18px;
  1268. margin-bottom: 32px;
  1269. box-shadow: var(--shadow-card);
  1270. }
  1271. ​
  1272. .article-content {
  1273. font-size: 18px;
  1274. line-height: 1.8;
  1275. }
  1276. ​
  1277. .home-blocks {
  1278. margin-bottom: 32px;
  1279. }
  1280. ​
  1281. .article-content h2 {
  1282. font-size: 27px;
  1283. margin-top: 40px;
  1284. font-weight: 800;
  1285. }
  1286. ​
  1287. .article-content h3 {
  1288. font-size: 21px;
  1289. margin-top: 28px;
  1290. font-weight: 700;
  1291. }
  1292. ​
  1293. .article-content blockquote {
  1294. border-left: 3px solid var(--accent);
  1295. margin: 24px 0;
  1296. padding: 6px 22px;
  1297. color: var(--muted);
  1298. font-style: italic;
  1299. }
  1300. ​
  1301. .article-content img {
  1302. max-width: 100%;
  1303. border-radius: 12px;
  1304. }
  1305. ​
  1306. .article-content pre {
  1307. background: var(--panel);
  1308. border: 1px solid var(--border);
  1309. border-radius: 12px;
  1310. padding: 18px;
  1311. overflow-x: auto;
  1312. }
  1313. ​
  1314. .article-content table {
  1315. width: 100%;
  1316. border-collapse: collapse;
  1317. margin: 20px 0;
  1318. }
  1319. ​
  1320. .article-content table td {
  1321. border: 1px solid var(--border);
  1322. padding: 10px;
  1323. }
  1324. ​
  1325. .callout {
  1326. padding: 16px 18px;
  1327. border-radius: 12px;
  1328. margin: 20px 0;
  1329. }
  1330. ​
  1331. .callout-info {
  1332. background: rgba(79, 178, 232, 0.12);
  1333. color: #2a95c9;
  1334. }
  1335. ​
  1336. .callout-warning {
  1337. background: rgba(234, 178, 61, 0.14);
  1338. color: #b5811d;
  1339. }
  1340. ​
  1341. .callout-success {
  1342. background: rgba(52, 196, 140, 0.12);
  1343. color: #22936a;
  1344. }
  1345. ​
  1346. .callout-danger {
  1347. background: rgba(240, 84, 106, 0.12);
  1348. color: #d63a52;
  1349. }
  1350. ​
  1351. body[data-theme="dark"] .callout-info {
  1352. color: #4fb2e8;
  1353. }
  1354. ​
  1355. body[data-theme="dark"] .callout-warning {
  1356. color: #eab23d;
  1357. }
  1358. ​
  1359. body[data-theme="dark"] .callout-success {
  1360. color: #34c48c;
  1361. }
  1362. ​
  1363. body[data-theme="dark"] .callout-danger {
  1364. color: #f0546a;
  1365. }
  1366. ​
  1367. .embed-wrapper {
  1368. position: relative;
  1369. padding-bottom: 56.25%;
  1370. height: 0;
  1371. margin: 24px 0;
  1372. }
  1373. ​
  1374. .embed-wrapper iframe {
  1375. position: absolute;
  1376. top: 0;
  1377. left: 0;
  1378. width: 100%;
  1379. height: 100%;
  1380. border: none;
  1381. border-radius: 12px;
  1382. }
  1383. ​
  1384. .article-excerpt-locked {
  1385. font-size: 18px;
  1386. color: var(--muted);
  1387. }
  1388. ​
  1389. .paid-overlay {
  1390. border: 1px solid var(--border);
  1391. background: var(--panel);
  1392. border-radius: 20px;
  1393. padding: 40px;
  1394. text-align: center;
  1395. margin-top: 16px;
  1396. box-shadow: var(--shadow-card);
  1397. }
  1398. ​
  1399. .paid-overlay-box p {
  1400. color: var(--muted);
  1401. }
  1402. ​
  1403. .unlock-btn {
  1404. display: inline-block;
  1405. margin-top: 14px;
  1406. padding: 12px 28px;
  1407. background: var(--accent);
  1408. color: #fff;
  1409. text-decoration: none;
  1410. border-radius: 999px;
  1411. font-size: 14.5px;
  1412. font-weight: 700;
  1413. transition: background .12s;
  1414. }
  1415. ​
  1416. .unlock-btn:hover {
  1417. background: var(--accent-hover);
  1418. }
  1419. ​
  1420. .unlock-btn-outline {
  1421. background: transparent;
  1422. border: 1.5px solid var(--accent);
  1423. color: var(--accent);
  1424. }
  1425. ​
  1426. .unlock-btn-outline:hover {
  1427. background: var(--accent-soft);
  1428. color: var(--accent);
  1429. }
  1430. ​
  1431. .subscription-divider {
  1432. color: var(--muted-dim);
  1433. font-size: 12px;
  1434. text-transform: uppercase;
  1435. letter-spacing: .08em;
  1436. margin: 24px 0 16px;
  1437. font-weight: 700;
  1438. }
  1439. ​
  1440. .subscription-offer {
  1441. border-top: 1px solid var(--border);
  1442. padding-top: 20px;
  1443. }
  1444. ​
  1445. .subscription-offer-name {
  1446. font-size: 18px;
  1447. font-weight: 800;
  1448. }
  1449. ​
  1450. .subscription-offer-price {
  1451. font-size: 15px;
  1452. color: var(--muted);
  1453. margin-top: 4px;
  1454. font-weight: 600;
  1455. }
  1456. ​
  1457. .subscription-offer-description {
  1458. color: var(--muted);
  1459. font-size: 14px;
  1460. margin: 10px 0 0;
  1461. }
  1462. ​
  1463. .account-subscription-offer {
  1464. max-width: 420px;
  1465. margin: 0 0 32px;
  1466. padding: 20px;
  1467. border: 1px solid var(--border);
  1468. border-radius: 12px;
  1469. background: var(--panel);
  1470. }
  1471. ​
  1472. .account-subscription-offer .unlock-btn {
  1473. display: inline-block;
  1474. margin-top: 16px;
  1475. }
  1476. ​
  1477. .account-subscription-note {
  1478. color: var(--muted);
  1479. font-size: 12px;
  1480. margin: 12px 0 0;
  1481. }
  1482. ​
  1483. .related-section {
  1484. margin: 56px auto 0;
  1485. }
  1486. ​
  1487. .related-section h2 {
  1488. font-size: 13px;
  1489. text-transform: uppercase;
  1490. letter-spacing: .07em;
  1491. color: var(--muted);
  1492. margin: 32px 0 18px;
  1493. font-weight: 700;
  1494. }
  1495. ​
  1496. .comments-section {
  1497. margin: 56px 0 0;
  1498. }
  1499. ​
  1500. .comments-placeholder {
  1501. color: var(--muted);
  1502. font-size: 14px;
  1503. }
  1504. ​
  1505. .comments-embed [hidden] {
  1506. display: none !important;
  1507. }
  1508. ​
  1509. .comments-embed-notice,
  1510. .comments-embed-click {
  1511. border: 1px solid var(--border);
  1512. border-radius: 14px;
  1513. padding: 20px;
  1514. text-align: center;
  1515. font-family: var(--font-ui, -apple-system, BlinkMacSystemFont, sans-serif);
  1516. }
  1517. ​
  1518. .comments-embed-notice p,
  1519. .comments-embed-click p {
  1520. color: var(--muted);
  1521. font-size: 14px;
  1522. margin: 0 0 14px;
  1523. }
  1524. ​
  1525. .comments-embed-notice button,
  1526. .comments-embed-click button {
  1527. background: var(--accent);
  1528. color: #fff;
  1529. border: 0;
  1530. border-radius: 999px;
  1531. padding: 10px 20px;
  1532. font-size: 14px;
  1533. font-weight: 600;
  1534. cursor: pointer;
  1535. }
  1536. ​
  1537. .comments-embed-notice button:hover,
  1538. .comments-embed-click button:hover {
  1539. background: var(--accent-hover);
  1540. }
  1541. ​
  1542. .comments-embed-notice button:focus-visible,
  1543. .comments-embed-click button:focus-visible {
  1544. outline: 2px solid var(--accent);
  1545. outline-offset: 2px;
  1546. }
  1547. ​
  1548. .comments-embed-target iframe {
  1549. max-width: 100%;
  1550. }
  1551. ​
  1552. .site-comments [hidden] {
  1553. display: none !important;
  1554. }
  1555. ​
  1556. .site-comments-empty {
  1557. color: var(--muted);
  1558. font-size: 14px;
  1559. }
  1560. ​
  1561. .site-comments-list,
  1562. .site-comments-replies {
  1563. list-style: none;
  1564. margin: 0;
  1565. padding: 0;
  1566. }
  1567. ​
  1568. .site-comments-list > li {
  1569. padding: 18px 0;
  1570. border-bottom: 1px solid var(--border);
  1571. }
  1572. ​
  1573. .site-comments-replies {
  1574. margin: 14px 0 0 20px;
  1575. padding-left: 16px;
  1576. border-left: 2px solid var(--border);
  1577. }
  1578. ​
  1579. .site-comments-replies > li + li {
  1580. margin-top: 14px;
  1581. }
  1582. ​
  1583. .site-comment header {
  1584. display: flex;
  1585. flex-wrap: wrap;
  1586. align-items: baseline;
  1587. gap: 4px 10px;
  1588. margin-bottom: 6px;
  1589. font-family: var(--font-ui, -apple-system, BlinkMacSystemFont, sans-serif);
  1590. font-size: 14px;
  1591. }
  1592. ​
  1593. .site-comment header a {
  1594. color: inherit;
  1595. text-decoration: none;
  1596. }
  1597. ​
  1598. .site-comment header a:hover {
  1599. color: var(--accent);
  1600. }
  1601. ​
  1602. .site-comment-team {
  1603. display: inline-flex;
  1604. align-items: center;
  1605. gap: 4px;
  1606. padding: 2px 8px;
  1607. color: var(--accent);
  1608. font-size: 11.5px;
  1609. font-weight: 600;
  1610. background: color-mix(in srgb, var(--accent) 12%, transparent);
  1611. border-radius: 999px;
  1612. }
  1613. ​
  1614. .site-comment-team .icon {
  1615. width: 12px;
  1616. height: 12px;
  1617. }
  1618. ​
  1619. .site-comment time {
  1620. color: var(--muted);
  1621. font-size: 12px;
  1622. }
  1623. ​
  1624. .site-comment-body {
  1625. font-size: 15px;
  1626. line-height: 1.6;
  1627. overflow-wrap: anywhere;
  1628. }
  1629. ​
  1630. .site-comment-reply,
  1631. .site-comments-cancel {
  1632. margin-top: 8px;
  1633. padding: 0;
  1634. color: var(--accent);
  1635. font-size: 13px;
  1636. font-weight: 600;
  1637. background: none;
  1638. border: 0;
  1639. cursor: pointer;
  1640. }
  1641. ​
  1642. .site-comments-form {
  1643. margin: 28px 0;
  1644. padding: 24px;
  1645. background: var(--panel);
  1646. border: 1px solid var(--border);
  1647. border-radius: 12px;
  1648. font-family: var(--font-ui, -apple-system, BlinkMacSystemFont, sans-serif);
  1649. }
  1650. ​
  1651. .site-comments-form label {
  1652. display: block;
  1653. margin: 14px 0 6px;
  1654. color: var(--muted);
  1655. font-size: 13px;
  1656. }
  1657. ​
  1658. .site-comments-form input,
  1659. .site-comments-form textarea {
  1660. width: 100%;
  1661. box-sizing: border-box;
  1662. padding: 10px 12px;
  1663. color: var(--text);
  1664. font: inherit;
  1665. font-size: 14px;
  1666. background: var(--bg-alt);
  1667. border: 1px solid var(--border);
  1668. border-radius: 8px;
  1669. }
  1670. ​
  1671. .site-comments-form form > label:first-of-type {
  1672. margin-top: 0;
  1673. }
  1674. ​
  1675. .site-comments-form textarea {
  1676. min-height: 120px;
  1677. resize: vertical;
  1678. }
  1679. ​
  1680. .site-comments-form input:focus,
  1681. .site-comments-form textarea:focus {
  1682. outline: 2px solid var(--accent);
  1683. outline-offset: 1px;
  1684. border-color: var(--accent);
  1685. }
  1686. ​
  1687. .site-comments-form .antibot-box {
  1688. max-width: 260px;
  1689. }
  1690. ​
  1691. .site-comments-form button[type="submit"] {
  1692. margin-top: 16px;
  1693. padding: 12px 22px;
  1694. color: var(--bg);
  1695. font-size: 14px;
  1696. font-weight: 600;
  1697. background: var(--accent);
  1698. border: 0;
  1699. border-radius: 8px;
  1700. cursor: pointer;
  1701. }
  1702. ​
  1703. .site-comments-form button[type="submit"]:hover {
  1704. background: var(--accent-hover);
  1705. }
  1706. ​
  1707. .site-comments-as,
  1708. .site-comments-replying,
  1709. .site-comments-login {
  1710. margin: 0 0 4px;
  1711. font-size: 14px;
  1712. }
  1713. ​
  1714. .site-comments-privacy {
  1715. margin: 12px 0 0;
  1716. color: var(--muted);
  1717. font-size: 12px;
  1718. }
  1719. ​
  1720. .site-comments-success,
  1721. .site-comments-error {
  1722. margin-bottom: 10px;
  1723. padding: 10px 12px;
  1724. font-size: 13px;
  1725. border-radius: 8px;
  1726. }
  1727. ​
  1728. .site-comments-success {
  1729. background: color-mix(in srgb, #1f9d55 14%, var(--panel));
  1730. border: 1px solid color-mix(in srgb, #1f9d55 42%, var(--border));
  1731. }
  1732. ​
  1733. .site-comments-error {
  1734. background: color-mix(in srgb, #e40035 16%, var(--panel));
  1735. border: 1px solid color-mix(in srgb, #e40035 42%, var(--border));
  1736. }
  1737. ​
  1738. @media (max-width: 600px) {
  1739. .site-comments-form {
  1740. padding: 18px 16px;
  1741. }
  1742. ​
  1743. .site-comments-replies {
  1744. margin-left: 6px;
  1745. padding-left: 12px;
  1746. }
  1747. }
  1748. ​
  1749. .ad-slot {
  1750. max-width: 100%;
  1751. margin: 24px 0;
  1752. overflow-x: auto;
  1753. text-align: center;
  1754. }
  1755. ​
  1756. .ad-slot.ad-image img {
  1757. max-width: 100%;
  1758. border-radius: 14px;
  1759. }
  1760. ​
  1761. .ad-slot.ad-script iframe,
  1762. .ad-slot.ad-script embed,
  1763. .ad-slot.ad-script object,
  1764. .ad-slot.ad-script > div,
  1765. .ad-slot.ad-script ins {
  1766. max-width: 100%;
  1767. }
  1768. ​
  1769. .site-footer {
  1770. border-top: 1px solid var(--border);
  1771. padding: 44px 40px 24px;
  1772. }
  1773. ​
  1774. .site-footer-columns {
  1775. display: grid;
  1776. grid-template-columns: repeat(auto-fit, minmax(max(160px, calc((100% - 64px) / 3)), 1fr));
  1777. gap: 32px;
  1778. max-width: 1180px;
  1779. margin: 0 auto 32px;
  1780. }
  1781. ​
  1782. .site-footer-column-title {
  1783. font-size: 12px;
  1784. text-transform: uppercase;
  1785. letter-spacing: .06em;
  1786. color: var(--muted);
  1787. font-weight: 700;
  1788. margin: 0 0 14px;
  1789. }
  1790. ​
  1791. .site-footer-column-links {
  1792. display: flex;
  1793. flex-direction: column;
  1794. gap: 10px;
  1795. }
  1796. ​
  1797. .site-footer-column-links a {
  1798. text-decoration: none;
  1799. color: var(--text);
  1800. font-size: 13.5px;
  1801. font-weight: 500;
  1802. }
  1803. ​
  1804. .site-footer-column-links a:hover {
  1805. color: var(--accent);
  1806. }
  1807. ​
  1808. .site-footer-bottom {
  1809. max-width: 1180px;
  1810. margin: 0 auto;
  1811. border-top: 1px solid var(--border);
  1812. padding-top: 20px;
  1813. }
  1814. ​
  1815. .site-footer-row {
  1816. display: flex;
  1817. justify-content: space-between;
  1818. align-items: center;
  1819. flex-wrap: wrap;
  1820. gap: 12px;
  1821. font-size: 13px;
  1822. color: var(--muted);
  1823. }
  1824. ​
  1825. .site-footer-links {
  1826. display: flex;
  1827. align-items: center;
  1828. gap: 20px;
  1829. }
  1830. ​
  1831. .site-footer-links .site-search-form {
  1832. padding: 4px 10px;
  1833. }
  1834. ​
  1835. .site-footer-links .site-search-input {
  1836. width: 110px;
  1837. }
  1838. ​
  1839. .site-footer-links a {
  1840. text-decoration: none;
  1841. color: var(--muted);
  1842. font-weight: 500;
  1843. }
  1844. ​
  1845. .site-footer-links a:hover {
  1846. color: var(--text);
  1847. }
  1848. ​
  1849. .site-footer-social {
  1850. display: flex;
  1851. align-items: center;
  1852. gap: 10px;
  1853. }
  1854. ​
  1855. .site-footer-social a {
  1856. display: flex;
  1857. align-items: center;
  1858. justify-content: center;
  1859. width: 34px;
  1860. height: 34px;
  1861. border-radius: 999px;
  1862. background: var(--panel-raised);
  1863. border: 1px solid var(--border);
  1864. color: var(--muted);
  1865. transition: background .12s, color .12s, border-color .12s;
  1866. }
  1867. ​
  1868. .site-footer-social a:hover {
  1869. color: var(--text);
  1870. border-color: var(--border-strong);
  1871. background: var(--accent-soft);
  1872. }
  1873. ​
  1874. .site-footer-social a svg {
  1875. width: 16px;
  1876. height: 16px;
  1877. fill: currentColor;
  1878. }
  1879. ​
  1880. #consent-reopen-btn,
  1881. #theme-toggle-btn {
  1882. background: var(--panel-raised);
  1883. border: 1px solid var(--border);
  1884. border-radius: 999px;
  1885. width: 34px;
  1886. height: 34px;
  1887. display: flex;
  1888. align-items: center;
  1889. justify-content: center;
  1890. cursor: pointer;
  1891. color: var(--muted);
  1892. transition: background .12s, color .12s;
  1893. }
  1894. ​
  1895. #consent-reopen-btn:hover,
  1896. #theme-toggle-btn:hover {
  1897. color: var(--text);
  1898. }
  1899. ​
  1900. body[data-theme="light"] .icon-moon {
  1901. display: none;
  1902. }
  1903. ​
  1904. body[data-theme="dark"] .icon-sun {
  1905. display: none;
  1906. }
  1907. ​
  1908. .consent-banner {
  1909. position: fixed;
  1910. bottom: 20px;
  1911. left: 20px;
  1912. right: 20px;
  1913. max-width: 440px;
  1914. background: var(--panel);
  1915. border: 1px solid var(--border);
  1916. border-radius: 18px;
  1917. padding: 20px 22px;
  1918. z-index: 1000;
  1919. box-shadow: var(--shadow-card-hover);
  1920. }
  1921. ​
  1922. .consent-banner p {
  1923. margin: 0 0 14px;
  1924. font-size: 13.5px;
  1925. color: var(--muted);
  1926. line-height: 1.5;
  1927. }
  1928. ​
  1929. .consent-banner-actions {
  1930. display: flex;
  1931. gap: 8px;
  1932. }
  1933. ​
  1934. .consent-banner-actions button {
  1935. padding: 9px 18px;
  1936. border-radius: 999px;
  1937. border: 1px solid var(--border);
  1938. background: var(--bg);
  1939. color: var(--text);
  1940. cursor: pointer;
  1941. font-size: 13px;
  1942. font-weight: 600;
  1943. font-family: inherit;
  1944. }
  1945. ​
  1946. #consent-accept {
  1947. background: var(--accent);
  1948. border-color: var(--accent);
  1949. color: #fff;
  1950. }
  1951. ​
  1952. ​
  1953. @media (max-width: 860px) {
  1954. .featured-banner {
  1955. grid-template-columns: 1fr 1fr;
  1956. grid-template-rows: 260px repeat(2, 150px);
  1957. }
  1958. ​
  1959. .featured-banner-item-large {
  1960. grid-column: span 2;
  1961. grid-row: auto;
  1962. }
  1963. ​
  1964. .featured-banner-item-small:nth-child(2),
  1965. .featured-banner-item-small:nth-child(3),
  1966. .featured-banner-item-small:nth-child(4),
  1967. .featured-banner-item-small:nth-child(5) {
  1968. grid-column: auto;
  1969. }
  1970. ​
  1971. .featured-banner-item-large .featured-banner-title {
  1972. font-size: 22px;
  1973. }
  1974. ​
  1975. .site-menu-toggle {
  1976. display: flex;
  1977. }
  1978. ​
  1979. .site-footer-columns {
  1980. grid-template-columns: repeat(2, 1fr);
  1981. gap: 24px 20px;
  1982. }
  1983. ​
  1984. .site-auth-links.site-auth-links-desktop {
  1985. display: none;
  1986. }
  1987. ​
  1988. .site-auth-links.site-auth-links-mobile {
  1989. display: flex;
  1990. flex-direction: column;
  1991. align-items: stretch;
  1992. gap: 10px;
  1993. margin: 10px 10px 0;
  1994. padding-top: 16px;
  1995. border-top: 1px solid var(--border);
  1996. }
  1997. ​
  1998. .site-auth-links-mobile a {
  1999. border: 1.5px solid var(--border);
  2000. border-radius: 999px;
  2001. padding: 11px 26px;
  2002. text-align: center;
  2003. font-size: 14px;
  2004. }
  2005. ​
  2006. .site-auth-links-mobile a:hover {
  2007. border-color: var(--border-strong);
  2008. }
  2009. ​
  2010. .site-auth-links-mobile a.site-auth-cta {
  2011. border-color: var(--accent);
  2012. }
  2013. ​
  2014. .site-auth-links-mobile a.site-auth-cta:hover {
  2015. border-color: var(--accent-hover);
  2016. }
  2017. ​
  2018. .site-nav {
  2019. display: none;
  2020. flex-direction: column;
  2021. flex-wrap: nowrap;
  2022. align-items: stretch;
  2023. gap: 4px;
  2024. position: fixed;
  2025. top: 0;
  2026. right: 0;
  2027. bottom: 0;
  2028. height: 100vh;
  2029. height: 100dvh;
  2030. width: min(300px, 84vw);
  2031. max-width: 100vw;
  2032. ​
  2033. padding: 76px 22px 24px;
  2034. background: var(--panel);
  2035. border-left: 1px solid var(--border);
  2036. box-shadow: var(--shadow-card-hover);
  2037. z-index: 200;
  2038. overflow-x: hidden;
  2039. overflow-y: auto;
  2040. -webkit-overflow-scrolling: touch;
  2041. overscroll-behavior: contain;
  2042. touch-action: pan-y;
  2043. box-sizing: border-box;
  2044. }
  2045. ​
  2046. .site-nav.is-open {
  2047. display: flex;
  2048. }
  2049. ​
  2050. .site-nav > * {
  2051. flex-shrink: 0;
  2052. }
  2053. ​
  2054. .site-nav a {
  2055. padding: 10px 4px;
  2056. border-bottom: 1px solid var(--border);
  2057. }
  2058. ​
  2059. .site-nav .site-search-form {
  2060. width: 100%;
  2061. margin: 6px 0;
  2062. }
  2063. ​
  2064. .site-nav .site-search-input {
  2065. width: 100%;
  2066. }
  2067. ​
  2068. .site-nav-backdrop.is-open {
  2069. display: block;
  2070. position: fixed;
  2071. inset: 0;
  2072. background: rgba(0, 0, 0, 0.45);
  2073. z-index: 40;
  2074. }
  2075. ​
  2076. .site-header:has(.site-nav.is-open),
  2077. .site-header.site-nav-drawer-open,
  2078. body:not(.site-menu-side) .site-header:has(.site-nav.is-open),
  2079. body:not(.site-menu-side) .site-header.site-nav-drawer-open {
  2080. backdrop-filter: none !important;
  2081. -webkit-backdrop-filter: none !important;
  2082. transform: none !important;
  2083. filter: none !important;
  2084. }
  2085. ​
  2086. body.site-menu-top .site-header,
  2087. body.site-menu-bottom .site-header {
  2088. padding: 14px 20px;
  2089. flex-wrap: nowrap;
  2090. }
  2091. ​
  2092. .site-header-row {
  2093. width: 100%;
  2094. justify-content: space-between;
  2095. }
  2096. ​
  2097. .site-brand {
  2098. min-width: 0;
  2099. overflow: hidden;
  2100. text-overflow: ellipsis;
  2101. white-space: nowrap;
  2102. }
  2103. ​
  2104. body.site-menu-side .site-shell {
  2105. flex-direction: column;
  2106. }
  2107. ​
  2108. body.site-menu-side .site-header {
  2109. flex-direction: row;
  2110. align-items: center;
  2111. width: 100%;
  2112. height: auto;
  2113. position: sticky;
  2114. top: 0;
  2115. border-right: none;
  2116. border-bottom: 1px solid var(--border);
  2117. padding: 14px 20px;
  2118. background: color-mix(in srgb, var(--bg) 88%, transparent);
  2119. backdrop-filter: blur(10px);
  2120. -webkit-backdrop-filter: blur(10px);
  2121. z-index: 100;
  2122. }
  2123. ​
  2124. body.site-menu-side .site-nav {
  2125. flex-direction: column;
  2126. flex-wrap: nowrap;
  2127. }
  2128. ​
  2129. body.site-menu-side .site-main {
  2130. flex: 1;
  2131. width: 100%;
  2132. }
  2133. ​
  2134. .site-main {
  2135. padding: 24px 18px;
  2136. }
  2137. ​
  2138. .latest-banner {
  2139. padding: 20px 18px;
  2140. }
  2141. ​
  2142. .site-footer {
  2143. padding: 32px 20px 20px;
  2144. }
  2145. ​
  2146. .site-footer-row {
  2147. flex-direction: column;
  2148. align-items: center;
  2149. text-align: center;
  2150. }
  2151. ​
  2152. .site-footer-links {
  2153. justify-content: center;
  2154. flex-wrap: wrap;
  2155. gap: 12px;
  2156. }
  2157. ​
  2158. .consent-banner {
  2159. left: 12px;
  2160. right: 12px;
  2161. bottom: 12px;
  2162. max-width: none;
  2163. }
  2164. }
  2165. ​
  2166. body[data-theme="light"] {
  2167. --tok-comment: #7a8194;
  2168. --tok-string: #0a7d4f;
  2169. --tok-keyword: #6c3fd1;
  2170. --tok-number: #b45309;
  2171. --tok-function: #1f6feb;
  2172. --tok-tag: #c2255c;
  2173. --tok-attr: #b45309;
  2174. --tok-variable: #0e7490;
  2175. --tok-literal: #c2255c;
  2176. }
  2177. ​
  2178. body[data-theme="dark"] {
  2179. --tok-comment: #7f8798;
  2180. --tok-string: #7ee2a8;
  2181. --tok-keyword: #c4a7ff;
  2182. --tok-number: #f5b971;
  2183. --tok-function: #79b8ff;
  2184. --tok-tag: #ff8fa8;
  2185. --tok-attr: #f5b971;
  2186. --tok-variable: #67d4e8;
  2187. --tok-literal: #ff8fa8;
  2188. }
  2189. ​
  2190. .code-block {
  2191. position: relative;
  2192. margin: 20px 0;
  2193. }
  2194. ​
  2195. .code-block pre {
  2196. margin: 0;
  2197. }
  2198. ​
  2199. .code-copy {
  2200. position: absolute;
  2201. top: 10px;
  2202. right: 10px;
  2203. z-index: 1;
  2204. padding: 4px 10px;
  2205. border: 1px solid var(--border);
  2206. border-radius: 8px;
  2207. background: var(--panel);
  2208. color: var(--muted);
  2209. font: inherit;
  2210. font-size: 12px;
  2211. font-weight: 600;
  2212. cursor: pointer;
  2213. opacity: 0;
  2214. transition: opacity .15s, color .15s, border-color .15s;
  2215. }
  2216. ​
  2217. .code-block:hover .code-copy,
  2218. .code-copy:focus-visible,
  2219. .code-copy.is-copied {
  2220. opacity: 1;
  2221. }
  2222. ​
  2223. .code-copy:hover {
  2224. color: var(--text);
  2225. border-color: var(--border-strong);
  2226. }
  2227. ​
  2228. .code-copy.is-copied {
  2229. color: var(--accent);
  2230. border-color: var(--accent);
  2231. }
  2232. ​
  2233. @media (hover: none) {
  2234. .code-copy {
  2235. opacity: 1;
  2236. }
  2237. }
  2238. ​
  2239. .tok-comment {
  2240. color: var(--tok-comment);
  2241. font-style: italic;
  2242. }
  2243. ​
  2244. .tok-string {
  2245. color: var(--tok-string);
  2246. }
  2247. ​
  2248. .tok-keyword {
  2249. color: var(--tok-keyword);
  2250. }
  2251. ​
  2252. .tok-number {
  2253. color: var(--tok-number);
  2254. }
  2255. ​
  2256. .tok-function {
  2257. color: var(--tok-function);
  2258. }
  2259. ​
  2260. .tok-tag {
  2261. color: var(--tok-tag);
  2262. }
  2263. ​
  2264. .tok-attr {
  2265. color: var(--tok-attr);
  2266. }
  2267. ​
  2268. .tok-variable {
  2269. color: var(--tok-variable);
  2270. }
  2271. ​
  2272. .tok-literal {
  2273. color: var(--tok-literal);
  2274. }
  2275. ​
  2276. .back-to-top {
  2277. position: fixed;
  2278. right: 20px;
  2279. bottom: 20px;
  2280. z-index: 900;
  2281. display: inline-flex;
  2282. align-items: center;
  2283. justify-content: center;
  2284. gap: 8px;
  2285. height: 44px;
  2286. min-width: 44px;
  2287. padding: 0 13px;
  2288. border-radius: 999px;
  2289. border: 1px solid var(--border);
  2290. background-color: var(--panel-raised);
  2291. color: var(--text);
  2292. font-family: inherit;
  2293. font-size: 13px;
  2294. font-weight: 600;
  2295. cursor: pointer;
  2296. box-shadow: var(--shadow-card-hover);
  2297. opacity: 0;
  2298. visibility: hidden;
  2299. transform: translateY(12px);
  2300. transition: opacity .2s ease, transform .2s ease, visibility .2s ease, background-color .15s ease, color .15s ease;
  2301. }
  2302. ​
  2303. .back-to-top.is-visible {
  2304. opacity: 1;
  2305. visibility: visible;
  2306. transform: none;
  2307. }
  2308. ​
  2309. .back-to-top:hover {
  2310. background-color: var(--accent);
  2311. border-color: var(--accent);
  2312. color: #fff;
  2313. }
  2314. ​
  2315. .back-to-top.has-progress {
  2316. background-image: linear-gradient(90deg, var(--accent-soft) var(--btt-read, 0%), transparent var(--btt-read, 0%));
  2317. }
  2318. ​
  2319. .back-to-top svg {
  2320. width: 18px;
  2321. height: 18px;
  2322. flex-shrink: 0;
  2323. }
  2324. ​
  2325. .back-to-top-progress {
  2326. font-variant-numeric: tabular-nums;
  2327. white-space: nowrap;
  2328. }
  2329. ​
  2330. .back-to-top-progress[hidden] {
  2331. display: none;
  2332. }
  2333. ​
  2334. .article-toc {
  2335. margin: 0 0 28px;
  2336. padding: 16px 20px;
  2337. border: 1px solid var(--border);
  2338. border-radius: 14px;
  2339. background: var(--panel-raised);
  2340. }
  2341. ​
  2342. .article-toc summary {
  2343. cursor: pointer;
  2344. font-size: 15px;
  2345. font-weight: 700;
  2346. color: var(--text);
  2347. }
  2348. ​
  2349. .article-toc-list {
  2350. list-style: none;
  2351. display: grid;
  2352. gap: 6px;
  2353. margin: 12px 0 0;
  2354. padding: 0;
  2355. }
  2356. ​
  2357. .article-toc-item a {
  2358. color: var(--muted);
  2359. font-size: 15px;
  2360. line-height: 1.4;
  2361. text-decoration: none;
  2362. }
  2363. ​
  2364. .article-toc-item a:hover {
  2365. color: var(--accent);
  2366. }
  2367. ​
  2368. .article-toc-level-3 {
  2369. padding-left: 18px;
  2370. }
  2371. ​
  2372. .article-content h2[id],
  2373. .article-content h3[id] {
  2374. scroll-margin-top: 90px;
  2375. }
  2376. ​
  2377. @media (prefers-reduced-motion: no-preference) {
  2378. html {
  2379. scroll-behavior: smooth;
  2380. }
  2381. }
  2382. ​
  2383. @media (max-width: 600px) {
  2384. .back-to-top {
  2385. right: 14px;
  2386. bottom: 14px;
  2387. }
  2388. }
  2389. ​
  2390. .article-breadcrumbs {
  2391. margin-bottom: 14px;
  2392. font-size: 13px;
  2393. }
  2394. ​
  2395. .article-breadcrumbs ol {
  2396. display: flex;
  2397. flex-wrap: wrap;
  2398. align-items: center;
  2399. gap: 6px;
  2400. list-style: none;
  2401. margin: 0;
  2402. padding: 0;
  2403. color: var(--muted);
  2404. }
  2405. ​
  2406. .article-breadcrumbs li {
  2407. display: inline-flex;
  2408. align-items: center;
  2409. gap: 6px;
  2410. min-width: 0;
  2411. }
  2412. ​
  2413. .article-breadcrumbs li + li::before {
  2414. content: "\203A";
  2415. color: var(--muted);
  2416. opacity: 0.7;
  2417. }
  2418. ​
  2419. .article-breadcrumbs a {
  2420. color: var(--muted);
  2421. text-decoration: none;
  2422. }
  2423. ​
  2424. .article-breadcrumbs a:hover {
  2425. color: var(--accent);
  2426. }
  2427. ​
  2428. .article-breadcrumbs li[aria-current="page"] span {
  2429. display: block;
  2430. max-width: 260px;
  2431. overflow: hidden;
  2432. text-overflow: ellipsis;
  2433. white-space: nowrap;
  2434. color: var(--text);
  2435. }
  2436. ​
  2437. .author-box {
  2438. display: flex;
  2439. align-items: center;
  2440. gap: 16px;
  2441. margin-top: 40px;
  2442. padding: 18px 20px;
  2443. border: 1px solid var(--border);
  2444. border-radius: 16px;
  2445. background: var(--panel-raised);
  2446. }
  2447. ​
  2448. .author-box-avatar {
  2449. display: flex;
  2450. align-items: center;
  2451. justify-content: center;
  2452. flex-shrink: 0;
  2453. width: 52px;
  2454. height: 52px;
  2455. border-radius: 50%;
  2456. background: var(--accent-soft);
  2457. color: var(--accent);
  2458. font-size: 20px;
  2459. font-weight: 800;
  2460. }
  2461. ​
  2462. .author-box-label {
  2463. font-size: 12px;
  2464. color: var(--muted);
  2465. text-transform: uppercase;
  2466. letter-spacing: 0.04em;
  2467. }
  2468. ​
  2469. .author-box-name {
  2470. font-size: 17px;
  2471. font-weight: 700;
  2472. color: var(--text);
  2473. }
  2474. ​
  2475. .author-box-meta {
  2476. font-size: 13px;
  2477. color: var(--muted);
  2478. }
  2479. ​
  2480. .author-box-avatar.has-image {
  2481. overflow: hidden;
  2482. background: transparent;
  2483. }
  2484. ​
  2485. .author-box-avatar.has-image img {
  2486. display: block;
  2487. width: 100%;
  2488. height: 100%;
  2489. object-fit: cover;
  2490. }
  2491. ​
  2492. .author-box-name a {
  2493. color: inherit;
  2494. text-decoration: none;
  2495. }
  2496. ​
  2497. .author-box-name a:hover {
  2498. color: var(--accent);
  2499. }
  2500. ​
  2501. .author-box-headline {
  2502. font-size: 13px;
  2503. color: var(--muted);
  2504. }
  2505. ​
  2506. .artist-header {
  2507. display: flex;
  2508. align-items: center;
  2509. gap: 22px;
  2510. margin-bottom: 24px;
  2511. }
  2512. ​
  2513. .artist-avatar {
  2514. display: flex;
  2515. align-items: center;
  2516. justify-content: center;
  2517. flex-shrink: 0;
  2518. width: 96px;
  2519. height: 96px;
  2520. border-radius: 50%;
  2521. background: var(--accent-soft);
  2522. color: var(--accent);
  2523. font-size: 38px;
  2524. font-weight: 800;
  2525. }
  2526. ​
  2527. .artist-avatar.has-image {
  2528. overflow: hidden;
  2529. background: transparent;
  2530. }
  2531. ​
  2532. .artist-avatar.has-image img {
  2533. display: block;
  2534. width: 100%;
  2535. height: 100%;
  2536. object-fit: cover;
  2537. }
  2538. ​
  2539. .artist-name {
  2540. margin: 0;
  2541. font-size: 32px;
  2542. line-height: 1.2;
  2543. }
  2544. ​
  2545. .artist-headline {
  2546. margin: 4px 0 0;
  2547. font-size: 17px;
  2548. color: var(--muted);
  2549. }
  2550. ​
  2551. .artist-meta {
  2552. margin: 8px 0 0;
  2553. font-size: 14px;
  2554. color: var(--muted);
  2555. }
  2556. ​
  2557. .artist-meta a {
  2558. color: var(--accent);
  2559. text-decoration: none;
  2560. }
  2561. ​
  2562. .artist-bio {
  2563. max-width: 720px;
  2564. margin-bottom: 32px;
  2565. font-size: 17px;
  2566. line-height: 1.75;
  2567. overflow-wrap: anywhere;
  2568. }
  2569. ​
  2570. @media (max-width: 600px) {
  2571. .artist-header {
  2572. flex-direction: column;
  2573. align-items: flex-start;
  2574. }
  2575. }
  2576. ​
  2577. .article-tags {
  2578. display: flex;
  2579. flex-wrap: wrap;
  2580. align-items: center;
  2581. gap: 8px;
  2582. margin-top: 32px;
  2583. }
  2584. ​
  2585. .article-tags-label {
  2586. font-size: 14px;
  2587. color: var(--muted);
  2588. }
  2589. ​
  2590. .article-tag {
  2591. padding: 4px 12px;
  2592. border: 1px solid var(--border);
  2593. border-radius: 999px;
  2594. background: var(--panel-raised);
  2595. color: var(--text);
  2596. font-size: 13px;
  2597. text-decoration: none;
  2598. transition: border-color 0.15s ease, color 0.15s ease;
  2599. }
  2600. ​
  2601. .article-tag:hover {
  2602. border-color: var(--accent);
  2603. color: var(--accent);
  2604. }
  2605. ​
  2606. .read-aloud {
  2607. display: flex;
  2608. align-items: center;
  2609. gap: 14px;
  2610. margin: 0 0 24px;
  2611. padding: 14px 16px;
  2612. border: 1px solid var(--border);
  2613. border-radius: 16px;
  2614. background: var(--panel);
  2615. box-shadow: var(--shadow-card);
  2616. }
  2617. ​
  2618. .read-aloud-toggle {
  2619. flex: 0 0 auto;
  2620. display: inline-flex;
  2621. align-items: center;
  2622. justify-content: center;
  2623. width: 46px;
  2624. height: 46px;
  2625. padding: 0;
  2626. border-radius: 50%;
  2627. border: 1px solid color-mix(in srgb, var(--accent) 38%, transparent);
  2628. background: linear-gradient(180deg, color-mix(in srgb, var(--accent) 22%, transparent), color-mix(in srgb, var(--accent) 10%, transparent));
  2629. color: var(--accent);
  2630. cursor: pointer;
  2631. transition: background-color .2s, border-color .2s, transform .15s;
  2632. }
  2633. ​
  2634. .read-aloud-toggle:hover {
  2635. border-color: color-mix(in srgb, var(--accent) 60%, transparent);
  2636. background: linear-gradient(180deg, color-mix(in srgb, var(--accent) 32%, transparent), color-mix(in srgb, var(--accent) 16%, transparent));
  2637. }
  2638. ​
  2639. .read-aloud-toggle:active {
  2640. transform: scale(.94);
  2641. }
  2642. ​
  2643. .read-aloud-toggle:focus-visible,
  2644. .read-aloud-speed:focus-visible,
  2645. .read-aloud-seek:focus-visible {
  2646. outline: 2px solid var(--accent);
  2647. outline-offset: 2px;
  2648. }
  2649. ​
  2650. .read-aloud-toggle svg {
  2651. width: 18px;
  2652. height: 18px;
  2653. }
  2654. ​
  2655. .read-aloud-icon-pause {
  2656. display: none;
  2657. }
  2658. ​
  2659. .read-aloud.is-playing .read-aloud-icon-play {
  2660. display: none;
  2661. }
  2662. ​
  2663. .read-aloud.is-playing .read-aloud-icon-pause {
  2664. display: block;
  2665. }
  2666. ​
  2667. .read-aloud-main {
  2668. flex: 1 1 auto;
  2669. min-width: 0;
  2670. }
  2671. ​
  2672. .read-aloud-title {
  2673. margin-bottom: 8px;
  2674. font-size: 13px;
  2675. font-weight: 600;
  2676. color: var(--text);
  2677. }
  2678. ​
  2679. .read-aloud-track {
  2680. display: flex;
  2681. align-items: center;
  2682. gap: 12px;
  2683. }
  2684. ​
  2685. .read-aloud-seek {
  2686. -webkit-appearance: none;
  2687. appearance: none;
  2688. flex: 1 1 auto;
  2689. min-width: 0;
  2690. height: 6px;
  2691. margin: 0;
  2692. padding: 0;
  2693. border-radius: 999px;
  2694. background: linear-gradient(to right, var(--accent) var(--read-aloud-progress, 0%), var(--border-strong) var(--read-aloud-progress, 0%));
  2695. cursor: pointer;
  2696. }
  2697. ​
  2698. .read-aloud-seek:disabled {
  2699. opacity: .6;
  2700. cursor: default;
  2701. }
  2702. ​
  2703. .read-aloud-seek::-webkit-slider-thumb {
  2704. -webkit-appearance: none;
  2705. appearance: none;
  2706. width: 14px;
  2707. height: 14px;
  2708. border-radius: 50%;
  2709. border: 2px solid var(--panel);
  2710. background: var(--accent);
  2711. box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
  2712. }
  2713. ​
  2714. .read-aloud-seek::-moz-range-thumb {
  2715. width: 12px;
  2716. height: 12px;
  2717. border-radius: 50%;
  2718. border: 2px solid var(--panel);
  2719. background: var(--accent);
  2720. }
  2721. ​
  2722. .read-aloud-time {
  2723. flex: 0 0 auto;
  2724. min-width: 78px;
  2725. text-align: right;
  2726. font-size: 12px;
  2727. color: var(--muted);
  2728. font-variant-numeric: tabular-nums;
  2729. white-space: nowrap;
  2730. }
  2731. ​
  2732. .read-aloud-speed {
  2733. flex: 0 0 auto;
  2734. min-width: 46px;
  2735. padding: 6px 10px;
  2736. border-radius: 999px;
  2737. border: 1px solid var(--border-strong);
  2738. background: transparent;
  2739. color: var(--muted);
  2740. font: inherit;
  2741. font-size: 12px;
  2742. font-weight: 600;
  2743. cursor: pointer;
  2744. transition: color .2s, border-color .2s;
  2745. }
  2746. ​
  2747. .read-aloud-speed:hover {
  2748. color: var(--text);
  2749. border-color: var(--muted-dim);
  2750. }
  2751. ​
  2752. .read-aloud.is-error {
  2753. opacity: .6;
  2754. }
  2755. ​
  2756. @media (max-width: 560px) {
  2757. .read-aloud {
  2758. gap: 10px;
  2759. padding: 12px;
  2760. }
  2761. ​
  2762. .read-aloud-toggle {
  2763. width: 42px;
  2764. height: 42px;
  2765. }
  2766. ​
  2767. .read-aloud-time {
  2768. min-width: 66px;
  2769. font-size: 11.5px;
  2770. }
  2771. }
  2772. ​
  2773. .paid-overlay-box .badge-paid {
  2774. margin: 0 0 22px;
  2775. }
  2776. ​
  2777. .paid-overlay-box .badge-paid + .subscription-offer {
  2778. border-top: 0;
  2779. padding-top: 0;
  2780. }
  2781. ​
  2782. .paid-overlay-box > :last-child {
  2783. margin-bottom: 0;
  2784. }
  2785. ​
  2786. .site-language-switcher {
  2787. position: relative;
  2788. display: inline-block;
  2789. }
  2790. ​
  2791. .site-language-switcher summary {
  2792. display: inline-flex;
  2793. align-items: center;
  2794. justify-content: space-between;
  2795. gap: 10px;
  2796. min-width: 128px;
  2797. padding: 8px 12px;
  2798. border: 1px solid var(--border-strong);
  2799. border-radius: 12px;
  2800. background: var(--panel);
  2801. color: var(--text);
  2802. font-size: 13px;
  2803. font-weight: 600;
  2804. line-height: 1.3;
  2805. cursor: pointer;
  2806. list-style: none;
  2807. user-select: none;
  2808. transition: border-color .2s, background-color .2s;
  2809. }
  2810. ​
  2811. .site-language-switcher summary::-webkit-details-marker {
  2812. display: none;
  2813. }
  2814. ​
  2815. .site-language-switcher summary:hover,
  2816. .site-language-switcher[open] summary {
  2817. border-color: var(--accent);
  2818. }
  2819. ​
  2820. .site-language-caret {
  2821. color: var(--muted);
  2822. transition: transform .2s;
  2823. }
  2824. ​
  2825. .site-language-switcher[open] .site-language-caret {
  2826. transform: rotate(180deg);
  2827. }
  2828. ​
  2829. .site-language-menu {
  2830. position: absolute;
  2831. right: 0;
  2832. bottom: calc(100% + 6px);
  2833. z-index: 50;
  2834. min-width: 100%;
  2835. margin: 0;
  2836. padding: 4px;
  2837. list-style: none;
  2838. border: 1px solid var(--border-strong);
  2839. border-radius: 12px;
  2840. background: var(--panel-raised, var(--panel));
  2841. box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18);
  2842. }
  2843. ​
  2844. .site-language-menu a {
  2845. display: block;
  2846. padding: 8px 12px;
  2847. border-radius: 8px;
  2848. color: var(--text);
  2849. font-size: 13px;
  2850. font-weight: 500;
  2851. text-decoration: none;
  2852. white-space: nowrap;
  2853. }
  2854. ​
  2855. .site-language-menu a:hover,
  2856. .site-language-menu a:focus-visible {
  2857. background: color-mix(in srgb, var(--accent) 12%, transparent);
  2858. outline: none;
  2859. }
  2860. ​
  2861. .site-language-menu a.is-current {
  2862. color: var(--accent);
  2863. font-weight: 700;
  2864. }
  2865. ​
  2866. .ad-sticky {
  2867. position: fixed;
  2868. left: 50%;
  2869. bottom: 0;
  2870. transform: translateX(-50%);
  2871. width: min(760px, 100%);
  2872. max-height: 40vh;
  2873. overflow: auto;
  2874. z-index: 800;
  2875. box-sizing: border-box;
  2876. padding: 10px 46px 10px 12px;
  2877. padding-bottom: calc(10px + env(safe-area-inset-bottom));
  2878. background: var(--panel);
  2879. border: 1px solid var(--border);
  2880. border-bottom: 0;
  2881. border-radius: 14px 14px 0 0;
  2882. box-shadow: var(--shadow-card-hover);
  2883. }
  2884. ​
  2885. .ad-sticky .ad-slot {
  2886. margin: 0;
  2887. }
  2888. ​
  2889. .ad-sticky[hidden],
  2890. .ad-slot:has(> template.consent-gated) {
  2891. display: none;
  2892. }
  2893. ​
  2894. .ad-sticky-close {
  2895. position: absolute;
  2896. top: 8px;
  2897. right: 8px;
  2898. width: 28px;
  2899. height: 28px;
  2900. display: flex;
  2901. align-items: center;
  2902. justify-content: center;
  2903. padding: 0;
  2904. border: 0;
  2905. border-radius: 50%;
  2906. background: transparent;
  2907. color: var(--muted);
  2908. cursor: pointer;
  2909. }
  2910. ​
  2911. .ad-sticky-close:hover,
  2912. .ad-sticky-close:focus-visible {
  2913. background: var(--border);
  2914. color: var(--text);
  2915. }
  2916. ​
  2917. .ad-sticky-close svg {
  2918. width: 14px;
  2919. height: 14px;
  2920. fill: none;
  2921. stroke: currentColor;
  2922. stroke-width: 2.25;
  2923. stroke-linecap: round;
  2924. }
  2925. ​
  2926. body.has-ad-sticky {
  2927. padding-bottom: var(--ad-sticky-h, 0px);
  2928. }
  2929. ​
  2930. body.has-ad-sticky .back-to-top {
  2931. bottom: calc(20px + var(--ad-sticky-h, 0px));
  2932. }
  2933. ​
  2934. @media (max-width: 600px) {
  2935. body.has-ad-sticky .back-to-top {
  2936. bottom: calc(14px + var(--ad-sticky-h, 0px));
  2937. }
  2938. }
  2939. ​
  2940. #adblock-bait {
  2941. position: absolute;
  2942. top: -10000px;
  2943. left: -10000px;
  2944. width: 1px;
  2945. height: 1px;
  2946. overflow: hidden;
  2947. }
  2948. ​
  2949. .adblock-notice[hidden] {
  2950. display: none;
  2951. }
  2952. ​
  2953. .adblock-notice {
  2954. position: fixed;
  2955. z-index: 1100;
  2956. display: flex;
  2957. justify-content: center;
  2958. padding: 16px;
  2959. }
  2960. ​
  2961. .adblock-notice-gentle {
  2962. left: 0;
  2963. right: 0;
  2964. bottom: 0;
  2965. padding-bottom: calc(16px + env(safe-area-inset-bottom));
  2966. pointer-events: none;
  2967. }
  2968. ​
  2969. .adblock-notice-wall {
  2970. inset: 0;
  2971. align-items: center;
  2972. background: rgba(8, 8, 10, 0.55);
  2973. }
  2974. ​
  2975. .adblock-notice-max {
  2976. background: rgba(8, 8, 10, 0.9);
  2977. backdrop-filter: blur(24px);
  2978. -webkit-backdrop-filter: blur(24px);
  2979. }
  2980. ​
  2981. .adblock-notice-box {
  2982. width: min(460px, 100%);
  2983. box-sizing: border-box;
  2984. padding: 22px 22px 18px;
  2985. border: 1px solid var(--border);
  2986. border-radius: 16px;
  2987. background: var(--panel);
  2988. color: var(--text);
  2989. box-shadow: var(--shadow-card-hover);
  2990. pointer-events: auto;
  2991. }
  2992. ​
  2993. .adblock-notice-title {
  2994. margin: 0 0 6px;
  2995. font-family: var(--font-ui, sans-serif);
  2996. font-size: 17px;
  2997. font-weight: 700;
  2998. }
  2999. ​
  3000. .adblock-notice-text {
  3001. margin: 0 0 16px;
  3002. font-size: 14.5px;
  3003. line-height: 1.55;
  3004. color: var(--muted);
  3005. }
  3006. ​
  3007. .adblock-notice-actions {
  3008. display: flex;
  3009. flex-wrap: wrap;
  3010. gap: 8px;
  3011. }
  3012. ​
  3013. .adblock-notice-actions button {
  3014. flex: 1 1 auto;
  3015. padding: 10px 16px;
  3016. border: 1px solid var(--accent);
  3017. border-radius: 10px;
  3018. background: var(--accent);
  3019. color: #ffffff;
  3020. font-size: 14px;
  3021. font-weight: 600;
  3022. cursor: pointer;
  3023. }
  3024. ​
  3025. .adblock-notice-actions button:hover {
  3026. background: var(--accent-hover);
  3027. }
  3028. ​
  3029. .adblock-notice-actions .adblock-notice-secondary {
  3030. border-color: var(--border);
  3031. background: transparent;
  3032. color: var(--text);
  3033. }
  3034. ​
  3035. .adblock-notice-actions .adblock-notice-secondary:hover {
  3036. background: var(--accent-soft);
  3037. }
  3038. ​
  3039. .adblock-notice-subscribe {
  3040. display: inline-block;
  3041. margin-top: 12px;
  3042. font-size: 13.5px;
  3043. color: var(--accent);
  3044. }
  3045. ​
  3046. html.adblock-locked,
  3047. html.adblock-locked body {
  3048. overflow: hidden;
  3049. }
  3050. ​
  3051. body[data-theme="dark"] .adblock-notice-actions button:not(.adblock-notice-secondary) {
  3052. color: #140f2e;
  3053. }
  3054. ​
  3055. html.adblock-max body > *:not(#adblock-notice):not(script) {
  3056. filter: blur(18px);
  3057. user-select: none;
  3058. }
  3059. ​
  3060. .consent-options[hidden] {
  3061. display: none;
  3062. }
  3063. ​
  3064. .consent-options {
  3065. display: flex;
  3066. flex-direction: column;
  3067. gap: 10px;
  3068. margin: 0 0 14px;
  3069. }
  3070. ​
  3071. .consent-option {
  3072. display: flex;
  3073. align-items: flex-start;
  3074. gap: 10px;
  3075. font-size: 13px;
  3076. line-height: 1.45;
  3077. color: var(--muted);
  3078. cursor: pointer;
  3079. }
  3080. ​
  3081. .consent-option input {
  3082. margin-top: 2px;
  3083. flex-shrink: 0;
  3084. accent-color: var(--accent);
  3085. }
  3086. ​
  3087. .consent-option input:disabled {
  3088. cursor: not-allowed;
  3089. }
  3090. ​
  3091. .consent-option strong {
  3092. display: block;
  3093. color: var(--text);
  3094. font-size: 13.5px;
  3095. }
  3096. ​
  3097. .consent-banner-actions {
  3098. flex-wrap: wrap;
  3099. }
  3100. ​
  3101. .consent-banner-actions button[hidden] {
  3102. display: none;
  3103. }
  3104. ​
  3105. #consent-save {
  3106. background: var(--accent);
  3107. border-color: var(--accent);
  3108. color: #fff;
  3109. }
  3110. ​