base.css 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /* html-ppt :: base.css — reset + shared tokens + layout primitives */
  2. /* Default tokens. Themes in assets/themes/*.css override the :root block. */
  3. :root {
  4. --bg: #ffffff;
  5. --bg-soft: #f7f7f8;
  6. --surface: #ffffff;
  7. --surface-2: #f2f2f4;
  8. --border: rgba(0,0,0,.08);
  9. --border-strong: rgba(0,0,0,.16);
  10. --text-1: #111216;
  11. --text-2: #55596a;
  12. --text-3: #8a8f9e;
  13. --accent: #3b6cff;
  14. --accent-2: #7a5cff;
  15. --accent-3: #ff5c8a;
  16. --good: #1aaf6c;
  17. --warn: #f5a524;
  18. --bad: #e0445a;
  19. --grad: linear-gradient(135deg,#3b6cff,#7a5cff 55%,#ff5c8a);
  20. --grad-soft: linear-gradient(135deg,#eef2ff,#f5ecff 55%,#ffeef5);
  21. --radius: 18px;
  22. --radius-sm: 12px;
  23. --radius-lg: 26px;
  24. --shadow: 0 10px 30px rgba(18,24,40,.08), 0 2px 6px rgba(18,24,40,.04);
  25. --shadow-lg: 0 24px 60px rgba(18,24,40,.14), 0 6px 16px rgba(18,24,40,.06);
  26. --font-sans: 'Inter','Noto Sans SC',-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;
  27. --font-serif: 'Playfair Display','Noto Serif SC',Georgia,serif;
  28. --font-mono: 'JetBrains Mono','IBM Plex Mono',SFMono-Regular,Menlo,monospace;
  29. --font-display: var(--font-sans);
  30. --letter-tight: -.03em;
  31. --letter-normal: -.01em;
  32. --ease: cubic-bezier(.4,0,.2,1);
  33. }
  34. *,*::before,*::after{box-sizing:border-box}
  35. html,body{margin:0;padding:0;background:var(--bg);color:var(--text-1);
  36. font-family:var(--font-sans);font-weight:400;line-height:1.6;
  37. -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  38. letter-spacing:var(--letter-normal)}
  39. img,svg,video{max-width:100%;display:block}
  40. a{color:var(--accent);text-decoration:none}
  41. a:hover{text-decoration:underline}
  42. code,kbd,pre,samp{font-family:var(--font-mono)}
  43. /* ================= SLIDE SYSTEM ================= */
  44. .deck{position:relative;width:100vw;height:100vh;overflow:hidden;background:var(--bg)}
  45. .slide{
  46. position:absolute;inset:0;
  47. display:flex;flex-direction:column;justify-content:center;
  48. padding:72px 96px;
  49. box-sizing:border-box;
  50. opacity:0;pointer-events:none;
  51. transition:opacity .5s var(--ease), transform .5s var(--ease);
  52. transform:translateX(30px);
  53. overflow:hidden;
  54. }
  55. .slide.is-active{opacity:1;pointer-events:auto;transform:translateX(0);z-index:2}
  56. .slide.is-prev{transform:translateX(-30px)}
  57. /* single-page standalone (used when a layout file is opened directly) */
  58. body.single .slide{position:relative;width:100vw;height:100vh;opacity:1;transform:none;pointer-events:auto}
  59. /* ================= TYPOGRAPHY ================= */
  60. .eyebrow{font-size:13px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--text-3)}
  61. .kicker{font-size:14px;font-weight:600;color:var(--accent);letter-spacing:.08em;text-transform:uppercase}
  62. h1.title,.h1{font-family:var(--font-display);font-size:72px;line-height:1.05;font-weight:800;letter-spacing:var(--letter-tight);margin:0 0 18px;color:var(--text-1)}
  63. h2.title,.h2{font-family:var(--font-display);font-size:54px;line-height:1.1;font-weight:700;letter-spacing:var(--letter-tight);margin:0 0 14px}
  64. h3,.h3{font-size:32px;line-height:1.2;font-weight:600;letter-spacing:var(--letter-normal);margin:0 0 10px}
  65. h4,.h4{font-size:22px;line-height:1.3;font-weight:600;margin:0 0 8px}
  66. .lede{font-size:22px;line-height:1.55;color:var(--text-2);font-weight:300;max-width:62ch}
  67. .dim{color:var(--text-2)}
  68. .dim2{color:var(--text-3)}
  69. .mono{font-family:var(--font-mono)}
  70. .serif{font-family:var(--font-serif)}
  71. .gradient-text{background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
  72. /* ================= LAYOUT PRIMITIVES ================= */
  73. .stack>*+*{margin-top:14px}
  74. .row{display:flex;gap:24px;align-items:center}
  75. .row.wrap{flex-wrap:wrap}
  76. .grid{display:grid;gap:24px}
  77. .g2{grid-template-columns:repeat(2,1fr)}
  78. .g3{grid-template-columns:repeat(3,1fr)}
  79. .g4{grid-template-columns:repeat(4,1fr)}
  80. .center{display:flex;align-items:center;justify-content:center;text-align:center}
  81. .fill{flex:1}
  82. .sp-t{padding-top:24px}.sp-b{padding-bottom:24px}
  83. .mt-s{margin-top:8px}.mt-m{margin-top:18px}.mt-l{margin-top:32px}
  84. .mb-s{margin-bottom:8px}.mb-m{margin-bottom:18px}.mb-l{margin-bottom:32px}
  85. /* ================= CARDS ================= */
  86. .card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  87. padding:26px 28px;box-shadow:var(--shadow);position:relative;overflow:hidden}
  88. .card-soft{background:var(--surface-2);border:1px solid var(--border)}
  89. .card-outline{background:transparent;border:1.5px solid var(--border-strong);box-shadow:none}
  90. .card-accent{background:var(--surface);border-top:3px solid var(--accent)}
  91. .card-hover{transition:transform .3s var(--ease),box-shadow .3s var(--ease)}
  92. .card-hover:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}
  93. .pill{display:inline-block;padding:4px 12px;border-radius:999px;font-size:12px;font-weight:500;
  94. background:var(--surface-2);color:var(--text-2);border:1px solid var(--border)}
  95. .pill-accent{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);border-color:color-mix(in srgb,var(--accent) 28%,transparent)}
  96. /* ================= BARS / DIVIDERS ================= */
  97. .divider{height:1px;background:var(--border);width:100%}
  98. .divider-accent{height:3px;width:72px;background:var(--accent);border-radius:2px}
  99. /* ================= CHROME (header/footer/progress) ================= */
  100. .deck-header{position:absolute;top:24px;left:40px;right:40px;display:flex;align-items:center;justify-content:space-between;
  101. font-size:12px;color:var(--text-3);letter-spacing:.12em;text-transform:uppercase;z-index:10;pointer-events:none}
  102. .deck-footer{position:absolute;bottom:24px;left:40px;right:40px;display:flex;align-items:center;justify-content:space-between;
  103. font-size:12px;color:var(--text-3);z-index:10;pointer-events:none}
  104. .slide-number::before{content:attr(data-current)}
  105. .slide-number::after{content:" / " attr(data-total)}
  106. .progress-bar{position:fixed;left:0;right:0;bottom:0;height:3px;background:transparent;z-index:20}
  107. .progress-bar > span{display:block;height:100%;width:0;background:var(--accent);transition:width .3s var(--ease)}
  108. /* ================= PRESENTER / OVERVIEW ================= */
  109. .notes{display:none!important}
  110. .notes-overlay{position:fixed;inset:auto 0 0 0;max-height:42vh;background:rgba(20,22,30,.95);color:#e8ebf4;
  111. padding:20px 32px;font-size:16px;line-height:1.6;border-top:1px solid rgba(255,255,255,.1);transform:translateY(100%);
  112. transition:transform .3s var(--ease);z-index:40;overflow:auto;font-family:var(--font-sans)}
  113. .notes-overlay.open{transform:translateY(0)}
  114. .overview{position:fixed;inset:0;background:rgba(10,12,18,.92);backdrop-filter:blur(12px);z-index:50;
  115. display:none;padding:40px;overflow:auto}
  116. .overview.open{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;align-content:start}
  117. .overview .thumb{background:var(--surface);border:1px solid var(--border);border-radius:12px;
  118. aspect-ratio:16/9;overflow:hidden;cursor:pointer;position:relative;color:var(--text-1);padding:16px;
  119. font-size:11px;transition:transform .2s var(--ease)}
  120. .overview .thumb:hover{transform:scale(1.04)}
  121. .overview .thumb .n{position:absolute;top:8px;left:10px;font-weight:700;font-size:14px;color:var(--text-3)}
  122. .overview .thumb .t{position:absolute;bottom:10px;left:14px;right:14px;font-weight:600;color:var(--text-1)}
  123. /* ================= PRESENTER VIEW ================= */
  124. /* Presenter view opens in a separate popup window (S key).
  125. * All presenter styles are self-contained in the popup HTML generated by runtime.js.
  126. * The audience window (this file) is NOT affected — it stays as normal deck view.
  127. * Only the .notes class below is needed to hide speaker notes from audience. */
  128. /* ================= UTILITY ================= */
  129. .hidden{display:none!important}
  130. .nowrap{white-space:nowrap}
  131. .tr{text-align:right}.tc{text-align:center}.tl{text-align:left}
  132. .uppercase{text-transform:uppercase;letter-spacing:.12em}
  133. /* ================= PRINT ================= */
  134. @media print{
  135. .slide{position:relative;opacity:1!important;transform:none!important;page-break-after:always;height:100vh}
  136. .deck-header,.deck-footer,.progress-bar,.notes-overlay,.overview{display:none!important}
  137. }