@font-face { font-family: 'Source Han Sans SC Fami Week Star'; font-style: normal; font-weight: 500; font-display: swap; src: url('./assets/fonts/source-han-sans-sc-medium-latin.woff2') format('woff2'); } * { box-sizing: border-box; -webkit-tap-highlight-color: transparent; } :root { --fami-week-page-width: min(100vw, 430px); } html, body { margin: 0; width: 100%; min-height: 100%; overflow-x: hidden; background: var(--hy-theme-bg, #f7f3ff); color: #fff; font-family: 'Source Han Sans SC Fami Week Star', 'Source Han Sans SC', 'Noto Sans Arabic', Arial, 'Helvetica Neue', Helvetica, sans-serif; } body { background: #032b29; } button { margin: 0; border: 0; padding: 0; color: inherit; font: inherit; background: transparent; cursor: pointer; } button:focus-visible { outline: 6px solid #fff; outline-offset: -10px; } img { display: block; max-width: none; user-select: none; -webkit-user-drag: none; } [hidden] { display: none !important; } .fami-visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; } .fami-week-star { display: flex; justify-content: center; width: 100%; min-height: 100svh; overflow: hidden; background: #032b29; } .fami-stage-wrap { --design-scale: 0.3472222222; position: relative; flex: 0 0 auto; width: var(--fami-week-page-width); height: 921px; overflow: hidden; background: #053633; } .fami-design { position: absolute; isolation: isolate; top: 0; left: 0; width: 1080px; height: 3532px; overflow: hidden; transform: scale(var(--design-scale)); transform-origin: left top; background: #053633; } .fami-hero { position: absolute; z-index: 2; top: 0; left: 0; width: 1080px; height: 1080px; overflow: hidden; background: #053633; } .fami-hero::after { position: absolute; z-index: 1; inset: 0; background: linear-gradient( 180deg, rgba(1, 35, 32, 0.02) 0%, rgba(1, 35, 32, 0.05) 70%, #053633 100% ); content: ''; pointer-events: none; } .fami-hero-background { position: absolute; z-index: 0; top: 0; left: 0; width: 1080px; height: 2402px; object-fit: fill; object-position: center top; filter: saturate(1.08) brightness(1.03); } /* Figma 的 Hero 是压平的大区块,不能作为运行时截图;这里只复用无文字背景,星徽、标题、猫头鹰和日期牌全部独立构建。 */ .fami-hero-star, .fami-hero-star::before, .fami-hero-star::after, .fami-hero-star-core, .fami-hero-star-core::before { position: absolute; display: block; clip-path: polygon( 50% 0, 61.5% 34%, 98% 35%, 68.5% 56.5%, 79.5% 93%, 50% 71.5%, 20.5% 93%, 31.5% 56.5%, 2% 35%, 38.5% 34% ); } .fami-hero-star { z-index: 2; top: 75px; left: 221px; width: 638px; height: 600px; filter: drop-shadow(0 10px 4px rgba(72, 35, 0, 0.82)) drop-shadow(0 0 30px rgba(255, 213, 89, 0.92)); } .fami-hero-star::before { z-index: 0; inset: 0; background: conic-gradient( from -32deg at 50% 48%, #7a3c00, #ffe88d 8%, #e38b09 18%, #fff1a7 29%, #a84d00 43%, #ffd85a 58%, #8b4200 72%, #fff0a0 88%, #7a3c00 ); content: ''; } .fami-hero-star::after { z-index: 1; inset: 28px; background: linear-gradient( 145deg, #fff5a5, #bb6100 35%, #ffdb55 70%, #713100 ); content: ''; } .fami-hero-star-core { z-index: 2; inset: 57px; background: url('./assets/layers/body-watermark.webp') -523px -683px / 1573px 3497px no-repeat; filter: saturate(1.08) contrast(1.05); } .fami-hero-star-core::before { inset: 0; background: linear-gradient( 90deg, transparent 39%, rgba(255, 246, 164, 0.08) 44%, rgba(255, 255, 235, 0.88) 49.5%, #fff 50%, rgba(255, 255, 235, 0.88) 50.5%, rgba(255, 246, 164, 0.08) 56%, transparent 61% ), linear-gradient( 0deg, transparent 39%, rgba(255, 246, 164, 0.08) 44%, rgba(255, 255, 235, 0.88) 49.5%, #fff 50%, rgba(255, 255, 235, 0.88) 50.5%, rgba(255, 246, 164, 0.08) 56%, transparent 61% ), radial-gradient( circle at 50% 50%, #fff 0 1.5%, #fffbd2 2% 4%, rgba(255, 236, 122, 0.95) 5% 8%, rgba(63, 255, 226, 0.48) 9% 21%, transparent 37% ); content: ''; } .fami-title-plaque { position: absolute; z-index: 3; top: 574px; left: 57px; width: 966px; height: 252px; border: 14px solid #e7ac31; border-radius: 114px 114px 72px 72px; background: radial-gradient( circle at 50% 110%, rgba(37, 255, 227, 0.25), transparent 44% ), linear-gradient(180deg, #0a776b 0%, #07594f 45%, #033b36 100%); box-shadow: inset 0 0 0 7px #fff0a4, inset 0 0 0 15px #865206, inset 0 0 42px rgba(0, 255, 220, 0.34), 0 8px 0 #6d3e00, 0 0 40px rgba(255, 202, 73, 0.65); } .fami-title-plaque::before, .fami-title-plaque::after, .fami-title-gem, .fami-date-plaque::after { position: absolute; width: 48px; height: 48px; border: 7px solid #f9cf61; background: linear-gradient(135deg, #64fff1, #00a99a 55%, #006a63); box-shadow: inset 0 0 0 5px #0a6d65, 0 0 18px rgba(67, 255, 231, 0.72); content: ''; transform: rotate(45deg); } .fami-title-plaque::before { top: 86px; left: -32px; } .fami-title-plaque::after { top: 86px; right: -32px; } .fami-title-gem { bottom: -32px; left: calc(50% - 24px); } .fami-wordmark { position: absolute; z-index: 6; top: 618px; left: 115px; width: 850px; height: 152px; margin: 0; color: #ffe08a; font-family: Georgia, 'Times New Roman', serif; font-size: 124px; font-weight: 700; line-height: 152px; text-align: center; text-shadow: 0 4px 0 #7b4300, 0 8px 7px rgba(48, 25, 0, 0.75), 0 0 18px #fff1a4, 0 0 30px #ffbe36; letter-spacing: -3px; white-space: nowrap; -webkit-text-stroke: 2px #fff0ad; } :lang(tr) .fami-wordmark, :lang(es) .fami-wordmark { font-size: 98px; letter-spacing: -2px; } .fami-owl { position: absolute; z-index: 6; top: 705px; left: 125px; width: 286px; height: 286px; filter: drop-shadow(0 12px 10px rgba(0, 0, 0, 0.34)); } .fami-date-plaque { position: absolute; z-index: 5; top: 850px; left: 357px; width: 643px; height: 104px; border: 10px solid #e8af2d; border-radius: 50px; background: radial-gradient( circle at 50% 130%, rgba(68, 255, 228, 0.3), transparent 52% ), linear-gradient(180deg, #0a756a, #04433e); box-shadow: inset 0 0 0 5px #fff0a4, inset 0 0 0 11px #784507, 0 7px 0 #714000, 0 0 24px rgba(255, 206, 76, 0.52); } .fami-date-plaque::after { top: 21px; right: -29px; width: 40px; height: 40px; } .fami-cycle-range { position: absolute; z-index: 7; top: 889px; left: 405px; width: 445px; height: 34px; overflow: visible; color: #dffbff; font-family: 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif; font-size: 30px; font-weight: 500; line-height: 30px; text-align: left; white-space: nowrap; text-shadow: 0 2px 7px rgba(0, 0, 0, 0.5); } .fami-note { position: absolute; z-index: 6; top: 1069px; left: 44px; width: 952px; height: 132px; margin: 0; overflow: hidden; color: #e8fffd; font-size: 36px; font-weight: 500; line-height: 42px; text-align: left; } [dir='rtl'] .fami-note { text-align: right; } .fami-gifts { position: absolute; z-index: 6; top: 1247px; left: 61px; display: grid; grid-template-columns: repeat(3, 257px); column-gap: 93px; width: 957px; height: 258px; } .fami-gifts.has-state { display: flex; align-items: center; justify-content: center; } .fami-current-state, .fami-reward-state { display: flex; align-items: center; justify-content: center; padding: 36px 72px; color: rgba(232, 255, 253, 0.86); font-size: 34px; font-weight: 500; line-height: 46px; text-align: center; background: rgba(10, 65, 62, 0.88); } .fami-current-state { width: 957px; height: 180px; } .fami-gift-card { position: relative; width: 257px; height: 258px; } .fami-gift-frame, .fami-reward-frame { position: absolute; z-index: 2; inset: 0; width: 257px; height: 258px; object-fit: fill; pointer-events: none; } .fami-gift-media, .fami-reward-media { position: absolute; z-index: 3; top: 41px; left: 35px; display: grid; place-items: center; width: 188px; height: 188px; } .fami-gift-media img, .fami-reward-media img { position: relative; z-index: 2; width: 188px; height: 188px; object-fit: contain; } .fami-gift-media img:not([src]), .fami-reward-media img:not([src]) { display: none; } .fami-media-placeholder { position: absolute; z-index: 1; top: 50%; left: 50%; width: 74px; height: 74px; border: 8px solid rgba(255, 224, 117, 0.76); background: linear-gradient(135deg, #62fff0, #038e84); box-shadow: 0 0 24px rgba(82, 255, 233, 0.72); transform: translate(-50%, -50%) rotate(45deg); } .fami-gift-media img[src] + .fami-media-placeholder, .fami-reward-media img[src] + .fami-media-placeholder { display: none; } .fami-tabs { position: absolute; z-index: 8; top: 1557px; left: 21px; display: grid; grid-template-columns: repeat(3, 336px); column-gap: 17px; width: 1042px; height: 151px; } .fami-tab { position: relative; width: 336px; height: 151px; overflow: hidden; color: rgba(255, 255, 255, 0.6); } .fami-tab-skin { position: absolute; z-index: 0; top: 0; left: 0; width: 336px; height: 149px; object-fit: fill; pointer-events: none; } .fami-tab-skin--active { display: none; } .fami-tab.is-active { color: #fff; } .fami-tab.is-active .fami-tab-skin--active { display: block; } .fami-tab.is-active .fami-tab-skin--inactive { display: none; } .fami-tab span { position: absolute; z-index: 2; top: 53px; left: 32px; display: flex; align-items: center; justify-content: center; width: 270px; height: 80px; font-size: 32px; font-weight: 500; line-height: 34px; text-align: center; white-space: normal; text-shadow: 0 2px 6px rgba(0, 0, 0, 0.45); } :lang(tr) .fami-tab span, :lang(es) .fami-tab span { top: 47px; height: 90px; font-size: 28px; line-height: 30px; } .fami-panel { position: absolute; z-index: 5; top: 0; left: 0; width: 1080px; } .fami-history-heading-band { position: absolute; top: 1760px; left: 0; width: 1080px; height: 140px; background: #0a413e; } .fami-history-heading-band h2 { position: absolute; top: 47px; left: 120px; width: 840px; height: 56px; margin: 0; overflow: hidden; color: #56ffdd; font-size: 46px; font-weight: 500; line-height: 46px; text-align: center; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); white-space: nowrap; } .fami-rank-list { position: absolute; left: 0; width: 1080px; } .fami-rank-list--history { top: 1900px; } .fami-rank-list--weekly { top: 1760px; } .fami-rank-row { position: relative; width: 1080px; height: 140px; color: #fff; } .fami-rank-list--history .fami-rank-row:nth-child(odd) { background: rgba(0, 203, 179, 0.2); } .fami-rank-list--history .fami-rank-row:nth-child(even), .fami-rank-list--weekly .fami-rank-row:nth-child(odd) { background: #0a413e; } .fami-rank-list--weekly .fami-rank-row:nth-child(even) { background: rgba(11, 47, 59, 0.2); } .fami-rank-position { position: absolute; top: 0; left: 0; width: 137px; height: 140px; } .fami-rank-medal { position: absolute; top: 39px; left: 45px; width: 69px; height: 61px; object-fit: contain; } .fami-rank-medal:not([src]) { display: none; } .fami-rank-number { position: absolute; top: 49px; left: 69px; min-width: 42px; height: 48px; font-size: 36px; font-weight: 500; line-height: 42px; text-align: left; } .fami-rank-medal[src] + .fami-rank-number { display: none; } .fami-rank-avatar { position: absolute; top: 13px; left: 160px; width: 113px; height: 113px; overflow: hidden; border-radius: 50%; background: linear-gradient(145deg, #0d7b70, #042e2b); box-shadow: inset 0 0 0 3px rgba(126, 255, 235, 0.35); } .fami-rank-avatar img { position: absolute; z-index: 2; inset: 0; width: 113px; height: 113px; object-fit: cover; } .fami-rank-avatar img:not([src]) { display: none; } .fami-avatar-placeholder { position: absolute; z-index: 1; inset: 0; display: grid; place-items: center; color: rgba(232, 255, 253, 0.85); font-size: 42px; font-weight: 500; text-transform: uppercase; } .fami-rank-name, .fami-rank-score { position: absolute; top: 49px; height: 48px; overflow: hidden; color: #fff; font-size: 36px; font-weight: 500; line-height: 42px; white-space: nowrap; text-overflow: ellipsis; } .fami-rank-name { left: 313px; width: 440px; text-align: start; } .fami-rank-score { left: 846px; width: 180px; text-align: left; } .fami-list-state { display: flex; align-items: center; justify-content: center; width: 1080px; height: 280px; padding: 40px 90px; color: rgba(232, 255, 253, 0.82); font-size: 34px; font-weight: 500; line-height: 46px; text-align: center; background: #0a413e; } .fami-panel--rewards { height: 3532px; } .fami-reward-panel-skin { position: absolute; top: 1760px; left: 24px; width: 1033px; height: 1689px; object-fit: fill; pointer-events: none; } .fami-reward-groups { position: absolute; top: 1760px; left: 0; width: 1080px; height: 1689px; } .fami-reward-state { position: absolute; top: 300px; left: 90px; width: 900px; min-height: 200px; } .fami-reward-group { position: absolute; top: 116px; left: 0; width: 1080px; height: 461px; } .fami-reward-group:nth-child(2) { top: 614px; } .fami-reward-group:nth-child(3) { top: 1112px; } .fami-reward-heading { position: absolute; top: 0; left: 225px; width: 632px; height: 98px; } .fami-reward-heading img { position: absolute; inset: 0; width: 632px; height: 98px; object-fit: fill; pointer-events: none; } .fami-reward-heading h2 { position: absolute; top: 43px; left: 120px; width: 392px; height: 45px; margin: 0; color: #dffcff; font-family: 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif; font-size: 40px; font-weight: 500; line-height: 40px; text-align: center; text-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); } .fami-reward-items { position: absolute; top: 135px; left: 134px; display: grid; grid-template-columns: repeat(3, 257px); column-gap: 21px; width: 813px; height: 326px; } .fami-reward-items[data-count='1'] { left: 412px; grid-template-columns: 257px; width: 257px; } .fami-reward-items[data-count='2'] { left: 273px; grid-template-columns: repeat(2, 257px); width: 535px; } .fami-reward-item { position: relative; width: 257px; height: 326px; } .fami-reward-card { position: absolute; top: 0; left: 0; width: 257px; height: 258px; } .fami-reward-glow { position: absolute; z-index: 1; top: 30px; left: 19px; width: 219px; height: 219px; object-fit: contain; opacity: 0.34; pointer-events: none; } .fami-reward-label { position: absolute; top: 290px; left: 3px; width: 251px; height: 45px; overflow: hidden; color: #fff; font-size: 36px; font-weight: 500; line-height: 36px; text-align: center; white-space: nowrap; text-overflow: ellipsis; } .fami-watermark { position: absolute; z-index: 1; top: 987px; left: -65px; width: 1210px; height: 2689px; object-fit: fill; opacity: 0.1; pointer-events: none; } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; } }