:root{--ubet-bg: #f8fafc;--ubet-surface: #ffffff;--ubet-surface-muted: #f1f5f9;--ubet-text: #0f172a;--ubet-text-muted: #64748b;--ubet-border: #e2e8f0;--ubet-primary: #4f46e5;--ubet-primary-hover: #4338ca;--ubet-primary-soft: #eef2ff;--ubet-danger: #dc2626;--ubet-danger-soft: #fef2f2;--ubet-warning: #b45309;--ubet-warning-soft: #fffbeb;--ubet-success: #15803d;--ubet-success-soft: #f0fdf4;--ubet-radius: 12px;--ubet-radius-sm: 8px;--ubet-shadow: 0 1px 3px rgba(15, 23, 42, .08);--ubet-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;--ubet-safe-bottom: env(safe-area-inset-bottom, 0px)}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--ubet-bg);color:var(--ubet-text);font-family:var(--ubet-font);-webkit-font-smoothing:antialiased}body{line-height:1.5}a{color:var(--ubet-primary);text-decoration:none}a:hover{color:var(--ubet-primary-hover)}h1,h2,h3,p,ul{margin-top:0}button,input,textarea,select{font:inherit}.app-shell{max-width:480px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column;background:var(--ubet-bg)}.app-header{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;background:var(--ubet-surface);border-bottom:1px solid var(--ubet-border);box-shadow:var(--ubet-shadow)}.app-brand{font-size:18px;font-weight:800;letter-spacing:-.02em;color:var(--ubet-text)}.app-balance{font-size:13px;font-weight:600;color:var(--ubet-primary);background:var(--ubet-primary-soft);padding:6px 10px;border-radius:999px;white-space:nowrap}.app-main{flex:1;padding:16px 16px calc(88px + var(--ubet-safe-bottom))}.app-bottom-nav{position:fixed;left:50%;transform:translate(-50%);bottom:0;width:min(480px,100%);display:grid;grid-template-columns:repeat(4,1fr);gap:4px;padding:8px 8px calc(8px + var(--ubet-safe-bottom));background:var(--ubet-surface);border-top:1px solid var(--ubet-border);box-shadow:0 -4px 16px #0f172a0f}.app-nav-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:8px 4px;border-radius:var(--ubet-radius-sm);color:var(--ubet-text-muted);font-size:11px;font-weight:600;text-decoration:none;transition:background .15s,color .15s}.app-nav-item:hover,.app-nav-item.active{color:var(--ubet-primary);background:var(--ubet-primary-soft)}.app-nav-icon{font-size:18px;line-height:1}.page-title{margin:0 0 4px;font-size:24px;font-weight:800;letter-spacing:-.02em}.page-subtitle{margin:0 0 16px;color:var(--ubet-text-muted);font-size:14px}.card{background:var(--ubet-surface);border:1px solid var(--ubet-border);border-radius:var(--ubet-radius);padding:16px;box-shadow:var(--ubet-shadow)}.card-muted{background:var(--ubet-surface-muted);border-color:transparent}.balance-hero{display:flex;flex-direction:column;gap:4px}.balance-hero__amount{font-size:28px;font-weight:800;letter-spacing:-.03em}.balance-hero__sub{color:var(--ubet-text-muted);font-size:14px}.quick-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:16px}.quick-link{display:flex;align-items:center;justify-content:center;min-height:56px;padding:12px;border:1px solid var(--ubet-border);border-radius:var(--ubet-radius);background:var(--ubet-surface);color:var(--ubet-text);font-weight:600;text-align:center;box-shadow:var(--ubet-shadow);transition:border-color .15s,transform .15s}.quick-link:hover{border-color:var(--ubet-primary);color:var(--ubet-primary);transform:translateY(-1px)}.list-card{list-style:none;margin:0;padding:0;background:var(--ubet-surface);border:1px solid var(--ubet-border);border-radius:var(--ubet-radius);overflow:hidden}.list-card li{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 14px;border-top:1px solid var(--ubet-border)}.list-card li:first-child{border-top:none}.list-card__meta{color:var(--ubet-text-muted);font-size:13px}.bet-summary{flex:1;min-width:0}.bet-summary__head{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.bet-summary__order{font-weight:700;font-size:15px;word-break:break-all}.bet-summary__status{flex-shrink:0;font-weight:600;color:var(--ubet-text)}.bet-summary__line{margin:4px 0 0;font-size:14px;line-height:1.5}.section-header{display:flex;align-items:center;justify-content:space-between;margin:24px 0 10px}.section-header h2{margin:0;font-size:18px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 16px;border:1px solid transparent;border-radius:var(--ubet-radius-sm);font-weight:600;cursor:pointer;transition:background .15s,border-color .15s,opacity .15s}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--ubet-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--ubet-primary-hover)}.btn-secondary{background:var(--ubet-surface);border-color:var(--ubet-border);color:var(--ubet-text)}.btn-ghost{background:transparent;color:var(--ubet-text-muted);min-height:auto;padding:6px 10px;font-size:13px}.btn-block{width:100%}.input,.textarea{width:100%;min-height:44px;padding:10px 12px;border:1px solid var(--ubet-border);border-radius:var(--ubet-radius-sm);background:var(--ubet-surface);color:var(--ubet-text)}.input:focus,.textarea:focus{outline:2px solid var(--ubet-primary-soft);border-color:var(--ubet-primary)}.textarea{min-height:96px;resize:vertical}.field-label{display:block;margin-bottom:12px;font-size:14px;font-weight:600}.field-label span{display:block;margin-bottom:6px;color:var(--ubet-text-muted);font-weight:500}.alert{padding:12px 14px;border-radius:var(--ubet-radius-sm);font-size:14px}.alert-error{background:var(--ubet-danger-soft);border:1px solid #fecaca;color:var(--ubet-danger)}.alert-warning{background:var(--ubet-warning-soft);border:1px solid #fde68a;color:var(--ubet-warning)}.status-badge{display:inline-block;padding:3px 8px;border-radius:999px;font-size:11px;font-weight:700;white-space:nowrap}.status-pending{background:#fff3cd;color:#856404}.status-confirmed{background:#dbeafe;color:#1e40af}.status-settling{background:#e0e7ff;color:#3730a3}.status-won{background:var(--ubet-success-soft);color:var(--ubet-success)}.status-lost{background:var(--ubet-danger-soft);color:#991b1b}.status-void{background:#e2e8f0;color:#475569}.status-settle_error{background:#fecaca;color:#991b1b}.login-page{max-width:420px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column;justify-content:center;padding:24px 16px}.login-card{background:var(--ubet-surface);border:1px solid var(--ubet-border);border-radius:var(--ubet-radius);padding:24px;box-shadow:var(--ubet-shadow)}.loading-screen{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--ubet-text-muted)}.loading-spinner{width:28px;height:28px;border:3px solid var(--ubet-border);border-top-color:var(--ubet-primary);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.back-link{display:inline-flex;align-items:center;gap:4px;margin-bottom:12px;font-size:14px;font-weight:600}.game-card{display:block;padding:16px;background:var(--ubet-surface);border:1px solid var(--ubet-border);border-radius:var(--ubet-radius);color:var(--ubet-text);box-shadow:var(--ubet-shadow);transition:border-color .15s,transform .15s}.game-card:hover{border-color:var(--ubet-primary);transform:translateY(-1px)}.game-card+.game-card{margin-top:10px}.game-card__title{font-size:17px;font-weight:700}.game-card__desc{margin-top:4px;color:var(--ubet-text-muted);font-size:13px}.game-detail-page{padding-bottom:calc(24px + var(--ubet-safe-bottom))}.game-detail-page--bet-bar{padding-bottom:calc(132px + var(--ubet-safe-bottom))}.game-panel{display:flex;flex-direction:column;gap:16px}.game-mode-section{background:var(--ubet-surface);border:1px solid var(--ubet-border);border-radius:var(--ubet-radius);padding:14px;box-shadow:var(--ubet-shadow);transition:border-color .15s,box-shadow .15s}.game-mode-section--active{border-color:var(--ubet-primary);box-shadow:0 0 0 1px var(--ubet-primary-soft)}.game-mode-section__title{margin:0 0 6px;font-size:15px;font-weight:700;line-height:1.4}.game-mode-section__prompt{margin:0 0 12px;color:var(--ubet-text-muted);font-size:14px}.side-grid{display:grid;gap:8px}.side-chip{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;min-height:52px;padding:10px 6px;border:1px solid var(--ubet-border);border-radius:var(--ubet-radius-sm);background:var(--ubet-surface);color:var(--ubet-text);cursor:pointer;transition:border-color .15s,background .15s,transform .1s}.side-chip:active{transform:scale(.98)}.side-chip--selected{border-color:var(--ubet-primary);background:var(--ubet-primary-soft);color:var(--ubet-primary-hover)}.side-chip__label{font-size:16px;font-weight:700}.side-chip__odds{font-size:12px;color:var(--ubet-text-muted);font-weight:600}.side-chip--selected .side-chip__odds{color:var(--ubet-primary)}.bet-focus-bar{position:fixed;left:50%;transform:translate(-50%);bottom:calc(72px + var(--ubet-safe-bottom));width:min(448px,calc(100% - 32px));display:flex;align-items:flex-start;gap:12px;padding:12px 14px;background:var(--ubet-surface);border:1px solid var(--ubet-border);border-radius:var(--ubet-radius);box-shadow:0 8px 24px #0f172a1f;z-index:9}.bet-focus-bar__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}.bet-focus-bar__text{flex:1;min-width:0}.bet-focus-bar__game{font-size:12px;color:var(--ubet-text-muted);font-weight:600}.bet-focus-bar__pick{font-size:14px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bet-focus-bar__amount{width:100%;min-height:36px;padding:8px 10px;border:1px solid var(--ubet-border);border-radius:var(--ubet-radius-sm);background:var(--ubet-bg);color:var(--ubet-text);font-size:14px}.bet-focus-bar__amount:focus{outline:none;border-color:var(--ubet-primary);box-shadow:0 0 0 2px var(--ubet-primary-soft)}.bet-focus-bar__amount--error{border-color:var(--ubet-danger)}.bet-focus-bar__amount::placeholder{color:var(--ubet-text-muted);font-size:13px}.bet-focus-bar__error{margin:0;font-size:12px;color:var(--ubet-danger);line-height:1.3}.bet-focus-bar__cta{flex-shrink:0;align-self:center;min-height:40px;min-width:64px;padding:8px 14px;font-size:14px}.bet-confirm-card{margin-bottom:12px}.bet-confirm-card__game{margin:0 0 4px;font-size:13px;color:var(--ubet-text-muted);font-weight:600}.bet-confirm-card__pick{margin:0 0 8px;font-size:18px;font-weight:800}.bet-confirm-card__hint{margin:0;font-size:13px;color:var(--ubet-text-muted);line-height:1.5}.bet-confirm-balance{margin:0 0 12px;font-size:14px;color:var(--ubet-text-muted)}.amount-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.amount-chip{min-height:36px;padding:6px 14px;border:1px solid var(--ubet-border);border-radius:999px;background:var(--ubet-surface);color:var(--ubet-text);font-weight:600;font-size:14px;cursor:pointer}.amount-chip--active{border-color:var(--ubet-primary);background:var(--ubet-primary-soft);color:var(--ubet-primary)}.bet-confirm-footnote{margin:12px 0 0;text-align:center;font-size:13px;color:var(--ubet-text-muted)}.bet-preview{margin-top:16px}.bet-preview__title{margin:0 0 8px;font-weight:700;font-size:14px}.bet-preview__table{width:100%;border-collapse:collapse;font-size:14px}.bet-preview__table td{padding:4px 0}.bet-preview__table td:first-child{color:var(--ubet-text-muted)}.bet-preview__table td:last-child{text-align:right}.bet-preview__strong{font-weight:700}.order-no-line{font-family:ui-monospace,monospace;word-break:break-all}.order-status-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px}.order-status-bar__hint{font-size:13px;color:var(--ubet-text-muted)}.order-status-bar__polling{font-size:12px;color:var(--ubet-text-muted)}.tab-bar{display:flex;gap:8px;margin-bottom:12px;padding:4px;background:var(--ubet-surface-muted);border-radius:var(--ubet-radius-sm)}.tab-bar__btn{flex:1;min-height:40px;border:none;border-radius:6px;background:transparent;color:var(--ubet-text-muted);font-weight:600;cursor:pointer}.tab-bar__btn--active{background:var(--ubet-surface);color:var(--ubet-primary);box-shadow:var(--ubet-shadow)}.detail-tx{margin:12px 0 0;font-size:13px;word-break:break-all}.detail-tx small{color:var(--ubet-text-muted)}.draw-verify{background:var(--ubet-surface);border:1px solid var(--ubet-border);border-radius:var(--ubet-radius);padding:16px}.draw-verify__title{margin:0 0 12px;font-size:17px}.verify-kv{margin:0 0 16px;display:grid;grid-template-columns:auto 1fr;gap:6px 12px;font-size:14px}.verify-kv dt{color:var(--ubet-text-muted);font-weight:600}.verify-kv dd{margin:0;word-break:break-all}.verify-status{padding:10px 12px;border-radius:var(--ubet-radius-sm);font-size:14px;font-weight:600;margin-bottom:16px}.verify-status--verified{background:var(--ubet-success-soft);color:var(--ubet-success)}.verify-status--mismatch{background:var(--ubet-danger-soft);color:var(--ubet-danger)}.verify-section{margin-bottom:16px;padding-top:12px;border-top:1px solid var(--ubet-border)}.verify-section h4{margin:0 0 8px;font-size:15px}.verify-section--rule .verify-rule{margin:0 0 8px;font-size:13px;color:var(--ubet-text-muted);line-height:1.5}.verify-row{display:flex;flex-direction:column;gap:2px;margin-bottom:8px;font-size:13px}.verify-row__label{color:var(--ubet-text-muted);font-weight:600}.verify-row__value{word-break:break-all}.verify-steps{margin:0;padding-left:1.2rem;font-size:13px;color:var(--ubet-text-muted)}.verify-footnote{margin:0;padding-top:12px;border-top:1px solid var(--ubet-border);font-size:12px;color:var(--ubet-text-muted)}.order-detail__head{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;margin-bottom:8px}.order-detail__order-no{font-weight:700;font-size:15px;word-break:break-all}.order-detail__status{flex-shrink:0;font-weight:600;font-size:14px}.order-detail-status--placing,.order-detail-status--pending,.order-detail-status--drawn{color:var(--ubet-text-muted)}.order-detail-status--win{color:var(--ubet-danger)}.order-detail-status--loss,.order-detail-status--cancelled{color:var(--ubet-text-muted)}.order-detail__line{margin:6px 0 0;font-size:14px;line-height:1.55}.order-detail__pick{font-weight:600}.order-detail__hint{margin:4px 0 0;font-size:12px;color:var(--ubet-text-muted);line-height:1.45}.order-detail__hint--block{margin-top:10px;padding-top:10px;border-top:1px dashed var(--ubet-border)}.explorer-link{font-weight:600;white-space:nowrap}.verify-block{margin-bottom:16px;padding:14px;background:var(--ubet-surface);border:1px solid var(--ubet-border);border-radius:var(--ubet-radius)}.verify-block__title{margin:0 0 10px;font-size:15px;font-weight:700}.verify-field__label{display:none}.verify-field__hint{margin-bottom:8px;font-size:12px;color:var(--ubet-text-muted);line-height:1.45}.verify-field__value{font-size:14px;line-height:1.6;word-break:break-all}.verify-field__value>div+div{margin-top:8px}.verify-hash{font-family:ui-monospace,monospace;font-size:13px;line-height:1.5}.verify-formula{margin-bottom:8px;font-size:13px;color:var(--ubet-text-muted)}.verify-tail{margin-top:8px;font-weight:600}.status-customer-pending{background:#fff3cd;color:#856404}.status-customer-settled{background:var(--ubet-success-soft);color:var(--ubet-success)}.status-customer-cancelled{background:#e2e8f0;color:#475569}.toast-host{position:fixed;left:50%;bottom:calc(72px + var(--ubet-safe-bottom));z-index:1000;max-width:min(420px,calc(100vw - 32px));padding:12px 16px;border-radius:var(--ubet-radius);background:#0f172aeb;color:#fff;font-size:14px;line-height:1.45;text-align:center;box-shadow:0 8px 24px #0f172a33;transform:translate(-50%);animation:toast-in .25s ease-out;pointer-events:none}@keyframes toast-in{0%{opacity:0;transform:translate(-50%) translateY(12px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.game-detail-page--odd-even{background:#0b1220;margin:0 -16px;padding:0 16px calc(24px + var(--ubet-safe-bottom))}.game-detail-page--odd-even .back-link{color:#94a3b8;padding-top:8px;display:inline-block}.odd-even-panel{display:flex;flex-direction:column;gap:12px;color:#e2e8f0}.odd-even-panel__title{margin:8px 0 4px;font-size:20px;font-weight:800;text-align:center}.oe-play-tabs{display:grid;grid-template-columns:1fr 1fr;gap:8px}.oe-play-tab{padding:12px 8px;border-radius:10px;border:1px solid #334155;background:#111827;color:#cbd5e1;font-size:13px;font-weight:600;cursor:pointer}.oe-play-tab--active{border-color:#38bdf8;box-shadow:0 0 0 1px #38bdf859;color:#f8fafc}.oe-card{background:#111827;border:1px solid #1e293b;border-radius:14px;padding:14px}.oe-card__rule{margin:0 0 12px;color:#94a3b8;font-size:12px;line-height:1.5}.oe-parity-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.oe-parity-btn{display:flex;flex-direction:column;align-items:center;gap:2px;min-height:52px;padding:8px 4px;border-radius:10px;border:1px solid #334155;background:#0f172a;color:#f1f5f9;cursor:pointer}.oe-parity-btn--selected{border-color:#38bdf8;background:#38bdf826}.oe-parity-btn__label{font-size:15px;font-weight:700}.oe-parity-btn__odds{font-size:11px;color:#94a3b8}.oe-pick-tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;margin-bottom:12px}.oe-pick-tab{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 2px;border-radius:8px;border:1px solid #334155;background:#0f172a;color:#cbd5e1;font-size:11px;font-weight:600;cursor:pointer}.oe-pick-tab--active{border-color:#38bdf8;background:#38bdf81f;color:#f8fafc}.oe-pick-tab__odds{font-size:10px;color:#64748b}.oe-digit-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:14px}.oe-digit-btn{width:100%;aspect-ratio:1;max-height:56px;border-radius:999px;border:1px solid #334155;background:#0f172a;color:#f8fafc;font-size:18px;font-weight:700;cursor:pointer}.oe-digit-btn--selected{border-color:#38bdf8;background:linear-gradient(180deg,#0ea5e9,#0284c7);box-shadow:0 0 12px #0ea5e973}.oe-digit-btn--disabled{opacity:.35;cursor:not-allowed}.oe-pick-footer{display:flex;flex-direction:column;gap:8px}.oe-pick-summary{margin:0;color:#38bdf8;font-size:14px;font-weight:600;text-align:center}.oe-pick-hint{margin:0;color:#fbbf24;font-size:12px;text-align:center}.oe-pick-confirm{width:100%}.oe-roadmaps{margin-top:4px;background:#111827;border:1px solid #1e293b;border-radius:14px;overflow:hidden}.oe-roadmaps__tabs{display:flex;border-bottom:1px solid #1e293b}.oe-roadmaps__tab{flex:1;position:relative;padding:12px 8px;border:none;background:transparent;color:#94a3b8;font-size:13px;font-weight:600;cursor:pointer}.oe-roadmaps__tab--active{color:#38bdf8;box-shadow:inset 0 -2px #38bdf8}.oe-roadmaps__hot{position:absolute;top:4px;right:8px;padding:1px 5px;border-radius:4px;background:#dc2626;color:#fff;font-size:9px;font-weight:700}.oe-roadmaps__panel{padding:12px;min-height:120px}.oe-roadmaps__hint{margin:0;color:#64748b;font-size:13px;text-align:center;padding:24px 0}.oe-road-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.oe-road-grid{display:grid;gap:4px;width:max-content;min-width:100%}.oe-road-grid__cell{display:flex;align-items:center;justify-content:center}.oe-road-cell{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:999px;font-size:11px;font-weight:700}.oe-road-cell--parity.oe-road-cell--odd,.oe-bead-cell--odd{background:#2563eb;color:#fff}.oe-road-cell--parity.oe-road-cell--even,.oe-bead-cell--even{background:#dc2626;color:#fff}.oe-road-cell--size.oe-road-cell--small{background:#0891b2;color:#fff}.oe-road-cell--size.oe-road-cell--big{background:#ea580c;color:#fff}.oe-bead-grid{display:grid;gap:4px;width:max-content}.oe-bead-cell{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:999px;font-size:11px;font-weight:700}.oe-bead-cell--empty{background:transparent}@media(max-width:380px){.oe-pick-tabs{grid-template-columns:repeat(3,1fr)}.oe-parity-grid{grid-template-columns:repeat(2,1fr)}}
