| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- .popup-modal {
- // ── 오버레이 ──────────────────────────────────
- &__overlay {
- position: fixed;
- inset: 0;
- z-index: 9999;
- display: flex;
- align-items: center;
- justify-content: center;
- background: var(--overlay-color);
- -webkit-backdrop-filter: blur(4px);
- backdrop-filter: blur(4px);
- animation: popupFadeIn 0.2s ease-out;
- }
- // ── 컨테이너 ─────────────────────────────────
- &__container {
- position: relative;
- width: 90%;
- max-width: 500px;
- max-height: 80vh;
- background: var(--bg-page);
- border-radius: 12px;
- overflow: hidden;
- box-shadow: 0 20px 60px var(--overlay-color);
- animation: popupSlideUp 0.25s ease-out;
- }
- // ── 본문 ─────────────────────────────────────
- &__body {
- max-height: calc(80vh - 50px);
- overflow-y: auto;
- .swiper {
- width: 100%;
- }
- .swiper-button-prev,
- .swiper-button-next {
- color: #fff;
- background: var(--overlay-color);
- width: 36px;
- height: 36px;
- border-radius: 50%;
- transition: background 0.2s;
- &:hover {
- background: var(--overlay-color);
- }
- &::after {
- font-size: 14px;
- font-weight: bold;
- }
- }
- .swiper-pagination-bullet {
- background: #fff;
- opacity: 0.5;
- &-active {
- opacity: 1;
- background: var(--color-primary-600, #2563eb);
- }
- }
- }
- // ── 슬라이드 ─────────────────────────────────
- &__slide {
- padding: 24px;
- }
- &__slide-subject {
- font-size: 1.15rem;
- font-weight: 700;
- margin-bottom: 12px;
- color: var(--text-primary);
- line-height: 1.4;
- }
- &__slide-content {
- font-size: 0.95rem;
- line-height: 1.7;
- color: var(--text-primary);
- word-break: keep-all;
- img {
- max-width: 100%;
- height: auto;
- border-radius: 8px;
- }
- a {
- color: var(--color-primary-600, #2563eb);
- text-decoration: underline;
- }
- }
- &__slide-link {
- display: block;
- text-decoration: none;
- color: inherit;
- cursor: pointer;
- &:hover .popup-modal__slide-content {
- opacity: 0.85;
- }
- }
- // ── 하단 ─────────────────────────────────────
- &__footer {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 10px 16px;
- border-top: 1px solid var(--border-default);
- background: var(--bg-elevated);
- }
- &__dismiss {
- display: flex;
- align-items: center;
- gap: 6px;
- cursor: pointer;
- -webkit-user-select: none;
- user-select: none;
- input[type='checkbox'] {
- width: 16px;
- height: 16px;
- accent-color: var(--color-primary-600, #2563eb);
- cursor: pointer;
- }
- span {
- font-size: 0.85rem;
- color: var(--text-secondary);
- }
- }
- &__close {
- padding: 6px 16px;
- font-size: 0.85rem;
- font-weight: 600;
- color: var(--text-secondary);
- background: var(--border-default);
- border: none;
- border-radius: 6px;
- cursor: pointer;
- transition: background 0.15s;
- &:hover {
- background: var(--border-strong);
- }
- }
- // ── 반응형 ───────────────────────────────────
- @media (max-width: 480px) {
- &__container {
- width: 95%;
- max-height: 85vh;
- border-radius: 10px;
- }
- &__slide {
- padding: 16px;
- }
- &__slide-subject {
- font-size: 1.05rem;
- }
- &__body {
- .swiper-button-prev,
- .swiper-button-next {
- width: 30px;
- height: 30px;
- &::after {
- font-size: 12px;
- }
- }
- }
- }
- }
- // ── 애니메이션 ───────────────────────────────────
- @keyframes popupFadeIn {
- from { opacity: 0; }
- to { opacity: 1; }
- }
- @keyframes popupSlideUp {
- from { opacity: 0; transform: translateY(20px); }
- to { opacity: 1; transform: translateY(0); }
- }
|