feat(plugin): Add Elementor dynamic tags and product loop widget v1.7.0

WordPress Plugin:
- Add dynamic tags for all product payload fields (name, brand, price, THC, effects, etc.)
- Add Product Loop widget with filtering, sorting, and layout options
- Register CannaIQ widget category in Elementor
- Update build script to auto-upload to MinIO CDN
- Remove legacy dutchie references
- Bump version to 1.7.0

Backend:
- Redirect /downloads/* to CDN instead of serving from local filesystem

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Kelly
2025-12-13 03:10:01 -07:00
parent 9f0d68d4c9
commit 5c08135007
8 changed files with 1941 additions and 70 deletions

View File

@@ -1,6 +1,6 @@
/**
* CannaIQ Menus - WordPress Plugin Styles
* v1.5.3
* v1.7.0
*/
/* Product Grid */
@@ -493,3 +493,189 @@
font-size: 14px;
color: #999;
}
/* ========================================
Product Loop Widget
======================================== */
.cannaiq-product-loop {
margin: 20px 0;
}
.cannaiq-product-loop-grid {
display: grid;
gap: 20px;
grid-template-columns: repeat(3, 1fr);
}
.cannaiq-product-loop-list {
display: flex;
flex-direction: column;
gap: 16px;
}
.cannaiq-product-loop-list .cannaiq-product-card {
flex-direction: row;
}
.cannaiq-product-loop-list .cannaiq-product-image {
width: 150px;
min-width: 150px;
aspect-ratio: 1;
}
.cannaiq-product-loop-masonry {
display: grid;
gap: 20px;
grid-template-columns: repeat(3, 1fr);
}
.cannaiq-product-loop .cannaiq-product-card {
position: relative;
}
.cannaiq-product-loop .cannaiq-product-name {
font-size: 16px;
font-weight: 600;
margin: 0 0 4px 0;
color: #1a1a1a;
line-height: 1.3;
}
.cannaiq-product-loop .cannaiq-product-category {
font-size: 12px;
color: #888;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.cannaiq-product-loop .cannaiq-product-weight {
font-size: 13px;
color: #666;
background: #f0f0f0;
padding: 2px 8px;
border-radius: 4px;
}
/* Strain Badges */
.cannaiq-strain-badge {
display: inline-block;
padding: 3px 10px;
border-radius: 12px;
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
color: #fff;
letter-spacing: 0.5px;
}
/* Cannabinoid Display */
.cannaiq-cannabinoids {
display: flex;
gap: 12px;
margin: 8px 0;
font-size: 13px;
}
.cannaiq-cannabinoids .cannaiq-thc,
.cannaiq-cannabinoids .cannaiq-cbd {
padding: 4px 8px;
border-radius: 4px;
font-weight: 500;
}
/* Effects Badges */
.cannaiq-effects {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin: 8px 0;
}
.cannaiq-effect-badge {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 4px 10px;
background: #f0f0f0;
border-radius: 16px;
font-size: 11px;
font-weight: 500;
color: #444;
text-transform: uppercase;
letter-spacing: 0.3px;
}
/* Dynamic Tag Effects Badges */
.cannaiq-effects-badges {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.cannaiq-effects-badges .cannaiq-effect-badge {
padding: 4px 10px;
background: linear-gradient(135deg, #f5f5f5, #e8e8e8);
border-radius: 16px;
font-size: 11px;
font-weight: 500;
color: #444;
}
/* Effect-specific colors */
.cannaiq-effect-happy { background: linear-gradient(135deg, #fff3cd, #ffeaa7); color: #856404; }
.cannaiq-effect-relaxed { background: linear-gradient(135deg, #d4edda, #c3e6cb); color: #155724; }
.cannaiq-effect-sleepy { background: linear-gradient(135deg, #e2e3f3, #c8c9e8); color: #383d6e; }
.cannaiq-effect-focused { background: linear-gradient(135deg, #cce5ff, #b8daff); color: #004085; }
.cannaiq-effect-creative { background: linear-gradient(135deg, #f8d7da, #f5c6cb); color: #721c24; }
.cannaiq-effect-energetic { background: linear-gradient(135deg, #ffecb3, #ffe082); color: #7c5e00; }
.cannaiq-effect-hungry { background: linear-gradient(135deg, #ffe0cc, #ffcc99); color: #8b4513; }
.cannaiq-effect-euphoric { background: linear-gradient(135deg, #e8daef, #d7bde2); color: #5b2c6f; }
.cannaiq-effect-uplifted { background: linear-gradient(135deg, #d1ecf1, #bee5eb); color: #0c5460; }
.cannaiq-effect-talkative { background: linear-gradient(135deg, #cce5ff, #99ccff); color: #004085; }
/* Sale Badge */
.cannaiq-sale-badge {
position: absolute;
top: 10px;
left: 10px;
background: #e74c3c;
color: #fff;
font-size: 11px;
font-weight: 700;
padding: 4px 10px;
border-radius: 4px;
text-transform: uppercase;
letter-spacing: 0.5px;
z-index: 1;
}
/* No Products Message */
.cannaiq-no-products {
text-align: center;
padding: 40px 20px;
color: #666;
font-size: 16px;
}
/* Responsive */
@media (max-width: 1024px) {
.cannaiq-product-loop-grid,
.cannaiq-product-loop-masonry {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 640px) {
.cannaiq-product-loop-grid,
.cannaiq-product-loop-masonry {
grid-template-columns: 1fr;
}
.cannaiq-product-loop-list .cannaiq-product-card {
flex-direction: column;
}
.cannaiq-product-loop-list .cannaiq-product-image {
width: 100%;
}
}