:root{--pink:#e43d81;--pink-dark:#c62f6d;--pink-tint:#fde8f1;--teal:#00c2a8;--teal-dark:#00997f;--teal-tint:#ddf8f3;--gold:#cb9605;--gold-tint:#fdf3dc;--ink:#1c1b1b;--white:#fff;--bg:#fcf9f8;--surface:#fff;--muted:#7d7378;--soft:#f4f4f7;--danger:#ba1a1a;--radius:16px;--radius-sm:12px;--bw:3px;--sticker:4px 4px 0 var(--ink);--sticker-sm:3px 3px 0 var(--ink);--sticker-lg:6px 6px 0 var(--ink)}*{box-sizing:border-box}body{color:var(--ink);background-color:var(--bg);-webkit-font-smoothing:antialiased;background-image:radial-gradient(#e3dfe1 1px,#0000 1px);background-size:20px 20px;margin:0;font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Hiragino Sans,Noto Sans JP,Yu Gothic UI,sans-serif;font-size:15px;font-weight:600;line-height:1.65}.app{max-width:640px;margin:0 auto;padding-bottom:92px}.apphead{z-index:20;background:linear-gradient(100deg, var(--pink) 0%, var(--pink) 45%, var(--teal) 100%);color:var(--white);letter-spacing:.06em;border-bottom:var(--bw) solid var(--ink);text-shadow:2px 2px #1c1b1b59;justify-content:space-between;align-items:center;gap:12px;padding:13px 18px;font-size:19px;font-weight:800;display:flex;position:sticky;top:0}.apphead-title{flex:1}.apphead-logout{letter-spacing:0;background:var(--white);color:var(--ink);border:2px solid var(--ink);border-radius:var(--radius-sm);box-shadow:2px 2px 0 var(--ink);cursor:pointer;text-shadow:none;align-items:center;gap:4px;padding:5px 10px;font-size:12px;font-weight:700;display:inline-flex}.apphead-logout:disabled{opacity:.7;cursor:wait}.page{padding:20px 16px}h2{background:var(--gold);color:var(--ink);border:var(--bw) solid var(--ink);border-radius:var(--radius-sm);box-shadow:var(--sticker-sm);margin:0 0 18px;padding:4px 14px;font-size:18px;font-weight:800;display:inline-block;transform:rotate(-1.5deg)}h3{margin:24px 0 10px;font-size:15px;font-weight:800}.tabbar{max-width:640px;padding:8px 8px calc(8px + env(safe-area-inset-bottom));background:var(--surface);border-top:var(--bw) solid var(--ink);gap:4px;margin:0 auto;display:flex;position:fixed;bottom:0;left:0;right:0}.tabbar a{border:var(--bw) solid transparent;border-radius:var(--radius-sm);color:var(--muted);flex-direction:column;flex:1;align-items:center;gap:1px;padding:7px 0 5px;font-size:10px;font-weight:800;text-decoration:none;transition:transform .15s;display:flex}.tabbar a svg{font-size:23px}.tabbar a.active{border-color:var(--ink);color:var(--white);box-shadow:var(--sticker-sm);transform:translateY(-2px)}.tabbar a.active.tab-pink{background:var(--pink)}.tabbar a.active.tab-teal{background:var(--teal)}.tabbar a:active{box-shadow:1px 1px 0 var(--ink);transform:translate(2px,1px)}button{font:inherit;cursor:pointer;background:var(--surface);color:var(--ink);border:var(--bw) solid var(--ink);border-radius:var(--radius-sm);box-shadow:var(--sticker);padding:11px 18px;font-weight:800;transition:transform .12s,box-shadow .12s}button:active:not(:disabled){box-shadow:0 0 0 var(--ink);transform:translate(4px,4px)}button:disabled{opacity:.45;cursor:default;box-shadow:var(--sticker-sm)}button.primary{background:var(--pink);color:var(--white)}button.teal{background:var(--teal);color:var(--white)}button.danger{background:var(--danger);color:var(--white)}button.link{box-shadow:none;color:var(--muted);text-decoration:underline;-webkit-text-decoration-color:var(--pink);text-decoration-color:var(--pink);background:0 0;border:none;padding:0;font-weight:700;text-decoration-thickness:2px}button.link:active{transform:none}.actions{flex-wrap:wrap;gap:12px;margin:20px 0;display:flex}.actions button{flex:1;min-width:130px}.field{margin-bottom:24px;display:block}.field>span:first-child{margin-bottom:8px;font-size:13px;font-weight:800;display:block}.input{border:var(--bw) solid var(--ink);border-radius:var(--radius-sm);background:var(--surface);width:100%;font:inherit;color:inherit;box-shadow:var(--sticker-sm);padding:12px 14px;font-weight:600}.input:focus{border-color:var(--pink);box-shadow:3px 3px 0 var(--pink);outline:none}textarea.input{resize:vertical}.typeswitch{flex-wrap:wrap;gap:8px;display:flex}.typeswitch button{min-width:94px;box-shadow:var(--sticker-sm);flex:1;padding:10px 6px;font-size:13px}.typeswitch button.active{background:var(--pink);color:var(--white)}.daterow{gap:8px;margin-bottom:10px;display:flex}.daterow .input{flex:1}.daterow button{box-shadow:var(--sticker-sm);padding:8px 14px;font-size:13px}.taginput{position:relative}.chips{flex-wrap:wrap;gap:8px;margin-bottom:10px;display:flex}.chip{background:var(--pink-tint);border:2px solid var(--ink);color:var(--ink);box-shadow:2px 2px 0 var(--ink);border-radius:999px;align-items:center;gap:3px;padding:4px 12px;font-size:13px;font-weight:800;display:inline-flex}.chip-required{background:var(--gold);color:var(--ink)}.chip-matched{background:var(--teal);color:var(--white)}.photo-infer{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.photo-infer-preview,.photo-infer-placeholder{border:2px solid var(--ink);width:88px;height:88px;box-shadow:2px 2px 0 var(--ink);object-fit:cover;border-radius:12px;flex-shrink:0}.photo-infer-placeholder{background:var(--pink-tint);color:var(--ink);text-align:center;place-items:center;padding:8px;font-size:12px;font-weight:700;display:grid}.chip-star,.chip-x{box-shadow:none;color:inherit;background:0 0;border:none;border-radius:0;padding:0 2px;font-size:13px;line-height:1}.chip-star:active,.chip-x:active{box-shadow:none;transform:scale(.85)}.chips-sm .chip{box-shadow:1.5px 1.5px 0 var(--ink);padding:2px 10px;font-size:12px}.suggest{border:var(--bw) solid var(--ink);border-radius:var(--radius-sm);background:var(--surface);max-height:240px;box-shadow:var(--sticker);margin:8px 0 0;padding:0;list-style:none;overflow:hidden auto}.suggest li+li{border-top:2px solid var(--soft)}.suggest button{width:100%;box-shadow:none;text-align:left;background:0 0;border:none;border-radius:0;justify-content:space-between;align-items:center;padding:11px 14px;font-weight:700;display:flex}.suggest button:active{background:var(--pink-tint);box-shadow:none;transform:none}.suggest-count{color:var(--muted);font-size:12px;font-weight:700}.suggest-new{color:var(--teal-dark)}.suggest-loading{color:var(--muted);padding:11px 14px;font-size:13px}.threshold{border:var(--bw) solid var(--ink);border-radius:var(--radius);background:var(--teal-tint);box-shadow:var(--sticker);padding:14px}.threshold-head{align-items:baseline;gap:8px;margin-bottom:6px;display:flex}.threshold-head strong{color:var(--ink);background:var(--white);border:2px solid var(--ink);box-shadow:2px 2px 0 var(--ink);border-radius:10px;padding:0 10px;font-size:26px;font-weight:800;display:inline-block;transform:rotate(-2deg)}.threshold-scale{color:var(--muted);justify-content:space-between;font-size:11px;font-weight:700;display:flex}input[type=range]{width:100%;accent-color:var(--teal)}.card{background:var(--surface);border:var(--bw) solid var(--ink);border-radius:var(--radius);box-shadow:var(--sticker);margin-bottom:16px;padding:14px;transition:transform .12s,box-shadow .12s}.card-clickable{cursor:pointer}.card-clickable:active{box-shadow:0 0 0 var(--ink);transform:translate(4px,4px)}.card-head{align-items:flex-start;gap:8px;margin-bottom:8px;display:flex}.card-head h3{flex:1;margin:0;font-size:15px;font-weight:800;line-height:1.4}.badge{border:2px solid var(--ink);box-shadow:2px 2px 0 var(--ink);white-space:nowrap;border-radius:999px;padding:3px 9px;font-size:11px;font-weight:800;transform:rotate(-2deg)}.badge-GIVE{background:var(--teal);color:var(--white)}.badge-WANT{background:var(--pink);color:var(--white)}.badge-COMPANION{background:var(--gold);color:var(--ink)}.matchline{color:var(--muted);margin:8px 0;font-size:13px;font-weight:700}.matchline strong{color:var(--ink);background:var(--teal);border:2px solid var(--ink);box-shadow:2px 2px 0 var(--ink);border-radius:8px;padding:0 8px;font-size:14px;font-weight:800;display:inline-block}.card-detail,.card-note,.card-owner{margin:8px 0 0;font-size:13px}.card-detail{font-weight:800}.card-note{color:var(--muted);white-space:pre-wrap;font-weight:600}.card-owner{color:var(--muted);align-items:center;gap:6px;font-weight:700;display:flex}.card-closed{color:var(--muted);font-size:12px;font-weight:800}.card-actions{border-top:2px dashed #ddd8da;flex-wrap:wrap;align-items:center;gap:10px;margin-top:12px;padding-top:12px;display:flex}.card-actions button{box-shadow:var(--sticker-sm);padding:7px 14px;font-size:13px}.nested{border-left:var(--bw) dashed var(--teal);margin:0 0 20px 8px;padding-left:14px}.tagline{font-size:12px;font-weight:800}.tagline-new{background:var(--gold);color:var(--ink);border:2px solid var(--ink);box-shadow:1.5px 1.5px 0 var(--ink);border-radius:999px;padding:0 9px}.profile{background:var(--surface);border:var(--bw) solid var(--ink);border-radius:var(--radius);box-shadow:var(--sticker-lg);align-items:center;gap:14px;margin-bottom:20px;padding:14px;display:flex}.profile h2{all:unset;font-size:17px;font-weight:800;display:block}.profile-meta{margin:2px 0 0}.avatar{object-fit:cover;border:var(--bw) solid var(--ink);width:54px;height:54px;box-shadow:var(--sticker-sm);border-radius:50%}.menu{gap:12px;display:grid}.menu-item{text-align:left;border-radius:var(--radius);align-items:center;gap:12px;padding:14px;display:flex}.menu-text{flex-direction:column;gap:1px;display:flex}.menu-item strong{font-size:15px;font-weight:800}.menu-text>span{color:var(--muted);font-size:12px;font-weight:700}.menu-icon{border:2px solid var(--ink);width:44px;height:44px;box-shadow:2px 2px 0 var(--ink);border-radius:14px;flex-shrink:0;place-items:center;display:grid;transform:rotate(-5deg)}.menu-icon svg{font-size:24px}.icon-pink{background:var(--pink);color:var(--white)}.icon-teal{background:var(--teal);color:var(--white)}.icon-gold{background:var(--gold);color:var(--white)}.menu-item.primary{background:linear-gradient(100deg, var(--pink) 0%, var(--pink) 45%, var(--teal) 100%);color:var(--white);box-shadow:var(--sticker-lg)}.menu-item.primary .menu-text>span{color:#ffffffeb}.menu-item.primary .menu-icon{background:var(--white);color:var(--pink);transform:rotate(5deg)}.panel{background:var(--surface);border:var(--bw) solid var(--ink);border-radius:var(--radius);box-shadow:var(--sticker);margin:20px 0;padding:14px}.panel-quiet{box-shadow:none;background:0 0;border-style:dashed}.status{border:2px solid var(--ink);box-shadow:2px 2px 0 var(--ink);background:var(--soft);color:var(--ink);white-space:nowrap;border-radius:999px;padding:2px 10px;font-size:11px;font-weight:800}.status-NEW,.status-PENDING{background:var(--pink);color:var(--white)}.status-ACCEPTED{background:var(--teal);color:var(--white)}.status-COMPLETED{background:var(--gold);color:var(--ink)}.status-DECLINED{background:var(--soft);color:var(--muted)}.stars{gap:8px;margin-bottom:12px;display:flex}.star{box-shadow:none;color:#ddd8da;background:0 0;border:none;padding:0;font-size:34px;line-height:1;transition:transform .15s cubic-bezier(.34,1.56,.64,1)}.star:active{box-shadow:none;transform:none}.star.on{color:var(--gold);text-shadow:2px 2px 0 var(--ink);transform:scale(1.1)rotate(-6deg)}.hint{color:var(--muted);margin:8px 0 0;font-size:12px;font-weight:600;line-height:1.6}.error{color:var(--white);background:var(--danger);border:var(--bw) solid var(--ink);border-radius:var(--radius-sm);box-shadow:var(--sticker-sm);margin:16px 0;padding:11px 14px;font-size:13px;font-weight:700}.notice{color:var(--ink);background:var(--teal-tint);border:var(--bw) solid var(--ink);border-radius:var(--radius-sm);box-shadow:var(--sticker-sm);margin:16px 0;padding:11px 14px;font-size:13px;font-weight:700}.loading{color:var(--muted);padding:20px;font-weight:700}.results{margin-top:24px}.chat{flex-direction:column;height:calc(100dvh - 144px);display:flex}.chat-head{background:var(--surface);border-bottom:var(--bw) solid var(--ink);align-items:center;gap:10px;padding:10px 14px;display:flex}.chat-back{width:38px;height:38px;box-shadow:var(--sticker-sm);flex-shrink:0;place-items:center;padding:0;display:grid}.chat-title{flex-direction:column;min-width:0;line-height:1.3;display:flex}.chat-title strong{text-overflow:ellipsis;white-space:nowrap;font-size:15px;font-weight:800;overflow:hidden}.chat-title span{color:var(--muted);font-size:11px;font-weight:700}.chat-body{flex-direction:column;flex:1;gap:12px;padding:16px 14px;display:flex;overflow-y:auto}.chat-empty{text-align:center;margin:auto 0}.bubble-row{align-items:flex-end;gap:6px;max-width:82%;display:flex}.bubble-row.mine{flex-direction:row-reverse;align-self:flex-end}.bubble-row.theirs{align-self:flex-start}.bubble{border:2px solid var(--ink);white-space:pre-wrap;word-break:break-word;box-shadow:2px 2px 0 var(--ink);border-radius:16px;padding:9px 13px;font-size:14px;font-weight:600;line-height:1.55}.mine .bubble{background:var(--pink);color:var(--white);border-bottom-right-radius:5px}.theirs .bubble{background:var(--teal-tint);color:var(--ink);border-bottom-left-radius:5px}.bubble-time{color:var(--muted);flex-shrink:0;font-size:10px;font-weight:700}.chat-input{background:var(--surface);border-top:var(--bw) solid var(--ink);align-items:flex-end;gap:8px;padding:10px 12px;display:flex}.chat-input .input{border-radius:18px;flex:1;max-height:110px;padding:10px 14px}.chat-send{border-radius:50%;flex-shrink:0;place-items:center;width:46px;height:46px;padding:0;display:grid}.chat-error,.chat-locked{text-align:center;margin:0;padding:12px 14px}.chat-preview{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;margin:8px 0 0;font-size:12px;font-weight:700;overflow:hidden}.chat-preview.unread{color:var(--ink);font-weight:800}.unread-dot{color:var(--pink);margin-right:5px;font-size:10px}.chat-tool{width:42px;height:42px;box-shadow:var(--sticker-sm);border-radius:50%;flex-shrink:0;place-items:center;padding:0;display:grid}.chat-tool.teal{background:var(--teal);color:var(--white)}.bubble-image{line-height:0;display:block}.bubble-image img{border-radius:10px;max-width:220px;max-height:280px;display:block}.bubble-image{margin:-4px}.bubble-location{color:inherit;align-items:center;gap:8px;text-decoration:none;display:flex}.bubble-location span{flex-direction:column;line-height:1.35;display:flex}.bubble-location em{opacity:.75;font-size:11px;font-style:normal;text-decoration:underline}.map-holder{margin-bottom:14px;position:relative}.map{border:var(--bw) solid var(--ink);border-radius:var(--radius);height:320px;box-shadow:var(--sticker);z-index:0;overflow:hidden}.map-locate{z-index:500;background:var(--surface);border-radius:50%;place-items:center;width:42px;height:42px;padding:0;display:grid;position:absolute;top:12px;right:12px}.map-pin{border:2.5px solid var(--ink);border-radius:50% 50% 50% 4px;width:22px;height:22px;display:block;transform:rotate(-45deg);box-shadow:2px 2px #1c1b1b59}.map-me{border:3px solid var(--white);width:18px;height:18px;box-shadow:0 0 0 2px var(--ink);background:#2f7bff;border-radius:50%;display:block}.map-controls{gap:8px;margin-bottom:16px;display:grid}.leaflet-container{font:inherit}.leaflet-popup-content-wrapper{border:2px solid var(--ink);box-shadow:3px 3px 0 var(--ink);border-radius:10px}.distance{color:var(--teal-dark);white-space:nowrap;font-size:12px;font-weight:800}.place-set{gap:8px;display:grid}.fav-head{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.fav-head strong{font-size:14px;font-weight:800}.home-page .home-feed,.home-page .home-feed h2{margin-bottom:8px}.home-settings-toggle{background:var(--surface);border:var(--bw) solid var(--ink);border-radius:var(--radius-sm);width:100%;box-shadow:var(--sticker-sm);cursor:pointer;justify-content:space-between;align-items:center;margin:0 0 12px;padding:12px 14px;font-size:14px;font-weight:800;display:flex}.home-settings-toggle svg{transition:transform .2s}.home-settings-toggle svg.is-open{transform:rotate(180deg)}.home-settings{gap:12px;margin-bottom:20px;display:grid}.profile-compact{margin-bottom:16px;padding:12px 14px}.profile-compact h2{margin-bottom:4px;font-size:16px}.avatar-sm{width:44px;height:44px}.deck-help{margin-bottom:12px}.deck{margin-bottom:24px;position:relative}.deck-card{background:var(--surface);border:var(--bw) solid var(--ink);border-radius:var(--radius);box-shadow:var(--sticker-lg);touch-action:pan-y;-webkit-user-select:none;user-select:none;cursor:grab;min-height:190px;padding:16px;position:relative}.deck-card:active{cursor:grabbing}.deck-behind{opacity:.55;z-index:0;pointer-events:none;position:absolute;inset:0;transform:translateY(10px)scale(.96)}.deck-leaving{opacity:0}.deck-stamp{border:var(--bw) solid var(--ink);box-shadow:2px 2px 0 var(--ink);z-index:3;border-radius:10px;padding:4px 12px;font-size:15px;font-weight:800;position:absolute;top:14px;right:14px;transform:rotate(8deg)}.stamp-save{background:var(--teal);color:var(--white)}.stamp-skip{background:var(--muted);color:var(--white);transform:rotate(-8deg)}.deck-detail,.deck-respond{margin-top:12px}.deck-respond-btn{justify-content:center;align-items:center;gap:6px;width:100%;display:inline-flex}.modal-backdrop{z-index:100;background:#00000073;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{width:min(100%,480px);max-height:min(85vh,720px);overflow:auto}.deck-actions{justify-content:space-between;align-items:center;gap:12px;margin-top:16px;display:flex}.deck-skip,.deck-save{width:56px;height:56px;box-shadow:var(--sticker);border-radius:50%;place-items:center;padding:0;display:grid}.deck-skip svg,.deck-save svg{font-size:28px}.deck-skip{background:var(--surface);color:var(--muted)}.deck-save{background:var(--pink);color:var(--white)}.deck-count{color:var(--muted);font-size:12px;font-weight:800}.deck-empty{border:var(--bw) dashed var(--ink);border-radius:var(--radius);text-align:center;margin-bottom:24px;padding:32px 16px}.group-list{margin-bottom:24px}.group-card{border-color:var(--gold);box-shadow:4px 4px 0 var(--gold)}.badge svg{vertical-align:-2px;margin-right:2px}.trade-me{gap:12px;display:grid}.trade-row{align-items:flex-start;gap:12px;display:flex}.trade-row strong{font-size:14px;font-weight:800;display:block}.trade-label{border:2px solid var(--ink);box-shadow:2px 2px 0 var(--ink);color:var(--white);border-radius:999px;flex-shrink:0;padding:3px 10px;font-size:11px;font-weight:800}.trade-label.give{background:var(--pink)}.trade-label.get{background:var(--teal)}.cycle{border:var(--bw) dashed var(--ink);border-radius:var(--radius);margin-bottom:16px;padding:14px}.cycle-step{border:2px solid var(--ink);border-radius:var(--radius-sm);background:var(--surface);box-shadow:2px 2px 0 var(--ink);margin-bottom:10px;padding:10px 12px}.cycle-mine{background:var(--gold-tint);border-color:var(--gold);box-shadow:2px 2px 0 var(--gold)}.cycle-people{align-items:center;gap:8px;font-size:13px;display:flex}.cycle-people svg{color:var(--pink);transform:rotate(-90deg)}.cycle-item{margin-top:4px;font-size:13px;font-weight:700}.cycle-tags{color:var(--teal-dark);font-size:11px;font-weight:700;display:block}.cycle-note{margin-top:12px}.bubble-wrap{flex-direction:column;gap:2px;min-width:0;display:flex}.bubble-name{color:var(--muted);padding-left:4px;font-size:10px;font-weight:800}.auth-container{justify-content:center;align-items:center;min-height:calc(100vh - 120px);padding:32px 16px;display:flex}.auth-card{background:var(--surface);border:var(--bw) solid var(--ink);width:100%;max-width:400px;box-shadow:var(--sticker-lg);border-radius:var(--radius);padding:28px 24px}.auth-title{text-align:center;color:var(--pink-dark);margin:0 0 8px;font-size:1.5rem;font-weight:800}.auth-subtitle{color:var(--muted);text-align:center;margin-bottom:24px;font-size:.85rem}.auth-error{border:2px solid var(--danger);color:var(--danger);border-radius:var(--radius-sm);background:#ffedea;margin-bottom:20px;padding:10px 14px;font-size:.85rem;font-weight:600}.auth-form{flex-direction:column;gap:18px;display:flex}.input-group{flex-direction:column;gap:6px;display:flex}.input-group label{color:var(--ink);align-items:center;gap:6px;font-size:.85rem;font-weight:700;display:flex}.input-group input{border:var(--bw) solid var(--ink);border-radius:var(--radius-sm);background:var(--soft);outline:none;padding:12px 14px;font-size:.95rem}.input-group input:focus{background:var(--white);border-color:var(--pink);box-shadow:var(--sticker-sm)}.btn-primary{background:var(--pink);color:var(--white);border:var(--bw) solid var(--ink);border-radius:var(--radius-sm);box-shadow:var(--sticker);cursor:pointer;margin-top:10px;padding:14px;font-size:1rem;font-weight:800;transition:transform .1s,box-shadow .1s}.btn-primary:active{box-shadow:2px 2px 0 var(--ink);transform:translate(2px,2px)}.btn-primary:disabled{opacity:.6;cursor:not-allowed}.auth-footer{text-align:center;color:var(--muted);margin-top:24px;font-size:.85rem}.auth-footer a{color:var(--teal-dark);font-weight:700;text-decoration:underline}
