diff --git a/web/client/src/components/InventoryGrid.css b/web/client/src/components/InventoryGrid.css new file mode 100644 index 0000000..4dd1683 --- /dev/null +++ b/web/client/src/components/InventoryGrid.css @@ -0,0 +1,324 @@ +.inventory-panel { + height: 100%; + display: flex; + flex-direction: column; + overflow: hidden; +} + +/* Toolbar */ +.inventory-toolbar { + display: flex; + align-items: center; + gap: 0.75rem; + padding: 0.5rem 0.75rem; + background: #3b3b3b; + border-bottom: 2px solid var(--mc-dark); + flex-shrink: 0; + flex-wrap: wrap; +} + +.search-box { + display: flex; + align-items: center; + background: var(--mc-dark); + border: 2px solid #333; + padding: 0.25rem 0.5rem; + flex: 1; + min-width: 180px; +} + +.search-icon { + font-size: 0.8rem; + margin-right: 0.375rem; +} + +.search-input { + border: none; + background: transparent; + color: var(--mc-text-white); + font-family: 'Silkscreen', 'Courier New', monospace; + font-size: 0.7rem; + outline: none; + width: 100%; +} + +.search-input::placeholder { + color: var(--mc-text-gray); +} + +.search-clear { + background: none; + border: none; + color: var(--mc-text-gray); + cursor: pointer; + font-size: 0.7rem; + padding: 0 0.25rem; +} + +.search-clear:hover { + color: var(--mc-text-red); +} + +.sort-controls { + display: flex; + gap: 0.25rem; +} + +.item-count-label { + font-size: 0.6rem; + color: var(--mc-text-gray); + white-space: nowrap; +} + +/* Body */ +.inventory-body { + flex: 1; + display: flex; + overflow: hidden; +} + +/* Item Grid */ +.item-grid-wrapper { + flex: 1; + overflow-y: auto; + padding: 0.5rem; +} + +.item-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(80px, 1fr)); + gap: 3px; + padding: 8px; + background: var(--mc-inv-bg); + border: 3px solid var(--mc-dark); + box-shadow: + inset 3px 3px 0 #fefefe, + inset -3px -3px 0 #555; + min-height: 200px; +} + +.item-slot { + aspect-ratio: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: var(--mc-inv-slot); + border: 2px solid; + border-color: var(--mc-inv-slot-border) var(--mc-inv-slot-light) var(--mc-inv-slot-light) var(--mc-inv-slot-border); + cursor: pointer; + position: relative; + overflow: hidden; + padding: 4px; + transition: background 0.05s; +} + +.item-slot:hover { + background: #aaa; +} + +.item-slot.selected { + background: #b8d4f0; + box-shadow: 0 0 0 2px var(--mc-text-aqua); +} + +.item-slot-count { + position: absolute; + bottom: 2px; + right: 3px; + color: white; + font-size: 0.55rem; + font-weight: 700; + font-family: 'Silkscreen', 'Courier New', monospace; + text-shadow: + 1px 0 0 var(--mc-dark), + -1px 0 0 var(--mc-dark), + 0 1px 0 var(--mc-dark), + 0 -1px 0 var(--mc-dark); +} + +.item-slot-name { + position: absolute; + top: 1px; + left: 2px; + right: 2px; + font-size: 0.35rem; + color: var(--mc-text-dark); + font-weight: 700; + text-align: center; + line-height: 1.1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.empty-grid { + grid-column: 1 / -1; + text-align: center; + padding: 2rem; + color: var(--mc-text-gray); + font-size: 0.75rem; +} + +/* Detail Panel */ +.item-detail-panel { + width: 280px; + background: #333; + border-left: 3px solid var(--mc-dark); + padding: 0.75rem; + display: flex; + flex-direction: column; + gap: 0.75rem; + overflow-y: auto; + flex-shrink: 0; +} + +.detail-header { + display: flex; + align-items: center; + gap: 0.75rem; + padding-bottom: 0.5rem; + border-bottom: 2px solid var(--mc-dark); +} + +.detail-info { + flex: 1; +} + +.detail-info h3 { + font-size: 0.8rem; + color: var(--mc-text-white); + text-shadow: 1px 1px 0 var(--mc-dark); +} + +.detail-id { + font-size: 0.55rem; + color: var(--mc-text-gray); +} + +.detail-close { + background: none; + border: 2px solid #555; + color: var(--mc-text-gray); + cursor: pointer; + font-size: 0.8rem; + width: 1.5rem; + height: 1.5rem; + display: flex; + align-items: center; + justify-content: center; +} + +.detail-close:hover { + color: var(--mc-text-red); + border-color: var(--mc-text-red); +} + +/* Detail stats */ +.detail-stats { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 0.375rem; +} + +.detail-stat { + display: flex; + flex-direction: column; + padding: 0.375rem; + background: var(--mc-dark); + border: 2px solid #333; +} + +.detail-stat .label { + font-size: 0.55rem; + color: var(--mc-text-gray); + font-weight: 700; + text-transform: uppercase; +} + +.detail-stat .value { + font-size: 0.8rem; + color: var(--mc-text-white); + font-weight: 700; +} + +/* Order section */ +.order-section { + padding: 0.5rem; + background: var(--mc-dark); + border: 2px solid #333; +} + +.order-section h4 { + font-size: 0.7rem; + color: var(--mc-text-gold); + margin-bottom: 0.5rem; + text-shadow: 1px 1px 0 #000; +} + +.order-controls { + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.order-amount-controls { + display: flex; + gap: 0.25rem; + align-items: center; +} + +.order-input { + flex: 1; + background: #2a2a2a; + border: 2px solid #444; + color: var(--mc-text-white); + font-family: 'Silkscreen', 'Courier New', monospace; + font-size: 0.75rem; + text-align: center; + padding: 0.25rem; + outline: none; + border-radius: 0; +} + +.order-input:focus { + border-color: var(--mc-text-green); +} + +.order-presets { + display: flex; + gap: 0.25rem; + flex-wrap: wrap; +} + +.order-btn { + width: 100%; + padding: 0.625rem !important; + font-size: 0.8rem !important; +} + +/* Responsive */ +@media (max-width: 768px) { + .inventory-body { + flex-direction: column; + } + + .item-detail-panel { + width: 100%; + border-left: none; + border-top: 3px solid var(--mc-dark); + max-height: 300px; + } + + .item-grid { + grid-template-columns: repeat(auto-fill, minmax(65px, 1fr)); + } +} + +@media (max-width: 480px) { + .item-grid { + grid-template-columns: repeat(auto-fill, minmax(55px, 1fr)); + gap: 2px; + padding: 4px; + } +}