*{box-sizing:border-box}
:root{--bg:#f7f6f3;--panel:#fff;--border:#d7d3cb;--text:#121212;--muted:#66625c;--selected:#5a594e;--selected-text:#fff;--shadow:0 1px 0 rgba(0,0,0,.04);--yellow:#f9df6d;--green:#a0c35a;--blue:#b0c4ef;--purple:#ba81c5}
html,body{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:Arial,Helvetica,sans-serif}
body{padding:18px}.app{max-width:1840px;margin:0 auto}.topbar{text-align:center;margin-bottom:14px}
h1{margin:0;font-size:40px;line-height:1;letter-spacing:-.03em}.subtitle{margin:6px 0 0;color:var(--muted);font-size:15px}
.controls,.status{display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap;margin-bottom:10px}
button{border:1px solid #121212;background:#fff;color:#121212;border-radius:999px;padding:9px 14px;font-size:14px;cursor:pointer}
button:hover{background:#f0efeb}.board{display:grid;grid-template-columns:repeat(15,minmax(0,1fr));gap:4px;align-items:start;margin:0 auto}
.tile{position:relative;background:var(--panel);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow);min-height:58px;padding:6px;display:flex;align-items:center;justify-content:flex-start;text-align:left;font-size:11px;line-height:1.18;cursor:pointer;user-select:none;overflow:visible;word-break:break-word;color:var(--text)}
.tile.single{font-weight:400}.tile.merged{font-weight:700}.tile.solved-tile{font-weight:700;justify-content:center;text-align:center;min-height:44px;padding:4px 6px;font-size:10px}
.tile.selected{background:var(--selected)!important;color:var(--selected-text)!important;border-color:var(--selected)!important}.tile.selected *{color:var(--selected-text)!important}
.hover-content{opacity:0;visibility:hidden;pointer-events:none;position:absolute;left:50%;top:calc(100% + 6px);transform:translateX(-50%);width:240px;max-width:320px;background:#121212;color:#fff;border-radius:10px;padding:8px 10px;z-index:20;white-space:normal;font-size:11px;line-height:1.3;box-shadow:0 8px 20px rgba(0,0,0,.18)}
.tile.hoverable:hover .hover-content{visibility:visible;opacity:1;transition:opacity .15s ease 3s,visibility 0s linear 3s}.tile.hoverable:not(:hover) .hover-content{transition:opacity .1s ease 0s,visibility 0s linear .1s}
.shake{animation:shake .28s ease-in-out}@keyframes shake{0%{transform:translateX(0)}25%{transform:translateX(-4px)}50%{transform:translateX(4px)}75%{transform:translateX(-4px)}100%{transform:translateX(0)}}
@media (max-width:1600px){.board{grid-template-columns:repeat(11,minmax(0,1fr))}}@media (max-width:700px){body{padding:12px}.board{grid-template-columns:repeat(4,minmax(0,1fr))}.tile{min-height:64px;font-size:12px}}
