@import "https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,600;1,600;1,700&display=swap";:root{color:#f7f5f0;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;--serif:"Playfair Display", Georgia, serif;background:#242522;font-family:DM Sans,system-ui,sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;background:#242522;min-width:320px;min-height:100%}body{min-width:320px;min-height:100vh;margin:0}button,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer}#root{min-height:100vh}.app{min-height:100vh;overflow:hidden}.game-screen{background:#1f1f1d;width:min(100%,720px);min-height:100vh;margin:0 auto;padding:0;animation:.7s both screen-in;overflow:hidden;box-shadow:0 0 70px #00000085}.game-header{background:linear-gradient(#292927,#242422);border-bottom:1px solid #151513;align-items:center;gap:15px;height:76px;padding:0 18px;display:flex}.brand{color:#f7f7f5;letter-spacing:-1px;align-items:center;gap:3px;font-size:22px;font-weight:700;text-decoration:none;display:flex}.brand small{color:#aaa;letter-spacing:-.4px;font-size:12px}.brand-logo{width:38px;height:38px;display:block}.game-controls button{color:#b8b8b5;background:0 0;border:0;padding:0}.special-date{white-space:nowrap;background:linear-gradient(135deg,#81b64c14,#ffffff08);border:1px solid #81b64c73;border-radius:5px;align-items:center;gap:8px;min-height:31px;margin-left:auto;padding:6px 10px;display:flex;box-shadow:inset 0 1px #ffffff0d,0 0 18px #81b64c0d}.special-date strong{color:#9bcc6c;letter-spacing:.11em;font-size:11px;font-weight:800}.special-date i{color:#d8e9c9;font-size:6px;font-style:normal}.special-date span{color:#e7e7e3;letter-spacing:.14em;font-size:10px;font-weight:700}.match-shell{background:#222220;width:100%;position:relative}.board-wrap{place-items:center;width:100%;display:grid}.chessboard{aspect-ratio:1;grid-template-rows:repeat(8,1fr);grid-template-columns:repeat(8,1fr);width:100%;display:grid;position:relative;overflow:hidden;box-shadow:0 3px 12px #0006}.square{border:0;border-radius:0;outline:0;place-items:center;width:100%;min-width:0;height:100%;min-height:0;padding:0;display:grid;position:relative}.square.light{color:#769656;background:#eeeed2}.square.dark{color:#eeeed2;background:#769656}.square.selected,.square.last-move{background:#f5f66b}.square.target:after{content:"";aspect-ratio:1;background:#29311e57;border-radius:50%;width:30%;animation:1s infinite target-pulse;position:absolute}.square.in-check{background:radial-gradient(circle,#f04b45 0 18%,#d1443f 19% 40%,#769656 70%)}.piece{z-index:2;object-fit:contain;-webkit-user-select:none;user-select:none;pointer-events:none;width:88%;height:88%;transition:transform .18s;position:relative}.square:hover .piece{transform:translateY(-2px)}.rank-label,.file-label{z-index:3;pointer-events:none;font-size:clamp(9px,1vw,13px);font-weight:700;position:absolute}.rank-label{top:4px;left:5px}.file-label{bottom:3px;right:5px}.mate-banner{z-index:9;color:#fff;letter-spacing:.15em;background:#262724;border-radius:5px;padding:13px 30px;font-size:clamp(16px,2vw,23px);font-weight:800;animation:.45s cubic-bezier(.2,1.6,.4,1) both mate-pop;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 10px 32px #00000059}.player-row{color:#dededb;background:linear-gradient(90deg,#292927,#252523);border-block:1px solid #191917;align-items:center;gap:15px;min-height:106px;padding:15px 18px;display:flex}.player-data{flex-direction:column;gap:8px;display:flex}.player-row strong{font-size:18px;font-weight:600}.player-row strong small{color:#999;font-size:14px;font-weight:500}.player-row span{color:#aaa;font-size:14px}.player-row span b{color:#81b64c;font-size:20px}.flag{font-size:17px;font-style:normal}.player-row .captured{color:#111;letter-spacing:-4px;text-shadow:0 1px #777;font-family:Georgia,serif;font-size:21px}.captured em{color:#bbb;letter-spacing:0;margin-left:10px;font-family:DM Sans,sans-serif;font-size:16px;font-style:normal;font-weight:700}.player-row time{color:#1f201e;text-align:center;background:#f4f4f1;border-radius:4px;min-width:108px;margin-left:auto;padding:10px 12px;font-size:26px;font-weight:700;box-shadow:0 2px #c8c8c5}.you time{color:#8f918e;box-shadow:none;background:#181816}.avatar{border-radius:4px;flex:none;place-items:center;width:58px;height:58px;font-size:34px;display:grid}.profile-avatar{background:#151513;overflow:hidden}.profile-avatar img{object-fit:cover;width:100%;height:100%;display:block}.game-controls{background:#242422;border-top:1px solid #151513;grid-template-columns:repeat(5,1fr);align-items:center;height:80px;display:grid}.game-controls button{height:100%;font-size:36px}.game-controls button.active{color:#fff;background:linear-gradient(#8bc654,#659b39);border-radius:5px;width:78px;height:58px;margin:auto;box-shadow:0 3px #416923,0 6px 13px #0005}.game-notice{z-index:12;color:#f4f4f1;background:#151513eb;border:1px solid #81b64c;border-radius:6px;padding:12px 19px;font-size:14px;font-weight:700;animation:.25s both notice-pop;position:absolute;bottom:92px;left:50%;transform:translate(-50%);box-shadow:0 10px 28px #0009}.eyebrow{color:#95c566;letter-spacing:.2em;font-size:11px;font-weight:700}.celebration-screen{color:#193c3b;text-align:center;background:radial-gradient(circle at 50% 20%,#ffffffe6,#0000 28%),linear-gradient(145deg,#f7fbec,#e8f7ee 50%,#e4f2fb);min-height:100vh;padding:80px 20px 120px;animation:.9s both celebration-in;position:relative;overflow:hidden}.party-glow{filter:blur(80px);opacity:.28;border-radius:50%;width:420px;height:420px;position:absolute}.glow-one{background:#91c8ed;top:14%;left:-180px}.glow-two{background:#82c99a;top:45%;right:-170px}.confetti{z-index:8;pointer-events:none;position:fixed;inset:0;overflow:hidden}.confetti i{border-radius:2px;width:8px;height:15px;animation:linear infinite confetti-fall;position:absolute;top:-20px}.celebration-copy,.cake-scene,.note-card{z-index:2;position:relative}.celebration-copy{animation:.8s .25s both rise-in}.celebration-copy .eyebrow{color:#39847d}.celebration-copy h1{font-family:var(--serif);letter-spacing:-.05em;margin:18px 0 12px;font-size:clamp(44px,7vw,82px);font-weight:600;line-height:.97}.celebration-copy h1 em{color:#3f89a9;font-weight:600}.celebration-copy p{color:#627d77;margin:0;font-size:15px}.spring-leaves{z-index:1;pointer-events:none;position:absolute;inset:0;overflow:hidden}.spring-leaves i{color:#4c9a68;text-shadow:0 0 14px #79b98b80;font-size:16px;font-style:normal;animation:8s ease-in-out infinite leaf-float;position:absolute;top:-40px}.spring-leaves i:first-child{animation-delay:0s;left:5%}.spring-leaves i:nth-child(2){animation-delay:-5s;left:17%}.spring-leaves i:nth-child(3){animation-delay:-2s;left:29%}.spring-leaves i:nth-child(4){animation-delay:-7s;left:41%}.spring-leaves i:nth-child(5){animation-delay:-3s;left:55%}.spring-leaves i:nth-child(6){animation-delay:-6s;left:68%}.spring-leaves i:nth-child(7){animation-delay:-1s;left:79%}.spring-leaves i:nth-child(8){animation-delay:-4s;left:89%}.spring-leaves i:nth-child(9){animation-delay:-8s;left:96%}.cake-scene{width:min(520px,92vw);height:440px;margin:22px auto 0}.cake{z-index:3;width:310px;height:285px;animation:1.15s cubic-bezier(.16,1,.3,1) .6s both cake-rise;position:absolute;bottom:45px;left:50%;transform:translate(-50%)}.candles{z-index:6;justify-content:space-between;width:205px;display:flex;position:absolute;top:0;left:50%;transform:translate(-50%)}.candle{background:repeating-linear-gradient(-45deg,#4e9dcc 0 6px,#f5f3cf 6px 12px);border-radius:3px 3px 0 0;width:9px;height:53px;position:relative;box-shadow:0 3px 6px #80453726}.candle:nth-child(2),.candle:nth-child(4){height:43px;margin-top:10px}.flame{transform-origin:bottom;background:linear-gradient(#fff6a4,#ffad42 65%,#ed6d35);border-radius:70% 35% 65%;width:13px;height:22px;animation:.85s ease-in-out infinite alternate flame-dance;position:absolute;bottom:calc(100% + 4px);left:50%;transform:translate(-50%)rotate(4deg);box-shadow:0 0 18px 5px #ffb74680}.cake-top{z-index:5;background:#fffdeb;border-radius:50%;width:260px;height:61px;position:absolute;top:46px;left:25px;box-shadow:inset 0 -12px #c9e4d2,0 7px 12px #315e551f}.berry{color:#3e8ab4;text-shadow:0 3px #276181;font-size:34px;position:absolute}.b1{top:-6px;left:53px}.b2{top:10px;left:113px}.b3{top:-3px;right:47px}.cake-layer{width:260px;position:absolute;left:25px;box-shadow:inset -14px 0 18px #7f413612}.top-layer{z-index:4;background:linear-gradient(90deg,#9fd3cc,#bce4d2);height:76px;top:75px}.bottom-layer{z-index:3;color:#397264;height:92px;font-family:var(--serif);letter-spacing:.15em;background:linear-gradient(90deg,#e1f1dc,#f4f2d8);border-radius:0 0 16px 16px;place-items:center;font-size:14px;font-weight:700;display:grid;top:148px}.icing-drip{background:#fffdeb;border-radius:0 0 16px 16px;width:22px;height:34px;position:absolute;top:-1px}.d1{height:27px;left:30px}.d2{height:42px;left:112px}.d3{height:31px;right:40px}.cake-plate{z-index:2;background:#8fbfc7;border-radius:50%;width:310px;height:20px;position:absolute;bottom:38px;left:0;box-shadow:0 15px 24px #315e552b}.gift-box{z-index:1;background:linear-gradient(90deg,#0000 44%,#4f9d83 44% 56%,#0000 56%),#8fc6d7;border-radius:5px 5px 14px 14px;width:370px;height:142px;animation:.7s .1s both box-arrive;position:absolute;bottom:9px;left:50%;transform:translate(-50%);box-shadow:0 24px 45px #753d3a33}.gift-lid{z-index:7;background:linear-gradient(90deg,#0000 44%,#438c73 44% 56%,#0000 56%),#9dd2df;border-radius:8px;width:400px;height:45px;animation:1.2s cubic-bezier(.5,-.2,.2,1.2) .45s both lid-open;position:absolute;bottom:132px;left:50%;box-shadow:0 8px 14px #6435301f}.lid-bow{border:12px solid #438c73;width:68px;height:48px;position:absolute;bottom:38px}.bow-left{border-radius:70% 20% 55% 45%;right:50%;transform:rotate(17deg)}.bow-right{border-radius:20% 70% 45% 55%;left:50%;transform:rotate(-17deg)}.note-card{-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);text-align:left;background:#ffffffa3;border:1px solid #457d7329;border-radius:20px;width:min(580px,92vw);margin:-3px auto 0;padding:27px;animation:.8s 1.5s both rise-in;box-shadow:0 24px 65px #315e551c}.note-heading{align-items:center;gap:13px;display:flex}.note-heading>span{color:#fff;background:#438c73;border-radius:50%;place-items:center;width:42px;height:42px;display:grid}.note-heading h2{font-family:var(--serif);margin:0 0 3px;font-size:25px}.note-heading p{color:#6f8881;margin:0;font-size:12px}.note-card textarea{resize:vertical;color:#244d47;background:#fffcf7e0;border:1px solid #cfe2da;border-radius:11px;outline:none;width:100%;height:110px;margin-top:18px;padding:15px;line-height:1.55;transition:border .2s,box-shadow .2s}.note-card textarea:focus{border-color:#5b9ba0;box-shadow:0 0 0 4px #5b9ba01c}.note-card textarea::placeholder{color:#8da69f}.note-actions{justify-content:space-between;align-items:center;margin-top:12px;display:flex}.note-actions>span{color:#b29b94;font-size:11px}.continue-button{color:#fff;background:#3e8da0;border:0;border-radius:999px;padding:11px 18px;font-size:13px;font-weight:700;transition:transform .2s,background .2s;box-shadow:0 8px 20px #34798b33}.continue-button:hover:not(:disabled){background:#347b74;transform:translateY(-2px)}.continue-button:disabled{cursor:not-allowed;opacity:.4}.continue-button span{margin-left:7px}.skip-button{color:#718c84;text-align:center;text-underline-offset:4px;background:0 0;border:0;width:100%;margin-top:18px;padding:4px;font-size:11px;-webkit-text-decoration:underline #b8d0c8;text-decoration:underline #b8d0c8}.wish-screen{color:#f4f9ef;text-align:center;background:radial-gradient(circle at 50% 33%,#3e8da052,#0000 25%),linear-gradient(145deg,#071b25,#0c2730 50%,#0b1d21);place-items:center;min-height:100vh;padding:80px 20px;animation:1.1s both wish-reveal;display:grid;position:relative;overflow:hidden}.aurora{filter:blur(110px);opacity:.16;background:conic-gradient(from 90deg,#3c9aae,#4e8ac7,#71b67b,#d4b35c);border-radius:50%;width:70vw;height:60vw;animation:14s linear infinite aurora-spin;position:absolute}.star-field{position:absolute;inset:0}.star-field i{background:#e6f6ff;border-radius:50%;width:3px;height:3px;animation:2s ease-in-out infinite alternate star-twinkle;position:absolute;box-shadow:0 0 10px #b7e6ff}.wish-leaves{z-index:1;opacity:.55}.wish-leaves i{color:#76c989;text-shadow:0 0 14px #4dbb7980}.wish-content{z-index:2;width:min(700px,94vw);animation:1s .35s both rise-in;position:relative}.spring-emblem{filter:drop-shadow(0 18px 24px #07151d8f);width:180px;height:170px;margin:8px auto -2px;position:relative}.spring-emblem svg{width:100%;height:100%;overflow:visible}.gem{transform-box:fill-box;transform-origin:50%;animation:4.6s ease-in-out infinite gem-float}.gem-sheen{opacity:.42;animation:3.8s ease-in-out infinite gem-sheen}.gem-stars path{transform-box:fill-box;transform-origin:50%;animation:2.4s ease-in-out infinite gem-star}.gem-stars path:nth-child(2){animation-delay:-.8s}.gem-stars path:nth-child(3){animation-delay:-1.6s}.vine{fill:none;stroke:#62b77d;stroke-width:2px;stroke-linecap:round;stroke-dasharray:4 7;opacity:.7;animation:2.2s both vine-draw}.emblem-leaf{background:linear-gradient(135deg,#a5dda3,#3b9563);border-radius:100% 0;width:18px;height:9px;animation:3.2s ease-in-out infinite leaf-breathe;position:absolute;box-shadow:0 0 14px #5ab97952}.leaf-one{top:91px;left:26px;transform:rotate(31deg)}.leaf-two{animation-delay:-.9s;top:115px;left:45px;transform:rotate(65deg)scale(.75)}.leaf-three{animation-delay:-1.7s;top:91px;right:26px;transform:rotate(59deg)scaleX(-1)}.leaf-four{animation-delay:-2.4s;top:115px;right:45px;transform:rotate(25deg)scale(-.75,.75)}.wish-content h1{font-family:var(--serif);letter-spacing:-.055em;margin:0 0 30px;font-size:clamp(48px,8vw,86px);font-weight:600;line-height:.97}.wish-content h1 em{color:#77cbe0;font-weight:600}.letter{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#dff8f511;border:1px solid #91d2df38;border-radius:3px 28px;padding:clamp(29px,5vw,49px);position:relative;box-shadow:0 30px 80px #0000003b}.letter:before,.letter:after{content:"◆";color:#80c99c;font-size:11px;position:absolute}.letter:before{top:14px;left:17px}.letter:after{bottom:14px;right:17px}.quote-mark{color:#83d1e52e;font-family:var(--serif);font-size:76px;line-height:1;position:absolute;top:13px;left:28px}.letter>p{color:#e4f0e9;font-family:var(--serif);margin:0;font-size:clamp(17px,2.3vw,22px);line-height:1.75;position:relative}.signature{color:#a99ca8;letter-spacing:.06em;flex-direction:column;gap:4px;margin-top:28px;font-size:11px;display:flex}.signature strong{color:#83cad9;font-family:var(--serif);font-size:18px;font-style:italic;font-weight:600}.guest-wish{background:#4c9a6812;border:1px solid #7fc8d938;border-radius:14px;margin:22px auto 0;padding:16px 22px}.guest-wish span{color:#8fd6a2;letter-spacing:.18em;text-transform:uppercase;font-size:9px;font-weight:700}.guest-wish p{color:#d9eee1;font-family:var(--serif);margin:7px 0 0;font-size:17px;font-style:italic}@keyframes screen-in{0%{opacity:0}}@keyframes target-pulse{50%{opacity:.65;transform:scale(1.25)}}@keyframes mate-pop{0%{opacity:0;transform:translate(-50%,-50%)scale(.6)}}@keyframes notice-pop{0%{opacity:0;transform:translate(-50%,8px)scale(.94)}}@keyframes celebration-in{0%{opacity:0;filter:brightness(1.8)}}@keyframes rise-in{0%{opacity:0;transform:translateY(25px)}}@keyframes confetti-fall{to{transform:translateY(110vh)rotate(760deg)}}@keyframes cake-rise{0%{opacity:0;transform:translate(-50%,130px)scale(.72)}}@keyframes box-arrive{0%{opacity:0;transform:translate(-50%,70px)scale(.85)}}@keyframes lid-open{0%{opacity:0;transform:translate(-50%,80px)}35%{opacity:1;transform:translate(-50%)}to{transform:translate(-58%,-210px)rotate(-13deg)}}@keyframes flame-dance{to{transform:translate(-50%)rotate(-6deg)scaleY(.88)}}@keyframes wish-reveal{0%{opacity:0;transform:scale(1.05)}}@keyframes aurora-spin{to{transform:rotate(360deg)}}@keyframes star-twinkle{to{opacity:.2;transform:scale(.55)}}@keyframes gem-float{0%,to{transform:translateY(2px)rotate(-1deg)}50%{transform:translateY(-7px)rotate(1.5deg)}}@keyframes gem-sheen{0%,25%{opacity:.08;transform:translate(-8px)}55%{opacity:.58}80%,to{opacity:.12;transform:translate(8px)}}@keyframes gem-star{0%,to{opacity:.2;transform:scale(.45)rotate(0)}45%{opacity:1;transform:scale(1.15)rotate(45deg)}}@keyframes vine-draw{0%{stroke-dashoffset:70px;opacity:0}}@keyframes leaf-breathe{50%{filter:brightness(1.28);translate:0 -3px}}@keyframes leaf-float{0%{opacity:0;transform:translateY(-5vh)rotate(0)scaleX(.55)}15%{opacity:.8}50%{transform:translate(34px,50vh)rotate(180deg)scaleX(.55)}to{opacity:0;transform:translate(-18px,108vh)rotate(420deg)scaleX(.55)}}@media (width<=900px){.game-screen{width:100%}}@media (width<=520px){.game-header{gap:9px;height:64px;padding:0 12px}.brand{font-size:18px}.brand-logo{width:32px;height:32px}.special-date{gap:5px;min-height:27px;padding:5px 7px}.special-date strong{font-size:8px}.special-date span{font-size:7px}.player-row{gap:12px;min-height:86px;padding:12px 15px}.avatar{width:48px;height:48px;font-size:28px}.player-row strong{font-size:15px}.player-row strong small,.player-row span{font-size:12px}.player-row .captured{font-size:17px}.captured em{margin-left:7px;font-size:13px}.player-row time{min-width:82px;padding:8px 7px;font-size:17px}.game-controls{height:68px}.game-controls button{font-size:30px}.game-controls button.active{width:65px;height:51px}.celebration-screen{padding-top:64px}.cake-scene{transform-origin:top;height:395px;margin-top:7px;margin-bottom:-55px;transform:scale(.86)}.note-card{padding:21px}.note-actions{align-items:flex-end}.wish-screen{padding:55px 16px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
