home.css 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. /* resources/css/home.css
  2. WikiPāli 首页(next.wikipali.org)样式入口。
  3. 只服务于首页:品牌 hero + 四张通栏分流卡片。
  4. 平面、哑光、克制,无渐变 / 发光 / 阴影 / 圆角卡片。
  5. */
  6. /* 1. Tabler(Bootstrap 5 底座)+ Tabler Icons */
  7. @import '@tabler/core/dist/css/tabler.min.css';
  8. @import '@tabler/icons-webfont/dist/tabler-icons.min.css';
  9. /* 2. 设计令牌 */
  10. :root {
  11. --home-bg: #F6F1E7;
  12. --home-text: #2B2318;
  13. --home-text-secondary: #63594A;
  14. --home-text-muted: #6F6555;
  15. --home-border-muted: #B6AB98;
  16. --home-cta-hover-text: #F6F1E7;
  17. --home-hero-tint: #8A6A3C;
  18. }
  19. /* 3. 页面底色 */
  20. .home-page {
  21. margin: 0;
  22. background: var(--home-bg);
  23. color: var(--home-text);
  24. }
  25. .home-page .page {
  26. background: var(--home-bg);
  27. }
  28. /* 3.5 右上角语言选择(复用 x-language-switcher,改为浅底深字) */
  29. .home {
  30. position: relative;
  31. }
  32. .home-lang {
  33. position: absolute;
  34. top: 1rem;
  35. right: 1.5rem;
  36. z-index: 10;
  37. }
  38. .home-lang .language-link,
  39. .home-lang .language-link:hover {
  40. color: var(--home-text);
  41. }
  42. @media (max-width: 768px) {
  43. .home-lang {
  44. top: .75rem;
  45. right: 1rem;
  46. }
  47. /* 组件移动端默认展开为静态列表,首页仍保持下拉 */
  48. .home-lang .language-switcher {
  49. width: auto;
  50. }
  51. .home-lang .language-dropdown {
  52. position: absolute;
  53. right: 0;
  54. opacity: 0;
  55. visibility: hidden;
  56. transform: translateY(-10px);
  57. background: rgba(0, 0, 0, .85);
  58. -webkit-backdrop-filter: blur(10px);
  59. backdrop-filter: blur(10px);
  60. border: 1px solid rgba(255, 255, 255, .1);
  61. margin-top: .5rem;
  62. padding: .5rem 0;
  63. }
  64. .home-lang .language-switcher:hover .language-dropdown {
  65. opacity: 1;
  66. visibility: visible;
  67. transform: translateY(0);
  68. }
  69. }
  70. /* 4. 品牌 Hero */
  71. .home-hero {
  72. display: flex;
  73. flex-direction: column;
  74. align-items: center;
  75. justify-content: center;
  76. text-align: center;
  77. height: 44vh;
  78. min-height: 280px;
  79. padding: 2rem 1.5rem;
  80. background: color-mix(in srgb, var(--home-hero-tint) 16%, var(--home-bg));
  81. }
  82. .home-hero__title {
  83. margin: 0 0 .75rem;
  84. color: var(--home-text);
  85. font-size: clamp(2rem, 5vw, 3.5rem);
  86. font-weight: 500;
  87. line-height: 1.2;
  88. letter-spacing: .02em;
  89. }
  90. .home-hero__lead {
  91. margin: 0;
  92. color: var(--home-text-secondary);
  93. font-size: clamp(.95rem, 1.6vw, 1.125rem);
  94. line-height: 1.5;
  95. }
  96. /* 5. 通栏卡片 */
  97. .home-card {
  98. position: relative;
  99. display: flex;
  100. align-items: center;
  101. height: 40vh;
  102. min-height: 320px;
  103. max-height: 480px;
  104. overflow: hidden;
  105. color: var(--home-text);
  106. }
  107. /* 末卡(二次开发)高度略矮 */
  108. #card-development {
  109. height: 36vh;
  110. min-height: 280px;
  111. max-height: none;
  112. }
  113. /* 底图:通栏满铺 */
  114. .home-card__media-wrap {
  115. position: absolute;
  116. inset: 0;
  117. display: block;
  118. margin: 0;
  119. padding: 0;
  120. }
  121. .home-card__media {
  122. display: block;
  123. width: 100%;
  124. height: 100%;
  125. object-fit: cover;
  126. }
  127. /* 文字在左 → 图的视觉重心在右;文字在右 → 视觉重心在左 */
  128. .home-card--start .home-card__media {
  129. object-position: 70% center;
  130. }
  131. .home-card--end .home-card__media {
  132. object-position: 30% center;
  133. }
  134. /* 蒙版:保证文字对比度 ≥ 4.5:1 */
  135. .home-card__veil {
  136. position: absolute;
  137. inset: 0;
  138. background: color-mix(in srgb, var(--card-tint) 16%, rgba(246, 241, 231, .8));
  139. }
  140. /* 文字块:垂直居中,横向贴边 */
  141. .home-card__body {
  142. position: relative;
  143. z-index: 1;
  144. display: flex;
  145. align-items: center;
  146. width: 100%;
  147. padding: 2rem clamp(1.5rem, 6vw, 5rem);
  148. }
  149. .home-card--start .home-card__body {
  150. justify-content: flex-start;
  151. padding-left: calc(clamp(1.5rem, 6vw, 5rem) + 300px);
  152. }
  153. .home-card--end .home-card__body {
  154. justify-content: flex-end;
  155. padding-right: calc(clamp(1.5rem, 6vw, 5rem) + 300px);
  156. }
  157. .home-card__text {
  158. width: 100%;
  159. max-width: 26rem;
  160. }
  161. .home-card--start .home-card__text {
  162. text-align: left;
  163. }
  164. .home-card--end .home-card__text {
  165. text-align: right;
  166. }
  167. .home-card__eyebrow {
  168. margin: 0 0 .5rem;
  169. color: var(--home-text-muted);
  170. font-size: 12px;
  171. letter-spacing: .22em;
  172. text-transform: uppercase;
  173. }
  174. .home-card__title {
  175. margin: 0 0 .75rem;
  176. color: var(--home-text);
  177. font-size: clamp(1.5rem, 3.2vw, 2.5rem);
  178. font-weight: 500;
  179. line-height: 1.3;
  180. }
  181. .home-card__lead {
  182. margin: 0 0 1.5rem;
  183. color: var(--home-text-secondary);
  184. font-size: clamp(.9rem, 1.4vw, 1.0625rem);
  185. line-height: 1.5;
  186. }
  187. /* CTA / 状态角标:胶囊形 */
  188. .home-card__cta,
  189. .home-card__badge {
  190. display: inline-flex;
  191. align-items: center;
  192. gap: .5rem;
  193. border-radius: 999px;
  194. padding: .55rem 1.25rem;
  195. font-size: 14px;
  196. line-height: 1;
  197. }
  198. .home-card__cta {
  199. border: 1px solid var(--home-text);
  200. color: var(--home-text);
  201. text-decoration: none;
  202. transition: background-color .2s ease, color .2s ease;
  203. }
  204. .home-card__cta:hover,
  205. .home-card__cta:focus {
  206. background: var(--home-text);
  207. color: var(--home-cta-hover-text);
  208. text-decoration: none;
  209. }
  210. .home-card__cta:focus-visible {
  211. outline: 2px solid var(--home-text);
  212. outline-offset: 3px;
  213. }
  214. .home-card__badge {
  215. border: 1px solid var(--home-border-muted);
  216. color: var(--home-text-muted);
  217. }
  218. /* 6. 响应式:768–991px(高度不变,文字块收窄) */
  219. @media (max-width: 991.98px) {
  220. .home-card__text {
  221. max-width: 20rem;
  222. }
  223. }
  224. /* 7. 响应式:<768px(全部左对齐,换移动端高度,蒙版加深) */
  225. @media (max-width: 767.98px) {
  226. .home-hero {
  227. height: 40vh;
  228. min-height: 240px;
  229. }
  230. .home-card {
  231. height: 52vh;
  232. min-height: 300px;
  233. max-height: none;
  234. }
  235. #card-development {
  236. height: 46vh;
  237. min-height: 260px;
  238. }
  239. .home-card__body {
  240. justify-content: flex-start;
  241. padding: 2rem 1.5rem;
  242. }
  243. .home-card--start .home-card__body,
  244. .home-card--end .home-card__body {
  245. padding-left: 1.5rem;
  246. padding-right: 1.5rem;
  247. }
  248. .home-card__text {
  249. max-width: 100%;
  250. text-align: left;
  251. }
  252. .home-card__media {
  253. object-position: 75% center;
  254. }
  255. .home-card__veil {
  256. background: color-mix(in srgb, var(--card-tint) 20%, rgba(246, 241, 231, .88));
  257. }
  258. .home-card__eyebrow {
  259. font-size: 11px;
  260. }
  261. }
  262. /* 8. 尊重减少动态偏好:关闭过渡 */
  263. @media (prefers-reduced-motion: reduce) {
  264. .home-card__cta {
  265. transition: none;
  266. }
  267. }