.overlay { position: fixed; inset: 0; background: var(--modal-overlay-bg); backdrop-filter: blur(var(--modal-overlay-blur)); -webkit-backdrop-filter: blur(var(--modal-overlay-blur)); display: flex; align-items: center; justify-content: center; z-index: 300; padding: 12px; } .overlayIn { animation: overlayIn 0.22s ease forwards; } .overlayOut { animation: overlayOut 0.22s ease forwards; } .modal { width: 100%; max-width: 720px; max-height: calc(100vh - 24px); display: flex; flex-direction: column; background: var(--elevated-surface, var(--surface)); border: 1px solid var(--glass-border); border-radius: var(--radius); box-shadow: 0 20px 60px rgba(var(--primary-rgb) / 0.16); overflow: hidden; } .modalIn { animation: modalIn 0.22s ease forwards; } .modalOut { animation: modalOut 0.22s ease forwards; } .header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding: 14px 16px 10px; border-bottom: 1px solid rgba(148, 163, 184, 0.18); flex-shrink: 0; } .headerText { min-width: 0; display: flex; flex-direction: column; gap: 4px; } .headerBadge { display: inline-flex; align-items: center; gap: 6px; width: fit-content; padding: 3px 8px; border-radius: 999px; font-size: 11px; font-weight: 600; color: var(--primary); background: rgba(var(--primary-rgb) / 0.12); } .title { margin: 0; font-size: 16px; font-weight: 700; color: var(--text-primary); } .subtitle { margin: 0; font-size: 12px; color: var(--text-secondary); } .closeBtn { width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; color: var(--text-muted); flex-shrink: 0; transition: background 0.15s, color 0.15s; } .closeBtn:hover { background: rgba(var(--primary-rgb) / 0.1); color: var(--primary); } .body { padding: 12px 16px 16px; overflow: auto; display: flex; flex-direction: column; gap: 10px; } .section { display: flex; flex-direction: column; gap: 8px; padding: 10px 12px; border-radius: 12px; background: rgba(148, 163, 184, 0.06); border: 1px solid rgba(148, 163, 184, 0.14); } .sectionTitle { margin: 0; font-size: 12px; font-weight: 700; color: var(--text-primary); } .planGrid { display: grid; grid-template-columns: 0.9fr 1.5fr; gap: 10px; align-items: start; } .field { display: flex; flex-direction: column; gap: 4px; min-width: 0; } .field label { font-size: 11px; font-weight: 600; color: var(--text-secondary); } .field input:not([type='range']), .field select { width: 100%; height: 34px; padding: 0 10px; font-size: 13px; color: var(--text); background: var(--surface); border: 1px solid rgba(148, 163, 184, 0.28); border-radius: var(--radius-sm); outline: none; } .field select { cursor: pointer; } .field input:not([type='range']):focus, .field select:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary-rgb) / 0.12); } .field input:disabled, .field select:disabled { opacity: 0.6; cursor: not-allowed; } .sliderHeader { display: flex; align-items: center; justify-content: space-between; gap: 8px; } .sliderValue { font-size: 12px; font-weight: 700; color: var(--primary); font-variant-numeric: tabular-nums; direction: ltr; unicode-bidi: isolate; } .slider { width: 100%; height: 28px; margin: 0; padding: 0; accent-color: var(--primary); cursor: pointer; background: transparent; border: none; direction: ltr; } .slider:disabled { opacity: 0.55; cursor: not-allowed; } .sliderMeta { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-size: 10px; color: var(--text-muted); font-variant-numeric: tabular-nums; direction: ltr; } .sliderMeta > span:nth-child(2) { direction: inherit; text-align: center; flex: 1; } .hint { margin: 0; font-size: 10px; line-height: 1.35; color: var(--text-muted); } .warning { padding: 8px 10px; border-radius: 8px; font-size: 12px; color: #b45309; background: rgba(245, 158, 11, 0.12); border: 1px solid rgba(245, 158, 11, 0.28); } .emptyResult { margin: 0; padding: 12px; text-align: center; font-size: 12px; color: var(--text-muted); } .summaryGrid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; } .summaryCard { display: flex; flex-direction: column; gap: 4px; padding: 8px 10px; border-radius: 10px; background: var(--surface); border: 1px solid rgba(148, 163, 184, 0.16); } .summaryCardWide { grid-column: 1 / -1; } .summaryLabel { font-size: 10px; font-weight: 600; color: var(--text-muted); } .summaryValue { font-size: 14px; font-weight: 700; color: var(--text-primary); font-variant-numeric: tabular-nums; font-feature-settings: 'tnum' 1; direction: ltr; unicode-bidi: isolate; font-family: var(--font-en), var(--font-ui); letter-spacing: -0.02em; } .schedule { display: flex; flex-direction: column; gap: 6px; } .scheduleHead { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-size: 11px; font-weight: 700; color: var(--text-secondary); } .scheduleList { display: flex; flex-direction: column; max-height: 180px; overflow: auto; border-radius: 10px; border: 1px solid rgba(148, 163, 184, 0.16); background: var(--surface); } .scheduleRow { display: grid; grid-template-columns: 72px 1fr auto; gap: 8px; align-items: center; padding: 7px 10px; border-bottom: 1px solid rgba(148, 163, 184, 0.12); } .scheduleRow:last-child { border-bottom: none; } .scheduleIndex { font-size: 12px; font-weight: 600; color: var(--text-muted); } .scheduleDate { font-size: 13px; color: var(--text-secondary); } .scheduleAmount { font-size: 13px; font-weight: 700; color: var(--text-primary); font-variant-numeric: tabular-nums; direction: ltr; unicode-bidi: isolate; font-family: var(--font-en), var(--font-ui); } @keyframes overlayIn { from { opacity: 0; } to { opacity: 1; } } @keyframes overlayOut { from { opacity: 1; } to { opacity: 0; } } @keyframes modalIn { from { opacity: 0; transform: translateY(10px) scale(0.98); } to { opacity: 1; transform: translateY(0) scale(1); } } @keyframes modalOut { from { opacity: 1; transform: translateY(0) scale(1); } to { opacity: 0; transform: translateY(8px) scale(0.98); } } @media (max-width: 700px) { .planGrid, .summaryGrid { grid-template-columns: 1fr; } .scheduleRow { grid-template-columns: 1fr auto; } .scheduleIndex { grid-column: 1 / -1; } }