載入中…
計
GoKaiKei
A
A
A
ⓘ
+
PRO
PRO
⟳
05:00
06:00
07:00
08:00
09:00
10:00
11:00
17:00
18:00
19:00
20:00
21:00
22:00
23:00
PRO
ⓘ
ⓘ
–
ⓘ
ⓘ
ⓘ
ⓘ
ⓘ
%
ⓘ
ⓘ
ⓘ
ⓘ
PRO
新
PRO
LINE
:
PRO
PRO
/
scrollToAnchor('ingredients-workspace'))" :class="activeTab === 'ingredients' ? 'bg-ink-900 text-white shadow-card' : 'text-ink-600 hover:text-ink-900'" class="px-4 sm:px-5 py-2 rounded-lg text-sm font-medium transition flex items-center gap-2">
−
−
−
−
=
·
scrollToAnchor('ingredients-workspace'))" href="#" class="flex items-center gap-1.5 px-3 py-2 bg-white dark:bg-ink-800 border border-ink-200 dark:border-ink-700 rounded-lg hover:border-amber-400 transition cursor-pointer">
①
→
②
→
③
scrollToAnchor('ana-menu'), 400)" href="#" class="block p-3 sm:p-4 gk-card gk-card-hover transition cursor-pointer">
{ if (recipes.length > 0) { selRec = recipes[0]; drillTab = 'pricing'; } }, 200)" href="#" class="block p-3 sm:p-4 gk-card gk-card-hover transition cursor-pointer">
PRO
*
≈
1
=
$
1
=
=
$
1
=
=
$
:
/
「
」
→
→
PRO
$
→
$
/
−
+
scrollToAnchor('ingredients-workspace'))" class="underline font-medium" x-text="t('link_go_ingredients')">
.
PRO
—
%
*
×
PRO
Number(g.max || 1)) g.min = g.max" type="number" min="1" max="10" step="1" inputmode="decimal" class="w-16 px-2 py-1.5 bg-white border border-ink-300 rounded-lg text-sm text-right num">
▲
▼
%
+ foodpanda
+ UberEats
%
%
(
%)
▼
0) openMethodCard(r); ">
AI
·
・
・
・
+
▾
/
›
›
·
·
SELLING PRICE
−
TOTAL COST
=
MARGIN
COST BREAKDOWN
·
sub-recipe
FOOD COST TOTAL
30 DAY MARGIN TREND
HOURLY × WEEKDAY HEATMAP
·
sub-recipe
VARIABLE COST TOTAL
+
PRO
PRO
*
+
=
*
–
+
(
)
SPLH
Labor Cost %
—
*
–
+
(
)
PRO
(
)
*
--
−
+
·
新
×
×
←
×
×
×
hr ×
-
×
×
1 ? 1 : 0); showPurchaseList = false" class="px-2 py-1 text-[0.6875rem] gk-primary-btn rounded font-medium whitespace-nowrap" x-text="t('btn_received')">
×
$
r.id === tip.action.recipeId)); if (tip.action.ingredientId) editIngredient(ingredients.find(i => i.id === tip.action.ingredientId)); if (tip.action.anchor) $nextTick(() => scrollToAnchor(tip.action.anchor)); }" class="ml-0 sm:ml-4 inline-flex text-xs px-2.5 py-1 rounded-md bg-rose-600 hover:bg-rose-700 text-white transition flex-shrink-0 font-medium" x-text="t('health_check_action_btn')">
$
→
$
(
+$
)
→
/
·
PRO
scrollToAnchor(item.anchor))" class="p-2.5 rounded-lg border text-left transition hover:shadow-card" :class="{ 'bg-rose-50 border-rose-200 hover:border-rose-300': item.severity === 'error', 'bg-amber-50 border-amber-200 hover:border-amber-300': item.severity === 'warn', 'bg-sage-50 border-sage-200 hover:border-sage-300': item.severity === 'ok', 'bg-ink-50 border-ink-200 hover:border-ink-300': item.severity === 'neutral' }">
→
−
−
=
−
→
‹
›
—
—
—
—
0
0
hr
/
·
·
PRO
PRO
PRO
PRO
PRO
‹
›
PRO
PRO
scrollToAnchor('ingredients-workspace'))" :class="activeTab === 'ingredients' ? 'text-accent-700' : 'text-ink-500'" class="flex-1 min-w-[70px] flex flex-col items-center gap-0.5 py-2 text-[0.625rem] font-medium transition">
/
·
$refs.conciergeInput?.focus())" type="button" class="px-3 py-1.5 rounded-lg border border-ink-200 dark:border-ink-700 text-xs text-ink-700 dark:text-ink-200 hover:bg-ink-50 dark:hover:bg-ink-800" x-text="t('voice_redo')">
:
·
·
—
—
—
—
% ·
→
ESC
↑↓
↵
:
—
—
openUpgradeModal())" class="mt-2 w-full px-4 py-2 text-sm font-medium rounded-lg bg-amber-500 hover:bg-amber-600 text-white transition flex items-center justify-center gap-2">
(
chars)
⟳
(
/
)
/
(
/
)
$
(
)
⟳
AI
AI
it._selected = $event.target.checked)" class="w-4 h-4">
AI
*
→
PRO
·
·
·
·
#
PRO
×
PRO
×
·
⌘K
Ctrl+K
?
Esc
↵
%
:
:
(
)
1.
2.
3.
1
2
3
·
:
:
:
:
·
:
|
:
|
:
:
①
②
③
④
⑤
⑥
:
·
·
·
·
·
·
·
: