:root{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Microsoft Yahei',sans-serif;color:#3e3540;background:#fffbf8;font-synthesis:none}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}.hidden{display:none!important}.accent{color:#ef8c9e}.eyebrow{letter-spacing:.2em;color:#e18f9e;font-size:11px;font-weight:800;margin:0 0 12px}.primary{border:0;background:#ed8fa0;color:white;border-radius:12px;padding:13px 20px;font-weight:700;box-shadow:0 8px 18px #ed8fa033}.primary:hover{background:#e2778b}.ghost{border:1px solid #ecd9d7;background:#fff;color:#a26c76;border-radius:12px;padding:12px 18px;font-weight:700}.ghost:hover{background:#fff3f2}.text-button{border:0;background:none;color:#d98495;font-weight:700;padding:8px}.full{width:100%}#toast{position:fixed;z-index:200;left:50%;bottom:25px;transform:translateX(-50%);background:#493f49;color:#fff;padding:10px 18px;border-radius:12px;opacity:0;pointer-events:none;transition:opacity .2s}#toast.show{opacity:1}
.login-screen{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 15% 20%,#ffe8e4 0,transparent 30%),radial-gradient(circle at 85% 80%,#ffe5ed 0,transparent 30%),#fffaf7}.login-card{background:#fff;max-width:430px;width:100%;border-radius:28px;padding:48px;box-shadow:0 25px 80px #c7979029;text-align:center;border:1px solid #fff0ed}.login-heart{font-size:56px;color:#eb91a1;line-height:1}.login-card h1{font-family:Georgia,serif;font-size:45px;line-height:1.05;margin:9px 0 17px}.login-card h1 em{color:#e8899b;font-weight:400}.login-card p:not(.eyebrow){color:#9b8c92;font-size:14px}.login-card form{text-align:left;margin:30px 0 20px}.login-card small{color:#baadb0}label{display:block;color:#74666d;font-size:13px;font-weight:700;margin-bottom:16px}input,select,textarea{display:block;width:100%;border:1px solid #ebdedc;background:#fffdfa;border-radius:10px;padding:12px 13px;margin-top:7px;color:#3e3540;outline:none}input:focus,select:focus,textarea:focus{border-color:#e991a1;box-shadow:0 0 0 3px #f6d9df66}textarea{resize:vertical}
#app{display:flex;min-height:100vh}.sidebar{width:244px;flex:none;background:#fff;border-right:1px solid #f2e9e6;padding:29px 17px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:#4c3b47;font-family:Georgia,serif;font-size:17px;line-height:1.1;padding:8px 12px 39px}.brand b{color:#e78698;font-weight:400;font-style:italic}.brand-icon{width:35px;height:35px;border-radius:11px;background:#ffeced;color:#e78698;display:grid;place-items:center;font-size:22px}.sidebar nav{display:grid;gap:8px}.sidebar nav button{width:100%;border:0;background:none;text-align:left;color:#8d8089;border-radius:11px;padding:13px 16px;font-weight:700;font-size:16px;display:flex;gap:13px;align-items:center}.sidebar nav button span{font-size:13px}.sidebar nav button.active,.sidebar nav button:hover{background:#fff1f1;color:#db8293}.sidebar-bottom{margin-top:auto;text-align:center;color:#ab9a9d;font-size:12px;line-height:1.7}.tiny-heart{font-size:25px;color:#f2b3be}.sidebar-bottom button{background:none;border:0;color:#c6b9ba;text-decoration:underline}.main{flex:1;min-width:0}.topbar{height:76px;border-bottom:1px solid #f2e9e6;background:#fffdfb;display:flex;align-items:center;justify-content:space-between;padding:0 48px;color:#8d7d84;font-size:13px;font-weight:700}.top-right{display:flex;align-items:center;gap:8px}.online-dot{width:7px;height:7px;border-radius:50%;background:#8fc8a1}.avatar{margin-left:11px;width:34px;height:34px;background:#ffeced;color:#e28497;border-radius:50%;display:grid;place-items:center;font-size:20px}#menu-button{display:none;border:0;background:none;font-size:22px;color:#9a7f87}.page{max-width:1320px;margin:auto;padding:37px 48px 80px}.hero{min-height:335px;border-radius:24px;background:linear-gradient(110deg,#fff0ee,#ffe9e9 53%,#f9d9df);display:flex;align-items:center;justify-content:space-between;padding:40px 52px;overflow:hidden;position:relative}.hero h1{font-size:38px;line-height:1.32;margin:0;color:#483842}.hero h1 em{color:#e48597;font-style:normal}.hero-sub{color:#98818a;font-size:13px;margin:18px 0 27px}.hero-buttons{display:flex;gap:10px}.hero-art{width:300px;height:270px;position:relative;flex:none}.heart-big{position:absolute;right:57px;top:28px;font-size:190px;line-height:1;color:#ef9cad;filter:drop-shadow(12px 16px 0 #e880973b);transform:rotate(-14deg)}.sun{position:absolute;right:4px;top:10px;color:#f2b968;font-size:53px}.sparkle{position:absolute;color:#e999aa}.sparkle.one{font-size:44px;left:0;top:50px}.sparkle.two{font-size:24px;right:10px;bottom:55px}.sparkle.three{font-size:32px;left:55px;bottom:20px}.art-note{position:absolute;right:11px;bottom:8px;background:#fffdf8;padding:12px 18px;transform:rotate(8deg);font:italic 17px Georgia,serif;color:#d58194;box-shadow:0 8px 20px #b8798940}.section-head{display:flex;align-items:end;justify-content:space-between;margin:40px 0 17px}.section-head h2,.page-intro h1{margin:0;font-size:25px}.pill{border-radius:99px;padding:8px 12px;background:#fff0f1;color:#d28b9a;font-size:11px;font-weight:700}.counter-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.counter-card{border:1px solid #f2e8e5;background:#fff;border-radius:17px;padding:24px 25px;display:flex;align-items:baseline;gap:8px;box-shadow:0 6px 20px #c7a7a60a}.counter-card strong{font-size:39px;color:#e58b9d;line-height:1}.counter-card span{font-size:12px;color:#95858c}.counter-card.special{background:#fff2ee;border-color:#fff2ee}.counter-card.special strong{color:#df9885}.home-bottom{display:grid;grid-template-columns:1.7fr 1fr;gap:17px;margin-top:25px}.panel{background:#fff;border:1px solid #f1e8e6;border-radius:17px;padding:21px 23px;min-height:165px}.panel h3{margin:0;font-size:15px}.panel-top{display:flex;justify-content:space-between;align-items:center}.mini-panel{background:#fff9f2}.mini-panel p{font-size:13px;color:#aa9496;line-height:1.7}.upcoming-item{display:flex;justify-content:space-between;padding:11px 0;border-bottom:1px solid #f6eeee;color:#705c67;font-size:13px}.upcoming-item:last-child{border:0}.muted{color:#ad9a9e}.page-intro{display:flex;justify-content:space-between;align-items:center;margin-bottom:26px}.page-intro h1{font-size:32px}.page-intro p:last-child{color:#9d8b92;font-size:13px;margin-bottom:0}.date-grid,.trip-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.date-card,.trip-card{background:#fff;border:1px solid #f2e8e5;border-radius:18px;overflow:hidden;box-shadow:0 7px 23px #b8a5a50d}.date-card{padding:22px}.date-card .icon{font-size:26px}.date-card h3,.trip-card h3{margin:12px 0 5px;font-size:17px}.date-card p,.trip-card p{color:#9e8d94;font-size:12px;line-height:1.6}.date-card .days-away{color:#dc8999;font-weight:800;font-size:12px}.card-actions{display:flex;gap:8px;margin-top:17px}.card-actions button,.detail-actions button{border:0;background:none;color:#b38892;font-size:12px;text-decoration:underline;padding:0}.map-wrap{border:7px solid #fff;border-radius:20px;overflow:hidden;box-shadow:0 7px 24px #b8a5a51c;position:relative}#map{height:420px;background:#dce7df}.map-hint{position:absolute;z-index:500;left:14px;bottom:14px;background:#fff;padding:7px 11px;border-radius:9px;color:#947d86;font-size:11px;box-shadow:0 3px 10px #0002}.photo-pin{width:53px;height:53px;border:3px solid white;border-radius:16px;box-shadow:0 3px 13px #6e495672;background:#f3a2ae;display:grid;place-items:center;font-size:27px;overflow:hidden}.photo-pin img{width:100%;height:100%;object-fit:cover}.leaflet-div-icon{background:transparent;border:0}.trip-cover{height:175px;background:#fce8e9;display:grid;place-items:center;color:#e996a5;font-size:60px;overflow:hidden}.trip-cover img{width:100%;height:100%;object-fit:cover}.trip-content{padding:16px}.trip-content h3{margin:3px 0}.trip-meta{color:#d58a99!important}.empty{grid-column:1/-1;text-align:center;background:#fff;border:1px dashed #eacfd5;border-radius:18px;padding:54px 20px;color:#ab949b}.empty strong{display:block;font-size:28px;color:#e49ba9;margin-bottom:10px}
dialog{border:0;border-radius:22px;padding:28px;width:min(500px,calc(100vw - 28px));max-height:90vh;overflow:auto;box-shadow:0 25px 90px #4d2e4255}dialog::backdrop{background:#3d2c3b8c}.dialog-head{display:flex;justify-content:space-between;align-items:start;margin-bottom:20px}.dialog-head h2{margin:0;font-size:24px}.close{border:0;background:none;color:#ad909a;font-size:27px;line-height:1}.two-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px}.dialog-actions{display:flex;justify-content:end;gap:8px;margin-top:18px}.form-help{font-size:11px;color:#b8a4aa;margin-top:-4px}.detail-meta{color:#dd8c9b;font-size:13px}.detail-story{white-space:pre-wrap;line-height:1.8;color:#6f5b66;font-size:14px}.detail-photos{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:18px 0}.detail-photos img{width:100%;height:105px;object-fit:cover;border-radius:10px}.photo-uploader{background:#fff6f5;border:1px dashed #efbdc5;padding:14px;border-radius:12px}.photo-uploader input{background:#fff}.photo-item{position:relative}.photo-item button{position:absolute;top:5px;right:5px;border:0;background:#fff;border-radius:50%;width:23px;height:23px;color:#d5788b}
#game-catalog h2{font-size:17px;margin:30px 0 14px}.game-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.game-card{border:1px solid #f0e5e3;background:#fff;border-radius:17px;padding:19px;text-align:left;min-height:146px;color:#4d3c46;transition:transform .15s,box-shadow .15s}.game-card:hover{transform:translateY(-3px);box-shadow:0 10px 25px #b8a5a529}.game-card .game-icon{display:block;font-size:26px;margin-bottom:12px}.game-card strong{display:block;font-size:14px}.game-card small{display:block;color:#aa929a;margin-top:7px;line-height:1.4}.game-header{display:flex;align-items:center;justify-content:space-between;gap:16px}.game-header h2{margin:0}.game-header p{font-size:12px;color:#a79298;margin:5px 0}.game-status{margin:20px 0;padding:13px 17px;border-radius:12px;background:#fff0f1;color:#b76d80;font-weight:700;font-size:14px}.board-grid{display:grid;margin:auto;max-width:550px;aspect-ratio:1;background:#e8bb8d;border:9px solid #d7a876;border-radius:10px;padding:5px;box-shadow:0 10px 30px #bd998446}.board-cell{border:1px solid #b88c65;background:transparent;padding:0;display:grid;place-items:center;min-width:0;min-height:0}.board-cell:hover{background:#ffffff42}.stone{width:75%;height:75%;border-radius:50%;background:#32323b;box-shadow:inset -3px -4px 4px #0004,1px 2px 3px #0004}.stone.two{background:#fffef8;box-shadow:inset -3px -4px 4px #aaa9,1px 2px 3px #0004}.board-grid.reversi{background:#6ca781;border-color:#4e8d69}.board-grid.tictactoe{background:#fff1ef;border-color:#edc3c8;max-width:340px}.board-grid.connect4{background:#8399d2;border-color:#6d83bc;max-width:450px;aspect-ratio:7/6}.board-grid.connect4 .stone{background:#f5d870}.board-grid.connect4 .stone.two{background:#e9879c}.board-grid.tictactoe .mark{font-size:45px;color:#db8194}.game-controls{display:flex;justify-content:center;gap:10px;margin:18px}.game-controls button{border:0;border-radius:10px;background:#e998a7;color:#fff;padding:11px 20px;font-weight:700}.game-controls button:disabled{background:#d8c3c8}.tile-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px;max-width:520px;margin:auto}.tile{min-height:70px;border:2px solid #e8c8ce;background:#fff8f7;border-radius:10px;color:#3a3540;font-size:21px;font-weight:700}.tile.hidden-tile{background:#ed9daf;color:white}.tile.matched{opacity:.35;pointer-events:none}.tile.mahjong-tile{font-size:16px;background:#f7f5ea;border-color:#d5cfba}.tile-grid .tile:hover,.mahjong-hand button:hover{transform:translateY(-2px)}.scoreboard{display:flex;justify-content:center;gap:35px;margin:20px;color:#b57585;font-weight:700}.card-table{text-align:center;background:#fff;border:1px solid #f1e1e4;border-radius:18px;padding:25px;max-width:600px;margin:auto}.playing-card{display:inline-grid;place-items:center;width:58px;height:78px;border:1px solid #ddd;border-radius:8px;background:white;margin:4px;font-size:22px;box-shadow:0 3px 8px #0001}.playing-card.red{color:#d67e90}.playing-card.blue{background:#eb9cac;color:#fff}.mahjong-table{max-width:800px;margin:auto}.mahjong-hand{display:flex;flex-wrap:wrap;gap:5px;justify-content:center;margin:10px 0 22px}.mahjong-hand button{font-size:15px;border:1px solid #b8b0a1;background:#faf8ed;border-radius:7px;min-width:39px;height:55px;box-shadow:2px 3px 0 #c3bba7}.discard-area{border:1px solid #f1e5e5;background:#fff;padding:14px;border-radius:12px;margin:14px 0;font-size:13px;color:#917d85}.discard-area span{display:inline-block;margin:3px;padding:4px 6px;border-radius:5px;background:#f8f3ea;color:#554950}.game-help{text-align:center;color:#a08d92;font-size:12px;line-height:1.7;margin:16px}
@media(max-width:1050px){.game-grid{grid-template-columns:repeat(3,1fr)}.date-grid,.trip-grid{grid-template-columns:repeat(2,1fr)}.counter-card{padding:18px}.counter-card strong{font-size:30px}}@media(max-width:800px){.sidebar{position:fixed;z-index:100;left:-250px;transition:left .2s;box-shadow:10px 0 25px #0001}.sidebar.open{left:0}#mobile-shade:not(.hidden){position:fixed;inset:0;background:#0005;z-index:99}#menu-button{display:block}.topbar{padding:0 20px}.page{padding:24px 18px 70px}.hero{padding:30px;min-height:290px}.hero-art{width:160px}.heart-big{font-size:125px;right:0;top:70px}.art-note{display:none}.hero h1{font-size:28px}.home-bottom{grid-template-columns:1fr}}@media(max-width:600px){.hero{display:block}.hero-art{position:absolute;right:-15px;bottom:-55px;opacity:.28}.hero-buttons{position:relative;z-index:2;flex-wrap:wrap}.counter-grid{grid-template-columns:repeat(2,1fr)}.date-grid,.trip-grid,.game-grid{grid-template-columns:1fr 1fr}.page-intro{align-items:start;gap:13px;flex-wrap:wrap}.page-intro h1{font-size:27px}.map-wrap #map{height:360px}.game-card{padding:15px;min-height:135px}.tile{min-height:52px;font-size:17px}.game-header{flex-wrap:wrap}.board-grid{border-width:5px}.section-head{align-items:start;gap:10px}.section-head h2{font-size:21px}}@media(max-width:390px){.date-grid,.trip-grid,.game-grid{grid-template-columns:1fr}.hero h1{font-size:26px}}
.map-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.map-view-buttons{display:flex;padding:4px;gap:3px;background:#fff0f1;border-radius:12px}.map-view-buttons button{border:0;background:none;border-radius:9px;padding:9px 13px;color:#ac7b88;font-weight:700;font-size:12px}.map-view-buttons button.active{background:#fff;color:#d78293;box-shadow:0 2px 8px #d48b9b29}#map-search-form{display:flex;align-items:center;max-width:300px;flex:1}#map-search{margin:0;border-radius:10px 0 0 10px;height:38px;font-size:12px;background:#fff}#map-search-form button{height:38px;white-space:nowrap;border:0;border-radius:0 10px 10px 0;background:#ed8fa0;color:#fff;font-weight:700;padding:0 12px;font-size:12px}.map-wrap{background:#e6f2f4}#map,.leaflet-container{background:#e6f2f4}#map-status{position:absolute;z-index:600;top:14px;left:50%;transform:translateX(-50%);background:#fffdfb;color:#9a7481;font-size:12px;padding:9px 14px;border-radius:10px;box-shadow:0 4px 12px #8ba1a43b;pointer-events:none;white-space:nowrap}.map-credit{color:#b3a4a8;font-size:11px;margin:9px 3px 0}.offline-map-tooltip{background:#fffdfb;border:1px solid #eccfd5;color:#785868;border-radius:8px;box-shadow:0 4px 12px #805c6833;font-weight:700}.offline-map-tooltip:before{border-top-color:#eccfd5}.map-region-label{background:none;border:0;color:#a35d70;font-size:11px;font-weight:800;text-shadow:0 1px #fff,1px 0 #fff,-1px 0 #fff,0 -1px #fff;white-space:nowrap;text-align:center;pointer-events:none}.leaflet-control-attribution{font-size:9px!important;background:#ffffffba!important;color:#9a8790!important}.leaflet-control-attribution a{color:#a67582!important}@media(max-width:600px){.map-toolbar{align-items:stretch;flex-direction:column}#map-search-form{max-width:none;width:100%}.map-hint{font-size:10px;max-width:75%}}

.hero>div:first-child{position:relative;z-index:1;max-width:620px}.hero-photo{position:relative;flex:none;width:225px;height:270px;margin:0 28px 0 18px;padding:9px 9px 35px;background:#fffdfb;border-radius:5px;box-shadow:0 16px 35px #9d617646;transform:rotate(5deg)}.hero-photo::after{content:'♡';position:absolute;right:-23px;top:-27px;color:#ea91a4;font-size:54px;transform:rotate(-14deg)}.hero-photo img{display:block;width:100%;height:100%;object-fit:cover;object-position:center 30%;background:#f8dee3}.hero-photo figcaption{position:absolute;left:0;right:0;bottom:8px;text-align:center;color:#be8190;font:italic 16px Georgia,'PingFang SC',serif}
@media(max-width:1050px){.hero-photo{width:190px;height:240px;margin-right:0}.hero>div:first-child{max-width:500px}}
@media(max-width:600px){.hero{display:flex;flex-direction:column;align-items:stretch;gap:27px;min-height:0;padding:30px 26px 28px}.hero-photo{align-self:center;width:min(72%,240px);height:290px;margin:0;transform:rotate(3deg)}.hero>div:first-child{max-width:none}.hero-sub{max-width:380px}}
