:root{ --w: 1200px; --h: 800px; --ink:#1e2430; /* 상점/버튼 */ --blue-btn:#ff8c2e; --green-btn:#8bd24a; /* 패널/라인 */ --panel:#eef2f7; --silver-1:#f5f5f5; --silver-2:#ececec; --silver-3:#bfc4cc; --line:#c7c7c7; /* 채팅 */ --chat-bg:#eef3fb; --chat-head:#dbe6f9; --chat-border:#cfd7e3; /* 가격 색 */ --price-orange:#ff7f2f; --price-green:#28a745; --price-pink:#d64fd6; } *{box-sizing:border-box} html,body{height:100%} body{ margin:0; display:grid; place-items:center; font-family:"Maplestory","Noto Sans KR",system-ui,-apple-system,Segoe UI,Roboto,"Apple SD Gothic Neo","맑은 고딕",sans-serif; color:var(--ink); } /* ===== FRAME ===== */ .shop{ width:var(--w); height:var(--h); background:linear-gradient(#ffffff, #f7f9fc); border:4px solid #9aa7b8; border-radius:14px; box-shadow:0 30px 60px rgba(0,0,0,.25), inset 0 1px 0 rgba(255,255,255,.8); overflow:hidden; position:relative; } /* 상단 */ .top{ display:grid; grid-template-columns:1fr 1fr; height:311px; background:linear-gradient(180deg,#f8fafc 0%,#f1f5fb 100%); border-bottom:4px solid #b94a4a; } .top-box{ border-right:2px solid var(--line); padding:14px; position:relative; } .top-box:last-child{border-right:none} .npc{ height:auto; } /* ===== 좌측: 배너 + 카드 + 버튼 스택 ===== */ .merchant-banner{ background:#f2f3f6; border:2px solid #aeb4bd; border-radius:10px; padding:10px 14px; font-weight:900; letter-spacing:.2px; box-shadow:inset 0 1px 0 rgba(255,255,255,.9); margin-bottom:12px; } .merchant-grid{ display:grid; grid-template-columns:1fr 190px; gap:12px; } /* 고용상인 카드 */ .merchant-card{ position:relative; width:100%; height:220px; border:3px solid #363d46; border-radius:12px; background:#f0f0f0; box-shadow:0 10px 24px rgba(0,0,0,.15), inset 0 1px 0 rgba(255,255,255,.8); display:flex; align-items:center; justify-content:center; padding:10px 10px 46px; transition:transform .12s ease; } .merchant-card:hover{ transform:translateY(-1px); } .merchant-card::after{ content:""; position:absolute; left:50%; bottom:6px; transform:translateX(-50%); width:22px; height:8px; border-radius:10px; background:#f1f1f1; border:1px solid rgba(0,0,0,.15); box-shadow:inset 0 1px 0 rgba(255,255,255,.9); } /* 카드 이미지 */ .merchant-photo{ width:180px; height:175px; background:#e9e9e9 url('doji.png') center/contain no-repeat; border-radius:12px; } /* 카드 라벨 */ .merchant-label{ position:absolute; left:12px; right:12px; bottom:12px; height:40px; border-radius:8px; background:#3c3f44; color:#fff; display:flex; align-items:center; justify-content:center; font-weight:900; letter-spacing:.2px; box-shadow:inset 0 -2px rgba(0,0,0,.18), 0 2px 6px rgba(0,0,0,.1); } /* 버튼 스택 */ .merchant-actions{ border:3px solid #363d46; border-radius:12px; background:#eef1f5; padding:10px; display:flex; flex-direction:column; gap:10px; box-shadow:0 10px 24px rgba(0,0,0,.15), inset 0 1px 0 rgba(255,255,255,.8); } .act{ height:56px; border-radius:10px; font-weight:900; font-size:18px; display:grid; place-items:center; cursor:pointer; user-select:none; border:2px solid transparent; transition:.12s ease; } .act.primary{ background:linear-gradient(#ffe46e,#ffd21f); color:#1c1c1c; border-color:#caa300; box-shadow:0 6px 14px rgba(0,0,0,.15), inset 0 -3px rgba(0,0,0,.2), inset 0 1px 0 rgba(255,255,255,.65); } .act.primary:hover{ filter:brightness(1.04); transform:translateY(-1px); } .act.primary:active{ transform:translateY(1px); } .act.secondary{ background:linear-gradient(#ffffff,#f3f4f6); color:#1f2937; border-color:#c9ced6; box-shadow:0 6px 14px rgba(0,0,0,.1), inset 0 -3px rgba(0,0,0,.12), inset 0 1px 0 rgba(255,255,255,.75); } .act.secondary:hover{ background:linear-gradient(#ffffff,#e9edf3); transform:translateY(-1px); } .act.secondary:active{ transform:translateY(1px); } /* 반응형 */ @media (max-width:1100px){ .merchant-card{ height:180px; } .merchant-photo{ width:148px; height:148px; } .merchant-grid{ grid-template-columns:1fr 180px; } } /* 기존 아바타(다른 곳에서 쓰일 경우 대비) */ .npc .avatar{ width:190px; height:190px; border-radius:10px; background:#ddd center/cover no-repeat; box-shadow:0 6px 16px rgba(0,0,0,.18), inset 0 1px 0 rgba(255,255,255,.6); } /* 버튼(공통) — 상점나가기/아이템사기 등 */ .btn{ min-width:150px; height:48px; border-radius:9px; display:grid; place-items:center; font-weight:800; font-size:18px; border:1px solid rgba(0,0,0,.12); box-shadow:0 6px 12px rgba(0,0,0,.15), inset 0 -3px rgba(0,0,0,.15), inset 0 1px 0 rgba(255,255,255,.45); cursor:pointer; margin-top:40px; transition:transform .12s ease, box-shadow .12s ease, filter .12s ease, opacity .12s ease; user-select:none; } .btn.green{ background:linear-gradient(#98e15a,#70bf33); color:#0d2c06; } .btn.orange{ background:linear-gradient(#ff9f49,#ff7f1f); color:#4b2506; } .left-actions{ position:absolute; right:18px; top:1px; display:flex; flex-direction:column; gap:1px; } .btn:hover{ transform:translateY(-1px); box-shadow:0 10px 16px rgba(0,0,0,.18), inset 0 -3px rgba(0,0,0,.15), inset 0 1px 0 rgba(255,255,255,.5); } .btn:active{ transform:translateY(1px); box-shadow:0 4px 8px rgba(0,0,0,.18), inset 0 -2px rgba(0,0,0,.18); } .btn:focus-visible{ outline:2px solid #74a2ff; outline-offset:2px; } .btn.green:hover{ filter:brightness(1.03) saturate(1.05); } .btn.orange:hover{ filter:brightness(1.03) saturate(1.05); } /* 금액 박스 */ .money{ position:absolute; right:18px; bottom:12px; display:flex; align-items:center; gap:10px; background:linear-gradient(#ffffff,#f3f6fb); border:2px solid #c9d7e8; border-radius:12px; padding:8px 12px; box-shadow:0 8px 18px rgba(0,0,0,.12), inset 0 -3px #e8eef7, inset 0 1px 0 rgba(255,255,255,.8); } .money .coin{ width:28px; height:28px; border-radius:50%; background:#ffd56a url('coin.png') center/cover no-repeat; box-shadow: inset 0 0 0 2px #d2a744, 0 2px 4px rgba(0,0,0,.15); } .money .val{font-size:22px; font-weight:900; letter-spacing:.5px} /* ===== 아래 영역 (좌/우) ===== */ .lists{ position:absolute; left:0; right:0; top:310px; bottom:8px; display:grid; grid-template-columns:596px 1fr; background:var(--panel); min-height:0; } .list{ min-height:0; display:flex; flex-direction:column; height:100%; } .list.left{ padding:8px 10px 10px 10px; border-right:2px solid var(--line); } .list.right{ padding:10px 12px; } /* ---- 좌측: 아이템 리스트 ---- */ .left .scroll{ flex:1; min-height:0; overflow-y:auto; overflow-x:hidden; background:linear-gradient(var(--silver-1), var(--silver-2)); border:1px solid var(--silver-3); border-radius:6px; box-shadow: inset 0 1px 0 rgba(255,255,255,.9), inset 0 -1px 0 rgba(0,0,0,.05); padding:4px; } .left .item{ background:linear-gradient(#ffffff,#f7f7f7); border:1px solid #cfd3d9; border-radius:4px; display:grid; grid-template-columns:38px 1fr; align-items:center; gap:40px; padding:15px 18px; margin:4px 2px; box-shadow:inset 0 1px 0 rgba(255,255,255,.8); transition: background .12s ease, border-color .12s ease, transform .06s ease, box-shadow .12s ease; cursor:pointer; } .left .item .icon{ width:60px; height:60px; border:1px solid #bfbfbf; border-radius:3px; background:#dcdcdc center/cover no-repeat; box-shadow:inset 0 1px 0 rgba(255,255,255,.7); } .left .info{ display:flex; flex-direction:column; line-height:1.1; } .left .name{ font-weight:800; font-size:20px; color:#222; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } .left .price{ margin-top:4px; font-size:20px; font-weight:900; } .left .price.orange{ color:var(--price-orange); } .left .price.green { color:var(--price-green); } .left .price.pink { color:var(--price-pink); } .left .price .meso{ margin-left:2px; } .left .item:hover{ border-color:#9fc3ff; background:linear-gradient(#ffffff,#eef5ff); box-shadow:0 6px 12px rgba(116,162,255,.15), inset 0 1px 0 rgba(255,255,255,.9); } .left .item:active{ transform:translateY(1px); } /* 스크롤바 */ .left .scroll::-webkit-scrollbar{ width:12px } .left .scroll::-webkit-scrollbar-track{ background:#e7e7e7; border-left:1px solid #c9c9c9 } .left .scroll::-webkit-scrollbar-thumb{ background:#b9b9b9; border:3px solid #e7e7e7; border-radius:8px } /* ---- 우측: 채팅 ---- */ .chat{ display:flex; flex-direction:column; gap:6px; background:linear-gradient(#f6f9ff,#eef3fb); border:1px solid var(--chat-border); border-radius:12px; padding:0; overflow:hidden; height:100%; box-shadow: inset 0 1px 0 rgba(255,255,255,.7); min-height:0; } .chat-head{ background:linear-gradient(180deg,#ffffff 0%, #eaf0ff 100%); border-bottom:1px solid var(--chat-border); height:42px; display:flex; align-items:center; justify-content:space-between; padding:0 10px; box-shadow:0 2px 8px rgba(0,0,0,.06); } .chat-title{ font-weight:900; font-size:15px; letter-spacing:.2px; } .chat-tools{ display:flex; gap:8px; } .chat-btn{ height:30px; padding:0 5px; border-radius:8px; border:1px solid rgba(0,0,0,.12); display:grid; place-items:center; font-weight:800; font-size:13px; box-shadow:0 4px 10px rgba(0,0,0,.08), inset 0 -2px rgba(0,0,0,.08); background:#fff; cursor:pointer; transition: transform .12s ease, box-shadow .12s ease, background .12s ease, border-color .12s ease; } .chat-btn:hover{ transform:translateY(-1px); box-shadow:0 8px 14px rgba(0,0,0,.12); } .chat-btn:active{ transform:translateY(1px); } .chat-btn:focus-visible{ outline:2px solid #74a2ff; outline-offset:2px; } .chat-btn.clear{ background:#ffe9e9 } .chat-btn.clear:hover{ background:#ffdede; } .chat-log{ flex:1; overflow:auto; padding:12px 12px 8px 12px; min-height:0; } .chat-log::-webkit-scrollbar{ width:14px } .chat-log::-webkit-scrollbar-track{ background:#e9f0ff; border-left:1px solid #cfd7e3 } .chat-log::-webkit-scrollbar-thumb{ background:#9db8ea; border:4px solid #e9f0ff; border-radius:10px } .msg{ display:flex; gap:8px; margin:6px 0; align-items:flex-end; } .msg.me{ justify-content:flex-end } .bubble{ max-width:72%; padding:9px 11px; border-radius:14px; border:1px solid rgba(0,0,0,.06); box-shadow:0 2px 0 rgba(0,0,0,.05), 0 8px 16px rgba(0,0,0,.06); font-size:14px; line-height:1.35; background:linear-gradient(#fff,#f7f7f7); transition: transform .06s ease, box-shadow .12s ease; } .bubble:hover{ transform:translateY(-1px); box-shadow:0 10px 18px rgba(0,0,0,.08); } .me .bubble{ background:linear-gradient(#ffe6be,#ffd3a0); } .other .bubble{ background:linear-gradient(#ffffff,#f7f7f7); } .time{ font-size:11px; color:#666; margin:0 4px; } /* 입력 영역 */ .chat-input{ border-top:1px solid var(--chat-border); background:linear-gradient(#fdfefe,#f3f7ff); padding:10px; display:flex; gap:8px; box-shadow:0 -2px 8px rgba(0,0,0,.05); } .chat-input input{ flex:1; height:36px; border-radius:10px; border:1px solid #cfd7e3; padding:0 10px; font-size:14px; outline:none; background:#fff; box-shadow:inset 0 1px 0 rgba(255,255,255,.9); transition: border-color .12s ease, box-shadow .12s ease; } .chat-input input:focus{ border-color:#8fb2ff; box-shadow:0 0 0 3px rgba(143,178,255,.25); } .chat-input .send{ min-width:92px; height:36px; border-radius:10px; border:1px solid rgba(0,0,0,.12); background:linear-gradient(#ffa75a,#ff7f1f); color:#fff; font-weight:900; cursor:pointer; box-shadow:0 6px 12px rgba(0,0,0,.15), inset 0 -3px rgba(0,0,0,.18), inset 0 1px 0 rgba(255,255,255,.45); transition: transform .12s ease, box-shadow .12s ease, filter .12s ease; } .chat-input .send:hover{ transform:translateY(-1px); filter:brightness(1.03); box-shadow:0 10px 18px rgba(0,0,0,.2), inset 0 -3px rgba(0,0,0,.18); } .chat-input .send:active{ transform:translateY(1px); } /* ===== 구매 모달 ===== */ .modal-overlay{ position:fixed; inset:0; background:rgba(0,0,0,.4); display:none; align-items:center; justify-content:center; z-index:999; } .modal-overlay[aria-hidden="false"]{ display:flex; } .modal{ width:520px; max-width:calc(100vw - 24px); background:linear-gradient(#ffffff,#f6f8fc); border:2px solid #c9d7e8; border-radius:14px; box-shadow:0 24px 60px rgba(0,0,0,.35), inset 0 1px 0 rgba(255,255,255,.85); overflow:hidden; animation:pop .12s ease-out; } @keyframes pop{ from{ transform:scale(.98); opacity:.7 } to{ transform:scale(1); opacity:1 } } .modal-head{ display:flex; align-items:center; justify-content:space-between; padding:12px 14px; background:linear-gradient(#ffffff,#eaf0ff); border-bottom:1px solid #cfd7e3; } .modal-head h3{ margin:0; font-size:16px; font-weight:900; letter-spacing:.2px; } .modal-close{ width:32px; height:32px; border-radius:8px; border:1px solid rgba(0,0,0,.12); background:#fff; cursor:pointer; font-size:16px; box-shadow:0 4px 10px rgba(0,0,0,.08), inset 0 -2px rgba(0,0,0,.08); transition: transform .12s ease, box-shadow .12s ease, background .12s ease; } .modal-close:hover { background:#f7f9ff; } .modal-close:active { transform:scale(.96); } .modal-body{ padding:14px; } .modal-item{ display:grid; grid-template-columns:96px 1fr; gap:12px; } .modal-thumb{ width:96px; height:96px; border-radius:10px; background:#dcdcdc center/cover no-repeat; border:1px solid #c0c6d0; box-shadow:inset 0 1px 0 rgba(255,255,255,.75), 0 8px 16px rgba(0,0,0,.12); } .modal-info{ display:grid; gap:8px; align-content:start; } .modal-name{ font-size:16px; font-weight:900; color:#1e2430; } .label{ color:#445; font-size:13px; margin-right:8px; } .modal-price-line, .modal-qty-line, .modal-total-line{ display:flex; align-items:center; justify-content:space-between; background:#fff; border:1px solid #d7deea; border-radius:10px; padding:8px 10px; box-shadow:inset 0 1px 0 rgba(255,255,255,.8); } .modal-price{ font-weight:900; color:#000000; } .modal-total{ font-weight:900; color:#01552e; } .qty{ display:flex; align-items:center; gap:6px; } .qty input{ width:64px; height:32px; text-align:center; border:1px solid #cfd7e3; border-radius:8px; font-weight:800; transition: border-color .12s ease, box-shadow .12s ease; } .qty input:focus{ border-color:#8fb2ff; box-shadow:0 0 0 3px rgba(143,178,255,.25); } .qty-btn{ width:32px; height:32px; border-radius:8px; border:1px solid rgba(0,0,0,.12); background:#fff; cursor:pointer; font-size:16px; box-shadow:0 4px 10px rgba(0,0,0,.08), inset 0 -2px rgba(0,0,0,.08); transition: transform .12s ease, box-shadow .12s ease, background .12s ease; } .qty-btn:hover{ transform:translateY(-1px); background:#f7f9ff; } .qty-btn:active{ transform:translateY(1px); } .modal-actions{ display:flex; justify-content:flex-end; gap:8px; padding:12px 14px; border-top:1px solid #cfd7e3; background:linear-gradient(#ffffff,#f2f6ff); } .btn.primary{ min-width:110px; height:38px; border-radius:10px; border:1px solid rgba(0,0,0,.12); background:linear-gradient(#ffa75a,#ff7f1f); color:#fff; font-weight:900; cursor:pointer; box-shadow:0 6px 12px rgba(0,0,0,.15), inset 0 -3px rgba(0,0,0,.18), inset 0 1px 0 rgba(255,255,255,.45); transition: transform .12s ease, box-shadow .12s ease, filter .12s ease; } .btn.primary:hover{ transform:translateY(-1px); filter:brightness(1.03); box-shadow:0 10px 18px rgba(0,0,0,.2), inset 0 -3px rgba(0,0,0,.18); } .btn.primary:active{ transform:translateY(1px); } .btn.ghost{ min-width:90px; height:38px; border-radius:10px; border:1px solid #cfd7e3; background:#fff; font-weight:800; cursor:pointer; box-shadow:0 4px 10px rgba(0,0,0,.08), inset 0 -2px rgba(0,0,0,.08); transition: transform .12s ease, box-shadow .12s ease, background .12s ease; } .btn.ghost:hover{ transform:translateY(-1px); background:#f7f9ff; } .btn.ghost:active{ transform:translateY(1px); } /* 모달 열렸을 때 배경 스크롤 금지용 */ body.modal-open{ overflow:hidden; } /* ===== 고용상인 이미지 모달 (설정) ===== */ .modal.small{ width:520px; max-width:calc(100vw - 24px); } .imgset{ display:grid; grid-template-columns:120px 1fr; gap:14px; align-items:start; } .imgset-preview{ width:120px; height:120px; border-radius:12px; background:#e5e7eb center/cover no-repeat; border:1px solid #cfd7e3; box-shadow:inset 0 1px 0 rgba(255,255,255,.85), 0 8px 16px rgba(0,0,0,.12); } .imgset-form{ display:grid; gap:8px; } .imgset-label{ font-weight:800; font-size:13px; color:#3b3f49; } #merchantUrl{ height:40px; border-radius:10px; border:1px solid #cfd7e3; padding:0 12px; font-size:14px; outline:none; background:#fff; box-shadow:inset 0 1px 0 rgba(255,255,255,.9); transition:border-color .12s ease, box-shadow .12s ease; } #merchantUrl:focus{ border-color:#8fb2ff; box-shadow:0 0 0 3px rgba(143,178,255,.25); } .imgset-help{ font-size:12px; color:#6b7280; } .rename-form { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 14px; padding: 20px 0; } .rename-label { font-weight: 900; font-size: 18px; color: #2a3140; } #shopNameInput { width: 80%; height: 50px; font-size: 20px; font-weight: 800; text-align: center; border: 2px solid #cfd7e3; border-radius: 10px; outline: none; box-shadow: inset 0 1px 0 rgba(255,255,255,.9); transition: border-color .12s ease, box-shadow .12s ease; } #shopNameInput:focus { border-color: #8fb2ff; box-shadow: 0 0 0 3px rgba(143,178,255,.25); } .rename-help { font-size: 14px; color: #6b7280; } /* ===== 판매된 아이템 모달 ===== */ .sold-tools{ display:flex; gap:8px; align-items:center; justify-content:space-between; margin-bottom:10px; } .sold-tools input[type="text"]{ flex:1; height:38px; border:1px solid #cfd7e3; border-radius:10px; padding:0 12px; box-shadow:inset 0 1px 0 rgba(255,255,255,.9); } .sold-tools select{ height:38px; border:1px solid #cfd7e3; border-radius:10px; padding:0 10px; background:#fff; } .sold-sum{ display:flex; gap:6px; } .badge{ font-weight:900; font-size:12px; padding:6px 10px; border-radius:999px; background:#eef2ff; border:1px solid #cfd7e3; color:#27314a; } .badge.total{ background:#eaf8ef; border-color:#cfe6d7; color:#0f5132; } .sold-list{ background:linear-gradient(var(--silver-1), var(--silver-2)); border:1px solid var(--silver-3); border-radius:8px; box-shadow: inset 0 1px 0 rgba(255,255,255,.9), inset 0 -1px 0 rgba(0,0,0,.05); } .sold-head{ display:grid; grid-template-columns: 1.5fr 1fr 1fr 1fr .8fr; gap:8px; padding:8px 10px; font-weight:900; color:#2a3140; background:linear-gradient(#ffffff,#eef3ff); border-bottom:1px solid #d7deea; } .sold-head .right{ text-align:right; } .sold-scroll{ max-height:360px; overflow:auto; } .sold-scroll::-webkit-scrollbar{ width:12px } .sold-scroll::-webkit-scrollbar-track{ background:#e7e7e7; border-left:1px solid #c9c9c9 } .sold-scroll::-webkit-scrollbar-thumb{ background:#b9b9b9; border:3px solid #e7e7e7; border-radius:8px } .sold-item{ display:grid; grid-template-columns: 1.5fr 1fr 1fr 1fr .8fr; align-items:center; gap:8px; padding:8px 10px; background:linear-gradient(#ffffff,#f7f7f7); border-bottom:1px solid #e3e6ee; transition: background .12s ease; } .sold-item:hover{ background:linear-gradient(#ffffff,#eef5ff); } .sold-item .cell.item{ display:flex; align-items:center; gap:8px; min-width:0; } .sold-item .thumb{ width:34px; height:34px; border-radius:3px; border:1px solid #bfbfbf; background:#dcdcdc center/cover no-repeat; box-shadow:inset 0 1px 0 rgba(255,255,255,.7); } .sold-item .names{ display:flex; flex-direction:column; min-width:0; } .sold-item .names .name{ font-weight:800; font-size:13px; color:#222; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } .sold-item .buyer{ font-weight:800; color:#2a3140; } .sold-item .price{ font-weight:900; color:var(--price-green); text-align:right; } .sold-item .time{ color:#666; font-size:12px; text-align:right; } .status{ justify-self:end; font-size:12px; font-weight:900; padding:4px 8px; border-radius:999px; border:1px solid; } .status.DONE{ background:#eaf8ef; color:#0f5132; border-color:#cfe6d7; } .status.CANCELED{ background:#fee4e2; color:#b42318; border-color:#f3b3af; } /* ----- 방문자 뷰 ----- */ .visitor-info { position: absolute; right: 18px; top: 12px; width: 560px; height: 220px; display: grid; gap: 12px; } .owner-info { display: flex; align-items: center; gap: 14px; } .owner-avatar { width: 70px; height:70px; border-radius: 12px; background: #ddd center/cover no-repeat; border: 2px solid #cfd7e3; box-shadow: inset 0 1px 0 rgba(255, 255, 255, .8); } .owner-meta { line-height: 1.2; } .owner-name { font-weight: 900; font-size: 20px; color: #1f2937; } .owner-class { font-size: 18px; color: #6b7280; } .visit-stats { display: flex; flex-direction: column; gap: 6px; font-size: 18px; color: #374151; font-weight: 800; background: linear-gradient(#ffffff, #f3f6fb); border: 2px solid #d7deea; border-radius: 12px; padding: 10px 14px; box-shadow: inset 0 1px 0 rgba(255, 255, 255, .85); } .fav-btn { height: 38px; padding: 0 14px; border-radius: 12px; border: 2px solid rgba(0, 0, 0, .12); background: linear-gradient(#fff, #f3f4f6); font-weight: 900; font-size: 15px; cursor: pointer; box-shadow: 0 4px 10px rgba(0, 0, 0, .08), inset 0 -2px rgba(0, 0, 0, .08); transition: transform .12s ease, box-shadow .12s ease, background .12s ease, border-color .12s ease; } .fav-btn:hover { transform: translateY(-1px); box-shadow: 0 8px 14px rgba(0, 0, 0, .12); } .fav-btn:active { transform: translateY(1px); } .fav-btn.active { background: linear-gradient(#ffe46e, #ffd21f); border-color: #caa300; color: #1b1b1b; } /* 판매완료 */ .item.sold { position: relative; opacity: 0.5; } /* "판매완료" 표시 */ .item.sold .sold-overlay { position: absolute; inset: 0; background: rgba(255,255,255,0.7); display: flex; align-items: center; justify-content: center; font-size: 18px; font-weight: bold; color: #333; text-shadow: 0 1px 2px rgba(0,0,0,0.2); pointer-events: none; } .shop{ display:none; } .shop.open{ display:block; } #setupModal{ background:transparent; } .setup-modal{ width: 883px; max-width: calc(100vw - 32px); max-height: 90vh; display: grid; grid-template-rows: auto 1fr auto; } .setup-head{ gap: 4px; padding: 14px 16px; } .setup-head-left h3{ margin:0; font-size:18px; font-weight:900; letter-spacing:.2px; } .setup-sub{ font-size:12px; color:#5a657a; font-weight:800; } .setup-body{ padding: 14px 16px; overflow: auto; } .setup-section + .setup-section{ margin-top: 14px; } .setup-label{ font-weight:900; font-size:13px; color:#2b3446; } .setup-input-wrap{ margin-top: 8px; display: grid; gap: 6px; } #setupShopName{ height: 44px; border: 2px solid #cfd7e3; border-radius: 10px; padding: 0 12px; font-weight: 900; box-shadow: inset 0 1px 0 rgba(255,255,255,.9); } #setupShopName:focus{ border-color:#8fb2ff; box-shadow:0 0 0 3px rgba(143,178,255,.25); outline: none; } .setup-hint{ font-size:12px; color:#6b7280; } .setup-title-row{ display:flex; align-items:center; justify-content:space-between; } .setup-actions{ display:flex; gap:8px; } .setup-table{ margin-top: 10px; border:1px solid var(--silver-3); border-radius: 12px; overflow: hidden; background: linear-gradient(var(--silver-1), var(--silver-2)); box-shadow: inset 0 1px 0 rgba(255,255,255,.9); } .setup-thead, .setup-row{ display: grid; grid-template-columns: 72px 1.2fr .9fr 1.4fr 64px; gap: 8px; align-items: center; } .setup-thead{ background: linear-gradient(#ffffff,#eef3ff); border-bottom:1px solid #d7deea; padding: 8px 10px; font-weight: 900; color:#2a3140; } .setup-tbody{ max-height: 320px; overflow: auto; } .setup-tbody::-webkit-scrollbar{ width: 12px; } .setup-tbody::-webkit-scrollbar-track{ background:#e7e7e7; border-left:1px solid #c9c9c9; } .setup-tbody::-webkit-scrollbar-thumb{ background:#b9b9b9; border:3px solid #e7e7e7; border-radius:8px; } .setup-row{ padding: 8px 10px; background: linear-gradient(#ffffff,#f7f7f7); border-bottom:1px solid #e3e6ee; } .cell-thumb{ width: 56px; height: 56px; border-radius: 10px; border:1px solid #c0c6d0; background:#e5e7eb center/cover no-repeat; box-shadow: inset 0 1px 0 rgba(255,255,255,.85); } .cell-name input, .cell-price input, .cell-url input{ height: 36px; border:1px solid #cfd7e3; border-radius:10px; padding:0 10px; font-weight:800; } .cell-price input{ text-align: right; } .cell-del button{ height: 34px; width: 100%; border:1px solid rgba(0,0,0,.12); border-radius:8px; background:#fff; font-weight:900; cursor:pointer; box-shadow:0 4px 10px rgba(0,0,0,.08), inset 0 -2px rgba(0,0,0,.08); } .cell-del button:hover{ transform: translateY(-1px); } .cell-del button:active{ transform: translateY(1px); } .setup-bottom-hint{ margin-top: 8px; font-size: 12px; color:#6b7280; } .setup-foot{ padding: 12px 14px; display:flex; align-items:center; justify-content:space-between; border-top:1px solid #cfd7e3; background: linear-gradient(#ffffff,#f2f6ff); } .setup-foot-left{ display:flex; gap: 6px; align-items:center; } .setup-foot-right{ display:flex; gap:8px; } /* 필수값 경고 */ .is-error{ border-color: #ff6b6b !important; box-shadow: 0 0 0 3px rgba(255,107,107,.18) !important; } /* 초기설정 2열 레이아웃 */ .setup-grid{ display:grid; grid-template-columns: 1.6fr 1fr; gap:16px; } .setup-left{ min-width:0; } .setup-right{ min-width:0; margin-left:50px; } /* 인벤토리 패널 */ .inv-panel{ border:1px solid #d7deea; border-radius:12px; background:linear-gradient(#ffffff,#f6f8fc); box-shadow: inset 0 1px 0 rgba(255,255,255,.85); display:flex; flex-direction:column; height:100%; overflow: hidden; background-clip: padding-box; } .inv-head{ padding:10px 12px; font-weight:900; border-bottom:1px solid #d7deea; background:linear-gradient(#fff,#eef3ff); } .inv-list{ padding:10px; display:grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap:10px; max-height:340px; overflow:auto; } .inv-item{ display:flex; align-items:center; gap:8px; padding:8px; border:1px solid #cfd7e3; border-radius:10px; background:#fff; cursor:grab; user-select:none; box-shadow: inset 0 1px 0 rgba(255,255,255,.9); } .inv-item:active{ cursor:grabbing; } .inv-thumb{ width:40px; height:40px; border-radius:8px; border:1px solid #c0c6d0; background:#e5e7eb center/cover no-repeat; } .inv-meta{ display:flex; flex-direction:column; min-width:0; } .inv-name{ font-weight:900; font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } .inv-price{ font-weight:800; font-size:12px; color:#0f5132; } /* 안내 */ .inv-hint{ padding:8px 12px; font-size:12px; color:#6b7280; border-top:1px solid #e7ecf6; background:#fafcff; } /* 드롭 대상(아이템명 input) 강조 */ .i-name.drop-target{ outline:2px dashed #74a2ff; background: #f5faff; }