responsive.css 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. /* ==========================================================================
  2. 响应式:1280 桌面可读 → 1024 不乱 → 768 平板 → 手机可用
  3. ========================================================================== */
  4. /* 窄桌面 / 平板横屏:指标两列,双栏变单栏 */
  5. @media (max-width:1180px){
  6. :root{--sidebar:200px}
  7. .metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  8. .pair{grid-template-columns:1fr}
  9. .detail-head{grid-template-columns:1fr}
  10. .integrity{min-width:0}
  11. .search input{width:220px}
  12. }
  13. /* 平板 / 1024:侧栏收起成顶部抽屉,内容全宽 */
  14. @media (max-width:1024px){
  15. .app{grid-template-columns:1fr}
  16. .side{
  17. position:fixed;z-index:50;left:0;top:0;width:260px;height:100vh;
  18. transform:translateX(-102%);transition:transform .28s cubic-bezier(.2,.8,.2,1);
  19. background:rgba(252,253,255,.86);
  20. }
  21. .side.open{transform:none;box-shadow:24px 0 60px -30px rgba(16,24,40,.35)}
  22. .scrim{display:block;position:fixed;inset:0;background:rgba(28,36,50,.16);opacity:0;pointer-events:none;transition:opacity .25s;z-index:49}
  23. .scrim.open{opacity:1;pointer-events:auto}
  24. .menu-btn{display:grid}
  25. .filters{top:calc(var(--topbar) - 1px)}
  26. }
  27. /* 768 */
  28. @media (max-width:768px){
  29. .topbar{min-height:56px;padding:0 16px;gap:10px}
  30. .filters{top:55px}
  31. .search input{width:100%;min-width:0}
  32. .topbar .tools{flex:1;min-width:0}
  33. .search{flex:1;min-width:0}
  34. .view{padding:18px 16px 64px}
  35. .view-head h1{font-size:20px}
  36. .metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  37. .metric{padding:14px 16px 12px}
  38. .metric .v{font-size:28px}
  39. .insight{grid-template-columns:1fr;padding:18px 16px}
  40. .insight .strength{align-items:flex-start;flex-direction:row;gap:12px;padding-top:8px}
  41. .detail-head{padding:20px 18px}
  42. .kv-grid{grid-template-columns:1fr}
  43. /* 表格转行卡:用 data-l 标签代替表头 */
  44. .tbl thead{display:none}
  45. .tbl tbody td{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:6px 14px;border-bottom:0}
  46. .tbl tbody td::before{content:attr(data-l);font-size:11.5px;color:var(--ink-4)}
  47. .tbl tbody td.r,.tbl td.num-cell{text-align:right}
  48. .tbl tbody tr{display:block;padding:8px 0;border-bottom:1px solid var(--rule)}
  49. .tbl tbody td.cell-title{display:block;padding-top:10px}
  50. .tbl tbody td.cell-title::before{display:none}
  51. .tbl tbody td.cell-person{justify-content:flex-start}
  52. .tbl tbody td.cell-person::before{display:none}
  53. .tbl .sub{max-width:60vw}
  54. .drawer{top:auto;left:0;right:0;bottom:0;width:100%;height:min(88vh,820px);border-radius:20px 20px 0 0;transform:translateY(calc(100% + 24px))}
  55. .drawer.open{transform:none}
  56. .view-head .aside{margin-left:0;width:100%}
  57. }
  58. /* 小手机 */
  59. @media (max-width:420px){
  60. .metrics{grid-template-columns:1fr 1fr}
  61. .metric .v{font-size:25px}
  62. .crumb .sep,.crumb a{display:none}
  63. .filters{gap:8px 12px}
  64. }
  65. /* 减少动态 */
  66. @media (prefers-reduced-motion:reduce){
  67. *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
  68. }
  69. /* 不支持 backdrop-filter:提高不透明度保底,保证文字可读 */
  70. @supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  71. .side,.topbar{background:rgba(252,253,255,.94)}
  72. .panel,.metric,.flat{background:rgba(255,255,255,.92)}
  73. .drawer{background:#fcfdff}
  74. }
  75. /* ==========================================================================
  76. v3 · 报告页与新版块的响应式(1280 / 1024 / 768)
  77. 思路:宽度不够时"收栏不收字"——把目录/侧栏折成横向条,正文保持可读行宽;
  78. 表格保留横向滚动,绝不把一张交叉表压成看不清的窄列。
  79. ========================================================================== */
  80. @media (max-width:1280px){
  81. :root{--sidebar:212px}
  82. .r-cover{grid-template-columns:minmax(0,1fr) 240px}
  83. .r-structure-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  84. }
  85. @media (max-width:1180px){
  86. .r-cover{grid-template-columns:1fr}
  87. .r-cover-side{max-width:420px}
  88. .r-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
  89. .r-miles{grid-template-columns:1fr}
  90. .r-structure-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  91. .r-index{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
  92. }
  93. @media (max-width:1024px){
  94. .r-toc{top:calc(var(--topbar) - 1px)}
  95. .r-toc-s{display:none}
  96. body.in-report .search input{width:180px}
  97. .r-chapter{scroll-margin-top:112px}
  98. }
  99. @media (max-width:768px){
  100. .r-topbar{margin-top:-4px}
  101. .r-topbar-note{display:none}
  102. .r-toc{border-radius:14px;padding:6px;margin-bottom:12px}
  103. .r-toc a{height:28px;padding:0 9px;font-size:12px}
  104. .r-paper{border-radius:20px;padding:18px 16px 28px}
  105. body.in-report .search input{width:100%}
  106. .r-cover{padding-bottom:22px}
  107. .r-cover h1{font-size:23px}
  108. .r-meta{grid-template-columns:1fr 1fr;gap:10px 14px}
  109. .r-pipe{padding:12px}
  110. .r-pipe-step b{font-size:18px}
  111. .r-pipe-rate{margin-left:0}
  112. .r-kpis{grid-template-columns:1fr 1fr;gap:10px}
  113. .r-kpi{padding:13px 14px}
  114. .r-kpi-v span{font-size:26px}
  115. .r-structure-grid{grid-template-columns:1fr}
  116. .r-ch-head h2{font-size:21px}
  117. .r-ch-lead{font-size:14.5px;line-height:1.8}
  118. .r-two{grid-template-columns:1fr}
  119. .r-funnel li{grid-template-columns:44px minmax(0,1fr);gap:10px}
  120. .r-f-v{grid-column:2;text-align:left;margin-top:-4px}
  121. .r-f-v b{font-size:22px}
  122. .r-ladder li{grid-template-columns:28px minmax(0,1fr);gap:4px 10px}
  123. .r-l-note{grid-column:2}
  124. .r-stmt{padding:18px}
  125. .r-index{grid-template-columns:1fr}
  126. .r-finding{padding:16px 16px 14px 20px}
  127. .r-exec p{font-size:14px}
  128. /* 交叉表在窄屏保留横向滚动 + 首列吸附,比压扁可读 */
  129. .r-tbl{min-width:640px}
  130. .r-matrix td:first-child{position:sticky;left:0;background:rgba(252,253,255,.96);z-index:1}
  131. }
  132. @media (max-width:420px){
  133. .r-kpis{grid-template-columns:1fr}
  134. .r-meta{grid-template-columns:1fr}
  135. .r-toc a .r-toc-no{display:none}
  136. }
  137. /* 不支持 backdrop-filter:报告纸与浮层回到高亮度实底,保证可读 */
  138. @supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  139. .r-paper{background:rgba(255,255,255,.94)}
  140. .r-toc{background:rgba(255,255,255,.9)}
  141. .r-kpi,.r-finding,.r-ch-card,.r-index-card,.r-cover-side{background:rgba(255,255,255,.9)}
  142. }