
Card and deck images do not set draggable="false", allowing the browser's native image drag to interfere with the custom grab-and-move interaction. Setting the attribute explicitly suppresses the ghost-image drag across all browsers.
Context
The custom drag system in grab.js calls e.preventDefault() on mousedown, which suppresses native drag in most browsers. However, Firefox and Safari can still initiate a native image drag before the mousedown handler fires on the parent element, producing a translucent ghost image that fights with the custom drag positioning. The HTML spec defaults <img> elements to draggable="true". Setting draggable="false" on each <img> created in createCard (front, back, and tooltip images) and in the createDeck card-back image eliminates this browser-dependent interference. The card-back <img> in createDeck is currently created via innerHTML — the attribute can be added to the template string, or the construction can be switched to DOM APIs (as tracked by issue #328).
Affected Files
src/scripts/card.js:35 — Add cardFrontImg.setAttribute("draggable", "false") after the img is created
src/scripts/card.js:42 — Add cardBackImg.setAttribute("draggable", "false") after the img is created
src/scripts/card.js:50 — Add tooltipImg.setAttribute("draggable", "false") after the img is created
src/scripts/deck.js:49 — Add draggable="false" to the <img> in the innerHTML template string
src/scripts/card.test.js — Add assertion that all <img> elements inside a created card have draggable set to "false"
Requirements

Verification
- npm test -- --reporter=verbose 2>&1 | grep -E 'card.test|deck.test|PASS|FAIL'
- grep -n 'draggable' src/scripts/card.js src/scripts/deck.js
Not In Scope
Evidence
src/scripts/card.js:33-51 — Three <img> elements are created with setAttribute for width, height, and src but none set draggable
src/scripts/deck.js:47-50 — The deck card-back <img> is created via innerHTML with width and height attributes but no draggable
src/scripts/grab.js:5-7 — grabCard calls e.preventDefault() and e.stopPropagation() on mousedown, which suppresses native drag in Chrome but not reliably in Firefox/Safari for child <img> elements
Arasaka Queue Planning Division.

Card and deck images do not set
draggable="false", allowing the browser's native image drag to interfere with the custom grab-and-move interaction. Setting the attribute explicitly suppresses the ghost-image drag across all browsers.Context
The custom drag system in
grab.jscallse.preventDefault()onmousedown, which suppresses native drag in most browsers. However, Firefox and Safari can still initiate a native image drag before the mousedown handler fires on the parent element, producing a translucent ghost image that fights with the custom drag positioning. The HTML spec defaults<img>elements todraggable="true". Settingdraggable="false"on each<img>created increateCard(front, back, and tooltip images) and in thecreateDeckcard-back image eliminates this browser-dependent interference. The card-back<img>increateDeckis currently created viainnerHTML— the attribute can be added to the template string, or the construction can be switched to DOM APIs (as tracked by issue #328).Affected Files
src/scripts/card.js:35— AddcardFrontImg.setAttribute("draggable", "false")after the img is createdsrc/scripts/card.js:42— AddcardBackImg.setAttribute("draggable", "false")after the img is createdsrc/scripts/card.js:50— AddtooltipImg.setAttribute("draggable", "false")after the img is createdsrc/scripts/deck.js:49— Adddraggable="false"to the<img>in the innerHTML template stringsrc/scripts/card.test.js— Add assertion that all<img>elements inside a created card havedraggableset to"false"Requirements
<img>element created bycreateCard(card-front, card-back, tooltip) hasdraggable="false"set<img>element inside the deck card-back hasdraggable="false"setcard.test.jsasserts thatcreateCardproduces img elements withdraggableattribute set to"false"Verification
Not In Scope
createDeckinnerHTML to DOM APIs — that is tracked by issue ReplaceinnerHTMLwith safe DOM construction increateDeck#328draggableto token elements — tokens do not contain<img>children with the same native-drag issuegrab.jsdrag handling logicEvidence
src/scripts/card.js:33-51— Three<img>elements are created withsetAttributeforwidth,height, andsrcbut none setdraggablesrc/scripts/deck.js:47-50— The deck card-back<img>is created viainnerHTMLwithwidthandheightattributes but nodraggablesrc/scripts/grab.js:5-7—grabCardcallse.preventDefault()ande.stopPropagation()on mousedown, which suppresses native drag in Chrome but not reliably in Firefox/Safari for child<img>elementsArasaka Queue Planning Division.