#root{min-height:100vh}:root{color:#17211b;background:#f5f0e8;font-family:Inter,Noto Sans TC,Microsoft JhengHei,PingFang TC,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}html{min-width:320px;background:#f5f0e8}body{margin:0;min-width:320px;min-height:100vh}button,input,select{font:inherit}button{border:0}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid rgba(26,137,98,.3);outline-offset:2px}a{color:inherit}.app-shell{min-height:100vh;background:linear-gradient(180deg,#f5f0e8f0,#f6f4eef5),repeating-linear-gradient(90deg,rgba(36,79,59,.08) 0 1px,transparent 1px 78px)}.top-nav{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:14px clamp(18px,4vw,48px);border-bottom:1px solid rgba(26,35,30,.1);background:#faf8f2e6;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.brand{display:inline-flex;align-items:center;gap:12px;min-width:0;color:#17211b;text-decoration:none}.brand-mark{display:grid;width:42px;height:48px;place-items:center;border:1px solid rgba(26,35,30,.18);border-radius:8px;background:#fffdf8;box-shadow:0 9px 18px #1f2d241f}.brand-mark img{width:24px;height:34px;object-fit:contain}.brand strong,.brand small{display:block;line-height:1.15}.brand strong{font-size:1rem;letter-spacing:0}.brand small{margin-top:3px;color:#69736c;font-size:.77rem}.nav-links{display:flex;gap:8px;padding:4px;border:1px solid rgba(26,35,30,.1);border-radius:999px;background:#fffdf8b8}.nav-links a{min-width:92px;padding:10px 14px;border-radius:999px;color:#59645d;text-align:center;text-decoration:none;transition:background .16s ease,color .16s ease,box-shadow .16s ease}.nav-links a:hover,.nav-links a.active{color:#fffdf8;background:#1d6f52;box-shadow:0 8px 20px #1d6f5238}.content{width:min(1440px,100%);margin:0 auto;padding:clamp(18px,4vw,44px)}.eyebrow,.section-kicker{display:inline-flex;align-items:center;gap:8px;color:#a03a2f;font-size:.72rem;font-weight:800;letter-spacing:0;text-transform:uppercase}.section-kicker:before{width:9px;height:9px;border-radius:3px;background:#d8a640;content:""}.analyzer-workspace{display:grid;grid-template-columns:minmax(280px,.72fr) minmax(0,1.28fr);gap:clamp(24px,4vw,52px);align-items:start}.workspace-intro{position:sticky;top:104px;padding:4px 0}.workspace-intro h1{max-width:700px;margin:14px 0 16px;color:#142018;font-size:clamp(2rem,4.8vw,4.8rem);line-height:1.02;letter-spacing:0}.workspace-intro p{max-width:560px;margin:0;color:#516058;font-size:1.02rem;line-height:1.8}.tile-showcase{display:flex;flex-wrap:wrap;gap:8px;margin:28px 0;padding:14px;border:1px solid rgba(26,35,30,.1);border-radius:8px;background:#fffdf8b8}.tile-showcase img{width:44px;height:62px;object-fit:contain;border-radius:6px;filter:drop-shadow(0 8px 8px rgba(31,45,36,.16))}.feature-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:0}.feature-metrics div{padding:14px;border:1px solid rgba(26,35,30,.1);border-radius:8px;background:#fffdf8b8}.feature-metrics dt,.feature-metrics dd{margin:0}.feature-metrics dt{color:#6b746e;font-size:.78rem}.feature-metrics dd{margin-top:5px;color:#17211b;font-weight:800}.workspace-panel{min-width:0}.page-heading{max-width:760px;margin-bottom:28px}.page-heading h1{margin:10px 0 12px;color:#142018;font-size:clamp(2rem,4vw,3.6rem);line-height:1.08;letter-spacing:0}.page-heading p{margin:0;color:#5b665f;line-height:1.8}.upload-form{display:grid;gap:14px}.upload-form.compact{gap:10px}.upload-panel,.result-card,.detail-card{border:1px solid rgba(26,35,30,.1);border-radius:8px;background:#fffdf8eb;box-shadow:0 18px 36px #1f2d2414}.upload-panel{padding:clamp(18px,3vw,26px)}.upload-panel h2,.detail-card h2,.result-card h2{margin:6px 0 0;color:#17211b;font-size:1.1rem;letter-spacing:0}.panel-heading-row,.panel-title-row,.detail-card-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.mini-tiles,.wind-strip{display:flex;align-items:center;gap:5px}.mini-tiles img{width:27px;height:38px;object-fit:contain;filter:drop-shadow(0 6px 8px rgba(31,45,36,.14))}.wind-strip span{display:grid;width:31px;height:36px;place-items:center;border:1px solid rgba(26,35,30,.12);border-radius:7px;background:#fffaf1;color:#1d6f52;font-weight:900}.drop-zone{display:grid;place-items:center;min-height:176px;margin-top:18px;padding:22px;border:1.5px dashed rgba(29,111,82,.35);border-radius:8px;background:linear-gradient(135deg,#1d6f5214,#d8a64014),#fffdf8;color:#17211b;cursor:pointer;transition:border-color .16s ease,transform .16s ease,background .16s ease}.drop-zone:hover,.drop-zone.has-file{border-color:#a03a2f8c;transform:translateY(-1px)}.drop-zone input{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.drop-icon{display:grid;width:46px;height:46px;place-items:center;border-radius:999px;background:#1d6f52;color:#fffdf8;font-size:1.5rem;font-weight:800}.drop-title{max-width:100%;margin-top:14px;overflow:hidden;color:#17211b;font-weight:800;text-align:center;text-overflow:ellipsis;white-space:nowrap}.drop-meta{margin-top:5px;color:#68736d;font-size:.9rem;text-align:center}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:18px}.form-grid.two-columns{grid-template-columns:repeat(2,minmax(0,1fr))}.form-grid.three-columns{grid-template-columns:repeat(3,minmax(0,1fr))}.field{display:grid;gap:8px;min-width:0}.field>span{color:#526057;font-size:.86rem;font-weight:800}.field input,.field select,.room-code-field input{width:100%;min-height:46px;border:1px solid rgba(26,35,30,.14);border-radius:8px;background:#fffdf8;color:#17211b;padding:0 13px;box-shadow:inset 0 1px #fffc}.field input:hover,.field select:hover,.room-code-field input:hover{border-color:#1d6f5261}.toggle-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:18px}.event-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.event-card{display:grid;grid-template-columns:minmax(0,1fr) 92px;gap:12px;align-items:center;min-width:0;min-height:92px;padding:12px;border:1px solid rgba(26,35,30,.1);border-radius:8px;background:#fffdf8;transition:border-color .16s ease,background .16s ease}.event-card.selected{border-color:#1d6f528c;background:#eaf5ef}.event-toggle{display:grid;grid-template-columns:18px minmax(0,1fr);gap:10px;align-items:start;min-width:0;cursor:pointer}.event-toggle input{width:18px;height:18px;margin:3px 0 0;accent-color:#1d6f52}.event-toggle strong,.event-toggle small{display:block;min-width:0;overflow-wrap:anywhere}.event-toggle strong{color:#17211b;font-size:.94rem}.event-toggle small{margin-top:4px;color:#6b756f;font-size:.74rem;line-height:1.35}.event-tai-field{display:grid;gap:6px}.event-tai-field span{color:#526057;font-size:.74rem;font-weight:900}.event-tai-field input{width:100%;min-height:40px;border:1px solid rgba(26,35,30,.14);border-radius:8px;background:#fffdf8;color:#17211b;padding:0 10px}.event-tai-field input:disabled{color:#87908a;background:#f1eee6}.toggle-chip{position:relative;min-width:0;cursor:pointer}.toggle-chip input{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0}.toggle-chip span{display:grid;gap:3px;min-height:70px;padding:12px;border:1px solid rgba(26,35,30,.1);border-radius:8px;background:#fffdf8;transition:border-color .16s ease,background .16s ease,color .16s ease}.toggle-chip strong,.toggle-chip small{display:block;min-width:0;overflow-wrap:anywhere}.toggle-chip strong{color:#17211b;font-size:.94rem}.toggle-chip small{color:#6b756f;font-size:.74rem;line-height:1.35}.toggle-chip input:checked+span{border-color:#1d6f528c;background:#eaf5ef}.submit-btn,.reset-btn,.create-btn,.join-btn,.submit-win-btn,.secondary-btn,.ghost-btn,.danger-btn{display:inline-flex;min-height:46px;align-items:center;justify-content:center;border-radius:8px;padding:0 18px;font-weight:900;cursor:pointer;transition:transform .16s ease,box-shadow .16s ease,opacity .16s ease,background .16s ease}.submit-btn,.create-btn,.submit-win-btn{width:100%;background:#1d6f52;color:#fffdf8;box-shadow:0 16px 32px #1d6f5233}.submit-btn:hover,.create-btn:hover,.submit-win-btn:hover,.join-btn:hover,.reset-btn:hover,.secondary-btn:hover,.ghost-btn:hover,.danger-btn:hover{transform:translateY(-1px)}.submit-btn:disabled,.create-btn:disabled,.join-btn:disabled{cursor:not-allowed;opacity:.55;transform:none;box-shadow:none}.error-message,.error-text{border:1px solid rgba(160,58,47,.22);border-radius:8px;background:#fff0ec;color:#9b3028}.error-message{margin-top:14px;padding:12px 14px;font-weight:800}.error-text{margin:12px 0 0;padding:10px 12px}.results-container{display:grid;gap:24px}.result-header{display:grid;gap:12px;justify-items:start;max-width:820px}.result-header h1{margin:0;color:#142018;font-size:clamp(2rem,4vw,4rem);line-height:1.06;letter-spacing:0}.result-header p{margin:0;color:#5b665f}.status-pill,.panel-badge,.dealer-chip{display:inline-flex;min-height:28px;align-items:center;justify-content:center;border-radius:999px;padding:0 10px;font-size:.78rem;font-weight:900}.status-pill.success{background:#e5f5ec;color:#1d6f52}.status-pill.danger{background:#fff0ec;color:#9b3028}.money-hero{display:inline-grid;grid-template-columns:auto auto;align-items:baseline;gap:14px;padding:12px 16px;border:1px solid rgba(29,111,82,.16);border-radius:8px;background:#fffdf8}.money-hero span{color:#6a746d;font-weight:800}.money-hero strong{color:#1d6f52;font-size:2rem;letter-spacing:0}.results-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.results-grid.single{grid-template-columns:minmax(0,620px)}.result-card{padding:18px}.result-card img{display:block;width:100%;max-height:520px;margin-top:14px;object-fit:contain;border-radius:8px;background:#f3efe5}.result-details{display:grid;grid-template-columns:1.1fr .8fr 1fr;gap:18px}.detail-card{padding:20px}.tai-list,.breakdown-list{display:grid;gap:8px;margin:18px 0 0;padding:0;list-style:none}.tai-list li,.breakdown-list li,.money-row{border:1px solid rgba(26,35,30,.08);border-radius:8px;background:#fffaf1}.tai-list li,.breakdown-list li{padding:10px 12px;color:#27322b;line-height:1.5}.money-table{display:grid;gap:8px;margin-top:18px}.money-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 12px}.single-money{margin-top:18px;color:#1d6f52;font-size:2rem;font-weight:900}.positive{color:#1d6f52}.negative{color:#b43f32}.empty-state{margin:18px 0 0;color:#6d7770;line-height:1.7}.reset-btn,.secondary-btn,.join-btn{width:fit-content;background:#a03a2f;color:#fffdf8;box-shadow:0 14px 26px #a03a2f2e}@media(max-width:1040px){.analyzer-workspace{grid-template-columns:1fr}.workspace-intro{position:static}.result-details{grid-template-columns:1fr}}@media(max-width:720px){.top-nav{position:static;flex-direction:column;align-items:stretch}.nav-links{width:100%}.nav-links a{flex:1;min-width:0}.content{padding:18px}.feature-metrics,.form-grid,.form-grid.two-columns,.form-grid.three-columns,.toggle-grid,.event-grid,.results-grid{grid-template-columns:1fr}.event-card{grid-template-columns:minmax(0,1fr) 88px}.workspace-intro h1,.page-heading h1,.result-header h1{font-size:2.2rem}.panel-heading-row,.panel-title-row,.detail-card-heading{align-items:flex-start}.tile-showcase img{width:38px;height:54px}}.game-container{display:grid;gap:18px}.loading-state{min-height:320px;place-items:center;color:#526057;font-weight:900}.game-topbar{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;border:1px solid rgba(26,35,30,.1);border-radius:8px;background:linear-gradient(135deg,#1d6f521a,#a03a2f0f),#fffdf8f0;box-shadow:0 18px 36px #1f2d2414;padding:clamp(20px,3vw,30px)}.game-topbar h1{margin:8px 0;color:#142018;font-size:clamp(2rem,4vw,3.7rem);line-height:1.05;letter-spacing:0}.game-topbar p{margin:0;color:#58645d;line-height:1.7}.room-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px}.ghost-btn{border:1px solid rgba(26,35,30,.12);background:#fffdf8;color:#26322b}.danger-btn{background:#a03a2f;color:#fffdf8;box-shadow:0 14px 26px #a03a2f33}.game-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.game-summary div{min-width:0;border:1px solid rgba(26,35,30,.1);border-radius:8px;background:#fffdf8f0;padding:14px 16px}.game-summary span,.score-name small,.round-list small{color:#6a746d;font-size:.78rem;font-weight:800}.game-summary strong{display:block;margin-top:6px;overflow:hidden;color:#17211b;font-size:1.08rem;font-weight:900;text-overflow:ellipsis;white-space:nowrap}.game-dashboard{display:grid;grid-template-columns:minmax(320px,.85fr) minmax(360px,1.15fr);grid-template-areas:"score table" "history table";gap:18px;align-items:start}.score-panel,.table-panel,.history-panel{border:1px solid rgba(26,35,30,.1);border-radius:8px;background:#fffdf8f0;box-shadow:0 18px 36px #1f2d2414;padding:clamp(18px,3vw,24px)}.score-panel{grid-area:score}.table-panel{grid-area:table}.history-panel{grid-area:history}.panel-badge{background:#eef4ef;color:#1d6f52}.score-list{display:grid;gap:10px;margin-top:18px}.score-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;gap:12px;align-items:center;width:100%;min-height:78px;border:1px solid rgba(26,35,30,.08);border-radius:8px;background:#fffaf1;color:#17211b;padding:10px 12px;text-align:left;cursor:pointer;transition:border-color .16s ease,transform .16s ease,box-shadow .16s ease}.score-row:hover{border-color:#1d6f5259;box-shadow:0 12px 22px #1f2d2414;transform:translateY(-1px)}.score-row.dealer{background:#f1f7ed}.seat-tile{display:grid;grid-template-columns:24px 1fr;gap:6px;align-items:center;min-width:54px;color:#1d6f52;font-weight:900}.seat-tile img{width:24px;height:34px;object-fit:contain}.score-name{display:grid;gap:3px;min-width:0}.score-name strong,.score-name small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dealer-chip{background:#d8a640;color:#17211b}.score-row>strong{font-size:1.18rem;letter-spacing:0}.mahjong-layout{position:relative;width:min(100%,650px);aspect-ratio:1 / 1;margin:0 auto;border:1px solid rgba(10,55,40,.22);border-radius:8px;background:linear-gradient(135deg,#ffffff14,#0000000a),#1f6b50;box-shadow:inset 0 0 0 18px #1420181f,inset 0 0 70px #0f1c1440}.table-center{position:absolute;top:50%;left:50%;display:grid;width:34%;height:34%;place-items:center;border:1px solid rgba(255,253,248,.24);border-radius:8px;background:#132a2085;color:#fffdf8;transform:translate(-50%,-50%) rotate(45deg)}.table-center>*{transform:rotate(-45deg)}.table-center img{width:30px;height:42px;object-fit:contain;filter:drop-shadow(0 6px 7px rgba(0,0,0,.2))}.table-center span{color:#f5e6c2;font-weight:900}.table-center strong{color:#fffdf8;font-size:2.2rem;line-height:1}.table-center small{color:#d7e9de;font-weight:800}.player-seat{position:absolute;display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto auto;gap:3px 9px;width:34%;min-height:78px;border:2px solid rgba(255,253,248,.65);border-radius:8px;background:#fffdf8;color:#17211b;padding:10px;box-shadow:0 14px 30px #12221a3d;cursor:pointer;transition:transform .16s ease,border-color .16s ease}.player-seat:hover,.player-seat.dealer{border-color:#d8a640}.seat-wind{display:grid;grid-row:span 2;width:34px;height:46px;place-items:center;border-radius:7px;background:#e8f4ee;color:#1d6f52;font-weight:900}.seat-name,.player-seat strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.seat-name{color:#17211b;font-weight:900}.player-seat strong{font-size:1.05rem}.pos-bottom{bottom:4%;left:50%;transform:translate(-50%)}.pos-bottom:hover{transform:translate(-50%) translateY(-2px)}.pos-top{top:4%;left:50%;transform:translate(-50%)}.pos-top:hover{transform:translate(-50%) translateY(-2px)}.pos-left{top:50%;left:4%;transform:translateY(-50%)}.pos-left:hover{transform:translateY(-50%) translateY(-2px)}.pos-right{top:50%;right:4%;transform:translateY(-50%)}.pos-right:hover{transform:translateY(-50%) translateY(-2px)}.round-list{display:grid;gap:10px;margin:18px 0 0;padding:0;list-style:none}.round-list li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;align-items:center;border:1px solid rgba(26,35,30,.08);border-radius:8px;background:#fffaf1;padding:12px}.round-id{display:grid;width:42px;height:42px;place-items:center;border-radius:8px;background:#f0eadf;color:#526057;font-weight:900}.round-list strong,.round-list small{display:block;min-width:0;overflow-wrap:anywhere}.round-list strong{color:#17211b}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:grid;place-items:center;padding:20px;background:#121d169e;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.modal-content{position:relative;width:min(940px,100%);max-height:min(900px,92vh);overflow:auto;border:1px solid rgba(26,35,30,.12);border-radius:8px;background:#f9f5ec;box-shadow:0 30px 80px #0a120e52;padding:clamp(20px,3vw,30px)}.win-modal{width:min(460px,100%)}.analyzer-modal{width:min(1040px,100%)}.close-modal{position:absolute;top:14px;right:14px;display:grid;width:38px;height:38px;place-items:center;border:1px solid rgba(26,35,30,.12);border-radius:8px;background:#fffdf8;color:#526057;cursor:pointer;font-size:1.4rem;line-height:1}.modal-content h2{margin:8px 44px 16px 0;color:#142018;font-size:1.8rem;letter-spacing:0}.win-form{display:grid;gap:16px}.segmented-control{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;padding:5px;border:1px solid rgba(26,35,30,.1);border-radius:8px;background:#f0eadf}.segmented-control button{min-height:42px;border-radius:7px;background:transparent;color:#526057;font-weight:900;cursor:pointer}.segmented-control button.active{background:#fffdf8;color:#1d6f52;box-shadow:0 6px 14px #1f2d241a}.modal-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.secondary-btn{width:100%;background:#fffdf8;color:#1d6f52;border:1px solid rgba(29,111,82,.18);box-shadow:none}@media(max-width:1080px){.game-dashboard{grid-template-columns:1fr;grid-template-areas:"table" "score" "history"}.mahjong-layout{max-width:620px}}@media(max-width:740px){.game-topbar{align-items:stretch;flex-direction:column}.room-actions{justify-content:flex-start}.game-summary{grid-template-columns:1fr 1fr}.score-row{grid-template-columns:auto minmax(0,1fr) auto}.dealer-chip{display:none}.player-seat{width:40%;min-height:68px;padding:8px}.seat-wind{width:30px;height:38px}.modal-actions{grid-template-columns:1fr}}@media(max-width:520px){.game-summary{grid-template-columns:1fr}.mahjong-layout{min-width:300px}.player-seat{width:45%;grid-template-columns:auto minmax(0,1fr)}.player-seat strong{font-size:.92rem}}.lobby-page{display:grid;gap:28px}.lobby-heading{max-width:860px}.lobby-grid{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(300px,.72fr);gap:18px;align-items:start}.lobby-panel{border:1px solid rgba(26,35,30,.1);border-radius:8px;background:#fffdf8f0;box-shadow:0 18px 36px #1f2d2414;padding:clamp(20px,3vw,30px)}.player-name-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:20px}.player-field>span{display:inline-flex;align-items:center;gap:8px}.player-field img{width:22px;height:30px;object-fit:contain}.base-score-field{margin-top:16px}.table-preview{position:relative;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:22px 0;padding:16px;border:1px solid rgba(26,35,30,.1);border-radius:8px;background:linear-gradient(135deg,#1d6f521f,#d8a64014),#f9f3e8}.table-preview:after{position:absolute;inset:50% auto auto 50%;width:70px;height:70px;border:1px solid rgba(26,35,30,.1);border-radius:8px;background:#1d6f52;content:"";transform:translate(-50%,-50%) rotate(45deg)}.table-preview span{position:relative;z-index:1;display:inline-flex;min-width:0;align-items:center;gap:8px;border:1px solid rgba(26,35,30,.1);border-radius:8px;background:#fffdf8;padding:10px;color:#17211b;font-weight:900;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table-preview img{width:22px;height:30px;object-fit:contain;flex:0 0 auto}.join-panel{display:grid;gap:22px}.room-code-field{display:grid;gap:10px}.room-code-field span{color:#526057;font-size:.86rem;font-weight:900}.room-code-field input{min-height:66px;text-align:center;text-transform:uppercase;color:#142018;font-size:1.8rem;font-weight:900;letter-spacing:0}.join-btn{width:100%}.join-footnote{display:flex;flex-wrap:wrap;gap:8px;padding-top:4px}.join-footnote span{display:inline-flex;min-height:30px;align-items:center;border-radius:999px;background:#f0eadf;color:#526057;padding:0 10px;font-size:.78rem;font-weight:800}@media(max-width:900px){.lobby-grid{grid-template-columns:1fr}}@media(max-width:620px){.player-name-grid,.table-preview{grid-template-columns:1fr}.table-preview:after{display:none}}
