@import"https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css";:root{--font-display: "Pretendard Variable", "Pretendard", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;--font-body: "Pretendard Variable", "Pretendard", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;--bg-deep: #08080a;--bg-primary: #0c0c0f;--bg-secondary: #141418;--bg-tertiary: #1c1c22;--bg-elevated: #24242c;--bg-card: #2a2a34;--bg-input: #101014;--surface: rgba(255, 255, 255, .03);--surface-hover: rgba(255, 255, 255, .06);--surface-active: rgba(255, 255, 255, .08);--border: rgba(255, 255, 255, .08);--border-subtle: rgba(255, 255, 255, .04);--border-strong: rgba(255, 255, 255, .15);--text-primary: #f5f5f7;--text-secondary: rgba(255, 255, 255, .65);--text-tertiary: rgba(255, 255, 255, .4);--text-muted: rgba(255, 255, 255, .25);--accent: #c9a962;--accent-hover: #dbb970;--accent-glow: rgba(201, 169, 98, .25);--accent-light: rgba(201, 169, 98, .1);--accent-border: rgba(201, 169, 98, .3);--wave-contemplative: #7c9eb2;--wave-passionate: #c75d5d;--wave-melancholic: #8b7cb5;--wave-joyful: #d4a853;--wave-serene: #6ba589;--wave-chaotic: #c76b8a;--success: #5cb585;--warning: #d4a853;--error: #c75d5d;--info: #7c9eb2;--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--spacing-2xl: 3rem;--spacing-3xl: 4rem;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-xl: 20px;--shadow: 0 4px 24px rgba(0, 0, 0, .4);--shadow-lg: 0 8px 32px rgba(0, 0, 0, .5);--transition-fast: .15s cubic-bezier(.16, 1, .3, 1);--transition-normal: .3s cubic-bezier(.16, 1, .3, 1);--transition-slow: .5s cubic-bezier(.16, 1, .3, 1)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font-body);font-size:1rem;font-weight:400;line-height:1.6;color:var(--text-primary);background:var(--bg-deep);min-height:100vh;min-height:100dvh}#root{min-height:100vh;min-height:100dvh}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);font-weight:600;line-height:1.15;letter-spacing:-.02em}a{color:var(--accent);text-decoration:none;transition:color var(--transition-fast)}a:hover{color:var(--accent-hover)}button{font-family:var(--font-body);font-size:1rem;border:none;background:none;cursor:pointer;color:inherit}button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}input,textarea,select{font-family:var(--font-body);font-size:1rem}::selection{background:var(--accent);color:var(--bg-deep)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-secondary)}::-webkit-scrollbar-thumb{background:var(--bg-elevated);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.loading{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;min-height:100dvh;width:100%;gap:var(--spacing-lg);position:fixed;inset:0;background:var(--bg-deep)}.spinner{width:48px;height:48px;border:2px solid var(--bg-tertiary);border-top-color:var(--accent);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.admin-app{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column}.header{background:linear-gradient(135deg,var(--bg-secondary) 0%,var(--bg-tertiary) 100%);padding:var(--spacing-xl) var(--spacing-lg);text-align:center;border-bottom:1px solid var(--border);position:sticky;top:0;z-index:50}.header:before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse 80% 100% at 50% 0%,rgba(201,169,98,.08) 0%,transparent 60%);pointer-events:none}.header h1{font-family:var(--font-display);font-size:1.75rem;font-weight:400;letter-spacing:.1em;color:var(--accent);position:relative}.header p{color:var(--text-muted);font-size:.75rem;margin-top:var(--spacing-xs);letter-spacing:.15em;text-transform:uppercase;position:relative}.tabs{display:flex;background:var(--bg-primary);border-bottom:1px solid var(--border);overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tabs button{flex-shrink:0;padding:var(--spacing-md) var(--spacing-lg);background:none;border:none;color:var(--text-muted);font-size:.8rem;font-weight:500;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;transition:all var(--transition-normal);border-bottom:2px solid transparent;white-space:nowrap}.tabs button:hover{color:var(--text-primary);background:var(--surface)}.tabs button.active{color:var(--accent);border-bottom-color:var(--accent)}.content{flex:1;width:100%;padding:var(--spacing-lg)}.dashboard,.artists-section,.artworks-section,.qrcodes-section,.calibration-section{width:100%}.dashboard h2{font-family:var(--font-display);font-size:1.5rem;font-weight:400;margin-bottom:var(--spacing-xl);color:var(--text-primary);letter-spacing:.05em}.stats-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--spacing-md);margin-bottom:var(--spacing-xl)}.stats-card{background:var(--bg-secondary);border-radius:var(--radius-lg);padding:var(--spacing-lg);border-left:3px solid;transition:all var(--transition-normal);position:relative;overflow:hidden}.stats-card:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.02),transparent);opacity:0;transition:opacity var(--transition-normal)}.stats-card:hover{transform:translateY(-3px);box-shadow:var(--shadow)}.stats-card:hover:before{opacity:1}.stats-title{font-size:.7rem;color:var(--text-muted);margin-bottom:var(--spacing-xs);text-transform:uppercase;letter-spacing:.1em}.stats-value{font-family:var(--font-display);font-size:2rem;font-weight:500;color:var(--text-primary)}.stats-subtitle{font-size:.7rem;color:var(--text-muted);margin-top:var(--spacing-xs)}.quick-actions{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--spacing-xl)}.quick-actions h3{font-family:var(--font-body);font-size:.75rem;font-weight:600;margin-bottom:var(--spacing-lg);color:var(--text-muted);text-transform:uppercase;letter-spacing:.1em}.action-buttons{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--spacing-sm)}.action-buttons button,.action-buttons a{padding:var(--spacing-md) var(--spacing-lg);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text-secondary);font-size:.85rem;font-weight:500;cursor:pointer;transition:all var(--transition-normal);text-decoration:none;text-align:center;display:flex;align-items:center;justify-content:center}.action-buttons button:hover,.action-buttons a:hover{background:var(--accent-light);border-color:var(--accent);color:var(--text-primary)}.section-header{display:flex;flex-direction:column;gap:var(--spacing-md);margin-bottom:var(--spacing-xl)}.section-header h2{font-family:var(--font-display);font-size:1.5rem;font-weight:400;letter-spacing:.05em}.header-actions{display:flex;gap:var(--spacing-sm);flex-wrap:wrap}.btn{padding:var(--spacing-md) var(--spacing-lg);border-radius:var(--radius-md);font-size:.85rem;font-weight:500;letter-spacing:.03em;cursor:pointer;transition:all var(--transition-normal);border:none;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:var(--spacing-sm)}.btn-primary{background:var(--accent);color:var(--bg-deep)}.btn-primary:hover{background:var(--accent-hover);transform:translateY(-2px);box-shadow:0 8px 24px var(--accent-glow)}.btn-primary:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.btn-secondary{background:var(--surface);border:1px solid var(--border);color:var(--text-secondary)}.btn-secondary:hover{background:var(--surface-hover);border-color:var(--border-strong);color:var(--text-primary)}.artist-list,.artwork-list{display:grid;grid-template-columns:1fr;gap:var(--spacing-md)}.artist-card,.artwork-card{background:var(--bg-secondary);border-radius:var(--radius-lg);padding:var(--spacing-lg);border:1px solid var(--border);transition:all var(--transition-normal)}.artist-card:hover,.artwork-card:hover{border-color:var(--accent-border);box-shadow:var(--shadow);transform:translateY(-2px)}.artist-card h4,.artwork-card h4{font-family:var(--font-display);font-size:1.15rem;font-weight:400;margin-bottom:var(--spacing-sm);color:var(--text-primary);letter-spacing:.02em}.artist-card p,.artwork-card p{font-size:.85rem;color:var(--text-tertiary);margin-bottom:var(--spacing-md);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.5}.artist-meta,.artwork-meta{font-size:.75rem;color:var(--text-muted);letter-spacing:.05em}.modal-overlay{position:fixed;inset:0;background:#08080ae6;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);display:flex;align-items:flex-end;justify-content:center;z-index:100;padding:0}.modal{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-xl) var(--radius-xl) 0 0;padding:var(--spacing-xl) var(--spacing-lg);padding-bottom:calc(var(--spacing-xl) + env(safe-area-inset-bottom));width:100%;max-height:90vh;overflow-y:auto;animation:slideUp .4s cubic-bezier(.16,1,.3,1)}@keyframes slideUp{0%{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}.artist-form h3,.artwork-form h3{font-family:var(--font-display);font-size:1.5rem;font-weight:400;margin-bottom:var(--spacing-xl);color:var(--text-primary);letter-spacing:.05em}.form-group{margin-bottom:var(--spacing-lg)}.form-group label{display:block;font-size:.75rem;color:var(--text-muted);margin-bottom:var(--spacing-sm);font-weight:600;letter-spacing:.1em;text-transform:uppercase}.form-group input,.form-group textarea,.form-group select{width:100%;padding:var(--spacing-md);background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text-primary);font-size:.95rem;transition:all var(--transition-fast)}.form-group input:focus,.form-group textarea:focus,.form-group select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-glow)}.form-group input::placeholder,.form-group textarea::placeholder{color:var(--text-muted)}.form-group textarea{min-height:100px;resize:vertical;line-height:1.5}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-md)}.tag-selector{display:flex;flex-wrap:wrap;gap:var(--spacing-sm)}.tag{padding:var(--spacing-sm) var(--spacing-md);background:var(--surface);border:1px solid var(--border);border-radius:20px;color:var(--text-tertiary);font-size:.8rem;cursor:pointer;transition:all var(--transition-normal)}.tag:hover{background:var(--surface-hover);color:var(--text-secondary)}.tag.selected{background:var(--accent);border-color:var(--accent);color:var(--bg-deep)}.form-actions{display:flex;gap:var(--spacing-md);margin-top:var(--spacing-xl)}.form-actions .btn{flex:1;padding:var(--spacing-lg)}.section-description{color:var(--text-tertiary);margin-bottom:var(--spacing-xl);font-size:.9rem;line-height:1.6}.qr-grid{display:grid;grid-template-columns:1fr;gap:var(--spacing-lg)}.qr-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--spacing-xl);text-align:center;transition:all var(--transition-normal)}.qr-card:hover{border-color:var(--accent-border)}.qr-header{margin-bottom:var(--spacing-lg)}.qr-header h4{font-family:var(--font-display);font-size:1.1rem;font-weight:400;margin-bottom:var(--spacing-xs);letter-spacing:.02em}.qr-header .artist-name{font-size:.75rem;color:var(--text-muted);letter-spacing:.05em}.qr-code{background:#fff;border-radius:var(--radius-md);padding:var(--spacing-lg);display:inline-block;margin-bottom:var(--spacing-lg)}.qr-code svg{display:block}.qr-actions{display:flex;gap:var(--spacing-sm);justify-content:center;margin-bottom:var(--spacing-md)}.qr-actions .btn{padding:var(--spacing-sm) var(--spacing-md);font-size:.8rem}.qr-url{background:var(--bg-input);padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--radius-md);overflow:hidden}.qr-url code{font-size:.7rem;color:var(--text-muted);word-break:break-all;font-family:SF Mono,monospace}select{padding:var(--spacing-md);background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text-primary);font-size:.9rem;cursor:pointer;min-width:140px;transition:all var(--transition-fast)}select:focus{outline:none;border-color:var(--accent)}.empty-message{text-align:center;color:var(--text-muted);padding:var(--spacing-2xl) var(--spacing-lg);grid-column:1 / -1;font-size:.9rem}.card-actions{display:flex;gap:var(--spacing-sm);margin-top:var(--spacing-md);padding-top:var(--spacing-md);border-top:1px solid var(--border-subtle)}.btn-edit,.btn-delete{flex:1;padding:var(--spacing-sm) var(--spacing-md);border:none;border-radius:var(--radius-md);font-size:.8rem;font-weight:500;cursor:pointer;transition:all var(--transition-normal)}.btn-edit{background:var(--accent-light);color:var(--accent)}.btn-edit:hover{background:#c9a96233}.btn-delete{background:#c75d5d1a;color:var(--error)}.btn-delete:hover{background:#c75d5d33}.calibration-section{width:100%}.pivot-setter{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-xl);padding:var(--spacing-xl)}.pivot-header{margin-bottom:var(--spacing-xl)}.pivot-header h3{font-family:var(--font-display);font-size:1.25rem;font-weight:400;margin-bottom:var(--spacing-sm);letter-spacing:.05em}.pivot-header p{font-size:.85rem;color:var(--text-tertiary);line-height:1.5}.gps-status{padding:var(--spacing-md);background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:var(--spacing-lg);font-size:.8rem;font-family:SF Mono,monospace}.gps-active{color:var(--success)}.gps-error{color:var(--error)}.gps-waiting{color:var(--warning)}.pivot-message{padding:var(--spacing-md);background:var(--accent-light);border:1px solid var(--accent-border);border-radius:var(--radius-md);margin-bottom:var(--spacing-lg);font-size:.85rem;color:var(--accent)}.scan-btn{width:100%;padding:var(--spacing-lg);font-size:.9rem;margin-bottom:var(--spacing-xl)}.qr-scanner-container{position:relative;width:100%;aspect-ratio:4/3;background:var(--bg-deep);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;margin-bottom:var(--spacing-lg)}.qr-scanner-container video{width:100%;height:100%;object-fit:cover}.qr-scanner-container button{position:absolute;bottom:var(--spacing-lg);left:50%;transform:translate(-50%)}.selected-artwork{background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--spacing-lg);margin-bottom:var(--spacing-xl)}.selected-artwork h4{font-family:var(--font-display);font-size:1.1rem;font-weight:400;margin-bottom:var(--spacing-xs);letter-spacing:.02em}.selected-artwork>p{font-size:.85rem;color:var(--text-tertiary);margin-bottom:var(--spacing-lg)}.canvas-position-setter>p{font-size:.85rem;color:var(--text-tertiary);margin-bottom:var(--spacing-sm)}.canvas-preview{position:relative;width:100%;min-height:200px;background:var(--bg-tertiary);border:2px solid var(--border);border-radius:var(--radius-md);cursor:crosshair;margin-bottom:var(--spacing-lg);overflow:hidden}.canvas-preview:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,var(--border-subtle) 1px,transparent 1px),linear-gradient(var(--border-subtle) 1px,transparent 1px);background-size:50px 50px;pointer-events:none}.pivot-marker{position:absolute;width:14px;height:14px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none}.pivot-marker.existing{background:#c9a96280;border:2px solid var(--accent)}.pivot-marker.current{background:var(--wave-passionate);border:3px solid white;box-shadow:0 0 16px #c75d5d99;width:20px;height:20px}.canvas-coords{display:flex;gap:var(--spacing-md);margin-bottom:var(--spacing-lg)}.canvas-coords label{display:flex;align-items:center;gap:var(--spacing-sm);font-size:.8rem;color:var(--text-tertiary)}.canvas-coords input{width:70px;padding:var(--spacing-sm);background:var(--bg-tertiary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-size:.85rem;text-align:center}.pivot-actions{display:flex;gap:var(--spacing-sm)}.pivot-actions .btn{flex:1;padding:var(--spacing-md)}.pivot-list{margin-top:var(--spacing-xl);padding-top:var(--spacing-xl);border-top:1px solid var(--border-subtle)}.pivot-list h4{font-size:.75rem;font-weight:600;color:var(--text-muted);margin-bottom:var(--spacing-md);text-transform:uppercase;letter-spacing:.1em}.pivot-list .empty-text{font-size:.85rem;color:var(--text-muted)}.pivot-list ul{list-style:none}.pivot-list li{display:flex;justify-content:space-between;align-items:center;padding:var(--spacing-sm) 0;border-bottom:1px solid var(--border-subtle);font-size:.9rem}.pivot-coords{color:var(--text-muted);font-size:.75rem;font-family:SF Mono,monospace}@media(min-width:768px){.header{padding:var(--spacing-2xl)}.header h1{font-size:2rem}.tabs{justify-content:center}.tabs button{padding:var(--spacing-lg) var(--spacing-xl);font-size:.85rem}.content{padding:var(--spacing-2xl)}.dashboard h2{font-size:1.75rem}.stats-grid{grid-template-columns:repeat(3,1fr);gap:var(--spacing-lg)}.stats-card{padding:var(--spacing-xl)}.stats-value{font-size:2.5rem}.action-buttons{grid-template-columns:repeat(4,1fr)}.section-header{flex-direction:row;justify-content:space-between;align-items:center}.artist-list,.artwork-list{grid-template-columns:repeat(2,1fr);gap:var(--spacing-lg)}.artist-card,.artwork-card{padding:var(--spacing-xl)}.modal-overlay{align-items:center;padding:var(--spacing-lg)}.modal{border-radius:var(--radius-xl);max-width:520px;padding:var(--spacing-2xl)}.qr-grid{grid-template-columns:repeat(2,1fr);gap:var(--spacing-xl)}.pivot-setter{padding:var(--spacing-2xl)}}@media(min-width:1024px){.content{padding:var(--spacing-2xl) var(--spacing-3xl)}.stats-grid{grid-template-columns:repeat(5,1fr)}.artist-list,.artwork-list,.qr-grid{grid-template-columns:repeat(3,1fr)}.canvas-preview{min-height:400px}}@media(min-width:1400px){.content{padding:var(--spacing-3xl) calc(var(--spacing-3xl) * 1.5)}.artist-list,.artwork-list,.qr-grid{grid-template-columns:repeat(4,1fr)}.canvas-preview{min-height:500px}}@media(max-width:360px){.header h1{font-size:1.25rem}.tabs button{padding:var(--spacing-md) var(--spacing-md);font-size:.7rem}.content{padding:var(--spacing-md)}.stats-grid,.action-buttons,.form-row{grid-template-columns:1fr}}@supports (padding-bottom: env(safe-area-inset-bottom)){.content{padding-bottom:calc(var(--spacing-lg) + env(safe-area-inset-bottom))}}
