/* ─── Meme Generator — scoped under .meme-wrap ────────────── */ .meme-wrap { --m-bg: #12061c; --m-panel: rgba(26, 13, 40, .92); --m-panel-2: #23153c; --m-line: rgba(255, 215, 0, .28); --m-line-soft: rgba(255, 215, 0, .14); --m-text: #f7f2e8; --m-muted: rgba(247, 242, 232, .62); --m-accent: #ffd700; --m-accent-2: #00e5ff; --m-signal: #00ff88; display: grid; grid-template-columns: 340px 1fr; min-height: calc(100vh - 108px); background: radial-gradient(1200px 800px at 85% -10%, rgba(255, 215, 0, .08), transparent 60%), radial-gradient(1000px 700px at 10% 110%, rgba(0, 229, 255, .06), transparent 60%), var(--m-bg); color: var(--m-text); font-family: "Outfit", ui-sans-serif, system-ui, sans-serif; } .meme-panel { position: sticky; top: 108px; height: calc(100vh - 108px); overflow-y: auto; padding: 22px 20px 32px; background: var(--m-panel); backdrop-filter: blur(10px); border-right: 1px solid var(--m-line-soft); display: flex; flex-direction: column; gap: 22px; scrollbar-width: thin; scrollbar-color: rgba(255, 215, 0, .35) transparent; } .meme-panel::-webkit-scrollbar { width: 8px; } .meme-panel::-webkit-scrollbar-thumb { background: rgba(255, 215, 0, .25); border-radius: 999px; } .meme-panel header h1 { margin: 0 0 6px; font-family: "Cinzel", "Times New Roman", serif; font-size: 20px; letter-spacing: .04em; color: var(--m-text); } .meme-panel header h1 span { color: var(--m-accent); } .meme-sub { margin: 0; font-size: 12.5px; line-height: 1.5; color: var(--m-muted); } .meme-group h2 { margin: 0 0 10px; font-size: 11px; font-weight: 700; letter-spacing: .18em; text-transform: uppercase; color: var(--m-accent); } .meme-thumbs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; } .meme-thumb { position: relative; padding: 0; aspect-ratio: 1; border: 2px solid var(--m-line); border-radius: 9px; background: #0b0612; overflow: hidden; cursor: pointer; transition: border-color .15s, transform .15s, box-shadow .15s; } .meme-thumb:hover { transform: translateY(-2px); border-color: rgba(255, 215, 0, .65); } .meme-thumb.active { border-color: var(--m-accent); box-shadow: 0 0 0 3px rgba(255, 215, 0, .2), 0 0 15px rgba(255, 215, 0, .35); } .meme-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; } .meme-thumb.broken { cursor: not-allowed; opacity: .35; border-style: dashed; } .meme-thumb.broken::after { content: "✕"; position: absolute; inset: 0; display: grid; place-items: center; font-size: 18px; color: var(--m-muted); } .meme-thumb.broken img { display: none; } .meme-thumb.meme-upload { display: grid; place-items: center; border-style: dashed; color: var(--m-muted); font-size: 22px; font-weight: 300; } .meme-thumb.meme-upload:hover { color: var(--m-accent); } .meme-thumb.meme-upload.active { border-style: solid; color: var(--m-accent); } .meme-field { display: block; margin-bottom: 10px; } .meme-field > span { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--m-accent); margin-bottom: 6px; } .meme-field b { color: var(--m-text); font-weight: 600; letter-spacing: 0; } .meme-wrap input[type="text"], .meme-wrap select { width: 100%; padding: 10px 12px; background: var(--m-panel-2); border: 1px solid var(--m-line); border-radius: 8px; color: var(--m-text); font: inherit; font-size: 14px; outline: none; transition: border-color .15s, box-shadow .15s; } .meme-wrap input[type="text"]::placeholder { color: rgba(247, 242, 232, .3); } .meme-wrap input[type="text"]:focus, .meme-wrap select:focus { border-color: var(--m-accent); box-shadow: 0 0 0 3px rgba(255, 215, 0, .18); } .meme-wrap select { cursor: pointer; } .meme-wrap input[type="range"] { -webkit-appearance: none; appearance: none; width: 100%; height: 4px; border-radius: 999px; background: var(--m-line); outline: none; cursor: pointer; } .meme-wrap input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 16px; height: 16px; border-radius: 50%; background: var(--m-accent); border: 3px solid #12061c; box-shadow: 0 0 0 1px var(--m-accent), 0 0 12px rgba(255, 215, 0, .5); cursor: grab; } .meme-wrap input[type="range"]::-moz-range-thumb { width: 12px; height: 12px; border-radius: 50%; background: var(--m-accent); border: 3px solid #12061c; box-shadow: 0 0 0 1px var(--m-accent); cursor: grab; } .meme-row { display: flex; gap: 8px; } .meme-row > * { flex: 1; } .meme-color { display: flex; align-items: center; gap: 8px; background: var(--m-panel-2); border: 1px solid var(--m-line); border-radius: 8px; padding: 6px 10px; cursor: pointer; } .meme-color span { font-size: 12px; color: var(--m-muted); flex: 1; } .meme-wrap input[type="color"] { width: 30px; height: 24px; padding: 0; border: none; background: none; cursor: pointer; } .meme-wrap input[type="color"]::-webkit-color-swatch-wrapper { padding: 0; } .meme-wrap input[type="color"]::-webkit-color-swatch { border: 1px solid var(--m-line); border-radius: 6px; } .meme-check { display: flex; align-items: center; gap: 9px; margin-top: 12px; font-size: 11px; letter-spacing: .14em; color: var(--m-muted); cursor: pointer; user-select: none; } .meme-check input { appearance: none; width: 34px; height: 19px; border-radius: 999px; background: var(--m-line); position: relative; cursor: pointer; transition: background .18s; outline: none; border: none; } .meme-check input::after { content: ""; position: absolute; top: 3px; left: 3px; width: 13px; height: 13px; border-radius: 50%; background: rgba(247, 242, 232, .55); transition: transform .18s, background .18s; } .meme-check input:checked { background: var(--m-accent); } .meme-check input:checked::after { transform: translateX(15px); background: #12061c; } .meme-btn { font: inherit; font-size: 13px; font-weight: 600; padding: 10px 12px; border-radius: 8px; border: 1px solid var(--m-line); background: var(--m-panel-2); color: var(--m-text); cursor: pointer; transition: background .15s, border-color .15s, filter .15s, transform .1s; white-space: nowrap; } .meme-btn:hover { border-color: var(--m-accent); box-shadow: 0 0 15px rgba(255, 215, 0, .18); } .meme-btn:active { transform: translateY(1px); } .meme-btn.meme-primary { width: 100%; padding: 13px; font-size: 14px; color: #12061c; background: linear-gradient(180deg, #ffe14d, #ffd700); border-color: #ffd700; box-shadow: 0 8px 22px -8px rgba(255, 215, 0, .65); font-weight: 700; letter-spacing: .08em; text-transform: uppercase; } .meme-btn.meme-primary:hover { filter: brightness(1.06); } .meme-btn:disabled { opacity: .35; cursor: not-allowed; filter: none; box-shadow: none; } .meme-stage { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 14px; padding: 28px; min-height: calc(100vh - 108px); } .meme-stage canvas { max-width: 100%; max-height: calc(100vh - 200px); border-radius: 12px; background: #0b0612; box-shadow: 0 24px 70px -20px rgba(0, 0, 0, .9), 0 0 0 1px rgba(255, 215, 0, .2); cursor: grab; touch-action: none; display: block; } .meme-stage canvas.dragging { cursor: grabbing; } .meme-hint { margin: 0; font-size: 12px; color: var(--m-muted); letter-spacing: .06em; } @media (max-width: 860px) { .meme-wrap { grid-template-columns: 1fr; min-height: auto; } .meme-panel { position: static; height: auto; border-right: none; border-bottom: 1px solid var(--m-line-soft); } .meme-stage { min-height: 55vh; padding: 20px; } .meme-stage canvas { max-height: 55vh; } }