*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;overflow:hidden;background:#0b0d1a;font-family:Georgia,Times New Roman,serif;color:#f0eee9}#wall{position:fixed;inset:0;width:100%;height:100%;display:block;cursor:grab;touch-action:none}#wall:active{cursor:grabbing}.about-link{position:fixed;right:16px;bottom:12px;color:#8f94c4;font-size:14px;text-decoration:none}.intro{position:absolute;top:16px;left:16px;z-index:1;max-width:380px;padding:16px 20px;color:#f0eee9;background:#0d0849d9;border:1px solid rgba(245,242,232,.25);border-radius:12px;box-shadow:0 4px 20px #00000059;cursor:pointer;transition:opacity .3s ease,transform .3s ease}.intro.is-dismissed{opacity:0;transform:translateY(-8px);pointer-events:none}.intro h1{margin:0 0 8px;font-size:20px}.intro p{margin:0;font-size:14px;line-height:1.5}.intro-dismiss{position:absolute;top:6px;right:8px;padding:4px;background:none;border:none;color:#f0eee9;font-size:18px;line-height:1;opacity:.6;cursor:pointer}.intro-dismiss:hover{opacity:1}.wall-controls{position:fixed;left:12px;bottom:12px;z-index:5;display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:10px;background:#171a33e0;border:1px solid #3a3f8f;border-radius:10px;user-select:none}.wall-controls .ctrl,.wall-controls .ctrl-fly-go{width:40px;height:40px;background:#0b0d1a;color:#f0eee9;border:1px solid #3a3f8f;border-radius:6px;font:inherit;font-size:16px;line-height:1;cursor:pointer;touch-action:manipulation}.wall-controls .ctrl:hover,.wall-controls .ctrl-fly-go:hover,.wall-controls .ctrl-fly-toggle:hover{border-color:#e0b34c}.wall-controls .pan-pad{display:grid;grid-template-areas:". up ." "left home right" ". down .";gap:4px}.wall-controls .pan-pad .up{grid-area:up}.wall-controls .pan-pad .down{grid-area:down}.wall-controls .pan-pad .left{grid-area:left}.wall-controls .pan-pad .right{grid-area:right}.wall-controls .pan-pad .home{grid-area:home;font-size:20px}.wall-controls .zoom-row{display:flex;gap:4px}.wall-controls .zoom-row .ctrl{font-size:20px}.wall-controls .ctrl-fly-toggle{height:32px;padding:0 10px;background:none;color:#8f94c4;border:1px solid #3a3f8f;border-radius:6px;font:inherit;font-size:13px;cursor:pointer;touch-action:manipulation}.wall-controls .fly-form{display:flex;gap:4px}.wall-controls .fly-form[hidden],.wall-controls .ctrl-error[hidden]{display:none}.wall-controls .fly-input{width:148px;height:40px;background:#0b0d1a;color:#f0eee9;border:1px solid #3a3f8f;border-radius:6px;padding:0 8px;font:inherit;font-size:13px}.wall-controls .ctrl-fly-go{width:auto;padding:0 12px}.wall-controls .ctrl-fly-go:disabled{opacity:.5;cursor:default}.wall-controls .ctrl-error{max-width:200px;color:#e07a7a;font-size:12px}.wall-controls .discover-toggle{height:32px;padding:0 10px;background:none;color:#8f94c4;border:1px solid #3a3f8f;border-radius:6px;font:inherit;font-size:13px;cursor:pointer;touch-action:manipulation}.wall-controls .discover-toggle:hover{border-color:#e0b34c}.wall-controls .discover-panel{position:absolute;left:0;bottom:calc(100% + 8px);width:min(280px,calc(100vw - 24px));max-height:min(50vh,420px);overflow-y:auto;padding:12px;background:#171a33f2;border:1px solid #3a3f8f;border-radius:10px}.wall-controls .discover-panel[hidden],.wall-controls .discover-status[hidden]{display:none}.wall-controls .discover-panel h3{font-size:14px;margin-bottom:8px}.wall-controls .discover-status{font-size:12px;color:#8f94c4}.wall-controls .discover-list{display:flex;flex-direction:column;gap:4px}.wall-controls .discover-entry{display:block;width:100%;text-align:left;padding:8px;background:#0b0d1a;color:#f0eee9;border:1px solid #3a3f8f;border-radius:6px;font:inherit;cursor:pointer}.wall-controls .discover-entry:hover{border-color:#e0b34c}.discover-message{display:block;font-style:italic;font-size:14px}.discover-meta{display:block;margin-top:2px;font-size:12px;color:#8f94c4}.modal-backdrop{position:fixed;inset:0;background:#04050ca6;display:flex;align-items:center;justify-content:center;z-index:10;padding:16px}.modal{background:#171a33;border:1px solid #3a3f8f;border-radius:8px;padding:24px;width:min(420px,calc(100vw - 32px));position:relative;max-height:90vh;max-height:90dvh;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.modal h2{font-size:18px;margin-bottom:12px}.modal .close{position:absolute;top:8px;right:12px;background:none;border:none;color:#8f94c4;font-size:20px;cursor:pointer}.modal textarea{width:100%;height:84px;background:#0b0d1a;color:#f0eee9;border:1px solid #3a3f8f;border-radius:4px;padding:8px;font:inherit;font-size:15px;resize:none}.modal textarea:disabled{opacity:.5;cursor:not-allowed}.modal .prefix-hint{margin-top:0}.modal .love-prefix-select{width:100%;background:#0b0d1a;color:#f0eee9;border:1px solid #3a3f8f;border-radius:4px;padding:8px;font:inherit;font-size:15px;margin-bottom:12px}.modal .counter{text-align:right;font-size:12px;color:#8f94c4;margin:4px 0 12px}.modal .error{color:#e07a7a;font-size:14px;margin-bottom:12px;min-height:18px}.modal .pay{width:100%;padding:10px;background:#e0b34c;color:#171a33;border:none;border-radius:4px;font:inherit;font-size:16px;font-weight:700;cursor:pointer}.modal .pay:disabled{opacity:.5;cursor:default}.modal .pay-divider{text-align:center;font-size:12px;color:#8f94c4;margin:10px 0}.modal .pay-card{background:#635bff;color:#f0eee9}.modal .share-row{display:flex;gap:8px;margin-top:12px}.modal .share-row input{flex:1;background:#0b0d1a;color:#f0eee9;border:1px solid #3a3f8f;border-radius:4px;padding:8px;font-size:13px}.modal .share-row button{padding:8px 12px;background:#3a3f8f;color:#f0eee9;border:none;border-radius:4px;cursor:pointer}.modal .notice-link{display:block;text-align:center;color:#e0b34c;font-size:15px;padding-bottom:8px}.modal .quote{font-style:italic;font-size:20px;text-align:center;padding:16px 0}.modal .author{font-size:16px;text-align:right;color:#c9c3b6;padding:0 8px 16px 0}.modal .author-input,.modal .coupon-input{width:100%;background:#0b0d1a;color:#f0eee9;border:1px solid #3a3f8f;border-radius:4px;padding:8px;font:inherit;font-size:15px;margin-bottom:12px}.modal .coupon-input{text-transform:uppercase}.modal .coupon-input::placeholder{text-transform:none}.modal .fine-print{font-size:12px;color:#8f94c4;margin-top:12px}.modal .print-card{width:100%;margin-top:12px;padding:10px;background:transparent;color:#f0eee9;border:1px solid #3a3f8f;border-radius:4px;font:inherit;font-size:14px;cursor:pointer}.modal .print-card:hover{background:#232752}@font-face{font-family:Caveat;src:url(/fonts/caveat-latin-400-normal.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Patrick Hand;src:url(/fonts/patrick-hand-latin-400-normal.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Shadows Into Light;src:url(/fonts/shadows-into-light-latin-400-normal.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Homemade Apple;src:url(/fonts/homemade-apple-latin-400-normal.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Gloria Hallelujah;src:url(/fonts/gloria-hallelujah-latin-400-normal.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}.font-row{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.font-chip{padding:4px 10px;background:#0b0d1a;color:#f0eee9;border:1px solid #3a3f8f;border-radius:999px;font-size:16px;cursor:pointer}.font-chip.selected{border-color:#e0b34c;color:#e0b34c}.modal .tile-preview{display:block;width:100%;border:1px solid #3a3f8f;border-radius:4px;margin-bottom:8px;cursor:crosshair;touch-action:manipulation}.shape-row{display:flex;gap:6px;align-items:center}.shape-chip{display:flex;align-items:center;justify-content:center;width:38px;height:34px;padding:0;background:#0b0d1a;border:1px solid #3a3f8f;border-radius:6px;cursor:pointer}.shape-chip canvas{display:block}.shape-chip.selected{border-color:#e0b34c;background:#1c2140}.modal .shape-hint{margin:6px 0 12px}#wall.loading{filter:blur(8px)}#wall-loading{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none;z-index:20;transition:opacity .4s}#wall-loading.fade-out{opacity:0}#wall-loading p{color:#f0eee9;font-size:18px;letter-spacing:.08em;animation:wall-pulse 1.6s ease-in-out infinite}@keyframes wall-pulse{0%,to{opacity:.35}50%{opacity:1}}
