From 5e609d5ee4fb09d67dfbd2beaadaa6de5ad99b68 Mon Sep 17 00:00:00 2001 From: lq Date: Wed, 12 Aug 2026 13:53:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8D=87=E7=BA=A7=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E8=A7=86=E8=A7=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/themes/SectionHeading.vue | 225 ++++ .../components/themes/covers/CoverClassic.vue | 39 + .../themes/covers/CoverGuofengNew.vue | 143 ++ .../themes/covers/CoverGuofengOld.vue | 197 +++ .../themes/covers/CoverMagazine.vue | 161 +++ .../themes/covers/CoverNewspaper.vue | 161 +++ .../components/themes/covers/CoverPixel.vue | 152 +++ .../src/components/themes/covers/CoverZen.vue | 102 ++ vite-tailwindcss/src/styles/theme-packs.css | 1167 +++++++++++++++++ 9 files changed, 2347 insertions(+) create mode 100644 vite-tailwindcss/src/components/themes/SectionHeading.vue create mode 100644 vite-tailwindcss/src/components/themes/covers/CoverClassic.vue create mode 100644 vite-tailwindcss/src/components/themes/covers/CoverGuofengNew.vue create mode 100644 vite-tailwindcss/src/components/themes/covers/CoverGuofengOld.vue create mode 100644 vite-tailwindcss/src/components/themes/covers/CoverMagazine.vue create mode 100644 vite-tailwindcss/src/components/themes/covers/CoverNewspaper.vue create mode 100644 vite-tailwindcss/src/components/themes/covers/CoverPixel.vue create mode 100644 vite-tailwindcss/src/components/themes/covers/CoverZen.vue create mode 100644 vite-tailwindcss/src/styles/theme-packs.css diff --git a/vite-tailwindcss/src/components/themes/SectionHeading.vue b/vite-tailwindcss/src/components/themes/SectionHeading.vue new file mode 100644 index 0000000..7bbb0d8 --- /dev/null +++ b/vite-tailwindcss/src/components/themes/SectionHeading.vue @@ -0,0 +1,225 @@ + + + + + diff --git a/vite-tailwindcss/src/components/themes/covers/CoverClassic.vue b/vite-tailwindcss/src/components/themes/covers/CoverClassic.vue new file mode 100644 index 0000000..d65d739 --- /dev/null +++ b/vite-tailwindcss/src/components/themes/covers/CoverClassic.vue @@ -0,0 +1,39 @@ + + + diff --git a/vite-tailwindcss/src/components/themes/covers/CoverGuofengNew.vue b/vite-tailwindcss/src/components/themes/covers/CoverGuofengNew.vue new file mode 100644 index 0000000..18489fb --- /dev/null +++ b/vite-tailwindcss/src/components/themes/covers/CoverGuofengNew.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/vite-tailwindcss/src/components/themes/covers/CoverGuofengOld.vue b/vite-tailwindcss/src/components/themes/covers/CoverGuofengOld.vue new file mode 100644 index 0000000..6c714cd --- /dev/null +++ b/vite-tailwindcss/src/components/themes/covers/CoverGuofengOld.vue @@ -0,0 +1,197 @@ + + + + + diff --git a/vite-tailwindcss/src/components/themes/covers/CoverMagazine.vue b/vite-tailwindcss/src/components/themes/covers/CoverMagazine.vue new file mode 100644 index 0000000..e703110 --- /dev/null +++ b/vite-tailwindcss/src/components/themes/covers/CoverMagazine.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/vite-tailwindcss/src/components/themes/covers/CoverNewspaper.vue b/vite-tailwindcss/src/components/themes/covers/CoverNewspaper.vue new file mode 100644 index 0000000..59f6682 --- /dev/null +++ b/vite-tailwindcss/src/components/themes/covers/CoverNewspaper.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/vite-tailwindcss/src/components/themes/covers/CoverPixel.vue b/vite-tailwindcss/src/components/themes/covers/CoverPixel.vue new file mode 100644 index 0000000..64abedf --- /dev/null +++ b/vite-tailwindcss/src/components/themes/covers/CoverPixel.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/vite-tailwindcss/src/components/themes/covers/CoverZen.vue b/vite-tailwindcss/src/components/themes/covers/CoverZen.vue new file mode 100644 index 0000000..1050975 --- /dev/null +++ b/vite-tailwindcss/src/components/themes/covers/CoverZen.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/vite-tailwindcss/src/styles/theme-packs.css b/vite-tailwindcss/src/styles/theme-packs.css new file mode 100644 index 0000000..08b4c19 --- /dev/null +++ b/vite-tailwindcss/src/styles/theme-packs.css @@ -0,0 +1,1167 @@ +/* ============================================================ + 风格包 / 完整模板 —— 主题级装饰与字体覆盖 + - 色板变量在 style.css;此处负责「气质」:字体矩阵、纹理、 + 幕布纹样、专属装饰、night 暗色修补、layout 主题页面覆盖 + - 选择器统一以 html[data-theme='x'] 开头(作用于前台整页) + ============================================================ */ + +/* —— 通用:正文字体与页面纹理挂载(仅前台内容根,后台界面只跟随配色) —— */ +.wrapper { + font-family: var(--t-font-body); +} +/* 纹理挂在既有的背景装饰层上(fixed 装饰层,pointer-events 已禁) */ +.bg-glow { + background-image: var(--t-bg-texture); +} + +/* ============================================================ + 字体矩阵:让标题书法体跟随主题气质 + (champagne / french 保持花体默认,不覆盖) + ============================================================ */ +html[data-theme='guofeng-old'] .calligraphy, +html[data-theme='guofeng-old'] .calligraphy-strong, +html[data-theme='guofeng-old'] .gallery-subtitle { + font-family: var(--font-mashan) !important; +} +html[data-theme='guofeng-new'] .calligraphy, +html[data-theme='guofeng-new'] .calligraphy-strong, +html[data-theme='guofeng-new'] .gallery-subtitle { + font-family: var(--font-serif) !important; + font-weight: 600; +} +html[data-theme='modern'] .calligraphy, +html[data-theme='modern'] .calligraphy-strong, +html[data-theme='modern'] .gallery-subtitle { + font-family: var(--font-sans) !important; + font-weight: 500; +} +html[data-theme='forest'] .calligraphy, +html[data-theme='forest'] .calligraphy-strong, +html[data-theme='forest'] .gallery-subtitle { + font-family: var(--font-longcang) !important; +} +html[data-theme='night'] .calligraphy, +html[data-theme='night'] .calligraphy-strong, +html[data-theme='night'] .gallery-subtitle { + font-family: var(--font-display) !important; +} +html[data-theme='magazine'] .calligraphy, +html[data-theme='magazine'] .calligraphy-strong, +html[data-theme='magazine'] .gallery-subtitle { + font-family: var(--font-display) !important; +} +html[data-theme='newspaper'] .calligraphy, +html[data-theme='newspaper'] .calligraphy-strong, +html[data-theme='newspaper'] .gallery-subtitle { + font-family: var(--font-serif) !important; +} +html[data-theme='pixel'] .calligraphy, +html[data-theme='pixel'] .calligraphy-strong, +html[data-theme='pixel'] .gallery-subtitle { + font-family: var(--font-pixel) !important; +} +html[data-theme='zen'] .calligraphy, +html[data-theme='zen'] .calligraphy-strong, +html[data-theme='zen'] .gallery-subtitle { + font-family: var(--font-sans) !important; + font-weight: 300; +} + +/* 造型变量应用:代表性卡片与 CTA */ +.calendar-card, +.gift-panel, +.map-sheet, +.track-pop { + border-radius: var(--t-radius-card, 12px); +} +.rsvp-cta, +.map-cta { + border-radius: var(--t-radius-btn, 999px); +} + +/* ============================================================ + 老中式:幕布回纹描边 + 婚书红金卡 + ============================================================ */ +html[data-theme='guofeng-old'] .curtain-door::after { + border-top: 3px double rgba(var(--c-line-rgb), 0.55); + border-bottom: 3px double rgba(var(--c-line-rgb), 0.55); +} +html[data-theme='guofeng-old'] .door-sheen { + background-image: + repeating-linear-gradient(0deg, rgba(var(--c-line-rgb), 0.12) 0 2px, transparent 2px 14px); +} +html[data-theme='guofeng-old'] .invite-cover { + background: + radial-gradient(ellipse at 50% 14%, rgba(216, 90, 90, 0.28), transparent 48%), + linear-gradient(172deg, #ab3641 0%, #932c37 55%, #7e2530 100%); + border: 2px solid rgba(var(--c-line-rgb), 0.75); + box-shadow: + 0 28px 70px rgba(59, 12, 16, 0.4), + inset 0 0 0 6px rgba(126, 37, 48, 0.9), + inset 0 0 0 7px rgba(var(--c-line-rgb), 0.5); +} +html[data-theme='guofeng-old'] .curtain-veil { + background: + radial-gradient(circle at 50% 18%, rgba(255, 232, 214, 0.4), rgba(240, 200, 180, 0.22) 38%, rgba(94, 26, 30, 0.24) 100%), + linear-gradient(180deg, rgba(249, 239, 230, 0.32), rgba(240, 216, 200, 0.22)); +} +/* 新中式:素纱幕布 + 细线月洞帖 */ +html[data-theme='guofeng-new'] .invite-cover { + background: var(--c-paper); + border: 1px solid rgba(var(--c-primary-rgb), 0.4); + box-shadow: + 0 24px 60px rgba(44, 48, 44, 0.14), + inset 0 0 0 5px var(--c-paper), + inset 0 0 0 6px rgba(var(--c-line-rgb), 0.45); +} + +/* ============================================================ + 法式浪漫:花枝角饰 + 柔圆卡片 + ============================================================ */ +html[data-theme='french'] .cover-filigree { + border-top: 0; + height: 40px; + width: 132px; + background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 132 40'%3E%3Cg fill='none' stroke='%23c78a96' stroke-opacity='.6' stroke-width='1.3' stroke-linecap='round'%3E%3Cpath d='M6 30C36 12 96 12 126 30'/%3E%3Cpath d='M38 22c4-6 10-8 16-6M78 16c6-2 12 0 16 6'/%3E%3C/g%3E%3Cg fill='%23d9aab4' fill-opacity='.75'%3E%3Ccircle cx='66' cy='12' r='3.4'/%3E%3Ccircle cx='60' cy='16' r='2.2'/%3E%3Ccircle cx='72' cy='16' r='2.2'/%3E%3Ccircle cx='24' cy='27' r='2'/%3E%3Ccircle cx='108' cy='27' r='2'/%3E%3C/g%3E%3C/svg%3E") no-repeat center / contain; +} +html[data-theme='french'] .cover-filigree::before, +html[data-theme='french'] .cover-filigree::after { + display: none; +} +html[data-theme='french'] .invite-cover { + border-radius: 22px; +} +html[data-theme='french'] .invite-cover::before { + border-radius: 14px; +} +html[data-theme='french'] .ending-photo, +html[data-theme='french'] .calendar-card { + border-radius: 22px; +} + +/* ============================================================ + 现代简约:去衬饰、细线、紧凑字距 + ============================================================ */ +html[data-theme='modern'] .cover-kicker, +html[data-theme='modern'] .emblem-kicker { + letter-spacing: 0.4em; + font-weight: 600; +} +html[data-theme='modern'] .emblem-seal { + border-radius: 12px; +} +html[data-theme='modern'] .ending-keystone .ek-mark { + display: none; +} + +/* ============================================================ + 森系自然:叶纹纸感(纹理已由 --t-bg-texture 提供) + ============================================================ */ +html[data-theme='forest'] .curtain-veil { + background: + radial-gradient(circle at 50% 18%, rgba(249, 252, 249, 0.78), rgba(216, 232, 216, 0.4) 38%, rgba(52, 82, 58, 0.2) 100%), + linear-gradient(180deg, rgba(243, 248, 242, 0.42), rgba(222, 236, 222, 0.3)); +} +html[data-theme='forest'] .emblem-seal { + border-radius: 999px 999px 999px 4px; +} + +/* ============================================================ + 星空夜色:暗色修补 + 星月装饰 + ============================================================ */ +/* 幕布:白纱换夜纱,门板深蓝 */ +html[data-theme='night'] .curtain-veil { + background: + radial-gradient(circle at 50% 18%, rgba(40, 60, 96, 0.5), rgba(16, 27, 46, 0.42) 42%, rgba(4, 8, 16, 0.5) 100%), + linear-gradient(180deg, rgba(16, 27, 46, 0.4), rgba(10, 19, 34, 0.5)); +} +html[data-theme='night'] .curtain-bg { + filter: blur(18px) brightness(0.4) saturate(0.9); +} +html[data-theme='night'] .invite-cover { + background: + linear-gradient(135deg, rgba(255, 255, 255, 0.06), transparent 30%, rgba(201, 169, 106, 0.08) 100%), + var(--c-paper); + border-color: rgba(var(--c-primary-rgb), 0.4); + box-shadow: 0 28px 70px rgba(0, 0, 0, 0.5), inset 0 0 0 10px rgba(255, 255, 255, 0.04), inset 0 0 0 11px rgba(var(--c-primary-rgb), 0.2); + color: var(--c-ink-soft); +} +html[data-theme='night'] .emblem-inner, +html[data-theme='night'] .emblem-names, +html[data-theme='night'] .emblem-invite-title { + color: var(--c-ink) !important; +} +html[data-theme='night'] .emblem-invite-copy, +html[data-theme='night'] .emblem-date { + color: var(--c-ink-soft) !important; +} +/* 页面暗部件 */ +html[data-theme='night'] .section-dot { + background: rgba(26, 41, 70, 0.75); + border-color: rgba(var(--c-primary-rgb), 0.5); +} +html[data-theme='night'] .bg-glow i { + opacity: 0.3; + filter: blur(52px) hue-rotate(190deg) saturate(0.7); +} +html[data-theme='night'] .formal-copy { + color: var(--c-ink) !important; +} +/* 月牙点缀:尾页 kicker 前 */ +html[data-theme='night'] .ending-kicker span::before { + content: '☾ '; + color: var(--c-primary); +} + +/* ============================================================ + 幕布内容变体(emblem-inner 内,按主题分支渲染) + ============================================================ */ +/* 完整模板:隐藏经典弧线花饰(幕布内容已是各自的专属排版) */ +html[data-theme='guofeng-new'] .cover-filigree, +html[data-theme='guofeng-old'] .cover-filigree, +html[data-theme='magazine'] .cover-filigree, +html[data-theme='newspaper'] .cover-filigree, +html[data-theme='pixel'] .cover-filigree, +html[data-theme='zen'] .cover-filigree { + display: none; +} + +/* ============================================================ + 完整模板:幕布整体形态重构(满屏化) + —— 保留 curtain DOM 骨架(退场动画仍作用于同一批元素), + 卡片撑满全屏后每套做成完全不同的「开场画面」 + ============================================================ */ +html[data-theme='guofeng-new'] .curtain-emblem, +html[data-theme='guofeng-old'] .curtain-emblem, +html[data-theme='magazine'] .curtain-emblem, +html[data-theme='newspaper'] .curtain-emblem, +html[data-theme='pixel'] .curtain-emblem, +html[data-theme='zen'] .curtain-emblem { + padding: 0; +} +html[data-theme='guofeng-new'] .invite-cover, +html[data-theme='guofeng-old'] .invite-cover, +html[data-theme='magazine'] .invite-cover, +html[data-theme='newspaper'] .invite-cover, +html[data-theme='pixel'] .invite-cover, +html[data-theme='zen'] .invite-cover { + width: 100%; + min-height: 100dvh; + max-width: none; + border-radius: 0 !important; + padding: 0; +} +html[data-theme='guofeng-new'] .emblem-inner, +html[data-theme='guofeng-old'] .emblem-inner, +html[data-theme='magazine'] .emblem-inner, +html[data-theme='newspaper'] .emblem-inner, +html[data-theme='pixel'] .emblem-inner, +html[data-theme='zen'] .emblem-inner { + min-height: 100dvh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: max(44px, env(safe-area-inset-top)) 30px max(44px, env(safe-area-inset-bottom)); +} +/* 满屏形态不需要门板与模糊底图(各主题另行指定背景) */ +html[data-theme='guofeng-new'] .curtain-door, +html[data-theme='guofeng-old'] .curtain-door, +html[data-theme='newspaper'] .curtain-door, +html[data-theme='pixel'] .curtain-door, +html[data-theme='zen'] .curtain-door, +html[data-theme='magazine'] .curtain-door, +html[data-theme='guofeng-old'] .curtain-bg, +html[data-theme='newspaper'] .curtain-bg, +html[data-theme='pixel'] .curtain-bg, +html[data-theme='zen'] .curtain-bg { + display: none; +} + +/* —— 老中式:朱红宫门(门钉阵列 + 中缝金线 + 匾额婚书) —— */ +html[data-theme='guofeng-old'] .curtain-veil { + display: none; +} +html[data-theme='guofeng-old'] .invite-cover { + border: none; + box-shadow: none; + background: + /* 左右两列门钉 */ + radial-gradient(circle 5px at 14% 50%, rgba(217, 178, 92, 0.95) 92%, transparent) 0 0 / 100% 92px repeat-y, + radial-gradient(circle 5px at 86% 50%, rgba(217, 178, 92, 0.95) 92%, transparent) 0 46px / 100% 92px repeat-y, + /* 中缝金线 */ + linear-gradient(90deg, transparent 49.7%, rgba(var(--c-line-rgb), 0.5) 50%, transparent 50.3%), + radial-gradient(ellipse at 50% 10%, rgba(216, 90, 90, 0.32), transparent 50%), + linear-gradient(174deg, #ab3641 0%, #932c37 52%, #7e2530 100%); +} +/* 匾额:婚书内容嵌一块金边红匾 */ +html[data-theme='guofeng-old'] .emblem-inner { + max-width: 330px; + margin: 0 auto; + border: 2px solid rgba(var(--c-line-rgb), 0.8); + outline: 1px solid rgba(var(--c-line-rgb), 0.4); + outline-offset: 5px; + background: + radial-gradient(ellipse at 50% 8%, rgba(216, 90, 90, 0.3), transparent 55%), + linear-gradient(176deg, #a83440, #8c2833); + box-shadow: 0 22px 60px rgba(50, 8, 12, 0.55); + min-height: 0; + padding: 34px 26px; +} + +/* —— 新中式:月洞门(纸墙挖圆洞,透出真实照片) —— */ +html[data-theme='guofeng-new'] .curtain-bg { + filter: blur(0) brightness(0.94) saturate(1.02); + transform: scale(1.04); +} +html[data-theme='guofeng-new'] .curtain-veil { + background: var(--c-bg); + -webkit-mask: radial-gradient(circle min(34vw, 150px) at 50% 36%, transparent 0 98.5%, #000 100%); + mask: radial-gradient(circle min(34vw, 150px) at 50% 36%, transparent 0 98.5%, #000 100%); +} +/* 月洞门描边环(veil 被挖洞,环画在 emblem 层伪元素上) */ +html[data-theme='guofeng-new'] .curtain-emblem::before { + content: ''; + position: absolute; + left: 50%; + top: 36%; + width: min(68vw, 300px); + aspect-ratio: 1; + transform: translate(-50%, -50%); + border-radius: 50%; + border: 1px solid rgba(var(--c-primary-rgb), 0.55); + box-shadow: + inset 0 0 0 4px var(--c-bg), + inset 0 0 0 5px rgba(var(--c-line-rgb), 0.55); + pointer-events: none; + z-index: 1; +} +html[data-theme='guofeng-new'] .invite-cover { + background: transparent; + border: none; + box-shadow: none; +} +/* 内容让位圆窗:排到下半屏 */ +html[data-theme='guofeng-new'] .emblem-inner { + justify-content: flex-end; + padding-bottom: max(64px, env(safe-area-inset-bottom)); +} + +/* —— 杂志:全幅清晰大片 + 压字 —— */ +html[data-theme='magazine'] .curtain-bg { + filter: brightness(0.88) saturate(1.05); + transform: scale(1.03); + inset: 0; +} +html[data-theme='magazine'] .curtain-veil { + background: linear-gradient(180deg, rgba(10, 8, 6, 0.42), rgba(10, 8, 6, 0) 30%, rgba(10, 8, 6, 0) 52%, rgba(10, 8, 6, 0.56) 100%); +} +html[data-theme='magazine'] .invite-cover { + background: transparent; + border: none; + box-shadow: none; +} +html[data-theme='magazine'] .emblem-inner { + justify-content: space-between; + align-items: flex-start; + text-align: left; +} +html[data-theme='magazine'] .em-mag-logo { + font-size: clamp(56px, 19vw, 84px); + color: #fff; + text-shadow: 0 3px 20px rgba(0, 0, 0, 0.4); +} +html[data-theme='magazine'] .em-mag-issue { + color: rgba(255, 255, 255, 0.9); +} +html[data-theme='magazine'] .em-mag-names { + margin-top: 0; + font-size: clamp(34px, 10vw, 46px); + color: #fff; + text-shadow: 0 3px 18px rgba(0, 0, 0, 0.45); +} +html[data-theme='magazine'] .em-mag-names i { + color: rgba(255, 255, 255, 0.8); +} +html[data-theme='magazine'] .em-mag-bar { + margin: 16px 0; + background: #fff; +} +html[data-theme='magazine'] .em-mag-copy { + color: rgba(255, 255, 255, 0.85); + margin-bottom: 12px; +} +html[data-theme='magazine'] .emblem-hint { + color: rgba(255, 255, 255, 0.85); +} +html[data-theme='magazine'] .emblem-hint .dot { + background: #fff; +} + +/* —— 日报:整版头版纸面 —— */ +html[data-theme='newspaper'] .curtain-veil { + display: none; +} +html[data-theme='newspaper'] .invite-cover { + background: + var(--t-bg-texture), + var(--c-paper); + border: none; + box-shadow: none; +} +html[data-theme='newspaper'] .emblem-inner { + justify-content: flex-start; + padding-top: max(56px, env(safe-area-inset-top)); +} +html[data-theme='newspaper'] .em-news-mast { + font-size: clamp(46px, 14vw, 64px); +} +html[data-theme='newspaper'] .em-news-rule { + width: min(84%, 340px); +} +html[data-theme='newspaper'] .em-news-head { + font-size: clamp(20px, 6vw, 26px); + margin-top: 26px; +} +html[data-theme='newspaper'] .em-news-date { + margin-top: 16px; +} +html[data-theme='newspaper'] .emblem-hint { + margin-top: auto; +} + +/* —— 像素:CRT 开机画面(扫描线 + 棋盘底) —— */ +html[data-theme='pixel'] .invite-cover { + background: + var(--t-bg-texture), + var(--c-bg); + border: none; + box-shadow: none; +} +/* 扫描线用 veil 层承担 */ +html[data-theme='pixel'] .curtain-veil { + background: repeating-linear-gradient(0deg, rgba(51, 38, 31, 0.045) 0 2px, transparent 2px 4px); + z-index: 4; + pointer-events: none; +} +html[data-theme='pixel'] .emblem-inner { + justify-content: space-evenly; +} + +/* —— 极简:纯色静页 —— */ +html[data-theme='zen'] .curtain-veil { + display: none; +} +html[data-theme='zen'] .invite-cover { + background: var(--c-bg); + border: none; + box-shadow: none; +} +/* 新中式帖面 */ +.em-gn-kicker { + display: block; + font-family: var(--font-kai); + font-size: 12px; + letter-spacing: 0.5em; + text-indent: 0.5em; + color: var(--c-muted); +} +.em-gn-line { + display: block; + width: 1px; + height: 34px; + background: rgba(var(--c-line-rgb), 0.65); + margin: 20px auto; +} +.em-gn-names { + display: flex; + align-items: center; + justify-content: center; + gap: 14px; + font-family: var(--font-serif); + font-weight: 600; + font-size: 25px; + letter-spacing: 0.22em; + color: var(--c-ink); +} +.em-gn-seal { + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + font-family: var(--font-kai); + font-size: 15px; + letter-spacing: 0; + color: #fdf6f0; + background: #b5493f; + border-radius: 3px; +} +.em-gn-date { + margin: 16px 0 10px; + font-family: var(--font-serif); + font-size: 11px; + letter-spacing: 0.2em; + color: var(--c-muted); +} +.em-gn-copy { + font-family: var(--font-kai); + font-size: 13px; + letter-spacing: 0.26em; + color: var(--c-ink-soft); + margin-bottom: 30px; +} +/* 老中式婚书面 */ +.em-go-top { + display: block; + font-size: 10px; + letter-spacing: 0.6em; + text-indent: 0.6em; + color: var(--c-line); +} +.em-go-xi { + margin: 14px auto 8px; + width: 76px; + height: 76px; + display: flex; + align-items: center; + justify-content: center; + font-size: 44px; + line-height: 1; + color: var(--c-line); + border: 2px solid rgba(var(--c-line-rgb), 0.75); + border-radius: 50%; + box-shadow: inset 0 0 0 3px rgba(126, 37, 48, 0.8), inset 0 0 0 4px rgba(var(--c-line-rgb), 0.4); +} +.em-go-title { + font-family: var(--font-kai); + font-size: 18px; + letter-spacing: 0.6em; + text-indent: 0.6em; + color: #f7e7c3; + margin-bottom: 14px; +} +.em-go-names { + font-family: var(--font-kai); + font-size: 24px; + letter-spacing: 0.18em; + color: #f7e7c3; +} +.em-go-date { + margin-top: 12px; + font-family: var(--font-kai); + font-size: 12px; + letter-spacing: 0.22em; + color: rgba(247, 231, 195, 0.85); +} +.em-go-lunar { + margin-top: 6px; + margin-bottom: 26px; + font-size: 11px; + opacity: 0.85; +} +/* 老中式婚书面上提示点与文字颜色适配红底 */ +html[data-theme='guofeng-old'] .emblem-hint { + color: rgba(247, 231, 195, 0.8); +} +html[data-theme='guofeng-old'] .emblem-hint .dot { + background: var(--c-line); +} +.emblem-seal-char { + font-size: 20px; + line-height: 1; + font-family: var(--t-font-title); + color: var(--c-primary); +} +/* 杂志刊头 */ +.em-mag-logo { + display: block; + font-family: var(--font-display); + font-weight: 700; + font-size: 54px; + letter-spacing: 0.16em; + color: var(--c-ink); + line-height: 1; +} +.em-mag-issue { + display: block; + margin-top: 10px; + font-family: var(--font-cinzel); + font-size: 10px; + letter-spacing: 0.4em; + color: var(--c-muted); +} +.em-mag-names { + margin-top: 40px; + font-family: var(--font-display); + font-weight: 700; + font-size: 30px; + letter-spacing: 0.05em; + color: var(--c-ink); +} +.em-mag-names i { + font-style: italic; + font-weight: 400; + margin: 0 0.16em; + color: var(--c-muted); +} +.em-mag-bar { + width: 46px; + height: 4px; + background: var(--c-ink); + margin: 22px auto; +} +.em-mag-copy { + font-family: var(--font-cinzel); + font-size: 10px; + letter-spacing: 0.34em; + color: var(--c-muted); + margin-bottom: 34px; +} +/* 号外报头 */ +.em-news-vol { + display: block; + font-family: var(--font-serif); + font-size: 10px; + letter-spacing: 0.4em; + color: var(--c-muted); +} +.em-news-mast { + margin-top: 14px; + font-family: var(--font-serif); + font-weight: 700; + font-size: 44px; + letter-spacing: 0.2em; + text-indent: 0.2em; + color: var(--c-ink); + line-height: 1.2; +} +.em-news-rule { + width: 72%; + height: 5px; + border-top: 1px solid var(--c-ink); + border-bottom: 3px double var(--c-ink); + margin: 14px auto 22px; +} +.em-news-head { + font-family: var(--font-serif); + font-weight: 700; + font-size: 19px; + letter-spacing: 0.12em; + color: var(--c-ink-soft); +} +.em-news-date { + margin: 12px 0 30px; + font-family: var(--font-serif); + font-size: 11px; + letter-spacing: 0.18em; + color: var(--c-muted); +} +/* 像素标题屏 */ +.em-px-top { + display: block; + font-family: var(--font-pixel); + font-size: 12px; + letter-spacing: 0.3em; + color: var(--c-line); +} +.em-px-heart { + margin: 22px auto 18px; + width: 58px; + height: 58px; + display: flex; + align-items: center; + justify-content: center; + font-size: 30px; + color: var(--c-on-primary); + background: var(--c-primary); + border: 3px solid var(--c-ink); + box-shadow: 5px 5px 0 rgba(var(--c-line-rgb), 0.5); + animation: emPxBeat 1.3s steps(2) infinite; +} +@keyframes emPxBeat { + 0%, 100% { transform: scale(1); } + 50% { transform: scale(1.08); } +} +.em-px-names { + font-family: var(--font-pixel); + font-size: 21px; + letter-spacing: 0.08em; + color: var(--c-primary); + text-shadow: 3px 3px 0 rgba(var(--c-line-rgb), 0.4); +} +.em-px-date { + margin: 12px 0 26px; + font-family: var(--font-pixel); + font-size: 11px; + color: var(--c-ink-soft); +} +.em-px-start { + font-family: var(--font-pixel); + font-size: 13px; + letter-spacing: 0.12em; + color: var(--c-ink); + animation: emPxBlink 1.1s steps(1) infinite; + margin-bottom: 8px; +} +@keyframes emPxBlink { + 0%, 60% { opacity: 1; } + 61%, 100% { opacity: 0; } +} +/* 极简轴线 */ +.em-zen-kicker { + display: block; + font-size: 9px; + letter-spacing: 0.6em; + text-indent: 0.6em; + color: var(--c-muted); +} +.em-zen-line { + display: block; + width: 1px; + height: 40px; + background: rgba(var(--c-line-rgb), 0.7); + margin: 22px auto; +} +.em-zen-names { + font-size: 24px; + font-weight: 300; + letter-spacing: 0.3em; + text-indent: 0.3em; + color: var(--c-ink); +} +.em-zen-names em { + font-style: normal; + font-size: 0.6em; + color: var(--c-muted); +} +.em-zen-date { + margin: 18px 0 40px; + font-size: 10px; + letter-spacing: 0.3em; + color: var(--c-muted); +} + +/* ============================================================ + 邀请文案页变体(第二屏) + ============================================================ */ +/* 新中式:竖排 + 窗棂角 + 朱砂印 */ +.formal-gfnew { + position: relative; + padding: 34px 30px; +} +.fgn-corner { + position: absolute; + width: 42px; + height: 42px; + border: 1px solid rgba(var(--c-primary-rgb), 0.5); + pointer-events: none; +} +.fgn-corner::before { + content: ''; + position: absolute; + inset: 5px; + border: 1px solid rgba(var(--c-line-rgb), 0.5); +} +.fgn-corner-tl { top: 0; left: 0; border-right: 0; border-bottom: 0; } +.fgn-corner-tl::before { border-right: 0; border-bottom: 0; } +.fgn-corner-br { bottom: 0; right: 0; border-left: 0; border-top: 0; } +.fgn-corner-br::before { border-left: 0; border-top: 0; } +.fgn-cols { + display: flex; + justify-content: center; + gap: 34px; + height: 21rem; +} +.fgn-main { + font-family: var(--font-serif); + font-weight: 600; + font-size: 19px; + letter-spacing: 0.3em; + line-height: 1.9; + color: var(--c-ink); +} +.fgn-main-2 { + margin-top: 44px; + color: var(--c-ink-soft); + font-size: 16px; +} +.fgn-side { + font-family: var(--font-kai); + font-size: 12px; + letter-spacing: 0.4em; + color: var(--c-muted); + margin-top: 84px; +} +.fgn-seal { + position: absolute; + right: 16px; + bottom: 18px; + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + font-family: var(--font-kai); + font-size: 15px; + color: #fdf6f0; + background: #b5493f; + border-radius: 3px; + opacity: 0.92; +} +/* 老中式:红底金框婚书卷 */ +.formal-gfold { + width: 100%; + max-width: 330px; +} +.fgo-scroll { + position: relative; + padding: 26px 22px 24px; + text-align: center; + background: + radial-gradient(ellipse at 50% 10%, rgba(216, 90, 90, 0.26), transparent 50%), + linear-gradient(174deg, #ab3641, #8c2833); + border: 2px solid rgba(var(--c-line-rgb), 0.8); + box-shadow: + 0 18px 44px rgba(70, 16, 22, 0.3), + inset 0 0 0 5px rgba(126, 37, 48, 0.9), + inset 0 0 0 6px rgba(var(--c-line-rgb), 0.45); +} +.fgo-head { + display: block; + font-family: var(--font-kai); + font-size: 15px; + letter-spacing: 0.5em; + text-indent: 0.5em; + color: var(--c-line); + margin-bottom: 20px; +} +.fgo-cols { + display: flex; + justify-content: center; + gap: 30px; + height: 19rem; +} +.fgo-main { + font-family: var(--font-kai); + font-size: 18px; + letter-spacing: 0.28em; + line-height: 1.9; + color: #f7e7c3; +} +.fgo-main-2 { + margin-top: 40px; + font-size: 15px; + color: rgba(247, 231, 195, 0.82); +} +.fgo-foot { + display: block; + margin-top: 18px; + font-family: var(--font-kai); + font-size: 11px; + letter-spacing: 0.3em; + color: rgba(var(--c-line-rgb), 0.9); +} +/* 杂志 pull-quote */ +.formal-mag { + position: relative; + max-width: 320px; + text-align: left; + padding: 0 8px; +} +.fm-quote { + position: absolute; + top: -58px; + left: -8px; + font-family: var(--font-display); + font-size: 120px; + line-height: 1; + color: rgba(var(--c-primary-rgb), 0.14); + pointer-events: none; +} +.fm-text { + margin: 0 0 18px; + font-family: var(--font-serif); + font-size: 19px; + line-height: 2; + letter-spacing: 0.06em; + color: var(--c-ink); + white-space: pre-wrap; +} +.fm-text-2 { + color: var(--c-ink-soft); + font-size: 15px; +} +.fm-foot { + display: flex; + align-items: center; + gap: 10px; + margin-top: 26px; +} +.fm-foot i { + width: 34px; + height: 3px; + background: var(--c-ink); +} +.fm-foot span { + font-family: var(--font-cinzel); + font-size: 10px; + letter-spacing: 0.3em; + color: var(--c-muted); +} +/* 日报结婚启事 */ +.formal-news { + max-width: 320px; + width: 100%; + text-align: center; + border: 1px solid var(--c-ink); + outline: 1px solid var(--c-ink); + outline-offset: 4px; + padding: 26px 22px; + background: var(--c-paper); +} +.fn-title { + font-family: var(--font-serif); + font-weight: 700; + font-size: 24px; + letter-spacing: 0.3em; + color: var(--c-ink); +} +.fn-rule { + width: 56px; + height: 3px; + border-top: 1px solid var(--c-ink); + border-bottom: 1px solid var(--c-ink); + margin: 14px auto 18px; +} +.fn-body { + margin: 0 0 12px; + font-family: var(--font-serif); + font-size: 13px; + line-height: 2.1; + letter-spacing: 0.08em; + text-align: justify; + color: var(--c-ink-soft); + white-space: pre-wrap; +} +.fn-sign { + margin-top: 16px; + font-family: var(--font-serif); + font-size: 12px; + letter-spacing: 0.14em; + color: var(--c-muted); +} +/* 像素对话框 */ +.formal-px { + width: 100%; + max-width: 330px; +} +.fp-box { + position: relative; + border: 3px solid var(--c-ink); + box-shadow: 6px 6px 0 rgba(var(--c-line-rgb), 0.45); + background: var(--c-card); + padding: 24px 18px 30px; +} +.fp-tag { + position: absolute; + top: -12px; + left: 12px; + padding: 3px 10px; + font-family: var(--font-pixel); + font-size: 10px; + letter-spacing: 0.14em; + color: var(--c-on-primary); + background: var(--c-primary); + border: 2px solid var(--c-ink); +} +.fp-line { + margin: 0 0 12px; + font-family: var(--font-pixel); + font-size: 13px; + line-height: 2; + letter-spacing: 0.05em; + color: var(--c-ink); + white-space: pre-wrap; +} +.fp-next { + position: absolute; + right: 12px; + bottom: 8px; + font-size: 12px; + color: var(--c-primary); + animation: emPxBlink 1s steps(1) infinite; +} +/* 极简横排 */ +.formal-zen { + display: flex; + flex-direction: column; + align-items: center; + gap: 26px; + max-width: 300px; + text-align: center; +} +.formal-zen p { + margin: 0; + font-size: 14px; + font-weight: 300; + line-height: 2.3; + letter-spacing: 0.22em; + color: var(--c-ink-soft); + white-space: pre-wrap; +} +.formal-zen i { + width: 1px; + height: 30px; + background: rgba(var(--c-line-rgb), 0.6); +} + +/* ============================================================ + layout 主题:页面级覆盖与收尾落款 + ============================================================ */ +/* 收尾落款 */ +.ending-layout-foot { + margin-top: 26px; + text-align: center; +} +.elf { + font-size: 10px; + letter-spacing: 0.3em; + color: var(--c-muted); +} +.elf-mag { + font-family: var(--font-cinzel); + letter-spacing: 0.44em; +} +.elf-news { + font-family: var(--font-serif); +} +.elf-pixel { + font-family: var(--font-pixel); + color: var(--c-primary); + font-size: 11px; +} +.elf-zen { + font-family: var(--font-display); + font-style: italic; + font-size: 13px; + letter-spacing: 0.2em; +} +.elf-gfnew { + font-family: var(--font-kai); + font-size: 12px; + letter-spacing: 0.32em; + color: var(--c-ink-soft); +} +.elf-gfnew b { + display: inline-flex; + width: 20px; + height: 20px; + align-items: center; + justify-content: center; + margin: 0 6px; + font-size: 11px; + font-weight: 400; + color: #fdf6f0; + background: #b5493f; + border-radius: 2px; + vertical-align: middle; +} +.elf-gfold { + font-family: var(--font-kai); + font-size: 12px; + letter-spacing: 0.26em; + color: var(--c-primary); +} + +/* 杂志:正式页/日程等的衬线气质 + 无框感 */ +html[data-theme='magazine'] .curtain-veil { + background: linear-gradient(180deg, rgba(245, 242, 236, 0.5), rgba(234, 230, 221, 0.42)); +} +html[data-theme='magazine'] .invite-cover { + border-radius: 0; + border-width: 2px; + border-color: var(--c-ink); + box-shadow: 10px 10px 0 rgba(31, 28, 25, 0.12); +} +html[data-theme='magazine'] .invite-cover::before, +html[data-theme='magazine'] .invite-cover::after { + display: none; +} +html[data-theme='magazine'] .ending-photo { + border-radius: 0; +} + +/* 日报:报纸底色 + 直角部件 + 衬线 */ +html[data-theme='newspaper'] .invite-cover { + border-radius: 0; + border: 1px solid var(--c-ink); + box-shadow: 0 0 0 4px var(--c-paper), 0 0 0 5px var(--c-ink), 0 22px 50px rgba(0, 0, 0, 0.18); +} +html[data-theme='newspaper'] .ending-photo { + border-radius: 0; + filter: grayscale(0.3) contrast(1.03); +} +html[data-theme='newspaper'] .schedule-node i { + border-radius: 0; +} + +/* 像素:方角 + 硬阴影(像素字体由 --t-font-body 全局接管) */ +html[data-theme='pixel'] .invite-cover { + border-radius: 0; + border: 3px solid var(--c-ink); + box-shadow: 8px 8px 0 rgba(var(--c-line-rgb), 0.45); +} +html[data-theme='pixel'] .invite-cover::before, +html[data-theme='pixel'] .invite-cover::after { + display: none; +} +html[data-theme='pixel'] .rsvp-cta, +html[data-theme='pixel'] .map-cta, +html[data-theme='pixel'] .calendar-card, +html[data-theme='pixel'] .ending-photo { + border-radius: 0 !important; +} +html[data-theme='pixel'] .rsvp-cta, +html[data-theme='pixel'] .map-cta { + border: 2px solid var(--c-ink); + box-shadow: 4px 4px 0 rgba(var(--c-line-rgb), 0.5); +} +html[data-theme='pixel'] .preview-img, +html[data-theme='pixel'] .ending-photo img { + image-rendering: auto; +} +html[data-theme='pixel'] .schedule-node i { + border-radius: 0; +} +html[data-theme='pixel'] .section-dot { + border-radius: 0; +} + +/* 极简:去圆角、细字、去装饰花字 */ +html[data-theme='zen'] .invite-cover { + border-radius: 0; + border: 1px solid rgba(var(--c-line-rgb), 0.7); + box-shadow: none; + background: var(--c-paper); +} +html[data-theme='zen'] .invite-cover::after { + display: none; +} +html[data-theme='zen'] .emblem-seal { + border-radius: 0; + border-width: 1px; +} +html[data-theme='zen'] .ending-photo { + border-radius: 0; + box-shadow: none; +} +html[data-theme='zen'] .rsvp-cta, +html[data-theme='zen'] .map-cta { + border-radius: 0; + box-shadow: none; +} +html[data-theme='zen'] .rsvp-cta-deco, +html[data-theme='zen'] .ek-mark { + display: none; +}