:root{--qd-difficulty-easy: #2e7d32;--qd-difficulty-medium: #f9a825;--qd-difficulty-hard: #e53935;--qd-gold: #8a6200;--qd-gold-dim: #6b4c00;--qd-gold-bg: #fff8e7;--qd-bg: #f4f2ec;--qd-surface: #ffffff;--qd-surface2: #edeae3;--qd-text: #1a1a1a;--qd-text-dim: #6b6860;--qd-border: #ccc9c0;--qd-success: #2e7d32;--qd-error: #c62828;--qd-warn: #c05000;--qd-solved-bg: #e8f5e9;--qd-selected: #1a56db;--qd-cheat: #9c27b0;--cell-w: clamp(22px, 4vw, 28px);--cell-h: clamp(25px, 4.4vw, 33px);--font-cipher: clamp(11px, 2.2vw, 15px);--font-plain: clamp(14px, 2.8vw, 20px)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%;background:var(--qd-bg);color:var(--qd-text);font-family:Segoe UI,system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;overscroll-behavior:none;overflow-x:clip}a{color:var(--qd-gold);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit;cursor:pointer;border:none;border-radius:6px;transition:opacity .15s,transform .1s}button:active{transform:scale(.96)}button:disabled{opacity:.4;cursor:not-allowed}input,textarea{font-family:inherit;background:var(--qd-surface);color:var(--qd-text);border:1px solid var(--qd-border);border-radius:6px;padding:8px 12px;font-size:15px;outline:none;width:100%}input:focus,textarea:focus{border-color:var(--qd-gold);box-shadow:0 0 0 3px #8a62001f}.app-shell{display:flex;flex-direction:column;min-height:100dvh;max-width:100vw;overflow-x:clip}.main-content{flex:1;padding:16px;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right));padding-bottom:max(16px,env(safe-area-inset-bottom));max-width:900px;margin:0 auto;width:100%}.header{background:var(--qd-surface);border-bottom:2px solid var(--qd-gold);padding:0 max(16px,env(safe-area-inset-right));padding-left:max(16px,env(safe-area-inset-left));padding-top:env(safe-area-inset-top);display:flex;align-items:center;justify-content:space-between;height:calc(54px + env(safe-area-inset-top));position:sticky;top:0;z-index:100;box-shadow:0 1px 4px #00000014}.header-logo{font-size:20px;font-weight:700;letter-spacing:.04em;color:var(--qd-gold);flex-shrink:0;white-space:nowrap}.header-nav{display:flex;gap:2px;min-width:0;flex-shrink:1;align-items:center}.nav-btn{background:transparent;color:var(--qd-text-dim);padding:5px 7px;font-size:12px;border-radius:6px;border:1px solid transparent;white-space:nowrap;text-decoration:none;display:inline-block;cursor:pointer;font-family:inherit;line-height:1.4}.nav-btn.active,.nav-btn:hover{background:var(--qd-surface2);color:var(--qd-text);border-color:var(--qd-border)}.puzzle-container{margin:24px 0;overflow-x:hidden}.puzzle-words{display:flex;flex-wrap:wrap;row-gap:32px;column-gap:25px;justify-content:center}.puzzle-word{display:flex;gap:1px}.cipher-cell{display:flex;flex-direction:column;align-items:center;width:var(--cell-w);cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.cipher-cell.is-punct{cursor:default}.cipher-letter{font-size:var(--font-plain);font-weight:700;color:var(--qd-selected);line-height:1;letter-spacing:.04em;min-height:14px;font-family:Courier New,monospace}.plain-slot{width:calc(var(--font-plain) * .6 + 8px);margin:0 auto;height:var(--cell-h);display:flex;flex-direction:column;align-items:center;justify-content:flex-end;border-bottom:2px solid var(--qd-border);transition:border-color .15s,background .15s;border-radius:3px 3px 0 0;padding-bottom:4px}.plain-letter{font-size:var(--font-plain);font-weight:700;letter-spacing:.04em;color:var(--qd-text);text-transform:uppercase;line-height:1;font-family:Courier New,monospace}.cipher-cell.selected .plain-slot{background:#1a56db14;border-color:var(--qd-selected)}.cipher-cell.selected .cipher-letter{color:var(--qd-selected)}.cipher-cell.is-correct .plain-slot{background:#2e7d3214;border-color:var(--qd-success)}.cipher-cell.is-correct .plain-letter{color:var(--qd-success)}.cipher-cell.is-cheated .plain-slot{background:#9c27b026;border-color:var(--qd-cheat);border-width:2px}.cipher-cell.is-cheated .plain-letter{color:var(--qd-cheat);font-weight:700}.cipher-cell.is-solved .plain-slot{background:var(--qd-solved-bg);border-color:var(--qd-success)}.cipher-cell.is-solved .plain-letter{color:var(--qd-success)}.cipher-cell:not(.is-punct):hover .plain-slot{border-color:var(--qd-gold);background:var(--qd-gold-bg)}.clue-bar{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;background:var(--qd-gold-bg);border:1px solid #e0c060;border-radius:8px;padding:10px 12px;margin:8px 0 20px;font-size:14px;overflow:hidden}.clue-badge{background:var(--qd-gold);color:#fff;font-weight:700;font-size:11px;padding:2px 8px;border-radius:10px;letter-spacing:.06em;text-transform:uppercase;flex-shrink:0;white-space:nowrap}.clue-text{font-size:16px;font-weight:600;letter-spacing:.06em;flex-shrink:0;white-space:nowrap}.clue-letter{display:inline-block;background:var(--qd-surface);border:1.5px solid var(--qd-border);border-radius:4px;padding:1px 9px;font-size:17px;font-weight:800;letter-spacing:.04em;font-family:Courier New,monospace}.clue-letter-plain{border-color:var(--qd-gold);color:var(--qd-gold)}.controls{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin:16px 0}.btn{padding:10px 20px;font-size:14px;font-weight:600;border-radius:8px;letter-spacing:.02em}.btn-primary{background:var(--qd-gold);color:#fff}.btn-primary:hover{background:var(--qd-gold-dim)}.btn-secondary{background:var(--qd-surface2);color:var(--qd-text);border:1px solid var(--qd-border)}.btn-secondary:hover{border-color:var(--qd-gold)}.btn-danger{background:var(--qd-error);color:#fff}.btn-warn{background:var(--qd-warn);color:#fff}.btn-ghost{background:transparent;color:var(--qd-text-dim);border:1px solid var(--qd-border)}.btn-ghost:hover{background:var(--qd-surface2)}.btn-sm{padding:6px 12px;font-size:13px}.picker-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;background:#00000059;display:flex;align-items:flex-end;justify-content:center}.picker-sheet{background:var(--qd-surface);border:1px solid var(--qd-border);border-radius:16px 16px 0 0;padding:12px 16px max(24px,env(safe-area-inset-bottom));width:100%;max-width:520px;box-shadow:0 -4px 20px #0000001f}.picker-handle{width:40px;height:4px;background:var(--qd-border);border-radius:2px;margin:0 auto 14px}.picker-label{text-align:center;font-size:13px;color:var(--qd-text-dim);margin-bottom:12px}.picker-label strong{color:var(--qd-text)}.picker-grid{display:grid;grid-template-columns:repeat(9,1fr);gap:5px}.picker-btn{aspect-ratio:1;background:var(--qd-surface2);color:var(--qd-text);font-size:15px;font-weight:700;border-radius:6px;border:1px solid var(--qd-border);display:flex;align-items:center;justify-content:center;font-family:Courier New,monospace}.picker-btn:hover,.picker-btn:active{background:var(--qd-gold);color:#fff;border-color:var(--qd-gold)}.picker-btn.selected{background:var(--qd-selected);color:#fff;border-color:var(--qd-selected)}.picker-btn.in-use{opacity:.35}.picker-clear{grid-column:span 2;background:#fde8e8;color:var(--qd-error);font-size:13px;padding:0 8px;border-color:#f5c0c0;aspect-ratio:unset;font-family:inherit}.picker-clear:hover{background:var(--qd-error);color:#fff;border-color:var(--qd-error)}.banner{border-radius:10px;padding:14px 18px;margin:14px 0;font-size:14px;font-weight:600;text-align:center;border:1px solid}.banner-success{background:#e8f5e9;border-color:#a5d6a7;color:var(--qd-success)}.banner-warn{background:#fff3e0;border-color:#ffcc80;color:var(--qd-warn)}.banner-info{background:var(--qd-gold-bg);border-color:#e0c060;color:var(--qd-gold)}.stats-bar{display:flex;gap:20px;justify-content:center;font-size:13px;color:var(--qd-text-dim);margin:4px 0 12px}.stats-bar span{font-weight:600;color:var(--qd-text)}.puzzle-list{display:flex;flex-direction:column;gap:10px}.puzzle-card{background:var(--qd-surface);border:1px solid var(--qd-border);border-radius:10px;padding:14px 16px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.puzzle-card:hover{border-color:var(--qd-gold);box-shadow:0 2px 8px #8a62001a}.puzzle-card-cipher{font-family:Courier New,monospace;font-size:13px;color:var(--qd-text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:.04em;margin-bottom:6px}.puzzle-card-meta{display:flex;justify-content:space-between;font-size:12px;color:var(--qd-text-dim)}.puzzle-card-attr{font-style:italic}.badge-solved{color:var(--qd-success);font-weight:700}.badge-gaveup{color:var(--qd-error);font-weight:700}.badge-progress{color:var(--qd-warn);font-weight:700}.panel-title{font-size:20px;font-weight:700;color:var(--qd-gold);margin-bottom:20px}.form-group{margin-bottom:16px}.form-label{display:block;font-size:13px;color:var(--qd-text-dim);margin-bottom:6px;font-weight:600}.form-hint{font-size:12px;color:var(--qd-text-dim);margin-top:4px}.form-error{font-size:12px;color:var(--qd-error);margin-top:4px}.author-list{margin-top:28px}.author-list-title{font-size:15px;font-weight:600;color:var(--qd-text-dim);margin-bottom:12px;border-bottom:1px solid var(--qd-border);padding-bottom:8px}.author-item{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:12px 0;border-bottom:1px solid var(--qd-border)}.author-item-text{flex:1;font-size:13px;color:var(--qd-text-dim);overflow:hidden}.author-item-plain{font-size:14px;color:var(--qd-text);margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.author-item-actions{display:flex;gap:6px;flex-shrink:0}.confirm-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:300;background:#00000073;display:flex;align-items:center;justify-content:center;padding:24px}.confirm-box{background:var(--qd-surface);border:1px solid var(--qd-border);border-radius:12px;padding:28px 24px 24px;max-width:360px;width:100%;text-align:center;box-shadow:0 8px 32px #00000026}.confirm-box h3{font-size:18px;margin-bottom:10px}.confirm-box p{font-size:14px;color:var(--qd-text-dim);margin-bottom:20px}.confirm-actions{display:flex;gap:10px;justify-content:center}.loading{display:flex;align-items:center;justify-content:center;padding:60px 24px;color:var(--qd-text-dim);font-size:15px;gap:10px}.spinner{width:22px;height:22px;border:3px solid var(--qd-border);border-top-color:var(--qd-gold);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.error-msg{background:#fde8e8;border:1px solid #f5c0c0;border-radius:8px;padding:12px 16px;color:var(--qd-error);font-size:14px;margin:16px 0}.attribution{text-align:center;font-size:13px;color:var(--qd-text-dim);font-style:italic;margin-top:4px}.edited-by{text-align:center;font-size:11px;color:var(--qd-text-dim);margin-top:2px}.pagination{display:flex;justify-content:center;align-items:center;gap:10px;margin:20px 0}@media (max-width: 480px){.picker-grid{grid-template-columns:repeat(7,1fr)}.puzzle-words{row-gap:28px;column-gap:12px}.controls{gap:8px}.btn{padding:9px 14px;font-size:13px}.header-logo{font-size:17px}}.clue-resuming{font-size:11px;font-weight:600;color:var(--qd-warn);background:#c0500014;border:1px solid rgba(192,80,0,.25);border-radius:10px;padding:2px 8px;white-space:nowrap;flex-shrink:0}.celebration-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:600;overflow:hidden;cursor:pointer;transition:opacity .4s}.celebration-overlay.fading{opacity:0;pointer-events:none}.confetti-piece{position:absolute;top:-16px;animation:confetti-fall linear forwards}@keyframes confetti-fall{0%{transform:translateY(0) rotate(0);opacity:1}75%{opacity:1}to{transform:translateY(110vh) rotate(540deg);opacity:0}}.celebration-card{position:absolute;top:42%;left:50%;transform:translate(-50%,-50%);background:#fffffff7;border:2px solid var(--qd-gold);border-radius:18px;padding:32px 48px;text-align:center;box-shadow:0 12px 40px #0000002e;animation:celebrate-pop .4s cubic-bezier(.34,1.56,.64,1);pointer-events:none;min-width:260px}@keyframes celebrate-pop{0%{transform:translate(-50%,-50%) scale(.5);opacity:0}to{transform:translate(-50%,-50%) scale(1);opacity:1}}.celebration-emoji{font-size:52px;margin-bottom:10px;line-height:1}.celebration-title{font-size:26px;font-weight:700;color:var(--qd-gold);margin-bottom:8px}.celebration-subtitle{font-size:14px;color:var(--qd-text-dim);margin-bottom:16px;line-height:1.5}.celebration-dismiss{font-size:11px;color:#bbb}.landscape-warning{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;background:var(--qd-bg);display:flex;align-items:center;justify-content:center}.landscape-warning-inner{display:flex;flex-direction:column;align-items:center;gap:16px;color:var(--qd-text-dim);font-size:16px;text-align:center;padding:32px}@keyframes clue-btn-flash{0%,to{background:var(--qd-surface2);color:var(--qd-text-dim)}50%{background:var(--qd-gold);color:#fff}}@keyframes clue-msg-flash{0%,to{opacity:1}50%{opacity:.15}}.picker-btn.clue-flash{animation:clue-btn-flash .4s ease-in-out 4}@keyframes same-btn-flash{0%,to{background:var(--qd-surface2);color:var(--qd-text-dim)}50%{background:var(--qd-warn);color:#fff}}.picker-btn.same-flash{animation:same-btn-flash .4s ease-in-out 4}
