.weeklyRecapModal{position:fixed;inset:0;z-index:1400;display:none}.weeklyRecapModal.on{display:block}.weeklyRecapBackdrop{position:absolute;inset:0;background:rgba(48,40,36,.42);backdrop-filter:blur(3px)}.weeklyRecapBook{position:absolute;left:50%;bottom:0;width:min(620px,100%);min-height:min(720px,92dvh);max-height:94dvh;display:flex;flex-direction:column;padding:15px 24px 22px;overflow:hidden;transform:translateX(-50%);border:1px solid #ead9cd;border-radius:30px 30px 0 0;background:#fffaf5;box-shadow:0 -20px 60px rgba(63,46,36,.2)}.weeklyRecapHandle{width:54px;height:5px;margin:0 auto 18px;border-radius:9px;background:#dfd2c9}.weeklyRecapBook header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.weeklyRecapBook header span,.weeklyRecapPageKicker{color:#a95745;font-size:10px;font-weight:800;letter-spacing:.17em}.weeklyRecapBook header h2{margin:5px 0 0;color:#302824;font-family:Georgia,'Times New Roman',serif;font-size:28px;font-weight:500}.weeklyRecapBook header button{width:45px;height:45px;border:1px solid #ead9cd;border-radius:50%;background:#fffdf9;color:#a95745;font-size:25px}.weeklyRecapPage{flex:1;display:flex;min-height:0;padding:22px 0 16px}.weeklyRecapSheet{width:100%;min-height:470px;padding:30px;border:1px solid #ead9cd;border-radius:24px;background:linear-gradient(145deg,#fffefa,#fcf1e8);box-shadow:0 12px 28px rgba(94,68,51,.08)}.weeklyRecapSheet h3{margin:10px 0 7px;color:#302824;font-family:Georgia,'Times New Roman',serif;font-size:29px;font-weight:500;line-height:1.12}.weeklyRecapSheet>p{margin:0;color:#746b64;font-size:15px;line-height:1.5}.weeklyRecapStats{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:34px}.weeklyRecapStats>div{min-height:190px;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;border:1px solid #ecdcd1;border-radius:20px;background:rgba(255,255,255,.68);text-align:center}.weeklyRecapLineIcon{width:46px;height:46px;display:grid;place-items:center;margin-bottom:10px;border:1px solid #dfb7aa;border-radius:50%;color:#b96350;font-size:21px}.weeklyRecapStats strong{color:#302824;font-family:Georgia,'Times New Roman',serif;font-size:43px;font-weight:500}.weeklyRecapStats b{color:#6f665f;font-size:13px}.weeklyRecapPlace{text-align:center}.weeklyRecapFlag,.weeklyRecapIllustration{width:88px;height:88px;display:grid;place-items:center;margin:44px auto 18px;border:1px solid #ead9cd;border-radius:50%;background:#fff;color:#a95745;font-size:39px}.weeklyRecapPeople{display:flex;align-items:center;justify-content:center;gap:5px;margin-top:18px}.weeklyRecapPeople>span:not(.weeklyRecapAvatar){margin-right:7px;color:#746b64;font-size:12px}.weeklyRecapAvatar{width:31px;height:31px;display:inline-block;border:2px solid #fff;border-radius:50%;background-color:#f6e9df;background-size:cover!important;background-position:center!important}.weeklyRecapAvatar.avatarPhoto{background-image:var(--photo)!important}.weeklyRecapPlace blockquote{margin:26px auto 0;padding:17px 20px;border-left:3px solid #d58a76;border-radius:0 14px 14px 0;background:rgba(255,255,255,.58);color:#6f665f;text-align:left}.weeklyRecapArtworkGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:25px}.weeklyRecapArtworkGrid>div{min-width:0}.weeklyRecapArtworkGrid>div>span:first-child{display:block;aspect-ratio:1/1;overflow:hidden;border-radius:15px;background:#f1dfd3}.weeklyRecapArtworkGrid img{width:100%;height:100%;display:block;object-fit:cover}.weeklyRecapArtworkGrid>div>b{display:block;margin-top:8px;overflow:hidden;color:#302824;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.weeklyRecapArtworkGrid .weeklyRecapPeople{justify-content:flex-start;margin-top:5px}.weeklyRecapArtworkGrid .weeklyRecapPeople>span:not(.weeklyRecapAvatar){display:none}.weeklyRecapArtworkGrid .weeklyRecapAvatar{width:25px;height:25px;margin-right:-8px}.weeklyRecapEmpty{text-align:center}.weeklyRecapEmpty h3{margin-top:12px}.weeklyRecapLoading{width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;color:#746b64}.weeklyRecapLoading i{width:38px;height:38px;border:3px solid #ead9cd;border-top-color:#b96350;border-radius:50%;animation:weeklyRecapSpin .8s linear infinite}.weeklyRecapError button{padding:11px 18px;border:0;border-radius:12px;background:#b96350;color:#fff;font-weight:700}.weeklyRecapBook footer{display:flex;align-items:center;justify-content:center;gap:20px}.weeklyRecapBook footer button{width:45px;height:45px;border:1px solid #ead9cd;border-radius:50%;background:#fffdf9;color:#a95745;font-size:27px}.weeklyRecapBook footer button:disabled{opacity:.25}.weeklyRecapDots{display:flex;gap:7px}.weeklyRecapDots i{width:7px;height:7px;border-radius:50%;background:#ddcfc5}.weeklyRecapDots i.on{width:21px;border-radius:9px;background:#b96350}.weeklyRecapOpen{overflow:hidden}@keyframes weeklyRecapSpin{to{transform:rotate(360deg)}}
.weeklyRecapLineIcon svg{width:25px;height:25px;fill:none;stroke:currentColor;stroke-width:1.65;stroke-linecap:round;stroke-linejoin:round}.weeklyRecapPreviewArt{width:100%;height:100%;display:block}
.weeklyRecapWins,.weeklyRecapPlace{position:relative;isolation:isolate}.weeklyRecapWins>.weeklyRecapPageKicker,.weeklyRecapWins>h3,.weeklyRecapWins>p,.weeklyRecapArt>.weeklyRecapPageKicker,.weeklyRecapArt>h3{text-align:center}.weeklyRecapCelebration,.weeklyRecapRoute{position:absolute;z-index:-1;pointer-events:none}.weeklyRecapCelebration{inset:7px 6px auto;width:calc(100% - 12px);height:105px;fill:#dca693;stroke:#dca693;stroke-width:2;opacity:.5}.weeklyRecapRoute{left:6%;top:65px;width:88%;height:230px;fill:none;stroke:#d9ad99;stroke-width:2;stroke-linecap:round;stroke-dasharray:5 8;opacity:.42}.weeklyRecapRoute circle{fill:#f7dfd2;stroke:#bd745f;stroke-width:2;stroke-dasharray:none}.weeklyRecapRoute .weeklyRecapPlane{fill:#c68169;stroke:none;stroke-dasharray:none}.weeklyRecapWins>.weeklyRecapStats{position:relative;z-index:1}.weeklyRecapPlace>.weeklyRecapFlag{position:relative;z-index:1;box-shadow:0 8px 24px rgba(113,76,55,.08)}
@media(max-width:560px){.weeklyRecapBook{min-height:89dvh;padding:12px 16px 16px;border-radius:26px 26px 0 0}.weeklyRecapHandle{margin-bottom:13px}.weeklyRecapBook header h2{font-size:24px}.weeklyRecapPage{padding:16px 0 12px}.weeklyRecapSheet{min-height:0;padding:24px 18px}.weeklyRecapSheet h3{font-size:25px}.weeklyRecapStats{gap:10px;margin-top:26px}.weeklyRecapStats>div{min-height:165px;padding:14px}.weeklyRecapArtworkGrid{gap:8px}.weeklyRecapArtworkGrid>div>b{font-size:11px}}

/* Mobile/PWA quality safeguards: keep recap content reachable above the keyboard and home indicator. */
.weeklyRecapPage{overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;touch-action:pan-y}
.weeklyRecapBook{padding-bottom:calc(22px + env(safe-area-inset-bottom))}
@media(max-width:560px){.weeklyRecapBook{padding-bottom:calc(16px + env(safe-area-inset-bottom))}}
@media(prefers-reduced-motion:reduce){.weeklyRecapLoading i{animation:none}.weeklyRecapPage,.weeklyRecapBook{scroll-behavior:auto}}
.weeklyRecapMemory>.weeklyRecapPageKicker,.weeklyRecapMemory>h3{text-align:center}.weeklyRecapMemoryGrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:25px}.weeklyRecapMemoryGrid>div{min-width:0}.weeklyRecapMemoryGrid>div>span:first-child{display:block;aspect-ratio:4/5;overflow:hidden;border:1px solid #ead9cd;border-radius:17px;background:linear-gradient(145deg,#f7e8dd,#edcdbc)}.weeklyRecapMemoryGrid img{width:100%;height:100%;display:block;object-fit:cover}.weeklyRecapMemoryGrid svg{width:100%;height:100%;display:block}.weeklyRecapMemoryGrid b,.weeklyRecapMemoryGrid small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.weeklyRecapMemoryGrid b{margin-top:8px;color:#302824;font-size:13px}.weeklyRecapMemoryGrid small{margin-top:3px;color:#8b7d74;font-size:11px}.weeklyRecapMemoryGrid>div:only-child{grid-column:1/-1;width:min(230px,72%);justify-self:center}@media(max-width:560px){.weeklyRecapMemoryGrid{gap:8px}.weeklyRecapMemoryGrid b{font-size:11px}.weeklyRecapMemoryGrid small{font-size:9px}}
