.collection-board{display:grid;width:min(100%,470px);margin:auto;position:relative;border:1px solid #62846b;border-radius:6px;overflow:hidden;touch-action:none;user-select:none}.collection-cell{aspect-ratio:1;min-width:0;padding:0;border:0;border-right:1px solid #d3ddcf;border-bottom:1px solid #d3ddcf;border-radius:0;background:#fafbf6;color:#183e35;font:600 clamp(12px,2.5vw,21px) 'DM Sans',Arial;display:grid;place-items:center;cursor:pointer}.collection-cell.filled{background:#183e35}.collection-cell.selected{box-shadow:inset 0 0 0 2px #ee805c}.collection-cell.fixed{background:#e9eee2;font-weight:800}.collection-cell.found{background:#d5e5cb}.collection-cell.tracing{background:#f4d9b9}.collection-cell:focus-visible,.loop-edge:focus-visible{outline:2px solid #ee805c;outline-offset:-3px;z-index:2}.collection-clue{display:flex;justify-content:center;align-items:center;font-size:12px;font-weight:700;padding:5px;white-space:pre-line;background:#e9eee2}.collection-clue.column{align-items:flex-end;text-align:center;line-height:1.5}.collection-clue.row{white-space:nowrap;min-width:30px}.tents .collection-cell{font-size:clamp(20px,4vw,30px)}.word-list{display:flex;justify-content:center;flex-wrap:wrap;gap:8px 14px;margin:14px auto;max-width:470px;font-size:13px}.word-list .word-complete{color:#62846b;text-decoration:line-through}.word-list[hidden],.number-entry[hidden]{display:none}.number-entry{display:flex;justify-content:center;align-items:center;gap:8px;margin-top:14px}.number-entry input{width:80px;min-height:44px;border:1px solid #b9c9bc;border-radius:8px;padding:8px;font:inherit;color:#183e35}.number-entry button{min-height:44px;border:1px solid #b9c9bc;border-radius:8px;padding:8px 14px;background:#e9eee2;color:#183e35;font:inherit}.game-tools button[hidden]{display:none}.bridges{display:block;overflow:visible;background:linear-gradient(#f7f8f2,#eef3e8)}.bridge-lines{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.bridge-lines line{stroke:#183e35;stroke-width:.04}.island{position:absolute;transform:translate(-50%,-50%);width:44px;height:auto;aspect-ratio:1;border:2px solid #62846b;border-radius:50%;background:#fff;z-index:1;font-size:17px}.island.chosen{background:#f4d9b9;border-color:#ee805c}.loop{aspect-ratio:1;border:0;overflow:visible}.loop-dot{display:grid;place-items:center}.loop-dot:after{content:'';width:5px;height:5px;border-radius:50%;background:#183e35}.loop-clue{display:grid;place-items:center;font-size:clamp(14px,3vw,22px)}.loop-edge{position:relative;border:0;padding:0;background:transparent;min-width:0;cursor:pointer}.loop-edge:after{content:'';display:block;position:absolute;background:#d5dfd0;border-radius:2px}.loop-edge.horizontal:after{height:3px;left:-50%;right:-50%;top:calc(50% - 1.5px)}.loop-edge.vertical:after{width:3px;top:-50%;bottom:-50%;left:calc(50% - 1.5px)}.loop-edge.drawn:after{background:#183e35}.minesweeper .collection-cell{background:#e1ebd7;box-shadow:inset 1px 1px #fff8}.minesweeper .revealed{background:#f7f8f2;box-shadow:none}.minesweeper .mine{background:#f2d6cf;color:#983d2b}.collection-cell.check-error,.island.check-error{background:#f2d6cf!important;color:#983d2b;box-shadow:inset 0 0 0 2px #bd563e}.loop-edge.check-error:after{background:#bd563e}#collection-status{font-size:14px;line-height:1.6;text-align:center;color:#4d6659;margin:14px 0 0}body[data-difficulty] .collection-board{width:min(100%,470px,max(300px,calc(100svh - 360px)))}@media(max-width:600px){body[data-difficulty] .collection-board{width:100%}.collection-clue{font-size:10px;padding:4px}.word-list{font-size:12px}.collection-cell{font-size:clamp(11px,3.2vw,18px)}}

/* Word Trails shows lengths without revealing the answers. */
.word-list.trail-slots{display:flex;flex-direction:column;align-items:center;gap:7px;width:100%}
.trail-word{display:flex;align-items:center;justify-content:center;gap:4px;max-width:100%;min-height:36px;padding:4px 8px;border:2px solid transparent;border-radius:9px;background:transparent;color:#183e35;cursor:pointer}
.trail-word.active{border-color:var(--trail-color);background:#f7f8f2}
.trail-letter{display:grid;place-items:center;width:clamp(20px,4.8vw,29px);aspect-ratio:1;border-radius:6px;background:#e9eee2;font:700 14px 'DM Sans',Arial,sans-serif}
.trail-word.active .trail-letter,.trail-word.solved .trail-letter{background:var(--trail-color)}
.trail-word.solved{opacity:1;cursor:default}
.trail-tick{width:18px;font-weight:800;color:#315c32}
.trail-word:focus-visible{outline:2px solid #ee805c;outline-offset:2px}
@media(max-width:360px){.trail-word{gap:3px;padding:4px}.trail-letter{width:20px;font-size:12px}}
.word-trails .collection-cell{position:relative}
.word-trails .trail-hint-cell{color:#bd563e}


/* Word Trails: paths sit behind the letters, within the shared puzzle layout. */
.collection-board.word-trails{border:1px solid #aebfb0;border-radius:14px;background:#fafbf6;box-shadow:0 3px 14px #183e3508;isolation:isolate}
.word-trails .collection-cell{position:relative;z-index:1;background:transparent;border-color:#183e3510;font-family:Manrope,Arial,sans-serif;font-weight:700;color:#23473b;letter-spacing:.02em;font-size:clamp(14px,2vw,22px)}
.word-trails .collection-cell.found,.word-trails .collection-cell.tracing{background:transparent!important}
.word-trails .collection-cell.selected{box-shadow:none}
.word-trails .collection-cell:focus-visible{outline:2px solid #62846b;outline-offset:-4px;border-radius:8px}
.trail-paths{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}

.word-list.trail-slots{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:6px 10px;padding:16px 0 0;border-top:1px solid #e7ece3;margin-top:18px!important}
.trail-word{position:relative;display:flex;justify-content:flex-start;gap:3px;min-width:0;width:100%;min-height:38px;padding:6px;border:1px solid transparent;border-radius:8px;transition:background .15s,border-color .15s}
.trail-word.active{border-color:#c5d2c3;background:#f7f9f3}
.trail-letter{flex:0 1 22px;min-width:0;width:22px;height:auto;aspect-ratio:1;border-radius:4px;background:#edf1e8;color:#23473b;font:700 12px 'DM Sans',Arial,sans-serif}
.trail-word.active .trail-letter:empty{background:#e6ece0}
.trail-word.active .trail-letter:not(:empty),.trail-word.solved .trail-letter{background:var(--trail-color)}
.trail-tick{flex:0 0 14px;width:14px;margin-left:auto;font-size:12px}
body[data-puzzle=word-trails] .game-tools{gap:8px;margin-top:18px;min-height:44px}
body[data-puzzle=word-trails] #trail-hint{min-width:94px;font-variant-numeric:tabular-nums}
body[data-puzzle=word-trails] #selection-clear{background:transparent;border-color:transparent;color:#62766a;font-size:12px}
@media(max-width:600px){.word-trails .collection-cell{font-size:clamp(13px,3.3vw,20px)}.word-list.trail-slots{gap:4px 8px}.trail-word{padding:5px 3px;gap:2px}.trail-letter{font-size:11px;flex-basis:20px}.trail-tick{flex-basis:11px;font-size:10px}}
@media(prefers-reduced-motion:reduce){.trail-confirmed{animation:none}.trail-word{transition:none}}

/* Keep every word row within the board width, using equal-size letter tiles. */
body[data-puzzle=word-trails] .word-list.trail-slots{width:var(--puzzle-board-width);max-width:470px;container-type:inline-size;grid-template-columns:repeat(2,minmax(0,1fr));justify-content:normal;box-sizing:border-box}
body[data-puzzle=word-trails] .trail-word{display:grid;grid-template-columns:repeat(var(--slot-count),min(22px,calc((100cqw - 120px)/20)));justify-content:start;align-content:center;gap:2px;min-width:0;width:100%;max-width:100%;padding:6px 18px 6px 6px;box-sizing:border-box}
body[data-puzzle=word-trails] .trail-letter{width:100%;height:auto;min-width:0;aspect-ratio:1;font-size:clamp(10px,2.7cqw,12px);box-sizing:border-box}
body[data-puzzle=word-trails] .trail-tick{position:absolute;right:3px;top:50%;transform:translateY(-50%);width:12px;margin:0}
body[data-puzzle=word-trails] .game-tools{width:var(--puzzle-board-width);max-width:470px;margin:12px auto 0;min-height:44px}
body[data-puzzle=word-trails] .keyboard-help{border-top:1px solid #e7ece3;margin-top:14px;padding-top:12px}
@media(max-width:600px){
 body[data-puzzle=word-trails] .word-list.trail-slots{grid-template-columns:1fr;gap:3px}
 body[data-puzzle=word-trails] .trail-word{grid-template-columns:repeat(var(--slot-count),min(22px,calc((100cqw - 48px)/10)));justify-content:center;padding:6px 20px;min-height:36px}
 body[data-puzzle=word-trails] .trail-tick{right:10px}
}

/* Reserve the clear action so selection changes never shift the controls. */
body[data-puzzle=word-trails] .game-tools{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;justify-items:stretch}
body[data-puzzle=word-trails] .game-tools #undo{grid-column:1;grid-row:1}
body[data-puzzle=word-trails] .game-tools #trail-hint{grid-column:2;grid-row:1;min-width:0}
body[data-puzzle=word-trails] .game-tools #reset{grid-column:3;grid-row:1}
body[data-puzzle=word-trails] .game-tools #selection-clear{display:block;grid-column:1/-1;grid-row:2;justify-self:center;min-height:36px;padding:6px 12px}
body[data-puzzle=word-trails] .game-tools #selection-clear[hidden]{display:block;visibility:hidden;pointer-events:none}

/* Word Trails uses two primary actions; clearing keeps its own fixed row. */
body[data-puzzle=word-trails] .game-tools{grid-template-columns:repeat(2,minmax(0,120px));justify-content:center;gap:6px 10px}
body[data-puzzle=word-trails] .game-tools #trail-hint{grid-column:1;grid-row:1}
body[data-puzzle=word-trails] .game-tools #reset{grid-column:2;grid-row:1}

body[data-puzzle=word-trails] .game-tools #selection-clear{border:1px solid #b9c9bc;background:#f6f8f0;color:#34523c;font-size:13px;min-height:44px;padding:10px 15px}
body[data-puzzle=word-trails] .game-tools #selection-clear:disabled{opacity:.45;cursor:default}

/* Word lengths are passive progress displays, directly beneath the board. */
body[data-puzzle=word-trails] .word-list.trail-slots{border-top:0;padding-top:0;margin-top:12px!important}
body[data-puzzle=word-trails] .trail-word{cursor:default}
body[data-puzzle=word-trails] .trail-word.active{border-color:transparent;background:transparent}

/* Equal-size progress letters in two aligned columns, one on narrow screens. */
body[data-puzzle=word-trails] .word-list.trail-slots{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:4px 12px}
body[data-puzzle=word-trails] .trail-word{width:100%;max-width:100%;grid-template-columns:repeat(var(--slot-count),min(24px,calc((100cqw - 80px)/20)));justify-content:start;padding:6px 14px 6px 0;min-height:38px}
body[data-puzzle=word-trails] .trail-letter{font-size:clamp(11px,3cqw,14px);border-radius:4px}
body[data-puzzle=word-trails] .trail-tick{right:0;font-size:14px}
@media(max-width:600px){
 body[data-puzzle=word-trails] .word-list.trail-slots{grid-template-columns:1fr;gap:3px}
 body[data-puzzle=word-trails] .trail-word{grid-template-columns:repeat(var(--slot-count),min(26px,calc((100cqw - 48px)/10)));justify-content:center;padding:6px 20px}
 body[data-puzzle=word-trails] .trail-letter{font-size:clamp(12px,3.5cqw,15px)}
 body[data-puzzle=word-trails] .trail-tick{right:10px}
}

/* Clear empty slots and completion ticks attached to their word. */
body[data-puzzle=word-trails] .trail-letter:empty,
body[data-puzzle=word-trails] .trail-word.active .trail-letter:empty{background:#cdd7c7;box-shadow:none}
body[data-puzzle=word-trails] .trail-word.solved{grid-template-columns:repeat(var(--slot-count),min(24px,calc((100cqw - 80px)/20))) 12px}
body[data-puzzle=word-trails] .trail-tick{position:static;transform:none;grid-row:1;grid-column:calc(var(--slot-count) + 1);align-self:center;margin:0 0 0 2px;width:12px;line-height:1;color:#34523c}
@media(max-width:600px){body[data-puzzle=word-trails] .trail-word.solved{grid-template-columns:repeat(var(--slot-count),min(26px,calc((100cqw - 48px)/10))) 12px}}

/* Nonogram clues use readable, separated numbers and square grid cells. */
body[data-puzzle=nonograms] .nonograms .collection-clue{font-size:14px;font-weight:700;white-space:normal;padding:6px;gap:4px;box-sizing:border-box;color:#183e35}
body[data-puzzle=nonograms] .nonograms .collection-clue span{display:block;min-width:14px;line-height:18px;text-align:center}
body[data-puzzle=nonograms] .nonograms .column{flex-direction:column;justify-content:flex-end;align-items:center;gap:0;border-right:1px solid #bac8b6;border-bottom:1px solid #62846b}
body[data-puzzle=nonograms] .nonograms .row{justify-content:flex-end;gap:4px;border-right:1px solid #62846b;border-bottom:1px solid #bac8b6}
body[data-puzzle=nonograms] .nonograms .collection-cell{border-right:1px solid #bac8b6;border-bottom:1px solid #bac8b6}
body[data-puzzle=nonograms] .nonograms .group-right{border-right:2px solid #62846b}
body[data-puzzle=nonograms] .nonograms .group-bottom{border-bottom:2px solid #62846b}
body[data-puzzle=nonograms] .nonograms .selected{box-shadow:none}
body[data-puzzle=nonograms] .nonograms .collection-cell:focus-visible{outline:2px solid #ee805c;outline-offset:-2px;z-index:1}
body[data-puzzle=nonograms] .nonograms.keyboard-focus .selected{outline:2px solid #ee805c;outline-offset:-2px;z-index:1}

/* A calm framed surface for Nonograms. */
body[data-puzzle=nonograms] .collection-board.nonograms{border-radius:12px;border:1px solid #9bab96;background:#eef2e8;box-shadow:0 3px 12px #183e350b}
body[data-puzzle=nonograms] .nonograms .collection-cell{background:#fafbf5;font-size:clamp(17px,3vw,24px);color:#62846b}
body[data-puzzle=nonograms] .nonograms .collection-cell.filled{background:#183e35}
body[data-puzzle=nonograms] .nonograms .collection-clue{background:#eef2e8;font-size:15px;font-variant-numeric:tabular-nums}
body[data-puzzle=nonograms] .nonograms .clue-complete{color:#82917b}
@media(hover:hover){body[data-puzzle=nonograms] .nonograms .collection-cell:not(.filled):hover{background:#e9efdf}}
@media(prefers-reduced-motion:no-preference){body[data-puzzle=nonograms] .nonograms .collection-cell{transition:background-color .12s}}

/* The frame owns the perimeter, preventing doubled straight edges. */
body[data-puzzle=nonograms] .collection-board.nonograms{border-color:#62846b}
body[data-puzzle=nonograms] .nonograms .grid-edge-right{border-right:0}
body[data-puzzle=nonograms] .nonograms .grid-edge-bottom{border-bottom:0}

@media(max-width:600px){body[data-puzzle=nonograms] .nonograms .collection-clue{font-size:12px;padding:4px;gap:2px}body[data-puzzle=nonograms] .nonograms .collection-clue span{min-width:12px;line-height:16px}body[data-puzzle=nonograms] .nonograms .column{gap:0}}

body[data-puzzle=nonograms] .nonograms .clue-number-complete{color:#82917b;text-decoration:line-through;text-decoration-thickness:1px}

/* Bridges: click the lanes, with passive numbered islands. */
body[data-puzzle=bridges] .collection-board.bridges{border:1px solid #9bab96;border-radius:12px;background:#fafbf5;box-shadow:0 3px 12px #183e350b;overflow:hidden}
body[data-puzzle=bridges] .bridge-lines line{stroke-width:2.5px;vector-effect:non-scaling-stroke;stroke-linecap:round}
body[data-puzzle=bridges] .bridge-lines .bridge-error{stroke:#bd563e}
body[data-puzzle=bridges] .island{display:grid;place-items:center;width:44px;height:44px;box-sizing:border-box;aspect-ratio:auto;border:1.5px solid #62846b;box-shadow:0 2px 5px #183e3510;font:700 17px Manrope,Arial,sans-serif;cursor:default;pointer-events:none}
body[data-puzzle=bridges] .island-complete{background:#dce7d5;border-color:#62846b;color:#34523c}
body[data-puzzle=bridges] .island-error{background:#f2d6cf;border-color:#bd563e;color:#983d2b}
.bridge-space{position:absolute;z-index:1;background:transparent;border:0;border-radius:6px;padding:0;cursor:pointer;min-width:0;min-height:0}
.bridge-space.horizontal{height:44px;transform:translateY(-50%)}
.bridge-space.vertical{width:44px;transform:translateX(-50%)}
.bridge-space:focus-visible{outline:2px solid #ee805c;outline-offset:-2px;background:#62846b12}
@media(hover:hover){.bridge-space.bridge-hover{background:#62846b12}}
body[data-puzzle=bridges] .board-panel{padding-bottom:56px}
@media(max-width:600px){body[data-puzzle=bridges] .board-panel{padding-bottom:48px}}

body[data-puzzle=bridges] .bridge-lines{inset:24px;width:calc(100% - 48px);height:calc(100% - 48px);overflow:visible}
.bridge-space.horizontal,.bridge-space.vertical{transform:translate(-50%,-50%)}
body[data-puzzle=bridges] .island{width:36px;height:36px;font-size:16px}
body[data-puzzle=bridges] .bridge-space.check-error{background:#f2d6cf80!important;box-shadow:inset 0 0 0 2px #bd563e}
body[data-puzzle=bridges] .bridge-lines .check-error{stroke:#bd563e}
.bridge-feedback{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

/* Visible placement guides also work on touchscreens. */
body[data-puzzle=bridges] .bridge-space:not(.bridge-placed)::before{content:'';position:absolute;pointer-events:none;opacity:.7}
body[data-puzzle=bridges] .bridge-space.horizontal:not(.bridge-placed)::before{left:0;right:0;top:50%;border-top:1px solid #91a58c}
body[data-puzzle=bridges] .bridge-space.vertical:not(.bridge-placed)::before{top:0;bottom:0;left:50%;border-left:1px solid #91a58c}

/* Tents shares the calm square board and controls of Nonograms. */
body[data-puzzle=tents] .collection-board.tents{border-radius:12px;border:1px solid #62846b;background:#eef2e8;box-shadow:0 3px 12px #183e350b}
body[data-puzzle=tents] .tents .collection-cell{background:#fafbf5;border-right:1px solid #bac8b6;border-bottom:1px solid #bac8b6;color:#62846b;font-size:clamp(17px,3vw,24px)}
body[data-puzzle=tents] .tents .collection-clue{font-size:15px;font-weight:700;padding:0;box-sizing:border-box;background:#eef2e8;border-right:1px solid #bac8b6;border-bottom:1px solid #bac8b6;align-items:center;justify-content:center}
body[data-puzzle=tents] .tents .column{border-bottom-color:#62846b}
body[data-puzzle=tents] .tents .row{border-right-color:#62846b}
body[data-puzzle=tents] .tents .fixed{background:#e9eee2;color:#34523c;cursor:default}
body[data-puzzle=tents] .tents .clue-complete{color:#82917b;text-decoration:line-through;text-decoration-thickness:1px}
body[data-puzzle=tents] .tents .clue-error{color:#983d2b;background:#f2d6cf}
body[data-puzzle=tents] .tents .tent-error{background:#f2d6cf;color:#983d2b;box-shadow:inset 0 0 0 1px #bd563e}
body[data-puzzle=tents] .tents .selected{box-shadow:none}
body[data-puzzle=tents] .tents .collection-cell:focus-visible,body[data-puzzle=tents] .tents.keyboard-focus .selected{outline:2px solid #ee805c;outline-offset:-2px;z-index:1}
body[data-puzzle=tents] .tents .grid-edge-right{border-right:0}
body[data-puzzle=tents] .tents .grid-edge-bottom{border-bottom:0}
body[data-puzzle=tents] .camp-icon{width:55%;height:55%;max-width:38px;max-height:38px;pointer-events:none}
body[data-puzzle=tents] .board-panel{padding-bottom:56px}
@media(max-width:600px){body[data-puzzle=tents] .board-panel{padding-bottom:48px}}

/* Finish the remaining boards with the same frame and breathing room. */
body:is([data-puzzle=loop],[data-puzzle=minesweeper],[data-puzzle=word-search],[data-puzzle=number-trail]) .board-panel{padding-bottom:56px}
@media(max-width:600px){body:is([data-puzzle=loop],[data-puzzle=minesweeper],[data-puzzle=word-search],[data-puzzle=number-trail]) .board-panel{padding-bottom:48px}}
.collection-board.loop{padding:12px;border:1px solid #62846b;border-radius:12px;background:#fafbf5;box-sizing:border-box;overflow:hidden;gap:0}
.loop-edge{touch-action:manipulation;position:relative}
.loop-edge.drawn::after{background:#34523c;height:3px}
.loop-edge.vertical.drawn::after{width:3px;height:auto}
.loop-edge:focus-visible{outline:2px solid #ee805c;outline-offset:-2px}
.word-search .collection-cell{transition:background .12s;color:#183e35}
.word-list .word-complete{border-radius:6px;padding:5px 8px;color:#183e35}
.minesweeper .revealed{font-weight:700;color:#34523c}
.minesweeper .mine-count-1{color:#426c9b}.minesweeper .mine-count-2{color:#407b50}.minesweeper .mine-count-3{color:#b45e45}.minesweeper .mine-count-4{color:#795e94}
.number-trail .trail-conflict{background:#f2d6cf;color:#983d2b;box-shadow:inset 0 0 0 1px #bd563e}
.number-entry{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.number-entry input{max-width:80px}

.loop-clue-complete{color:#82917b}.loop-clue-error{color:#983d2b;background:#f2d6cf;border-radius:4px}.loop-edge.loop-branch-error::after{background:#bd563e}
.number-entry button:disabled{opacity:.45;cursor:default}

/* Avoid native selection and callouts during hold-to-flag. */
.minesweeper,.minesweeper .collection-cell{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}

body[data-puzzle] .collection-cell.empty-mark{font-size:clamp(23px,5vw,36px);font-weight:600;color:#34523c;line-height:1}
body[data-puzzle] .collection-cell.flag-mark{font-size:clamp(22px,4.5vw,32px);color:#34523c;line-height:1}

body[data-puzzle=minesweeper] .collection-cell.mine{background:#f2d6cf;color:#983d2b}

/* Unboxed Nonogram clues; only the playable squares are framed. */
body[data-puzzle=nonograms] .collection-board.nonograms{border:0;border-radius:0;background:transparent;box-shadow:none;overflow:visible}
body[data-puzzle=nonograms] .collection-board.nonograms::after{content:"";position:absolute;left:var(--clue-width);top:var(--clue-height);right:0;bottom:0;border:1px solid #62846b;pointer-events:none;z-index:2}
body[data-puzzle=nonograms] .nonograms .collection-clue{background:transparent;border:0;padding:4px;gap:4px}
body[data-puzzle=nonograms] .nonograms .collection-clue.column{gap:0}
@media(max-width:600px){body[data-puzzle=nonograms] .nonograms .collection-clue{gap:2px}body[data-puzzle=nonograms] .nonograms .collection-clue.column{gap:0}}
body[data-puzzle=nonograms] .nonograms .collection-clue.column span{line-height:var(--clue-unit,18px)}
@media(max-width:600px){body[data-puzzle=nonograms] .collection-board.nonograms{--clue-unit:14px}}

/* Subtle depth belongs to the playable grid, not the surrounding clues. */
body[data-puzzle=nonograms] .collection-board.nonograms::after{box-shadow:0 2px 6px #183e3509}
body[data-puzzle=nonograms] .nonograms .collection-clue{font-weight:600}
body[data-puzzle=nonograms] .nonograms .clue-number-complete{color:#82917b}

/* Quiet surface detail; completion motion is triggered only by a found word. */
body[data-puzzle=word-trails] .collection-board.word-trails{border-color:#97af9c;box-shadow:0 3px 12px #183e350a}
body[data-puzzle=word-trails] .word-trails .collection-cell{border-color:#183e3518}
body[data-puzzle=word-trails] .trail-letter{box-shadow:inset 0 0 0 1px #183e3509}
body[data-puzzle=word-trails] .trail-tick{color:#456b50;font-weight:800}

/* Illustrated boards: the original discovery artwork is the visual reference.
   Borders stay inside cells, preserving hit areas and drag geometry. */
body[data-puzzle] .collection-board{--board-paper:#fcfdf8;--board-tile:#e8eee2;--board-ink:#294d40;--board-green:#749b72;--board-line:#fcfdf8;color:var(--board-ink);background:var(--board-paper);border-color:transparent;box-shadow:0 0 0 7px var(--board-paper),0 5px 18px #294d4010}
body[data-puzzle] .collection-board .collection-cell{background:var(--board-tile);color:var(--board-ink);border:0;border-right:1px solid var(--board-line);border-bottom:1px solid var(--board-line);font-family:Manrope,Arial,sans-serif;font-weight:700}
body[data-puzzle] .collection-board .collection-cell:focus-visible{outline:2px solid #aa6443;outline-offset:-3px}
/* Word selections are individual coloured tiles, as in the original artwork. */
body[data-puzzle=word-trails] .collection-board.word-trails{border-radius:8px;isolation:isolate}
body[data-puzzle=word-trails] .word-trails .collection-cell{border-radius:3px;background:var(--board-tile)!important;letter-spacing:.04em}
body[data-puzzle=word-trails] .word-trails .collection-cell:is(.found,.tracing){background:var(--word-color)!important;color:#16352b}
body[data-puzzle=word-trails] .trail-paths{display:none}
body[data-puzzle=word-trails] .trail-letter{border-radius:3px;color:#16352b}
body[data-puzzle=word-search] .word-search{border-radius:8px}
body[data-puzzle=word-search] .word-search .collection-cell{border-radius:3px;letter-spacing:.04em}
/* Keep the Nonogram clue gutters unboxed, with a sage picture in pale tiles. */
body[data-puzzle=nonograms] .collection-board.nonograms{border:0;border-radius:0;background:transparent;box-shadow:none}
body[data-puzzle=nonograms] .collection-board.nonograms::after{border-color:#b7c9ad;box-shadow:none}
body[data-puzzle=nonograms] .nonograms .collection-cell.filled{background:var(--board-green)}
body[data-puzzle=nonograms] .nonograms .group-right{border-right:1px solid #a7bda0}
body[data-puzzle=nonograms] .nonograms .group-bottom{border-bottom:1px solid #a7bda0}
body[data-puzzle=nonograms] .nonograms .collection-clue{background:transparent;color:var(--board-ink)}
body[data-puzzle=nonograms] .nonograms .clue-number-complete{color:#6b8066}
/* Filled terracotta tents and sage trees, with quiet, unboxed counts. */
body[data-puzzle=tents] .collection-board.tents{border-radius:8px}
body[data-puzzle=tents] .tents .collection-clue{background:var(--board-paper);border:0;color:var(--board-ink)}
body[data-puzzle=tents] .tents .fixed{background:var(--board-tile);color:var(--board-green)}
body[data-puzzle=tents] .tent-icon{color:#cb825d}
body[data-puzzle=tents] .tents .clue-complete{color:#6b8066}
body[data-puzzle=tents] .camp-icon{width:62%;height:62%}
/* Circular islands and sage connections, with touch-visible placement guides. */
body[data-puzzle=bridges] .collection-board.bridges{background:var(--board-paper);border-radius:10px}
body[data-puzzle=bridges] .bridge-lines line{stroke:var(--board-green);stroke-width:3px}
body[data-puzzle=bridges] .island{background:var(--board-paper);border-color:var(--board-green);color:var(--board-ink);box-shadow:0 2px 4px #294d400a}
body[data-puzzle=bridges] .island-complete{background:#e0ead8}
/* Loop keeps its crisp dots and connected lines on a clean paper surface. */
body[data-puzzle=loop] .collection-board.loop{background:var(--board-paper);border-radius:10px}
body[data-puzzle=loop] .loop-dot::after{background:var(--board-ink)}
body[data-puzzle=loop] .loop-edge:not(.drawn):not(.excluded)::after{background:#dce5d6}
body[data-puzzle=loop] .loop-edge.drawn::after{background:#62885f}
body[data-puzzle=loop] .loop-clue{color:var(--board-ink);font-weight:700}
body[data-puzzle=loop] .loop-clue-complete{color:#6b8066}
/* Distinguish covered squares, revealed paper and warm-coloured flags. */
body[data-puzzle=minesweeper] .collection-board.minesweeper{border-radius:8px}
body[data-puzzle=minesweeper] .minesweeper .collection-cell{background:#dce6d2;box-shadow:inset 0 1px #ffffff80;border-radius:2px}
body[data-puzzle=minesweeper] .minesweeper .revealed{background:var(--board-paper);box-shadow:none;color:var(--board-ink)}
body[data-puzzle=minesweeper] .minesweeper .mine-count-2{color:#426b47}
body[data-puzzle=minesweeper] .minesweeper .mine-count-3{color:#9a5038}
body[data-puzzle=minesweeper] .minesweeper .mine-count-4{color:#705780}
body[data-puzzle=minesweeper] .minesweeper .flag-mark{background:#efdbc9}
.flag-icon{width:58%;height:58%;max-width:32px;pointer-events:none}
/* Number Trail endpoints anchor the board, as they do in its illustration. */
body[data-puzzle=number-trail] .collection-board.number-trail{border-radius:8px}
body[data-puzzle=number-trail] .number-trail .fixed{background:#e1e9db}
body[data-puzzle=number-trail] .number-trail .trail-endpoint{background:#62885f;color:white}
/* Feedback remains stronger than decorative styling. */
body[data-puzzle] .collection-board .collection-cell.empty-mark{color:#4e704e}
body[data-puzzle] .collection-board .collection-cell:is(.check-error,.tent-error,.trail-conflict,.mine){background:#f2d6cf!important;color:#983d2b;box-shadow:inset 0 0 0 2px #bd563e}
body[data-puzzle] .collection-board :is(.clue-error,.loop-clue-error,.island-error){background:#f2d6cf;color:#983d2b}
body[data-puzzle=bridges] .bridge-lines :is(.bridge-error,.check-error){stroke:#bd563e}
body[data-puzzle=loop] .loop-edge:is(.loop-branch-error,.check-error)::after{background:#bd563e}
@media(hover:hover){body[data-puzzle=nonograms] .nonograms .collection-cell:not(.filled):hover{background:#dce6d2}}
body[data-puzzle] .collection-board:is(.word-trails,.tents,.bridges,.loop,.minesweeper,.word-search,.number-trail){border-color:#fcfdf8;box-shadow:0 0 0 7px #fcfdf8,0 5px 18px #294d4010}
body[data-puzzle=loop] .loop-edge.excluded::after{background:transparent}

/* Feedback refinements: white solved letters and stable word-list geometry. */
body[data-puzzle=word-trails] .word-trails .collection-cell.found{color:#fff;background:color-mix(in srgb,var(--word-color) 76%,#16352b)!important}
body[data-puzzle=word-trails] .trail-word.solved .trail-letter{color:#fff;background:color-mix(in srgb,var(--trail-color) 76%,#16352b)}
body[data-puzzle=word-search] .word-list>span{position:relative;display:inline-flex;align-items:center;box-sizing:border-box;min-height:36px;padding:7px 27px 7px 10px;border:1px solid #dce5d6;border-radius:6px;background:#eef2e8!important;font-size:13px;line-height:20px;color:#294d40}
body[data-puzzle=word-search] .word-list>.word-complete{color:#52724d;text-decoration:line-through}
body[data-puzzle=word-search] .word-list>.word-complete::after{content:'✓';position:absolute;right:8px;top:50%;transform:translateY(-50%);text-decoration:none}
body[data-puzzle=tents] .collection-board.tents{background:transparent;border:0;box-shadow:none}
body[data-puzzle=tents] .clue-corner{background:transparent;visibility:hidden}
body[data-puzzle=loop] .loop-edge.excluded::after{content:'';inset:auto;left:50%;top:50%;width:16px;height:2px;transform:translate(-50%,-50%);border-radius:2px;background:#c98178}
/* Cheerful pastel word tiles, with white lettering and gentle edge contrast. */
body[data-puzzle=word-trails] .word-trails .collection-cell.found{background:var(--word-color)!important;color:#fff;text-shadow:0 1px 2px #294d4066;-webkit-text-stroke:.25px #294d4033}
body[data-puzzle=word-trails] .trail-word.solved .trail-letter{background:var(--trail-color);color:#fff;text-shadow:0 1px 2px #294d4066}
/* Found labels use the same inline colour as their letters, without resizing. */
body[data-puzzle=word-search] .word-list>.word-complete{background:var(--word-label-color)!important;color:#183e35;border-color:transparent}
/* A quiet suggested opening keeps the fixed daily minefield fair to start. */
body[data-puzzle=minesweeper] .minesweeper .safe-start{box-shadow:inset 0 0 0 2px #94ad89}
/* Exclusions follow the full lane, like drawn lines, at a much quieter opacity. */
body[data-puzzle=loop] .loop-edge.excluded.horizontal::after{content:'';transform:none;inset:auto;left:-50%;right:-50%;top:calc(50% - 1.5px);width:auto;height:3px;background:#bc777333}
body[data-puzzle=loop] .loop-edge.excluded.vertical::after{content:'';transform:none;inset:auto;top:-50%;bottom:-50%;left:calc(50% - 1.5px);width:3px;height:auto;background:#bc777333}
body[data-puzzle=bridges] .bridge-space.bridge-excluded::before{content:'';opacity:1;border-color:#bc777333;border-style:solid;pointer-events:none}
body[data-puzzle=bridges] .bridge-space.horizontal.bridge-excluded::before{border-top-width:2px}
body[data-puzzle=bridges] .bridge-space.vertical.bridge-excluded::before{border-left-width:2px}
/* Matching lane treatment for Loop and Bridges, with readable muted exclusions. */
body[data-puzzle=loop] .loop-edge.excluded:is(.horizontal,.vertical)::after{background:rgba(188,119,115,.55)}
body[data-puzzle=bridges] .bridge-space:not(.bridge-placed)::before{opacity:1;border-style:solid;border-color:#dce5d6}
body[data-puzzle=bridges] .bridge-space.horizontal:not(.bridge-placed)::before{border-top-width:3px}
body[data-puzzle=bridges] .bridge-space.vertical:not(.bridge-placed)::before{border-left-width:3px}
body[data-puzzle=bridges] .bridge-space.bridge-excluded::before{border-color:rgba(188,119,115,.55)}
body[data-puzzle=bridges] .bridge-lines line{stroke:#62885f;stroke-width:3px}
body[data-puzzle=bridges] .bridge-space.bridge-hover{background:transparent}
/* Number Trail reserves the focus square for keyboard navigation. */
body[data-puzzle=number-trail] .number-trail .collection-cell.selected{box-shadow:none}
body[data-puzzle=number-trail] .number-trail .collection-cell:focus-visible{outline:none}
body[data-puzzle=number-trail] .number-trail.keyboard-focus .collection-cell.selected{outline:2px solid #aa6443;outline-offset:-3px}
body[data-puzzle=number-trail] .number-trail.keyboard-focus .collection-cell:focus-visible{outline:2px solid #aa6443;outline-offset:-3px}

body[data-puzzle=bridges] .bridge-space.horizontal:not(.bridge-placed)::before{border-top-style:solid}
body[data-puzzle=bridges] .bridge-space.vertical:not(.bridge-placed)::before{border-left-style:solid}
body[data-puzzle=word-search] .word-list>.word-complete{text-decoration:none}
body[data-puzzle=loop] .loop-edge{touch-action:none}
/* One lane colour drives each orientation, including exclusion overrides. */
body[data-puzzle=bridges] .bridge-space.horizontal:not(.bridge-placed)::before{border-top:3px solid var(--bridge-guide,#dce5d6)}
body[data-puzzle=bridges] .bridge-space.vertical:not(.bridge-placed)::before{border-left:3px solid var(--bridge-guide,#dce5d6)}
body[data-puzzle=bridges] .bridge-space.bridge-excluded{--bridge-guide:rgba(188,119,115,.55)}

/* Share the same coordinate box for islands and bridge paths. Placed bridges
   cover guides and exclusions, while islands cover the path endpoints. */
body[data-puzzle=bridges] .bridge-lines{z-index:2;pointer-events:none}
body[data-puzzle=bridges] .island{z-index:3}
body[data-puzzle=bridges] .bridge-space.horizontal:not(.bridge-placed)::before{transform:translateY(-50%)}
body[data-puzzle=bridges] .bridge-space.vertical:not(.bridge-placed)::before{transform:translateX(-50%)}
