/* 江戸の米換算。css/style.css と同じ配色（ベージュ・藍）。外部ファイル（CSP: style-src 'self'） */
:root{--paper:#f1e6cd;--paper2:#f6eed9;--ink:#2a2118;--sub:#7a6a52;--line:#4a3b2a;--ai:#1b2742;--red:#b3352a;--serif:"Hiragino Mincho ProN","Yu Mincho","Noto Serif JP",Georgia,serif}
*{box-sizing:border-box}
html{background:var(--ai);-webkit-text-size-adjust:100%;overflow-x:hidden}   /* ハンコの拡大・波紋で、横にはみ出さない */
body{overflow-x:hidden;margin:0;color:var(--ink);font:16px/1.8 var(--serif);background:var(--paper);min-height:100vh}
.bar{background:var(--ai);padding:10px 16px;border-bottom:4px solid #c9a23a}
.bar a{color:#f3ead4;text-decoration:none;font-size:.95rem}
main{max-width:640px;margin:0 auto;padding:20px 16px 48px;overflow-wrap:anywhere}
h1{font-size:1.5rem;line-height:1.4;margin:.2em 0 .3em;color:var(--ai)}
h2{font-size:1.1rem;margin:1.8em 0 .5em;padding-bottom:.2em;border-bottom:1.5px solid var(--line);color:var(--ai)}
.lead{margin:.2em 0 1em}
.card{background:var(--paper2);border:2px solid var(--line);border-radius:6px;padding:14px;margin:14px 0}
.row{display:flex;flex-direction:column;gap:4px;margin:8px 0}
.row label{font-size:.9rem;color:var(--sub)}
.seg{flex-direction:row;flex-wrap:wrap;gap:6px 18px}
.seg label{color:var(--ink);font-size:.95rem}
input[type=text],input:not([type]),input[inputmode]{font:inherit;font-size:16px;padding:10px 12px;border:2px solid var(--line);border-radius:4px;background:#fff;color:var(--ink);width:100%}
button,.main{font:inherit;font-size:1rem;min-height:48px;padding:10px 16px;border:2px solid var(--line);border-radius:6px;background:var(--paper);color:var(--ink);cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;justify-content:center}
.main{background:var(--red);color:#fff;border-color:#7d2219;font-weight:700;width:100%;margin-top:8px}
.btns{display:grid;gap:8px;margin-top:12px}
.btns button.main{margin-top:0}
.err{color:var(--red);font-size:.9rem;margin:.4em 0}
.basis{margin-top:10px;font-size:.92rem}
.basis summary{cursor:pointer;color:var(--ai);min-height:32px}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 6px}
.chips button{min-height:44px;min-width:64px;padding:6px 12px;font-size:.95rem;background:#fff}
.chips button:active,.presets button:active{background:var(--paper)}
/* 変換中の待ち演出（1.7〜2秒）: 小判が升に落ち、升が揺れて米粒が噴き出す */
.load{text-align:center;overflow:hidden}
.load-title{margin:.2em 0;font-size:1.15rem;font-weight:700;color:var(--ai)}
.dots i{font-style:normal;display:inline-block;animation:blink 1s infinite}
.dots i:nth-child(2){animation-delay:.2s}.dots i:nth-child(3){animation-delay:.4s}
@keyframes blink{0%,100%{opacity:.2;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}
.stage{display:block;width:100%;max-width:330px;height:auto;margin:4px auto}
.load .coin{transform:translate(var(--x),-40px);opacity:0}
.load.go .coin{animation:coinfall .46s cubic-bezier(.45,0,.9,.7) both;animation-delay:calc(var(--k) * .17s)}
@keyframes coinfall{0%{transform:translate(var(--x),-40px) rotate(0);opacity:0}12%{opacity:1}100%{transform:translate(var(--x),104px) rotate(300deg);opacity:1}}
.load .masu{transform-box:fill-box;transform-origin:50% 100%}
.load.go .masu{animation:shake .5s 1s ease-in-out both}
@keyframes shake{0%,100%{transform:rotate(0)}15%{transform:rotate(-4deg) translateX(-2px)}35%{transform:rotate(4deg) translateX(2px)}55%{transform:rotate(-3deg)}75%{transform:rotate(3deg)}}
.load .grain{opacity:0;transform-box:fill-box;transform-origin:center}
.load.go .grain{animation:grainpop .8s cubic-bezier(.2,.7,.4,1) both;animation-delay:calc(1.02s + var(--k) * 28ms)}
@keyframes grainpop{0%{transform:translate(0,0) rotate(0) scale(.5);opacity:0}15%{opacity:1}55%{transform:translate(var(--dx),var(--dy)) rotate(200deg) scale(1)}100%{transform:translate(calc(var(--dx) * 1.25),42px) rotate(420deg) scale(.9);opacity:0}}
.pbar{height:16px;border:2px solid var(--line);border-radius:9px;background:#fff;overflow:hidden;margin:6px 4px 0}
.pbar i{display:block;height:100%;width:0;background:repeating-linear-gradient(135deg,#c9a23a 0 9px,#e0c06a 9px 18px);background-size:26px 26px;animation:barmove .6s linear infinite}
@keyframes barmove{to{background-position:26px 0}}
.load-sub{margin:.5em 0 .2em;color:var(--sub);font-size:.95rem;min-height:1.6em}
@media (prefers-reduced-motion:reduce){.load .coin,.load .grain,.load .masu,.dots i,.pbar i{animation:none!important}}
.hyo-box{margin:.4em 0}
.hyo-box strong{font-size:1.15rem;color:var(--ai)}
.hyos{margin:8px 0 2px;display:flex;flex-direction:column;align-items:center;min-height:8px}
.hyorow{display:flex;justify-content:center}
.hyorow + .hyorow{margin-top:var(--lap,-8px)}
.hyo{display:block;flex:none}
.hyo.part use{opacity:.45}   /* 端数の俵。svg 自体の opacity は落下の演出が上書きするので、中身を薄くする */
/* 演出: 米俵が上から落ちて積まれる → 身分が判子のように押される */
@keyframes drop{0%{transform:translateY(-90px) rotate(-14deg);opacity:0}55%{opacity:1}78%{transform:translateY(5px) rotate(2deg)}100%{transform:none;opacity:1}}
@keyframes stamp{0%{transform:scale(2.4) rotate(-9deg);opacity:0}55%{transform:scale(.93) rotate(1.2deg);opacity:1}100%{transform:none;opacity:1}}
@keyframes rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.hyos.anim .hyo{animation:drop .42s cubic-bezier(.2,.9,.3,1.15) both;animation-delay:calc(var(--i) * var(--step,25ms))}
.head{display:flex;gap:8px;align-items:flex-start}
.head .txt{flex:1;min-width:0}
.seal{flex:none;width:92px;height:92px;margin:-2px -2px 0 0;transform:rotate(-12deg);mix-blend-mode:multiply}
.seal text{font-family:inherit}
#result[data-done="0"] .tier,#result[data-done="0"] .joke,#result[data-done="0"] #tier-note,#result[data-done="0"] .seal{opacity:0}
/* 結果: 朱の丸いハンコが「ばん」と押される。押した瞬間にカードが揺れ、波紋が広がる。そのあと身分とひとことが浮かぶ */
@keyframes slam{0%{transform:scale(3.4) rotate(-26deg);opacity:0}50%{transform:scale(.86) rotate(-11deg);opacity:1}68%{transform:scale(1.07) rotate(-12.5deg)}100%{transform:scale(1) rotate(-12deg);opacity:1}}
@keyframes ripple{0%{transform:scale(1);opacity:.65}100%{transform:scale(2.1);opacity:0}}
@keyframes impact{0%,100%{transform:none}18%{transform:translate(0,4px)}38%{transform:translate(-3px,-1px)}58%{transform:translate(3px,1px)}78%{transform:translate(-1px,0)}}
@keyframes rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
#result.reveal .seal{animation:slam .44s cubic-bezier(.2,.9,.25,1.1) both}
#result.reveal .head{position:relative}
#result.reveal .head::after{content:"";position:absolute;right:-2px;top:-2px;width:92px;height:92px;border:3px solid #b3352a;border-radius:50%;animation:ripple .6s .2s ease-out both;pointer-events:none}
#result.reveal{animation:impact .32s .2s ease-out}
#result.reveal .tier,#result.reveal .joke,#result.reveal #tier-note{animation:rise .5s .3s ease-out both}
@keyframes fadein{from{opacity:0}to{opacity:1}}
@media (prefers-reduced-motion:reduce){.hyos.anim .hyo,#result.reveal,#result.reveal .tier,#result.reveal .joke,#result.reveal #tier-note,#result.reveal .head::after{animation:none!important}#result.reveal .seal{animation:fadein .5s ease-out both!important}}
.presets{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.presets button{min-height:40px;font-size:.85rem;padding:6px 10px}
.fine{font-size:.8rem;color:var(--sub);line-height:1.6;margin:.5em 0}
.kicker{margin:0;color:var(--sub);font-size:.9rem}
.tier{margin:.1em 0;font-size:1.55rem;font-weight:800;line-height:1.3;color:var(--ai)}
.joke{margin:.3em 0 .8em}
.joke,.lead,.cta p,.fine,.tier{text-wrap:balance;line-break:strict}
.nums{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:.6em 0}
.nums div{background:#fff;border:1.5px solid var(--line);border-radius:4px;padding:8px 10px}
.nums dt{font-size:.78rem;color:var(--sub)}
.nums dd{margin:0;font-size:1.15rem;font-weight:700}
canvas{width:100%;height:auto;border:2px solid var(--line);border-radius:4px;margin-top:10px;background:#fff}
.cta p{margin:.2em 0 .6em}
.notes ul{padding-left:1.3em}
.notes li{margin:.4em 0;font-size:.92rem}
a{color:var(--ai)}
@media (min-width:520px){.btns{grid-template-columns:repeat(3,1fr)}}
