/* ============================================================ Dice Roller — bkbg-dr-* ============================================================ */ .bkbg-dr-wrap { box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; padding: 32px 24px; border-radius: 16px; max-width: var(--dr-max-width, 580px); margin: 0 auto; text-align: center; } /* ---- Header ---- */ .bkbg-dr-wrap .bkbg-dr-title { font-family: var(--bkbg-dr-ttl-font-family, inherit); font-weight: var(--bkbg-dr-ttl-font-weight, 700); font-size: var(--bkbg-dr-ttl-font-size-d, var(--bkbg-dr-ttl-fs, 26px)); line-height: var(--bkbg-dr-ttl-line-height-d, 1.25); letter-spacing: var(--bkbg-dr-ttl-letter-spacing-d, normal); word-spacing: var(--bkbg-dr-ttl-word-spacing-d, normal); text-transform: var(--bkbg-dr-ttl-text-transform, none); font-style: var(--bkbg-dr-ttl-font-style, normal); text-decoration: var(--bkbg-dr-ttl-text-decoration, none); color: var(--dr-title-color, #111827); margin: 0 0 5px; } .bkbg-dr-subtitle { font-family: var(--bkbg-dr-sub-font-family, inherit); font-weight: var(--bkbg-dr-sub-font-weight, normal); font-size: var(--bkbg-dr-sub-font-size-d, var(--bkbg-dr-sub-fs, 14px)); line-height: var(--bkbg-dr-sub-line-height-d, 1.5); letter-spacing: var(--bkbg-dr-sub-letter-spacing-d, normal); word-spacing: var(--bkbg-dr-sub-word-spacing-d, normal); text-transform: var(--bkbg-dr-sub-text-transform, none); font-style: var(--bkbg-dr-sub-font-style, normal); text-decoration: var(--bkbg-dr-sub-text-decoration, none); color: var(--dr-subtitle-color, #6b7280); margin: 0 0 18px; } /* ---- Controls ---- */ .bkbg-dr-controls { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin-bottom: 18px; align-items: flex-end; } .bkbg-dr-ctrl-group { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; } .bkbg-dr-ctrl-label { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .07em; color: var(--dr-label-color, #374151); } .bkbg-dr-select { padding: 8px 12px; border-radius: 9px; border: 1.5px solid #e5e7eb; font-size: 15px; font-weight: 700; color: var(--dr-label-color, #374151); background: #fff; cursor: pointer; outline: none; min-width: 70px; text-align: center; } .bkbg-dr-select:focus { border-color: var(--dr-accent, #dc2626); } .bkbg-dr-counter { display: flex; gap: 6px; align-items: center; } .bkbg-dr-counter-btn { width: 32px; height: 32px; border-radius: 8px; border: 1.5px solid #e5e7eb; background: #f9fafb; font-weight: 700; font-size: 16px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: background .15s, border-color .15s; color: var(--dr-label-color, #374151); } .bkbg-dr-counter-btn:hover { background: #e5e7eb; } .bkbg-dr-counter-val { font-size: 16px; font-weight: 700; color: var(--dr-label-color, #374151); width: 28px; text-align: center; } .bkbg-dr-mod-input { width: 60px; padding: 7px 8px; border-radius: 8px; border: 1.5px solid #e5e7eb; font-size: 14px; text-align: center; color: var(--dr-label-color, #374151); font-family: inherit; font-weight: 600; outline: none; } .bkbg-dr-mod-input:focus { border-color: var(--dr-accent, #dc2626); } /* ---- Roll button ---- */ .bkbg-dr-roll-btn { padding: 13px 38px; border-radius: 12px; border: none; background: var(--dr-accent, #dc2626); color: #fff; font-weight: 800; font-size: 16px; cursor: pointer; margin-bottom: 18px; letter-spacing: .02em; box-shadow: 0 4px 14px rgba(220,38,38,.3); transition: opacity .15s, transform .12s; } .bkbg-dr-roll-btn:hover { opacity: .9; } .bkbg-dr-roll-btn:active { transform: scale(.97); } .bkbg-dr-roll-btn.rolling { animation: dr-shake .35s ease; } @keyframes dr-shake { 0%,100% { transform: rotate(0deg); } 20% { transform: rotate(-8deg) scale(1.06); } 40% { transform: rotate(10deg) scale(1.1); } 60% { transform: rotate(-8deg) scale(1.06); } 80% { transform: rotate(6deg); } } /* ---- Dice display ---- */ .bkbg-dr-dice-row { display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; margin-bottom: 16px; min-height: 74px; } .bkbg-dr-die { width: 64px; height: 64px; border-radius: 14px; background: var(--dr-die-bg, #1e1b4b); color: var(--dr-die-face, #ffffff); display: flex; align-items: center; justify-content: center; font-size: 24px; font-weight: 800; font-family: 'Courier New', Courier, monospace; box-shadow: 0 4px 12px rgba(0,0,0,.3); transition: transform .15s; user-select: none; } .bkbg-dr-die.rolling { animation: dr-die-spin .35s ease; } @keyframes dr-die-spin { 0% { transform: scale(.6) rotate(-20deg); opacity:.4; } 60% { transform: scale(1.12) rotate(8deg); opacity:1; } 100% { transform: scale(1) rotate(0deg); } } /* ---- Total ---- */ .bkbg-dr-total-wrap { display: inline-flex; gap: 14px; align-items: center; background: var(--dr-total-bg, #fef2f2); border-radius: 14px; padding: 12px 24px; margin-bottom: 18px; } .bkbg-dr-total-label { font-size: 13px; font-weight: 600; color: var(--dr-label-color, #374151); } .bkbg-dr-total-val { font-size: 36px; font-weight: 800; color: var(--dr-total-color, #dc2626); line-height: 1; } /* ---- History ---- */ .bkbg-dr-history { border-radius: 12px; border: 1.5px solid #e5e7eb; overflow: hidden; text-align: left; } .bkbg-dr-hist-head { display: flex; justify-content: space-between; padding: 8px 14px; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .07em; color: var(--dr-label-color, #374151); background: #f3f4f6; } .bkbg-dr-hist-row { display: flex; justify-content: space-between; align-items: center; padding: 8px 14px; font-size: 13px; color: var(--dr-label-color, #374151); border-top: 1px solid #f3f4f6; transition: background .12s; } .bkbg-dr-hist-row:hover { background: #f9fafb; } .bkbg-dr-hist-reroll { background: none; border: none; color: var(--dr-accent, #dc2626); font-size: 11px; font-weight: 600; cursor: pointer; padding: 2px 6px; border-radius: 5px; transition: background .12s; } .bkbg-dr-hist-reroll:hover { background: rgba(220,38,38,.08); } /* ---- Responsive typography ---- */ @media (max-width: 1024px) { .bkbg-dr-wrap .bkbg-dr-title { font-size: var(--bkbg-dr-ttl-font-size-t, var(--bkbg-dr-ttl-font-size-d, var(--bkbg-dr-ttl-fs, 26px))); line-height: var(--bkbg-dr-ttl-line-height-t, var(--bkbg-dr-ttl-line-height-d, 1.25)); letter-spacing: var(--bkbg-dr-ttl-letter-spacing-t, var(--bkbg-dr-ttl-letter-spacing-d, normal)); word-spacing: var(--bkbg-dr-ttl-word-spacing-t, var(--bkbg-dr-ttl-word-spacing-d, normal)); } .bkbg-dr-subtitle { font-size: var(--bkbg-dr-sub-font-size-t, var(--bkbg-dr-sub-font-size-d, var(--bkbg-dr-sub-fs, 14px))); line-height: var(--bkbg-dr-sub-line-height-t, var(--bkbg-dr-sub-line-height-d, 1.5)); letter-spacing: var(--bkbg-dr-sub-letter-spacing-t, var(--bkbg-dr-sub-letter-spacing-d, normal)); word-spacing: var(--bkbg-dr-sub-word-spacing-t, var(--bkbg-dr-sub-word-spacing-d, normal)); } } @media (max-width: 767px) { .bkbg-dr-wrap .bkbg-dr-title { font-size: var(--bkbg-dr-ttl-font-size-m, var(--bkbg-dr-ttl-font-size-t, var(--bkbg-dr-ttl-font-size-d, var(--bkbg-dr-ttl-fs, 26px)))); line-height: var(--bkbg-dr-ttl-line-height-m, var(--bkbg-dr-ttl-line-height-t, var(--bkbg-dr-ttl-line-height-d, 1.25))); letter-spacing: var(--bkbg-dr-ttl-letter-spacing-m, var(--bkbg-dr-ttl-letter-spacing-t, var(--bkbg-dr-ttl-letter-spacing-d, normal))); word-spacing: var(--bkbg-dr-ttl-word-spacing-m, var(--bkbg-dr-ttl-word-spacing-t, var(--bkbg-dr-ttl-word-spacing-d, normal))); } .bkbg-dr-subtitle { font-size: var(--bkbg-dr-sub-font-size-m, var(--bkbg-dr-sub-font-size-t, var(--bkbg-dr-sub-font-size-d, var(--bkbg-dr-sub-fs, 14px)))); line-height: var(--bkbg-dr-sub-line-height-m, var(--bkbg-dr-sub-line-height-t, var(--bkbg-dr-sub-line-height-d, 1.5))); letter-spacing: var(--bkbg-dr-sub-letter-spacing-m, var(--bkbg-dr-sub-letter-spacing-t, var(--bkbg-dr-sub-letter-spacing-d, normal))); word-spacing: var(--bkbg-dr-sub-word-spacing-m, var(--bkbg-dr-sub-word-spacing-t, var(--bkbg-dr-sub-word-spacing-d, normal))); } } /* ---- Responsive ---- */ @media (max-width: 480px) { .bkbg-dr-wrap { padding: 20px 12px; } .bkbg-dr-die { width: 52px; height: 52px; font-size: 20px; } .bkbg-dr-controls { gap: 8px; } }