104104 <span v-for =" state in modalData['EXPOSES']" :key =" state" class =" badge" >{{ state }}</span >
105105 </div >
106106 <p v-if =" modalData['UPDATED_IN']" ><strong >{{ t('updatedInFirmware') }}:</strong > {{ modalData['UPDATED_IN'] }}</p >
107+ <div v-if =" Array.isArray(modalData['BUY_LINKS']) && modalData['BUY_LINKS'].length" class =" buy-links" >
108+ <strong >{{ t('buyLinks') }}:</strong >
109+ <a v-for =" (link, idx) in modalData['BUY_LINKS']" :key =" idx" :href =" link.url" target =" _blank" rel =" noopener" class =" buy-button-inline" >
110+ {{ link.name && link.name.trim() !== '' ? link.name : t('buy') }}
111+ </a >
112+ </div >
107113 </div >
108114 </div >
109115 <div v-if =" decodedPairing" class =" pairing" >
@@ -370,10 +376,25 @@ onMounted(async () => {
370376.body { padding :12px }
371377.title { font-size :16px ; margin :0 0 8px }
372378.desc { font-size :13px ; color : var (--vp-c-text-2 ); margin :0 }
373- .skeleton { animation : pulse 1.2s infinite ; background :linear-gradient (90deg ,#f5f5f5 ,#efefef ,#f5f5f5 ) }
374- .skeleton .image { height :240px ; background :#eee }
375- .skeleton .title { height :18px ; width :60% ; background :#e7e7e7 ; margin-bottom :8px }
376- .skeleton .desc { height :12px ; width :100% ; background :#e7e7e7 }
379+ .skeleton {
380+ animation : pulse 1.2s infinite ;
381+ background : linear-gradient (90deg , var (--vp-c-bg-alt ), var (--vp-c-bg ), var (--vp-c-bg-alt ));
382+ }
383+ .skeleton .image {
384+ height : 240px ;
385+ background : var (--vp-c-bg-alt );
386+ }
387+ .skeleton .title {
388+ height : 18px ;
389+ width : 60% ;
390+ background : var (--vp-c-bg-alt );
391+ margin-bottom : 8px ;
392+ }
393+ .skeleton .desc {
394+ height : 12px ;
395+ width : 100% ;
396+ background : var (--vp-c-bg-alt );
397+ }
377398.mini-loader { text-align :center ; padding :12px }
378399.sentinel { height :1px }
379400
@@ -496,9 +517,27 @@ onMounted(async () => {
496517.card {
497518 transition : transform 0.3s , opacity 0.3s ;
498519}
499- </style >
520+ .buy-links {
521+ display : flex ;
522+ align-items : center ;
523+ gap : 8px ;
524+ margin-top : 4px ;
525+ }
526+ .buy-button-inline {
527+ border : 1px solid var (--vp-c-brand );
528+ color : var (--vp-c-brand );
529+ background : transparent ;
530+ padding : 4px 8px ;
531+ border-radius : 4px ;
532+ text-decoration : none ;
533+ font-size : 13px ;
534+ transition : background 0.2s , color 0.2s ;
535+ }
536+ .buy-button-inline :hover {
537+ background : var (--vp-c-brand );
538+ color : white ;
539+ }
500540
501- <style scoped>
502541@media (max-width : 600px ) {
503542 .filters {
504543 flex-direction : column ;
@@ -525,3 +564,4 @@ onMounted(async () => {
525564 }
526565}
527566 </style >
567+
0 commit comments