beast-agent 2.33.0 → 2.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/main.js +14 -1
- package/src/renderer/index.html +32 -6
- package/src/renderer/renderer.js +115 -5
- package/src/renderer/style.css +32 -3
package/package.json
CHANGED
package/src/main.js
CHANGED
|
@@ -9582,6 +9582,7 @@ ipcMain.handle('finance:mode', async (_e, payload) => {
|
|
|
9582
9582
|
financeState.mode = !!(payload && payload.on);
|
|
9583
9583
|
const sid = String((payload && payload.sessionId) || '');
|
|
9584
9584
|
let needNew = false;
|
|
9585
|
+
let resumeSid = '';
|
|
9585
9586
|
if (sid && engine) {
|
|
9586
9587
|
try {
|
|
9587
9588
|
let s = engine.cache.get(sid);
|
|
@@ -9605,9 +9606,21 @@ ipcMain.handle('finance:mode', async (_e, payload) => {
|
|
|
9605
9606
|
}
|
|
9606
9607
|
} catch {}
|
|
9607
9608
|
}
|
|
9609
|
+
/* ESKİ SOHBETTEN DEVAM: finance moduna girerken aktif oturum finance değilse
|
|
9610
|
+
(örn. normal sohbet) yeni oturum AÇMAK yerine en son kullanılan finance
|
|
9611
|
+
sohbet oturumu önerilir; hiç yoksa yeni oturum açılır. */
|
|
9612
|
+
if (financeState.mode && needNew && engine) {
|
|
9613
|
+
try {
|
|
9614
|
+
const prev = (engine.listSessions() || []).find((v) => v && v.finance && !v.isBg && v.id);
|
|
9615
|
+
if (prev) {
|
|
9616
|
+
resumeSid = String(prev.id);
|
|
9617
|
+
needNew = false;
|
|
9618
|
+
}
|
|
9619
|
+
} catch {}
|
|
9620
|
+
}
|
|
9608
9621
|
/* OTOMATİK TRADER KAPALI: finance moduna geçmek trader'ı KENDİLİĞİNDEN
|
|
9609
9622
|
başlatmaz — kullanıcı TRADE AJANI kartındaki ▶ ile elle başlatır */
|
|
9610
|
-
return { ok: true, mode: financeState.mode, needNew };
|
|
9623
|
+
return { ok: true, mode: financeState.mode, needNew, resumeSid };
|
|
9611
9624
|
});
|
|
9612
9625
|
|
|
9613
9626
|
/* MT5 sembol seçici: terminaldeki tüm semboller (isteğe bağlı *filter*) */
|
package/src/renderer/index.html
CHANGED
|
@@ -150,19 +150,20 @@
|
|
|
150
150
|
<span id="finTerm" title="">MT5</span>
|
|
151
151
|
<span class="file-spacer"></span>
|
|
152
152
|
<button id="finReconnect" title="MT5'e yeniden bağlan">⟳</button>
|
|
153
|
+
<button id="finSettings" title="Görünüm ayarları — bölümleri göster/gizle">⚙</button>
|
|
153
154
|
</div>
|
|
154
155
|
<div id="finBody">
|
|
155
156
|
<div class="fin-card">
|
|
156
157
|
<div class="fin-card-title">HESAP</div>
|
|
157
158
|
<div class="fin-grid">
|
|
158
159
|
<div class="fin-kv"><span>Bakiye</span><b id="finBalance">—</b></div>
|
|
159
|
-
<div class="fin-kv"><span
|
|
160
|
+
<div class="fin-kv"><span>Varlık</span><b id="finEquityValue">—</b></div>
|
|
160
161
|
<div class="fin-kv"><span>Kâr/Zarar</span><b id="finProfit">—</b></div>
|
|
161
162
|
<div class="fin-kv"><span>Serbest Marj</span><b id="finFree">—</b></div>
|
|
162
163
|
</div>
|
|
163
164
|
</div>
|
|
164
165
|
<div class="fin-card fin-card-trader">
|
|
165
|
-
<div class="fin-card-title">TRADE AJANI <span id="finTraderDot" class="fin-dot off" title="Trader durumu"></span><span class="file-spacer"></span><button id="finSkillsBtn" title="Rol → skill eşleştirmesi — hangi rol hangi skill'i okur">⚙</button></div>
|
|
166
|
+
<div class="fin-card-title">TRADE AJANI <span id="finTraderDot" class="fin-dot off" title="Trader durumu"></span><span class="file-spacer"></span><button id="finModelRefreshBtn" title="Modelleri yeniden çek — eksik/güncel modelleri tazeler">⟳</button><button id="finSkillsBtn" title="Rol → skill eşleştirmesi — hangi rol hangi skill'i okur">⚙</button></div>
|
|
166
167
|
<div class="fin-field">
|
|
167
168
|
<span>Model</span>
|
|
168
169
|
<select id="finTraderModel" title="Trader ajanının modeli — farklı API/model seçilebilir"></select>
|
|
@@ -190,7 +191,7 @@
|
|
|
190
191
|
</div>
|
|
191
192
|
<div id="finTraderStatus">Kapalı</div>
|
|
192
193
|
</div>
|
|
193
|
-
<div class="fin-card">
|
|
194
|
+
<div class="fin-card" id="finRiskCard" hidden>
|
|
194
195
|
<div class="fin-card-title">RİSK OTOMASYONU <span id="finWatchDot" class="fin-dot off" title="Koruma döngüsü"></span><span id="finWatchInfo" class="fin-hint"></span></div>
|
|
195
196
|
<div class="fin-field fin-check">
|
|
196
197
|
<label title="5 saniyelik döngü: +R'da SL'yi başabaşa çeker, trailing uygular, kısmi TP alır — ajan turunu beklemez">
|
|
@@ -231,9 +232,9 @@
|
|
|
231
232
|
</div>
|
|
232
233
|
<div id="finAlertList" class="fin-alerts"><div class="fin-empty">Aktif fiyat alarmı yok</div></div>
|
|
233
234
|
</div>
|
|
234
|
-
<div class="fin-card">
|
|
235
|
+
<div class="fin-card" id="finPerfCard" hidden>
|
|
235
236
|
<div class="fin-card-title">PERFORMANS <span id="finStatsInfo" class="fin-hint"></span><span class="file-spacer"></span><button id="finReportBtn" title="Haftalık rapor üret — istatistik + işlem günlüğü + ajan değerlendirmesi">📄 Rapor</button></div>
|
|
236
|
-
<div id="
|
|
237
|
+
<div id="finEquityChart" class="fin-equity"></div>
|
|
237
238
|
<div class="fin-grid">
|
|
238
239
|
<div class="fin-kv"><span>Bugün</span><b id="finStatToday">—</b></div>
|
|
239
240
|
<div class="fin-kv"><span>Hafta</span><b id="finStatWeek">—</b></div>
|
|
@@ -258,7 +259,7 @@
|
|
|
258
259
|
</div>
|
|
259
260
|
<div id="finSymList"><div class="fin-empty">—</div></div>
|
|
260
261
|
</div>
|
|
261
|
-
<div class="fin-card fin-grow">
|
|
262
|
+
<div class="fin-card fin-grow" id="finFlowCard" hidden>
|
|
262
263
|
<div class="fin-card-title">AKIŞ</div>
|
|
263
264
|
<div id="finLog"></div>
|
|
264
265
|
</div>
|
|
@@ -754,6 +755,31 @@
|
|
|
754
755
|
</div>
|
|
755
756
|
</div>
|
|
756
757
|
|
|
758
|
+
<div id="finSettingsOverlay" class="mini-overlay" hidden>
|
|
759
|
+
<div class="mini-dialog fin-settings-dialog">
|
|
760
|
+
<div class="mini-head">
|
|
761
|
+
<span class="mini-title">FINANCE GÖRÜNÜM AYARLARI</span>
|
|
762
|
+
<button class="mini-close" id="finSettingsClose" title="Kapat">×</button>
|
|
763
|
+
</div>
|
|
764
|
+
<div class="mini-body">
|
|
765
|
+
<div class="fin-set-hint">Varsayılan olarak üç bölüm de gizlidir — açmak tamamen isteğe bağlıdır. Seçim bilgisayarda hatırlanır. Risk otomasyonu gizliyken AKTİF OLMAZ.</div>
|
|
766
|
+
<label class="fin-set-row" title="BE + trailing + kısmi TP koruması, günlük limitler, fiyat alarmları bölümü">
|
|
767
|
+
<input id="finShowRisk" type="checkbox" />
|
|
768
|
+
<span class="fsr-main"><b>RİSK OTOMASYONU</b><i>BE + trailing + kısmi TP, günlük limitler, alarmlar</i></span>
|
|
769
|
+
</label>
|
|
770
|
+
<label class="fin-set-row" title="Equity grafiği + günlük/haftalık istatistikler + haftalık rapor bölümü">
|
|
771
|
+
<input id="finShowPerf" type="checkbox" />
|
|
772
|
+
<span class="fsr-main"><b>PERFORMANS</b><i>Equity grafiği, istatistikler, haftalık rapor</i></span>
|
|
773
|
+
</label>
|
|
774
|
+
<label class="fin-set-row" title="Ajan/MT5 işlem günlüğü akışı bölümü">
|
|
775
|
+
<input id="finShowFlow" type="checkbox" />
|
|
776
|
+
<span class="fsr-main"><b>AKIŞ</b><i>Ajan ve MT5 olay günlüğü</i></span>
|
|
777
|
+
</label>
|
|
778
|
+
<div class="fin-set-note">RİSK OTOMASYONU gizliyken koruma döngüsü (watchdog) kapatılır; tekrar gösterdiğinde ilgili kutucuktan açabilirsin.</div>
|
|
779
|
+
</div>
|
|
780
|
+
</div>
|
|
781
|
+
</div>
|
|
782
|
+
|
|
757
783
|
<div id="cronOverlay" class="mini-overlay" hidden>
|
|
758
784
|
<div class="mini-dialog">
|
|
759
785
|
<div class="mini-head">
|
package/src/renderer/renderer.js
CHANGED
|
@@ -165,11 +165,21 @@ const els = {
|
|
|
165
165
|
finDot: $('#finDot'),
|
|
166
166
|
finTerm: $('#finTerm'),
|
|
167
167
|
finReconnect: $('#finReconnect'),
|
|
168
|
+
finSettings: $('#finSettings'),
|
|
169
|
+
finSettingsOverlay: $('#finSettingsOverlay'),
|
|
170
|
+
finSettingsClose: $('#finSettingsClose'),
|
|
171
|
+
finShowRisk: $('#finShowRisk'),
|
|
172
|
+
finShowPerf: $('#finShowPerf'),
|
|
173
|
+
finShowFlow: $('#finShowFlow'),
|
|
174
|
+
finRiskCard: $('#finRiskCard'),
|
|
175
|
+
finPerfCard: $('#finPerfCard'),
|
|
176
|
+
finFlowCard: $('#finFlowCard'),
|
|
168
177
|
finBalance: $('#finBalance'),
|
|
169
|
-
finEquity: $('#
|
|
178
|
+
finEquity: $('#finEquityValue'),
|
|
170
179
|
finProfit: $('#finProfit'),
|
|
171
180
|
finFree: $('#finFree'),
|
|
172
181
|
finTraderModel: $('#finTraderModel'),
|
|
182
|
+
finModelRefreshBtn: $('#finModelRefreshBtn'),
|
|
173
183
|
finInterval: $('#finInterval'),
|
|
174
184
|
finMaxLot: $('#finMaxLot'),
|
|
175
185
|
finSymBtn: $('#finSymBtn'),
|
|
@@ -218,7 +228,7 @@ const els = {
|
|
|
218
228
|
finStatPf: $('#finStatPf'),
|
|
219
229
|
finStatDd: $('#finStatDd'),
|
|
220
230
|
finStatTrades: $('#finStatTrades'),
|
|
221
|
-
finEquityBox: $('#
|
|
231
|
+
finEquityBox: $('#finEquityChart'),
|
|
222
232
|
stVideoEl: $('#stVideoEl'),
|
|
223
233
|
stVideoName: $('#stVideoName'),
|
|
224
234
|
stVideoOpen: $('#stVideoOpen'),
|
|
@@ -7169,6 +7179,8 @@ async function init() {
|
|
|
7169
7179
|
try {
|
|
7170
7180
|
state = await beast.refreshModels();
|
|
7171
7181
|
applyState();
|
|
7182
|
+
/* finance modu açıksa TRADE AJANI model listesini de tazele */
|
|
7183
|
+
if (financeModeOn()) await finFillModels();
|
|
7172
7184
|
toast(_t('mr_done'));
|
|
7173
7185
|
} catch {
|
|
7174
7186
|
toast(_t('ws_fail_toast'));
|
|
@@ -9391,7 +9403,7 @@ function finDayKey(ms) {
|
|
|
9391
9403
|
function finRenderAutomation(cfg, watch) {
|
|
9392
9404
|
if (!cfg) return;
|
|
9393
9405
|
const ae = document.activeElement;
|
|
9394
|
-
if (els.finWatchdogCb) els.finWatchdogCb.checked = cfg.watchdog !== false;
|
|
9406
|
+
if (els.finWatchdogCb) els.finWatchdogCb.checked = finView.risk && cfg.watchdog !== false;
|
|
9395
9407
|
const setNum = (el, v) => {
|
|
9396
9408
|
if (el && ae !== el) el.value = v;
|
|
9397
9409
|
};
|
|
@@ -9493,6 +9505,8 @@ function finRenderAlerts(list) {
|
|
|
9493
9505
|
|
|
9494
9506
|
async function finFillModels() {
|
|
9495
9507
|
if (!els.finTraderModel) return;
|
|
9508
|
+
/* mevcut seçim korunur — yenilemede model kaybolursa "Genel aktif model"e düşer */
|
|
9509
|
+
const cur = els.finTraderModel.value || (finCfgCache && finCfgCache.traderSel) || '';
|
|
9496
9510
|
let models = [];
|
|
9497
9511
|
try {
|
|
9498
9512
|
const st = await beast.getState();
|
|
@@ -9502,11 +9516,13 @@ async function finFillModels() {
|
|
|
9502
9516
|
const optAuto = document.createElement('option');
|
|
9503
9517
|
optAuto.value = '';
|
|
9504
9518
|
optAuto.textContent = 'Genel aktif model';
|
|
9519
|
+
if (!cur) optAuto.selected = true;
|
|
9505
9520
|
els.finTraderModel.appendChild(optAuto);
|
|
9506
9521
|
for (const m of models) {
|
|
9507
9522
|
const o = document.createElement('option');
|
|
9508
9523
|
o.value = m.sel;
|
|
9509
9524
|
o.textContent = (m.providerName || m.sel) + ' · ' + m.model;
|
|
9525
|
+
if (m.sel === cur) o.selected = true;
|
|
9510
9526
|
els.finTraderModel.appendChild(o);
|
|
9511
9527
|
}
|
|
9512
9528
|
finModelsFilled = true;
|
|
@@ -9533,6 +9549,8 @@ async function finSnapshot() {
|
|
|
9533
9549
|
finRenderRoles(r.cfg);
|
|
9534
9550
|
finRenderTrader(r.trader, r.cfg);
|
|
9535
9551
|
finRenderAutomation(r.cfg, r.watch);
|
|
9552
|
+
/* GİZLİ RİSK OTOMASYONU AKTİF OLAMAZ: sunucu hâlâ açık diyorsa kapat */
|
|
9553
|
+
if (!finView.risk && r.cfg && r.cfg.watchdog !== false) finSaveCfg({ watchdog: false });
|
|
9536
9554
|
finRenderStats(r.stats, r.equity, r.account && r.account.currency ? r.account.currency : '');
|
|
9537
9555
|
finRenderAlerts(r.alerts);
|
|
9538
9556
|
}
|
|
@@ -9583,8 +9601,11 @@ async function setFinanceMode(on) {
|
|
|
9583
9601
|
try { localStorage.setItem('beast.financeMode', on ? '1' : '0'); } catch {}
|
|
9584
9602
|
const fm = await beast.financeMode(!!on, activeId).catch(() => ({}));
|
|
9585
9603
|
/* finance modu açıldı ama aktif oturum NORMAL (örn. WhatsApp sohbeti) ise
|
|
9586
|
-
ASLA o oturumu finance'e çevirme —
|
|
9587
|
-
|
|
9604
|
+
ASLA o oturumu finance'e çevirme — önce EN SON finance sohbetinden devam
|
|
9605
|
+
et (resumeSid); hiç finance sohbeti yoksa kendine ÖZEL yeni oturum aç */
|
|
9606
|
+
if (on && fm && fm.resumeSid) {
|
|
9607
|
+
try { await openSession(fm.resumeSid); } catch {}
|
|
9608
|
+
} else if (on && fm && fm.needNew) {
|
|
9588
9609
|
try {
|
|
9589
9610
|
const created = await beast.createSession();
|
|
9590
9611
|
if (created && created.id) await openSession(created.id);
|
|
@@ -9630,6 +9651,78 @@ function finSaveCfg(patch) {
|
|
|
9630
9651
|
beast.financeSettings(patch).then(() => { finWatchDirty = false; }).catch(() => { finWatchDirty = false; });
|
|
9631
9652
|
}, 400);
|
|
9632
9653
|
}
|
|
9654
|
+
|
|
9655
|
+
/* ---------- GÖRÜNÜM AYARLARI (isteğe bağlı bölümler) ----------
|
|
9656
|
+
RİSK OTOMASYONU + PERFORMANS + AKIŞ varsayılan GİZLİ; açmak isteğe bağlı.
|
|
9657
|
+
Seçim localStorage'da hatırlanır. Risk otomasyonu gizliyken watchdog
|
|
9658
|
+
AKTİF OLMAZ — kart yeniden gösterilince kutucuktan açılabilir. */
|
|
9659
|
+
const finViewKey = 'beast.financeView';
|
|
9660
|
+
const finView = { risk: false, perf: false, flow: false };
|
|
9661
|
+
try {
|
|
9662
|
+
const v = JSON.parse(localStorage.getItem(finViewKey) || 'null');
|
|
9663
|
+
if (v && typeof v === 'object') {
|
|
9664
|
+
finView.risk = v.risk === true;
|
|
9665
|
+
finView.perf = v.perf === true;
|
|
9666
|
+
finView.flow = v.flow === true;
|
|
9667
|
+
}
|
|
9668
|
+
} catch {}
|
|
9669
|
+
|
|
9670
|
+
function finViewPaint() {
|
|
9671
|
+
if (els.finRiskCard) els.finRiskCard.hidden = !finView.risk;
|
|
9672
|
+
if (els.finPerfCard) els.finPerfCard.hidden = !finView.perf;
|
|
9673
|
+
if (els.finFlowCard) els.finFlowCard.hidden = !finView.flow;
|
|
9674
|
+
if (els.finShowRisk) els.finShowRisk.checked = finView.risk;
|
|
9675
|
+
if (els.finShowPerf) els.finShowPerf.checked = finView.perf;
|
|
9676
|
+
if (els.finShowFlow) els.finShowFlow.checked = finView.flow;
|
|
9677
|
+
const row = (cb) => cb && cb.closest('.fin-set-row');
|
|
9678
|
+
const r1 = row(els.finShowRisk); if (r1) r1.classList.toggle('on', finView.risk);
|
|
9679
|
+
const r2 = row(els.finShowPerf); if (r2) r2.classList.toggle('on', finView.perf);
|
|
9680
|
+
const r3 = row(els.finShowFlow); if (r3) r3.classList.toggle('on', finView.flow);
|
|
9681
|
+
}
|
|
9682
|
+
|
|
9683
|
+
function finViewApply() {
|
|
9684
|
+
finViewPaint();
|
|
9685
|
+
/* gizli risk otomasyonu aktif kalmaz */
|
|
9686
|
+
if (!finView.risk && els.finWatchdogCb) els.finWatchdogCb.checked = false;
|
|
9687
|
+
try { localStorage.setItem(finViewKey, JSON.stringify(finView)); } catch {}
|
|
9688
|
+
if (!finView.risk) finSaveCfg({ watchdog: false });
|
|
9689
|
+
}
|
|
9690
|
+
|
|
9691
|
+
function finSettingsOpen() {
|
|
9692
|
+
if (els.finSettingsOverlay) els.finSettingsOverlay.hidden = false;
|
|
9693
|
+
}
|
|
9694
|
+
function finSettingsCloseModal() {
|
|
9695
|
+
if (els.finSettingsOverlay) els.finSettingsOverlay.hidden = true;
|
|
9696
|
+
}
|
|
9697
|
+
|
|
9698
|
+
function finViewToggle(key, on) {
|
|
9699
|
+
finView[key] = !!on;
|
|
9700
|
+
finViewApply();
|
|
9701
|
+
if (key === 'risk') {
|
|
9702
|
+
toast(on
|
|
9703
|
+
? 'RİSK OTOMASYONU gösteriliyor — aktif etmek için karttaki kutucuğu işaretle'
|
|
9704
|
+
: 'RİSK OTOMASYONU gizlendi ve kapatıldı');
|
|
9705
|
+
} else {
|
|
9706
|
+
toast((key === 'perf' ? 'PERFORMANS' : 'AKIŞ') + (on ? ' bölümü gösteriliyor' : ' bölümü gizlendi'));
|
|
9707
|
+
}
|
|
9708
|
+
if (financeModeOn()) finSnapshot();
|
|
9709
|
+
}
|
|
9710
|
+
|
|
9711
|
+
if (els.finSettings) els.finSettings.addEventListener('click', finSettingsOpen);
|
|
9712
|
+
if (els.finSettingsClose) els.finSettingsClose.addEventListener('click', finSettingsCloseModal);
|
|
9713
|
+
if (els.finSettingsOverlay) {
|
|
9714
|
+
els.finSettingsOverlay.addEventListener('click', (e) => {
|
|
9715
|
+
if (e.target === els.finSettingsOverlay) finSettingsCloseModal();
|
|
9716
|
+
});
|
|
9717
|
+
els.finSettingsOverlay.addEventListener('keydown', (e) => {
|
|
9718
|
+
if (e.key === 'Escape') { e.stopPropagation(); finSettingsCloseModal(); }
|
|
9719
|
+
});
|
|
9720
|
+
}
|
|
9721
|
+
if (els.finShowRisk) els.finShowRisk.addEventListener('change', () => finViewToggle('risk', els.finShowRisk.checked));
|
|
9722
|
+
if (els.finShowPerf) els.finShowPerf.addEventListener('change', () => finViewToggle('perf', els.finShowPerf.checked));
|
|
9723
|
+
if (els.finShowFlow) els.finShowFlow.addEventListener('change', () => finViewToggle('flow', els.finShowFlow.checked));
|
|
9724
|
+
finViewApply();
|
|
9725
|
+
|
|
9633
9726
|
if (els.finInterval) els.finInterval.addEventListener('change', () => {
|
|
9634
9727
|
const v = Math.max(30, Math.min(3600, Math.round(Number(els.finInterval.value) || 120)));
|
|
9635
9728
|
els.finInterval.value = v;
|
|
@@ -9704,6 +9797,23 @@ if (els.finTraderModel) {
|
|
|
9704
9797
|
toast('Trade ajanı modeli: ' + (els.finTraderModel.value || 'genel aktif model'));
|
|
9705
9798
|
});
|
|
9706
9799
|
}
|
|
9800
|
+
/* TRADE AJANI: modelleri yeniden çek — üstteki ⟳ ile aynı mantık
|
|
9801
|
+
(models:refresh). Eksik/yeni modeller listeye girer, seçim korunur. */
|
|
9802
|
+
if (els.finModelRefreshBtn) {
|
|
9803
|
+
els.finModelRefreshBtn.addEventListener('click', async () => {
|
|
9804
|
+
els.finModelRefreshBtn.classList.add('spin');
|
|
9805
|
+
try {
|
|
9806
|
+
state = await beast.refreshModels();
|
|
9807
|
+
applyState();
|
|
9808
|
+
await finFillModels();
|
|
9809
|
+
toast(_t('mr_done'));
|
|
9810
|
+
} catch {
|
|
9811
|
+
toast(_t('ws_fail_toast'));
|
|
9812
|
+
} finally {
|
|
9813
|
+
els.finModelRefreshBtn.classList.remove('spin');
|
|
9814
|
+
}
|
|
9815
|
+
});
|
|
9816
|
+
}
|
|
9707
9817
|
if (els.finTraderBtn) {
|
|
9708
9818
|
els.finTraderBtn.addEventListener('click', async () => {
|
|
9709
9819
|
if (els.finTraderBtn.classList.contains('stop')) {
|
package/src/renderer/style.css
CHANGED
|
@@ -287,9 +287,9 @@ body:not(.ide-mode):not(.studio-mode):not(.sandbox-mode) #watchPane { display: f
|
|
|
287
287
|
/* Studio tuşu artık topbar'da (dd-btn dd-icon-btn) — aktif rozet diğer topbar ikonlarıyla aynı */
|
|
288
288
|
#studioBtn.on { background: var(--accent-dim); color: var(--accent); }
|
|
289
289
|
|
|
290
|
-
/* model refresh
|
|
291
|
-
#modelRefreshBtn.spin { opacity: .7; pointer-events: none; }
|
|
292
|
-
#modelRefreshBtn.spin { animation: beast-spin 0.9s linear infinite; }
|
|
290
|
+
/* model refresh butonları — çekerken döner */
|
|
291
|
+
#modelRefreshBtn.spin, #finModelRefreshBtn.spin { opacity: .7; pointer-events: none; }
|
|
292
|
+
#modelRefreshBtn.spin, #finModelRefreshBtn.spin { animation: beast-spin 0.9s linear infinite; }
|
|
293
293
|
@keyframes beast-spin { to { transform: rotate(360deg); } }
|
|
294
294
|
|
|
295
295
|
/* ---------- cron modülü (ayarlar sekmesi) ---------- */
|
|
@@ -5202,3 +5202,32 @@ body.finance-mode #composerWrap { margin-right: var(--finW, 400px); }
|
|
|
5202
5202
|
.fin-skill-chip:hover { border-color: var(--accent); }
|
|
5203
5203
|
.fin-skill-chip.on { border-color: var(--accent); color: var(--accent); background: var(--accent-dim); }
|
|
5204
5204
|
.fin-skill-chip input { flex: none; width: auto; margin: 0; }
|
|
5205
|
+
|
|
5206
|
+
/* FINANCE GÖRÜNÜM AYARLARI modalı (başlıktaki ⚙) — isteğe bağlı bölümler */
|
|
5207
|
+
.fin-card[hidden] { display: none; }
|
|
5208
|
+
.fin-settings-dialog { width: min(440px, 90vw); height: auto; max-height: min(560px, 84vh); }
|
|
5209
|
+
.fin-set-hint {
|
|
5210
|
+
font-size: 11px;
|
|
5211
|
+
color: var(--muted);
|
|
5212
|
+
line-height: 1.45;
|
|
5213
|
+
margin-bottom: 10px;
|
|
5214
|
+
}
|
|
5215
|
+
.fin-set-row {
|
|
5216
|
+
display: flex;
|
|
5217
|
+
align-items: flex-start;
|
|
5218
|
+
gap: 9px;
|
|
5219
|
+
background: var(--panel);
|
|
5220
|
+
border: 1px solid var(--border);
|
|
5221
|
+
border-radius: 9px;
|
|
5222
|
+
padding: 9px 10px;
|
|
5223
|
+
margin-bottom: 6px;
|
|
5224
|
+
cursor: pointer;
|
|
5225
|
+
user-select: none;
|
|
5226
|
+
}
|
|
5227
|
+
.fin-set-row:hover { border-color: var(--accent); }
|
|
5228
|
+
.fin-set-row.on { border-color: var(--accent); background: var(--accent-dim); }
|
|
5229
|
+
.fin-set-row input { flex: none; width: auto; margin: 2px 0 0; accent-color: var(--accent); }
|
|
5230
|
+
.fin-set-row .fsr-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
|
|
5231
|
+
.fin-set-row .fsr-main b { font-size: 12px; color: var(--text); letter-spacing: 0.4px; }
|
|
5232
|
+
.fin-set-row .fsr-main i { font-style: normal; font-size: 10.5px; color: var(--muted); }
|
|
5233
|
+
.fin-set-note { margin-top: 8px; font-size: 10.5px; color: var(--muted); line-height: 1.4; }
|