{{ t('title') }}
{{ t('subtitle') }}
{{ lang === 'fr' ? 'Santé production' : 'Production health' }}
●{{ productionKpis.totals.green }}
●{{ productionKpis.totals.yellow }}
●{{ productionKpis.totals.red }}
{{ productionKpis.totals.total }} {{ lang === 'fr' ? 'release(s)' : 'release(s)' }}
- {{ r.sku }} · {{ r.current_stage }} · PAO·TP·Late · {{ r.days_until_release >= 0 ? `in ${r.days_until_release}d` : `${Math.abs(r.days_until_release)}d ago` }}
{{ error }}
{{ t('loading') }}
{{ stage }}
{{ count }}
{{ sku.sku }}
{{ sku.title || sku.artist || '' }}
{{ sku.lifecycle_stage || sku.stage || '—' }}
{{ t('view_detail') }} →
{{ t('no_releases_yet') }}
{{ t('empty_body') }} {{ t('submit_first') }}
← {{ t('back_to_list') }}
{{ t('loading') }}
{{ detailError }}
{{ detailSku }} — {{ detailData.title || '' }}
{{ t('pipeline_progress') }}
{{ lang === 'fr' ? 'Historique des étapes' : 'Stage history' }}
{{ lang === 'fr' ? 'Chaque transition vient soit de la sync Odoo (toutes les 10 min), soit d\'une saisie manuelle YOYAKU, soit du backfill historique.' : 'Each transition comes either from the Odoo sync (every 10 min), a manual YOYAKU edit, or the historical backfill.' }}
{{ t('loading') }}
{{ stageHistoryError }}
{{ lang === 'fr' ? '— Aucune transition enregistrée pour cette commande pour le moment.' : '— No transitions recorded for this order yet.' }}
- {{ stageLabel(ev.stage_to) }} {{ ev.source }}
{{ t('files_status') }}
{{ t('dropbox_ssot_note') }}
{{ lang === 'fr' ? slot.label_fr : slot.label_en }}
{{ t('required') }}
- {{ f.name }} — {{ formatSize(f.size) }} · {{ formatDate(f.mtime) }}
{{ t('softproof_approve') }} ↗
{{ t('softproof_pending_state') }}
{{ t('uploading') }} {{ uploadingKind }}… {{ uploadPct }}%
{{ lastUploadMsg }}