/* 束縛彼氏LINEゲーム：LINEっぽい雰囲気の、オリジナルのデザイン（ロゴ・アイコン・スタンプは使わない） */
:root{
  --bg:#c9d6e6;
  --ink:#1c2430;
  --sub:#5d6b7e;
  --me:#8ae06d;
  --you:#ffffff;
  --pink:#5b8cff;
  --pink-deep:#2f4fc9;
  --red:#e5484d;
  --panel:#f4f7fb;
  --line:#dde5ef;
  color-scheme:light;
  padding-top:env(safe-area-inset-top,0px);
  padding-bottom:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
[hidden]{display:none!important}
html{background:#0e1320}
html,body{margin:0;height:100%;overflow:hidden}
body{
  background:#0e1320;color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"Hiragino Sans","Hiragino Kaku Gothic ProN","Noto Sans JP","Yu Gothic",Meiryo,sans-serif;
  line-height:1.5;
}
button{font:inherit;color:inherit;cursor:pointer}

#app{
  position:relative;margin:0 auto;max-width:480px;overflow:hidden;background:var(--bg);
  height:calc(100dvh - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px));
}
@media (min-width:520px){
  #app{height:min(calc(100dvh - 24px),880px);margin-top:12px;border-radius:26px;box-shadow:0 18px 60px rgba(0,0,0,.5)}
}
.screen{position:absolute;inset:0;display:flex;flex-direction:column}

.pr{position:relative;z-index:1000;display:flex;gap:8px;align-items:center;justify-content:center;padding:6px 16px;background:#f7f5f0;border-bottom:1px solid #e6e1d6;font:12px/1.6 sans-serif;color:#5d584f}
.pr b{border:1px solid currentColor;border-radius:4px;padding:0 6px;font-size:11px;white-space:nowrap;flex:none}

/* ---------- ロック画面 ---------- */
#lock{
  background:radial-gradient(120% 70% at 50% 0%,#33406e 0%,transparent 60%),linear-gradient(#10172a,#1a2342 60%,#10172a);
  color:#fff;overflow-y:auto;padding:0 0 28px;-webkit-overflow-scrolling:touch;
}
.ribbon{margin:14px 16px 0;padding:9px 14px;border-radius:12px;background:rgba(91,140,255,.2);border:1px solid rgba(91,140,255,.5);font-size:13.5px;text-align:center}
.lk-top{text-align:center;padding-top:26px}
.lk-time{font-size:78px;font-weight:300;letter-spacing:.02em;line-height:1;font-variant-numeric:tabular-nums}
.lk-date{margin-top:6px;opacity:.78;font-size:15px}
.lk-notices{margin:20px 14px 4px;display:flex;flex-direction:column;gap:8px}
.notice{display:flex;gap:10px;align-items:center;background:rgba(255,255,255,.14);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:10px 14px}
.notice .ic{flex:none;width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-weight:700;background:#6aa8ff;color:#fff}
.notice .ic.miss{background:#e5484d}
.notice .tx{min-width:0;flex:1}
.notice .tx b{display:block;font-size:13px}
.notice .tx span{font-size:13.5px;opacity:.9}
.notice .tm{font-size:11px;opacity:.6;align-self:flex-start;padding-top:2px}
.lk-sit{margin:16px 22px 0;font-size:14px;line-height:1.7;opacity:.92}
.lk-set{margin:18px 18px 0;display:flex;flex-direction:column;gap:10px}
.set-row{display:flex;flex-direction:column;gap:6px}
.set-k{font-size:12px;opacity:.7;letter-spacing:.08em}
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip{border:1px solid rgba(255,255,255,.3);background:rgba(255,255,255,.08);color:#fff;border-radius:999px;padding:8px 16px;font-size:14px;transition:background .15s}
.chip.on{background:#fff;color:#10172a;border-color:#fff;font-weight:700}
.open-btn{margin:20px 18px 0;padding:15px;border:0;border-radius:16px;background:linear-gradient(135deg,#5b8cff,#2f4fc9);color:#fff;font-size:17px;font-weight:700;letter-spacing:.04em;box-shadow:0 8px 24px rgba(47,79,201,.45)}
.open-btn{position:relative;font-size:19px;padding:17px;animation:heartbeat 1.1s ease-in-out infinite}
.open-btn::after{content:"";position:absolute;inset:0;border-radius:16px;border:2px solid #5b8cff;animation:ripple 1.1s ease-out infinite;pointer-events:none}
.open-btn:active{animation:none;transform:scale(.97)}
@keyframes heartbeat{0%,40%,100%{transform:scale(1)}8%{transform:scale(1.06)}16%{transform:scale(1)}24%{transform:scale(1.04)}}
@keyframes ripple{0%{opacity:.9;transform:scale(1)}70%,100%{opacity:0;transform:scale(1.12,1.35)}}
.lk-about{margin:18px 24px 0;font-size:12.5px;line-height:1.8;opacity:.72}
.lk-foot{margin:12px 24px 0;font-size:11.5px;line-height:1.7;opacity:.55}

/* ---------- トーク画面 ---------- */
#chat{background:var(--bg)}
.statusbar{flex:none;display:flex;justify-content:space-between;align-items:center;padding:6px 16px 4px;background:#fff;font-size:12.5px;font-weight:700;font-variant-numeric:tabular-nums}
.sb-right{display:flex;align-items:center;gap:6px}
.mute{border:0;background:transparent;font-size:13px;padding:0 4px;line-height:1;opacity:.75}
.mute.off{opacity:.35}
.batt{position:relative;width:24px;height:11px;border:1.5px solid #1c2430;border-radius:3px;display:inline-block}
.batt::after{content:"";position:absolute;right:-4px;top:2px;width:2px;height:4px;background:#1c2430;border-radius:0 1px 1px 0}
.batt i{position:absolute;left:1px;top:1px;bottom:1px;width:40%;background:#1c2430;border-radius:1px;transition:width .4s}
.batt.low i{background:var(--red)}
.batt.low{border-color:var(--red)}

.chead{flex:none;display:flex;align-items:center;gap:8px;padding:6px 10px 8px;background:#fff;border-bottom:1px solid var(--line)}
.back{border:0;background:transparent;font-size:30px;line-height:1;padding:0 6px 4px;color:#3a4658}
.av{flex:none;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;color:#fff;font-weight:700;font-size:15px}
.nm{font-weight:700;font-size:16px}
.cd{margin-left:auto;font-size:11.5px;background:#eef3ff;color:var(--pink-deep);border:1px solid #b9ccff;border-radius:999px;padding:3px 10px;white-space:nowrap}
.cd b{font-variant-numeric:tabular-nums;font-size:13px}
.cd.warn{background:var(--red);color:#fff;border-color:var(--red);animation:blink 1s steps(2) infinite}
.phone-ic{flex:none;font-size:18px;color:#8794a8;padding-left:2px}

.stats{flex:none;display:flex;justify-content:space-around;font-size:12px;background:var(--panel);padding:5px 8px;border-bottom:1px solid var(--line);color:var(--sub)}
.stats span{position:relative;white-space:nowrap}
.stats b{color:var(--ink);font-variant-numeric:tabular-nums;transition:color .3s}
.stats .flash b{color:var(--pink-deep)}
.floater{position:absolute;left:50%;top:-2px;transform:translateX(-50%);font-weight:700;font-size:12px;pointer-events:none;animation:float 1.3s ease-out forwards}
.floater.up{color:#1c9a55}.floater.down{color:var(--red)}
.locbanner{flex:none;font-size:11.5px;text-align:center;padding:3px 8px;background:#e8edf5;color:var(--sub);border-bottom:1px solid var(--line)}
.locbanner.watch{background:#e3ebff;color:var(--pink-deep);font-weight:700}
.typing{flex:none;font-size:11px;color:var(--sub);padding:3px 14px;background:rgba(255,255,255,.55)}

.log{flex:1;min-height:0;overflow-y:auto;padding:12px 10px 18px;display:flex;flex-direction:column;gap:8px;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.row{display:flex;align-items:flex-end;gap:6px;animation:pop .22s ease-out}
.row.l{justify-content:flex-start}
.row.r{justify-content:flex-end}
.ava{flex:none;align-self:flex-start;width:36px;height:36px;border-radius:50%;background:#6aa8ff;color:#fff;font-weight:700;font-size:15px;display:grid;place-items:center}
.ava.sp{background:transparent}
.col{display:flex;flex-direction:column;gap:3px;max-width:66%;min-width:0}
.row.l .col{align-items:flex-start}
.row.r .col{align-items:flex-end}
.bub{padding:9px 13px;border-radius:18px;font-size:15px;line-height:1.45;word-break:break-word;white-space:pre-wrap}
.bub.l{background:var(--you);border-top-left-radius:6px}
.bub.r{background:var(--me);border-top-right-radius:6px}
.bub.call{background:#fff;color:var(--red);font-weight:700;display:flex;gap:6px;align-items:center}
.meta{flex:none;font-size:10.5px;color:#4f5d71;line-height:1.25;white-space:nowrap}
.row.r .meta{text-align:right}
.meta .rd{display:block;min-height:13px}
.quote{font-size:12px;line-height:1.4;color:#4a586c;background:rgba(255,255,255,.7);border-left:3px solid var(--pink);padding:5px 9px;border-radius:8px;max-width:100%;word-break:break-word}
.dots{display:flex;gap:4px;align-items:center;padding:13px 14px}
.dots span{width:6px;height:6px;border-radius:50%;background:#9aa6b8;animation:dot 1s infinite}
.dots span:nth-child(2){animation-delay:.15s}
.dots span:nth-child(3){animation-delay:.3s}
.sys{align-self:center;font-size:11.5px;color:#fff;background:rgba(60,75,100,.45);border-radius:999px;padding:3px 12px;text-align:center;max-width:90%}
.nar{align-self:stretch;margin:6px 4px;background:#171b27;color:#e9edf5;border-radius:14px;padding:12px 15px;font-size:14px;line-height:1.7;animation:pop .3s ease-out}
.nar .nt{font-size:11.5px;color:#8e9ab0;margin-bottom:2px;font-variant-numeric:tabular-nums}
.nar em{font-style:normal;color:#ff6b72;font-weight:700}

.att{width:230px;border-radius:14px;overflow:hidden;background:#fff;box-shadow:0 1px 0 rgba(0,0,0,.05)}
.att.story{position:relative;height:150px;background:linear-gradient(160deg,#6a5acd,#e07a9f 60%,#f2b37a)}
.att.story .blur{position:absolute;inset:0;backdrop-filter:blur(9px);-webkit-backdrop-filter:blur(9px)}
.att.story .p1,.att.story .p2{position:absolute;bottom:0;width:70px;height:110px;border-radius:40px 40px 0 0;background:rgba(40,28,60,.55);filter:blur(5px)}
.att.story .p1{left:40px}.att.story .p2{left:86px;height:98px;background:rgba(255,235,240,.5)}
.att.story .lbl{position:absolute;left:10px;top:8px;font-size:11.5px;color:#fff;font-weight:700;text-shadow:0 1px 3px rgba(0,0,0,.4)}
.att.story .stamp{position:absolute;right:8px;bottom:12px;color:#e5484d;border:2px solid #e5484d;border-radius:6px;padding:1px 7px;font-weight:800;font-size:13px;transform:rotate(-8deg);background:rgba(255,255,255,.55)}
.att.map{height:130px;position:relative;background:#e9eef0}
.att.map svg{display:block;width:100%;height:100%}
.att.map .cap{position:absolute;left:8px;top:6px;font-size:11px;font-weight:700;color:#3a4658;background:rgba(255,255,255,.85);border-radius:6px;padding:1px 7px}

.choices{flex:none;display:flex;flex-direction:column;gap:7px;padding:9px 10px calc(10px + env(safe-area-inset-bottom,0px));background:var(--panel);border-top:1px solid var(--line)}
.choice{border:1px solid #cfd9e6;background:#fff;border-radius:14px;padding:11px 14px;text-align:left;font-size:14.5px;line-height:1.4;box-shadow:0 1px 0 rgba(0,0,0,.04);animation:pop .2s ease-out}
.choice:active{background:#eef6e9;border-color:var(--me)}
.blockbar{flex:none;text-align:center;padding:14px;background:#e1e6ee;color:var(--sub);font-size:14px;border-top:1px solid var(--line)}

/* 結果カード */
.rescard{align-self:stretch;margin:10px 2px;background:#fff;border-radius:20px;padding:20px 18px;text-align:center;box-shadow:0 6px 24px rgba(30,45,80,.18);animation:pop .35s ease-out}
.rc-emoji{font-size:44px;line-height:1}
.rc-label{margin-top:8px;font-size:12px;color:var(--sub);letter-spacing:.14em}
.rc-name{margin-top:2px;font-size:30px;font-weight:800;color:var(--pink-deep);line-height:1.25}
.rc-one{margin-top:8px;font-size:14px;line-height:1.7}
.rc-goal{margin:12px 0 0;padding:10px 12px;border-radius:12px;display:flex;flex-direction:column;gap:2px;font-size:13px;line-height:1.5}
.rc-goal b{font-size:16px}
.rc-goal.win{background:#e6f7ec;color:#17703c}
.rc-goal.lose{background:#f1f3f7;color:#5d6b7e}
.rc-stats{margin-top:14px;display:flex;justify-content:center;gap:14px;font-size:12.5px;color:var(--sub);flex-wrap:wrap}
.rc-stats b{color:var(--ink)}
.rc-meta{margin-top:8px;font-size:11.5px;color:var(--sub)}

/* 年齢確認・広告カード */
.agecard,.adcard{align-self:stretch;margin:8px 2px;background:#fff;border-radius:18px;padding:16px;box-shadow:0 4px 16px rgba(30,45,80,.14);animation:pop .3s ease-out}
.agecard p{margin:0 0 12px;font-size:14px;line-height:1.7}
.agecard .btns{display:flex;gap:10px}
.btn{flex:1;border:1px solid #cfd9e6;background:#fff;border-radius:12px;padding:11px 10px;font-size:14.5px;font-weight:700;text-align:center;text-decoration:none;color:var(--ink);display:block}
.btn.main{background:linear-gradient(135deg,#5b8cff,#2f4fc9);border-color:transparent;color:#fff}
.btn.x{background:#111;border-color:#111;color:#fff}
.btn.sm{font-size:13px;font-weight:600;padding:9px 8px}
.adcard .tag{display:flex;gap:6px;align-items:center;font-size:11.5px;color:var(--sub);margin-bottom:6px}
.adcard .tag b{border:1px solid currentColor;border-radius:4px;padding:0 6px;font-size:11px}
.adcard h3{margin:0;font-size:17px;line-height:1.5}
.adcard .lead{margin:4px 0 12px;font-size:13.5px;color:var(--sub)}
.adcard .diag-app{margin:6px 0 2px;font-size:28px;font-weight:900;color:var(--pink-deep);line-height:1.3}
.adcard .diag-why{margin:0 0 12px;font-size:12px;color:var(--sub)}
.adcard .skip{display:block;margin:10px auto 0;border:0;background:transparent;color:var(--sub);font-size:12.5px;text-decoration:underline}
.sharecard{align-self:stretch;margin:10px 2px 4px;background:#fff;border-radius:20px;padding:16px;box-shadow:0 6px 24px rgba(30,45,80,.18);animation:pop .35s ease-out}
.sharecard .btns{display:flex;flex-direction:column;gap:8px}
.sharecard .row2{display:flex;gap:8px}
.sharecard .coll{margin:14px 0 0;font-size:12.5px;color:var(--sub)}
.coll-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.coll-chips span{font-size:12px;border-radius:999px;padding:3px 10px;background:#eef2f8;color:#8794a8}
.coll-chips span.got{background:#e3ebff;color:var(--pink-deep);font-weight:700}
.sharecard .note{margin:12px 0 0;font-size:11.5px;line-height:1.7;color:var(--sub)}
.endfoot{align-self:stretch;margin:6px 6px 0;font-size:11px;line-height:1.7;color:#43516a;text-align:center}

/* ---------- 重ねる画面 ---------- */
.ov{position:absolute;inset:0;z-index:40;display:flex;flex-direction:column}
#notifyLayer{position:absolute;top:calc(8px);left:8px;right:8px;z-index:60;pointer-events:none}
.banner{pointer-events:auto;display:flex;gap:10px;align-items:center;background:rgba(255,255,255,.96);border-radius:16px;padding:10px 12px;box-shadow:0 8px 28px rgba(0,0,0,.28);transform:translateY(-130%);transition:transform .35s cubic-bezier(.2,.9,.3,1.1);cursor:pointer;text-align:left;border:0;width:100%}
.banner.in{transform:translateY(0)}
.banner .bt{min-width:0;flex:1}
.banner .bt b{display:block;font-size:13px}
.banner .bt span{display:block;font-size:13.5px;color:#334156;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.banner .bn{font-size:11px;color:#8794a8;align-self:flex-start}

.callov{background:linear-gradient(#1a2342,#0e1320);color:#fff;align-items:center;padding:56px 22px 36px;text-align:center;z-index:50;overflow-y:auto}
.call-av{width:96px;height:96px;border-radius:50%;background:#6aa8ff;display:grid;place-items:center;font-size:40px;font-weight:700;box-shadow:0 0 0 10px rgba(106,168,255,.18);animation:ring 1.4s ease-in-out infinite}
.callov.on .call-av{animation:none}
.call-name{margin-top:18px;font-size:26px;font-weight:700}
.call-st{margin-top:4px;opacity:.8;font-variant-numeric:tabular-nums}
.call-sub{margin-top:22px;display:flex;flex-direction:column;gap:8px;align-items:center;min-height:90px}
.call-sub p{margin:0;background:rgba(255,255,255,.14);padding:7px 14px;border-radius:14px;font-size:15px;animation:pop .2s ease-out}
.call-choices{margin-top:auto;width:100%;display:flex;flex-direction:column;gap:8px;padding-top:18px}
.call-choices .choice{background:rgba(255,255,255,.95);color:var(--ink)}
.call-btns{display:flex;gap:48px;margin-top:auto;padding-top:20px}
.cbtn{width:72px;height:72px;border-radius:50%;border:0;color:#fff;font-weight:700;font-size:14px}
.cbtn.red{background:#e5484d}.cbtn.green{background:#2fbf71}
.cbtn.wide{width:auto;height:auto;border-radius:999px;padding:12px 34px;margin-top:16px;font-size:15px}

.sheet{background:#fff;z-index:45}
.sh-head{flex:none;display:flex;align-items:center;gap:8px;padding:12px 10px;border-bottom:1px solid var(--line);position:relative}
.sh-back{border:0;background:transparent;font-size:16px;color:#3a6fb0;display:flex;align-items:center;gap:6px}
.sh-back i{font-style:normal;font-size:11px;background:var(--red);color:#fff;border-radius:999px;min-width:18px;height:18px;display:grid;place-items:center;padding:0 5px}
.sh-name{position:absolute;left:0;right:0;text-align:center;font-weight:700;pointer-events:none}
.sh-log{flex:1;overflow-y:auto;padding:14px 10px;display:flex;flex-direction:column;gap:8px;background:#e9eef5}
.sh-foot{flex:none;padding:10px;border-top:1px solid var(--line);background:var(--panel)}
.sh-ok{width:100%;border:0;border-radius:14px;padding:13px;background:#fff;border:1px solid #cfd9e6;font-weight:700}

.dark{background:#000;color:#fff;z-index:70;align-items:center;justify-content:center;padding:30px 18px;gap:22px;animation:fade .5s ease-out}
.dk-batt{font-size:30px;font-weight:700}
.dk-notifs{width:100%;display:flex;flex-direction:column;gap:8px}
.dk-notifs .notice{animation:pop .25s ease-out}

.eye{position:absolute;right:-6px;top:38%;z-index:65;pointer-events:none;animation:peek 2s ease-in-out forwards}

/* 目標の達成・失敗（激しめ） */
.fx{position:absolute;inset:0;z-index:80;display:flex;align-items:center;justify-content:center;text-align:center;pointer-events:none;overflow:hidden}
.fx.win{background:radial-gradient(circle,rgba(255,224,102,.97),rgba(229,72,77,.94));animation:fxwin 3.2s ease-out forwards}
.fx.win::before{content:"";position:absolute;inset:-50%;background:repeating-conic-gradient(from 0deg,rgba(255,255,255,.32) 0 8deg,transparent 8deg 20deg);animation:fxspin 4s linear infinite}
.fx.lose{background:radial-gradient(circle,rgba(70,78,96,.96),rgba(10,12,20,.97));animation:fxlose 2.6s ease-out forwards}
.fx canvas{position:absolute;inset:0;width:100%;height:100%}
.fx-in{position:relative;display:flex;flex-direction:column;gap:10px;padding:0 14px}
.fx-in b{font-size:clamp(46px,16vw,84px);line-height:1.1;font-weight:900;letter-spacing:.02em;color:#fff;-webkit-text-stroke:2px #8a1220;paint-order:stroke fill;text-shadow:0 5px 0 rgba(0,0,0,.35),0 0 30px rgba(255,255,255,.7);animation:fxslam .9s cubic-bezier(.2,.9,.2,1) both,fxbeat .35s .9s ease-in-out infinite alternate}
.fx-in span{font-size:17px;font-weight:700;color:#fff;text-shadow:0 2px 0 rgba(0,0,0,.4);animation:pop .4s .7s both}
.fx.lose .fx-in b{color:#cfd6e4;-webkit-text-stroke:0;text-shadow:0 3px 0 rgba(0,0,0,.5);animation:fxdrop 1s cubic-bezier(.3,0,.2,1) both}
.fx.win .fx-in{animation:fxshake .5s .15s}
#app.shake{animation:fxshake .5s}
@keyframes fxwin{0%{opacity:1;background:#fff}8%{background:radial-gradient(circle,rgba(255,224,102,.97),rgba(229,72,77,.94))}84%{opacity:1}100%{opacity:0}}
@keyframes fxlose{0%{opacity:0}12%{opacity:1}82%{opacity:1}100%{opacity:0}}
@keyframes fxspin{to{transform:rotate(360deg)}}
@keyframes fxslam{0%{transform:scale(5);opacity:0}30%{transform:scale(.92);opacity:1}45%{transform:scale(1.1)}60%,100%{transform:scale(1)}}
@keyframes fxbeat{to{transform:scale(1.06)}}
@keyframes fxdrop{0%{transform:translateY(-120px) scale(1.3);opacity:0}45%{transform:translateY(8px);opacity:1}60%{transform:translateY(-6px)}100%{transform:none;opacity:1}}
@keyframes fxshake{10%,90%{transform:translateX(-3px)}20%,80%{transform:translateX(6px)}30%,50%,70%{transform:translateX(-10px)}40%,60%{transform:translateX(10px)}}
@keyframes pop{from{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:none}}
@keyframes dot{0%,60%,100%{transform:translateY(0);opacity:.5}30%{transform:translateY(-4px);opacity:1}}
@keyframes blink{50%{opacity:.55}}
@keyframes float{from{opacity:1;transform:translate(-50%,0)}to{opacity:0;transform:translate(-50%,-22px)}}
@keyframes ring{0%,100%{box-shadow:0 0 0 10px rgba(106,168,255,.18)}50%{box-shadow:0 0 0 22px rgba(106,168,255,.06)}}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes peek{0%{transform:translateX(120%)}18%{transform:translateX(0)}78%{transform:translateX(0)}100%{transform:translateX(120%)}}

@media (prefers-reduced-motion:reduce){
  .open-btn,.open-btn::after{animation:none!important}
  .fx,.fx::before,.fx-in,.fx-in b,.fx-in span,#app.shake{animation:none!important}
  .row,.choice,.nar,.rescard,.sharecard,.agecard,.adcard,.dots span,.cd.warn,.call-av{animation:none}
}
