WebOrbiton
v1.0.0.8

Publisium

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