diff --git a/.tmp-edge-profile2/Crashpad/settings.dat b/.tmp-edge-profile2/Crashpad/settings.dat new file mode 100644 index 0000000..3b20fde Binary files /dev/null and b/.tmp-edge-profile2/Crashpad/settings.dat differ diff --git a/.tmp-edge-profile2/Crashpad/throttle_store.dat b/.tmp-edge-profile2/Crashpad/throttle_store.dat new file mode 100644 index 0000000..9639e1b --- /dev/null +++ b/.tmp-edge-profile2/Crashpad/throttle_store.dat @@ -0,0 +1 @@ +level=none expiry=0 diff --git a/AI_MAP.md b/AI_MAP.md index a115816..b393891 100644 --- a/AI_MAP.md +++ b/AI_MAP.md @@ -6,7 +6,7 @@ Purpose: static Japanese browser simulation/game. Optimize context by reading th - Entrypoint: `index.html` defines the app shell, canvas, dialogs, right panels, and exact script order. - Runtime style: plain browser JS, global IIFEs, exports on `window`, no bundler/module loader. -- Version/cache: `app_manifest.json`, `js/version.js`, and generated `service-worker.js` share `39.15.167`. +- Version/cache: `app_manifest.json`, `js/version.js`, and generated `service-worker.js` share `39.16.18`. - Main loop: `js/main.js` initializes assets/audio/world/UI/save, then drives update/render. - Performance/display settings: `js/perf_profiler.js` owns manual visual settings and profiler buckets; display tiers affect rendering/visuals, not simulation-quality branches. - Update order: `js/system_order.js` calls phase facades from `js/simulation_systems.js`. @@ -81,4 +81,3 @@ This section records current boundaries only. Version-by-version cleanup history - Effect-specific spatial indexing, fuller delta-history storage, and high-speed collision partitioning. These need new indexes or semantics beyond cleanup. - UI/text-side meaning consolidation, including labels, wrapping/measurement helpers, and duplicated scalar helpers such as `num`, `finiteOr`, `isObject`, and `clonePlain`. - Further `World.prototype` reduction is possible, but only for helpers proven not to be runtime-facing canvas/UI/tool APIs. - diff --git a/BUILD_NOTE.txt b/BUILD_NOTE.txt index d5ba9c1..f988d61 100644 --- a/BUILD_NOTE.txt +++ b/BUILD_NOTE.txt @@ -1,156 +1,29 @@ -tarinai_physics_tuning_v167 -- Replaced the 8-sided circle template with a 24-sided, 20px-grid-aligned contour. -- Raised bounce-fence restitution from 1.08 to 2.40 and increased minimum/capped launch speeds. -- Made rope endpoint and particle constraints inextensible while retaining slack/flexibility. -- Set sticky-bomb blastScale to 0.68, matching the small firecracker. +tarinai_compact_save_stage4 +- Save schema 33 omits standard item amounts and stores only an optional non-standard block base plus per-item differences. +- Relationship targets are sorted and delta-encoded within each Tarinai row. +- World seeds use a canonical 64-bit hexadecimal identity and occupy exactly 8 bytes in the binary save. +- The binary header contains one schema byte; its high bit signals whether a string table follows. Empty string tables and the duplicate snapshot version are omitted. +- Deflate state is folded into the low bit of the frame-length varuint, eliminating the separate compression byte. +- 15-bit text conversion uses arithmetic Unicode range mapping instead of a 32768-character string and reverse Map. +- Previous binary schemas are intentionally unsupported. +- Version: 39.16.18 +- CompressionStream and DecompressionStream are drained concurrently to avoid browser backpressure stalls. -tarinai_mechanical_collision_grid_limit_audit_v1 -- Restored shared SAT geometry exports so collision-enabled rotators, reciprocators, and poison blocks physically interact with one another. -- Mechanical shape editors now snap all geometry to a coarse 20px lattice. -- Removed central colony-limit bypass options and added direct-insertion, capacity, save-roundtrip, and over-limit regression checks. -- Version: 39.15.167 +- Load confirmation uses the in-game dialog; fan wind is realtime; zunchi tool preview opacity, carried plushie depth, and blanket grass rules were corrected. -tarinai_champion_limits_mechanical_defaults_v1 -- Tarinai champions actively prioritize other champions as breeding partners, with stronger mate drive and shorter champion-pair cooldowns. -- Reciprocators now default to 90 degrees. -- Poison blocks now use a smaller default footprint. -- Colony panel now supports optional tarinai-population and object-count limits; blank/0 means unlimited. -- Colony limits are saved in snapshot/binary data. -- Version: 39.15.165 +- Passive spring: removed time-driven oscillation; force now depends on extension/compression and relative endpoint velocity. +- Signal effects use the exported TarinaiEffect constructor. +- Pressure-switch placement/editor overlays display the configured detection radius. -tarinai_plushie_fling_speed_v1 -- Reduced plushie poke-fling velocity to one third. -- Lowered plushie fling minimum-speed normalization to the same one-third scale. +- v39.16.18: removed redundant physics normalization, dirty-marking, compaction, pickup, and collision bookkeeping; unified one-way-fence and bounce corrections while retaining debug diagnostics and defensive recovery paths. -tarinai_sticky_bomb_plushie_stats_v1 -- Sticky bomb tooltip changed to the requested short description. -- Colony chart no longer appends the in-progress bucket as a live preview row, preventing rapid graph redraws between two-hour samples. -- Structure items now receive their own update method through the item dynamic dispatch, fixing plushie fling/offscreen destruction. -- Plushie poke fling speed/lifetime were strengthened and marked destroyOffscreen for both carried and uncarried plushies. -- Sticky bomb explosion delegates to World.explodeFirecracker; World.explodeFirecracker now accepts sticky_bomb as a compatible source. +- Earlier mechanism pass: stronger passive spring, persistent detector ranges, robot-cleaner signal power, and electric shock effect. -tarinai_sticky_bomb_plushie_v1 -- Added sticky_bomb as a hazard tool with timed explosion, carrier panic, and contact transfer. -- Changed poke behavior for carried plushies to fling them offscreen before destruction instead of immediate deletion. -- Removed the misleading no-explosion phrase from the flame-firecracker tooltip. +- v39.16.17: fixed the undefined bodyFor reference in mechanical one-way-fence contact handling by using the canonical body velocity helper. -tarinai_grab_rain_death_reason_v1 -- Held Tarinai now zeroes velocity/impulses during pinch and skips AI/movement while player-held. -- Zunchi has a vector fallback sprite until its image asset is renderable. -- Poked carried plushies are destroyed instead of depending on offscreen fling removal. -- Rain streak overlay is visible during light_rain and no longer disappears entirely with transient effects disabled. -- Restored soil ground label as 砂 while keeping ground UI wording as 地面. -- Stale fire_seen panic text is cleared when no active fire/burning threat remains. -- Family tree death reason label now uses the same stored final reason as the event log. +- v39.16.16: link rendering no longer depends on midpoint spatial visibility; bounce fences launch Tarinai without shock damage; passive springs are more under-damped and elastic. -tarinai_ground_edgegrass_duplicate_scan_v1 -- Unified ground wording for default ground / ground change log / ground change toast to 地面. -- Removed visual-only edge grass decorations from the cached background renderer. -- Duplicate-processing candidates found but not removed: - - Mechanical geometry helpers overlap across geometry_helpers.js, mechanical_shape_bridge.js, and mechanical_system.js. - - Item update scheduling helpers overlap between item_update_policy.js and item_update_scheduler.js. - - Sleep-place / nest-box search helpers overlap between tarinai_item_targeting.js and tarinai_nest_sleep_system.js. - - Physics bounce response block is repeated inside physics_helpers.js. - - Rotator / reciprocator editor close/apply scaffolding is repeated in world_placement_log.js. - - Drink/juice consumable handling has similar sound/need-relief blocks in tarinai_consumable_behavior.js. - - Family connected-component traversal logic appears in both family_graph.js and ui_family_async.js. -- No duplicate blocks were removed in this build. +- v39.16.16: population chart includes per-bucket births/deaths; rotators accept signed motor speed; champion personality bonuses inherit through descendants; champion-pair mate weighting is moderately reduced. +- v39.16.16: colony population chart records births/deaths, rotators accept negative motor speed, champion personality boosts inherit through descendants, champion-pair mating is slightly reduced, and one-way fence previews/pathfinding honor the passable direction. -tarinai_tool_fold_fan_area_delete_v1 -- Removed the over-broad collapsed-card min-height override and preserved folded tool-card header height. -- Updated fan tooltip copy from water balloons/balls to lightweight items. -- Changed area-delete to its own text icon instead of reusing the normal delete icon. - -tarinai_right_ui_restore_v1 -- Restored right-panel/tool/collapsible CSS to the stable pre-scroll behavior. -- Removed the later generic scroll clamps from panel-card bodies/tool palette/right UI. -- Kept scrollability only for in-game overlay/editor windows that can exceed the viewport. - -tarinai_right_panel_scroll_fix_v1 -- Removed generic max-height/overflow clamp from panel-card bodies. -- Restored the right panel as the scroll container. -- Preserved internal tool-palette scrolling and sticky operation category. -- Ensured collapsed right-panel cards keep a full visible header. - -tarinai_tool_ui_fix_v1 -- Stabilized folded tool-card height when other UI cards are expanded. -- Kept the operation category sticky while fixing display glitches inside the tool palette scroller. -- Kept tool-palette scrolling while preventing global panel-body height limits from compressing the tool card. - -tarinai_event_ui_king_scroll_v1 -- Hidden robot-cleaner and player/tool operation records from the event log and observation records. -- Reduced visual settings to OFF/ON for effects/shadows and low/high for details. -- Updated family/nest descriptions and implemented champion-only nest displacement during sleep. -- Strengthened flame-firecracker size scaling. -- Shortened intimidation timers. -- Added overflow scrolling safeguards for fixed UI and panel bodies. - -tarinai_stats_cleaning_flame_intimidation_v1 -- Colony chart day markers now use season-day labels such as 春2日. -- Robot cleaner deaths normalize to 掃除. -- Flame firecracker fire amount/count/range now scale with item size. -- Object chart label changed to 環境; population/environment y-axis labels use data max instead of fixed 100. -- Environment chart includes temperature. -- Intimidation state is cleared when its timer ends and timer ranges are shortened. - -tarinai_tooltip_stats_disease_hunger_v1 -- Tarinai canvas tooltip width now adapts to its four fixed lines. -- Colony charts draw dotted gray daily 0:00 markers with day labels. -- Orphan plushies with no live owner are removed. -- Fight disease blocks sunbathing and sunbath curing. -- Disease-active low-health/stress deaths prefer disease cause labels. -- Natural hunger increase is multiplied by 0.75 in awake and sleep paths. - -tarinai_family_routes_v39_15_124 -- Clamped above-generation lineage detours inside the SVG viewport. -- Allowed lineage edges to attach to non-center points on node sides when detouring. -- Removed fight win-rate text from family-tree nodes. - -tarinai_tooltip_family_routing_v1 -- Tarinai hover tooltip is fixed to 4 logical lines: name, behavior, HP/hunger/stress, felt temperature. -- Family tree partner/child link routing now detours around unrelated node cards when a direct horizontal partner line would overlap a node. - -tarinai_pipe_shadow_temperature_shelter_v1 -- Moved pipe shadow down to the pipe-ground contact area and enlarged it slightly. -- Temperature comfort seeking now considers thermally comfortable nest boxes and pipes. -- Tarinai can enter selected nest/pipe shelters for temperature relief. - -tarinai_pipe_layer_fan_sunbath_v1 -- Pipe tooltip wording now uses 土管, not 全土管/土管全部. -- Pipe shadow is moved to the ground-contact mouth area and enlarged slightly. -- Render layer sorting uses bottom-edge/ground-contact Y instead of center Y. -- Fan wind lowers felt temperature by up to 5C. -- Sunbath disease recovery chance is 25%. - -tarinai_pipe_visual_tooltip_v1 -- Updated water-balloon / pipe tool descriptions in the tool UI. -- Touching toys (ball / water balloon) can slightly increase openness over time. -- Pipe visuals are revised to read as a pipe embedded in the ground instead of a jar. -- Pipe tooltip occupant listing is reinforced by aggregating live occupants across all pipes. - -tarinai_pipe_tooltip_temp_raindrop_v1 -- Pipe tooltips list tarinai inside all pipes instead of only the hovered pipe. -- Fully hidden tarinai inside a nest box or pipe are skipped by direct tarinai tooltips. -- Pipe interior temperature correction now moves toward 20C by at most +/-5C. -- Water-balloon splash drops are created through the same rain-water item initializer used by rain. -- Version: 39.15.136 - -tarinai_pipe_tooltip_temp_v1 -- Pipe tooltips list tarinai inside all pipes instead of only the hovered pipe. -- Fully hidden tarinai inside a nest box or pipe are skipped by direct tarinai tooltips. -- Pipe interior temperature correction now moves toward 20C by at most +/-5C. -- Version: 39.15.117 - -tarinai_water_balloon_fan_ui_v1 -- Fan drawing now shows the actual forward wind cone/range. -- Mobile rotator/reciprocator editor dialogs are scrollable; reciprocator canvas shares editor sizing. -- Balloon tool is replaced by water balloon visuals/text. -- Water balloons splash water when popped; low-openness tarinai panic and flee with behavior text: 水風船が割れておどろいている。 -- Version: 39.15.117 - -tarinai_king_fix_v10 -- Fire tool button hidden; flames spawn only from flame firecracker. -- Burning tarinai and ants draw lightweight flame-shaped overlays. -- Flame firecracker is redder and shows a countdown timer; normal firecracker is darker. -- Standalone flame and fire particles use a simpler flame silhouette. -- Version: 39.15.102 +- v39.16.16: one-way fences allow Tarinai forward crossing in swept collision; chart legend dots toggle series; wire tools attach to Tarinai/ants; energized living endpoints panic and take damage; selected data reports electrocution. diff --git a/FILES.json b/FILES.json index 6b545ed..57d6e87 100644 --- a/FILES.json +++ b/FILES.json @@ -1,6 +1,6 @@ { "purpose": "Token-efficient machine-readable routing for tarinai_. Use scripts/ai_inventory.py for exact current file expansion.", - "version": "39.15.167", + "version": "39.16.18", "entrypoints": { "app": "index.html", "runtime": "js/main.js", diff --git a/GAME_FEATURES.md b/GAME_FEATURES.md index 4418ac7..b3037f2 100644 --- a/GAME_FEATURES.md +++ b/GAME_FEATURES.md @@ -1,8 +1,116 @@ +## v39.16.17 mechanical one-way fence runtime fix + +- Mechanical objects now query their canonical physics-body velocity when resolving one-way-fence contacts. +- This removes the `bodyFor is not defined` runtime failure while preserving the existing directional fence behavior. + +## v39.16.16 directional fences, chart controls, and living wire endpoints + +- Tarinai can physically cross one-way fences in the arrow direction, including swept/high-speed movement. +- Colony chart color dots toggle individual series. +- Wire and insulated wire can attach to Tarinai and ants. Energized living endpoints take damage and panic regardless of insulation; only bare wire damages incidental contact. +- Selected Tarinai data shows `感電している。` while shocked. + + +## v39.16.16 colony lineage and directional routing + +- Population history overlays interval birth and death counts. +- Rotators preserve negative motor speed and rotate in reverse. +- Tarinai Champion boosts to aggression, openness, and sociability pass to descendants with generational damping. +- Champion-pair mating preference is slightly reduced. +- One-way fence placement previews show the allowed direction. +- Pathfinding treats one-way fences as passable only along their arrow direction. + +## v39.16.16 colony graph, reverse rotator, and champion lineage + +- コロニー統計の個体数グラフへ、2時間区間ごとの誕生数と死亡数を追加した。 +- 回転体のモーター速度は負値を保持し、負の角度方向へ逆回転できる。 +- たりない王の攻撃性・開放性・社交性補正は子孫の誕生時性格へ減衰継承される。 +- たりない王同士の繁殖優先倍率を5.0から4.0へ下げ、繁殖確率をやや抑えた。 +- 保存形式は変更しない。 + # tarinai_ Game Features +## v39.16.16 link, bounce-fence, and spring fixes + +- ヒモ、棒、バネ、電線、絶縁電線は、接続線が画面内を横切る場合、中点の空間セルが画面外でも描画される。 +- バウンス柵はたりないを外力インパルスで確実に吹き飛ばし、柵自身が作る急激な速度変化では衝撃ダメージを与えない。 +- バネは受動式のまま剛性を高め、減衰と強制位置補正を下げ、より大きく長く往復する。 + +## v39.16.13 detector and fence changes + +- 感圧スイッチを「検知器」へ改名し、道具UI上で通常の柵と位置を入れ替えた。 +- 検知器は軸平行の矩形範囲で対象を数える。専用UIから横幅・縦幅・対象・必要数を設定する。 +- 柵の配置境界判定を実際の細長い形状に合わせ、フィールド上下端近くへ配置できるようにした。 +- バウンス柵の反発係数、最低射出速度、最大速度を引き上げ、衝突直後に強く跳ねるようにした。 +- ワープゲートを道具、描画、更新、信号、保存形式から削除した。 +- 一方通行柵を追加した。矢印方向には通過でき、逆方向のみ衝突する。 +- バイナリスキーマ36、スナップショット30。旧形式との読み込み互換は持たない。 + +## v39.16.11 mechanism fixes and passive spring + +- 検知器は矩形範囲内の「たりない」または「アイテム」を数え、設定個数以上で電線へ信号を送る。 +- 一方通行柵は矢印方向だけ通過でき、逆方向のたりない・アイテム・機構を遮る。 +- バウンス柵は衝突対象へ強い即時反発を与える。 +- バネは棒と同じ2点接続方式で設置する。自動伸縮はせず、外力による伸び縮みに対して受動的に反発し、弾性運動する。 +- 電線と絶縁電線はアイテム同士を接続し、複数本を経由して信号を伝える。通常電線は通電中に接触したたりないへダメージを与え、絶縁電線は与えない。 +- バイナリスキーマ34、スナップショット28。v39.16.10と保存形式は同じ。 + +## v39.16.9 load UI and item behavior fixes + +- Replaced browser-native load confirmations with an in-game confirmation window. +- Kept fans in the realtime scheduler lane so wind applies continuously instead of as periodic gusts. +- Made the zunchi tool preview use the fresh, fully opaque stage. +- Rendered carried plushies at the same depth position as their owner. +- Disabled grass spawning, growth, placement capacity, and existing grass on the fluffy blanket ground. + +## v39.16.8 compact amount, relationship, seed, and framing save + +- アイテム種類の標準amountは保存せず、標準値と異なる共通値または個別差分だけを保存する。共通値候補は実バイト数で選択する。 +- 個体関係の対象インデックスを昇順に並べ、前の対象との差分として保存する。 +- worldSeedを固定16進64bitへ統一し、バイナリ上では8バイト固定で保存する。 +- バイナリ先頭はスキーマ1バイトへ統合し、上位bitで文字列テーブルの有無を示す。空の文字列テーブルと重複したスナップショット版番号は保存しない。 +- 圧縮フラグをフレーム長の下位bitへ統合し、独立した1バイトを削除する。 +- 15bit文字化の32768文字テーブルと逆引きMapを廃止し、Unicodeコードポイントの算術変換へ変更する。 +- バイナリスキーマ33、スナップショット27。旧形式との読み込み互換は持たない。 + +## v39.16.7 column-oriented creature save and packed item flags + +- 個体の固定情報を項目別の列指向ビットプレーンへ変更し、全個体で0の列は保存しない。 +- 睡眠状態、遺伝差分、戦績差分の存在は各ID・差分マスクから直接判定し、重複していた3bit/個体を削除する。 +- アイテムの共通追加状態、amount差分、追加状態差分のフラグを全ブロック共通の連続ビット列へ格納する。 +- 共通追加状態は候補ごとに専用バイナリを試算し、全件個別保存より実際に小さい場合だけ採用する。 +- バイナリスキーマ32、スナップショット26。旧形式との読み込み互換は持たない。 + +## v39.16.4 compact identity and normal-item binary save + +- 個体のbirthSeed文字列を保存せず、出生番号と32bitハッシュへ分解する。`worldSeed + birthSerial`で再現できる個体はハッシュも省略する。 +- 新規出生のbirthSeedは親文字列を含めず、親子関係と遺伝情報は既存の専用フィールドで保持する。 +- 通常アイテムの追加情報を型別専用バイナリへ移行し、JSONテキストを保存しない。未知の追加配列も数値・文字列の型付きバイナリで保存する。 +- 同じ種類のアイテムはamountの最頻値をブロックに1回だけ保存し、同一追加状態が複数ある場合も共有する。個別アイテムには差分だけを保存する。 +- バイナリスキーマ30、スナップショット24。旧形式との読み込み互換は持たない。 + +## v39.16.3 physics binary save and reciprocator cargo contacts + +- 回転体・毒ブロック・往復体・ロープ・ロッドの追加情報を、JSON文字列ではなく専用バイナリで保存する。型名、キー名、デフォルト値、重複座標、標準輪郭、インデックス参照済み接続先の文字列情報を省略する。 +- バイナリスキーマは29。v39.16.2のスキーマ28は読み込み互換を維持する。 +- 往復体はボール、石、画鋲などの可動物理アイテムを押し出すが、それらとの接触では方向、レール位相、モーター速度を変更しない。 + +## v39.16.2 reciprocator collision and placement alignment + +- 往復体は、進行方向にある機構、静的障害物、物理アイテムへ衝突した時点で方向転換する。接触分離によって重なりが解消されても反転判定を失わない。 +- 静的障害物との判定から往復体を除外しない。高速移動時は障害物付近でサブステップ判定を増やし、すり抜けを抑える。 +- 往復体の設置前オーバーレイと実配置は同じ角度初期化処理を使用し、物理ボディー角度とレール軸を同じ順序で確定する。 +- セーブ形式は変更しない。 + +## v39.16.1 debug save-size breakdown + +- `?debug=1` でセーブまたは呪文出力を実行すると、デバッグオーバーレイにバイナリ内訳、文字数、エンコード時間が表示される。 +- 内訳は形式情報、文字列テーブル、ワールド、個体基本情報、個体シード、個体関係、アイテム索引、通常アイテム、物理アイテムに分けて実占有バイトを集計する。 +- 通常アイテム・物理アイテムの追加情報について、バイナリ内の占有量とJSON UTF-8元サイズを併記する。ロード後は直近のデコード時間も表示する。 + This document describes the playable features of `tarinai_`: what the player sees, what tools do, and how tarinai behave. It is intentionally player/design-facing, not an implementation map. -## v39.15.167 mechanical interaction and limit audit +## v39.16.0 mechanical interaction and limit audit - 回転体・往復体・毒ブロックは、双方の「当たり判定ON」時にSAT矩形判定で相互作用する。当たり判定OFFの機構は機構同士の衝突対象から除外される。 - 3種類の輪郭編集は20px間隔のグリッド格子点へスナップする。直線、自由描画、消去位置、テンプレート、再編集時の既存端点に同じ規則を適用する。 diff --git a/README.md b/README.md index 5a50794..0527577 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,8 @@ AI-first entrypoint for a static browser simulation/game. Keep this file small; ## Runtime Shape -- No bundler; `index.html` loads ordered global-IIFE scripts with `?v=39.15.167`. +- No bundler; `index.html` loads ordered global-IIFE scripts with `?v=39.16.18`. +- v39.16.18 changes: redundant physics normalization, dirty-marking, compaction, pickup, and collision bookkeeping were removed; one-way-fence and bounce corrections now use shared canonical helpers. - Mutable runtime lives on `window`; primary entities are `World`, `Tarinai`, items, structures, ants, family graph, weather, and save snapshots. - Update loop: `main.js` creates the world/UI loop; `World.update` delegates to `TarinaiSystemOrder.update`; `system_order.js` runs named phases. - UI loop: pointer/tool/UI intents go through `command_dispatcher.js`; canvas drawing is in render modules; side panels are `ui_*.js`. @@ -51,3 +52,7 @@ AI-first entrypoint for a static browser simulation/game. Keep this file small; - Syntax: `node --check js/*.js` - Regression: `python scripts/regression_check.py` - Inventory sanity: `powershell -NoProfile -ExecutionPolicy Bypass -File scripts/ai_inventory.ps1 -All` + + +### v39.16.16 +Colony birth/death chart lines, reverse rotators, champion-trait inheritance, reduced champion-pair mating, and directional one-way-fence routing. diff --git a/app_manifest.json b/app_manifest.json index a501ae8..312f41f 100644 --- a/app_manifest.json +++ b/app_manifest.json @@ -1,5 +1,5 @@ { - "version": "39.15.167", + "version": "39.16.18", "css": [ "css/base.css", "css/layout.css", @@ -36,6 +36,7 @@ "js/constraint_system.js", "js/physics_world_system.js", "js/physics_projection_system.js", + "js/signal_system.js", "js/assets.js", "js/audio.js", "js/perf_profiler.js", diff --git a/css/base.css b/css/base.css index e3d7e2b..5e59647 100644 --- a/css/base.css +++ b/css/base.css @@ -619,6 +619,32 @@ h1 { background: rgba(255,255,255,0.84); padding: 4px 6px; } + +.signal-channel-label { + font-size: 13px; + color: var(--ink); + font-weight: 700; +} +.signal-channel-picker { + display: grid; + grid-template-columns: repeat(3, minmax(44px, 1fr)); + gap: 7px; +} +.signal-channel-picker button { + min-height: 38px; + border-radius: 10px; + border: 1px solid rgba(84,68,48,0.18); + background: rgba(255,255,255,0.78); + color: var(--ink); + font: 700 14px ui-rounded, sans-serif; + cursor: pointer; +} +.signal-channel-picker button:hover { background: rgba(255,248,232,0.98); } +.signal-channel-picker button.active { + background: rgba(78,179,224,0.22); + border-color: rgba(42,133,184,0.58); + box-shadow: inset 0 0 0 1px rgba(42,133,184,0.18); +} .rotator-editor-tools { display: flex; flex-wrap: wrap; @@ -728,3 +754,7 @@ h1 { -webkit-overflow-scrolling: touch; box-sizing: border-box; } + +.save-confirm-dialog { z-index: 36; } +.save-confirm-panel { width: min(390px, 100%); } +.save-confirm-message { margin-bottom: 8px; color: var(--ink); font-size: 14px; } diff --git a/css/components.css b/css/components.css index 1c320ca..240b0f3 100644 --- a/css/components.css +++ b/css/components.css @@ -790,6 +790,22 @@ top: 50%; transform: translate(-50%, -50%); } +.tool-category[data-tool-category="operate"] .tool-shortcut { + position: absolute; + right: 3px; + bottom: 2px; + min-width: 13px; + height: 13px; + box-sizing: border-box; + padding: 0 3px; + border: 1px solid rgba(82,128,190,0.26); + border-radius: 5px; + background: rgba(255,255,255,0.88); + color: rgba(48,74,112,0.86); + font: 700 9px/12px system-ui, sans-serif; + text-align: center; + pointer-events: none; +} /* Collapsed event card must shrink to its header. layout.css gives .log-card a min-height, which left a large blank panel when folded. */ .log-card.collapsed { min-height: 0 !important; height: auto !important; flex: 0 0 auto !important; flex-basis: auto !important; } @@ -845,9 +861,11 @@ font-size: 12px; } .colony-limit-head small { color: var(--muted); font-size: 10px; } -.colony-limit-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-top: 8px; } -.colony-limit-grid label { display: grid; gap: 4px; min-width: 0; font-size: 11px; color: var(--muted); } -.colony-limit-grid input { width: 100%; min-width: 0; box-sizing: border-box; border: 1px solid rgba(100, 78, 52, 0.22); border-radius: 8px; padding: 6px 7px; background: rgba(255,255,255,0.78); color: var(--ink); font: inherit; } +.colony-limit-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px; margin-top: 8px; } +.colony-limit-row { display: grid; grid-template-columns: minmax(0, 1fr) 54px; gap: 5px 7px; align-items: center; min-width: 0; font-size: 11px; color: var(--muted); } +.colony-limit-row span { grid-column: 1 / -1; min-width: 0; } +.colony-limit-slider { width: 100%; min-width: 0; accent-color: rgba(84, 138, 72, 0.92); } +.colony-limit-number { width: 100%; min-width: 0; box-sizing: border-box; border: 1px solid rgba(100, 78, 52, 0.22); border-radius: 8px; padding: 5px 6px; background: rgba(255,255,255,0.78); color: var(--ink); font: inherit; text-align: right; } .colony-limit-status { margin-top: 7px; color: rgba(68, 55, 41, 0.78); font-size: 10px; line-height: 1.35; } diff --git a/css/panel.css b/css/panel.css index a964d1c..a77d799 100644 --- a/css/panel.css +++ b/css/panel.css @@ -351,12 +351,18 @@ body::before { white-space: nowrap; } .colony-chart-legend i { - width: 8px; - height: 8px; + width: 10px; + height: 10px; border-radius: 999px; display: inline-block; box-shadow: 0 0 0 1px rgba(70, 52, 36, 0.10); + cursor: pointer; + transition: opacity 120ms ease, transform 120ms ease; } +.colony-chart-legend i:hover, +.colony-chart-legend i:focus-visible { transform: scale(1.18); outline: none; } +.colony-chart-legend .series-hidden { opacity: 0.42; text-decoration: line-through; } +.colony-chart-legend .series-hidden i { background: transparent !important; box-shadow: inset 0 0 0 2px currentColor; } /* Family tree personality tags: consolidated final cascade. */ diff --git a/index.html b/index.html index ae742ff..9144088 100644 --- a/index.html +++ b/index.html @@ -4,14 +4,14 @@