From 7455d630fc6c9747565a3718a464e83c0b8be723 Mon Sep 17 00:00:00 2001 From: 33333-33333 Date: Tue, 30 Jun 2026 22:30:37 +0900 Subject: [PATCH 1/5] 1.4 --- AI_MAP.md | 4 +- BUILD_NOTE.txt | 7 + FILES.json | 2 +- GAME_FEATURES.md | 94 +++--- README.md | 14 +- app_manifest.json | 13 +- css/base.css | 33 +- css/components.css | 68 +++- css/mobile.css | 58 ++-- css/panel.css | 30 +- index.html | 342 ++++++++++--------- js/ants.js | 92 +++++- js/audio.js | 4 +- js/collision_footprint_system.js | 2 +- js/collision_response_system.js | 2 +- js/colony_situation_system.js | 2 +- js/constraint_system.js | 20 +- js/debug_tools.js | 3 +- js/health.js | 8 +- js/item_dynamic_pin_system.js | 2 +- js/item_dynamic_system.js | 2 + js/item_dynamic_tool_system.js | 236 +++++++++++++ js/item_render_runtime.js | 110 ++++-- js/item_tool_definitions.js | 16 +- js/item_type_initializers.js | 12 +- js/item_update_policy.js | 4 +- js/item_update_scheduler.js | 2 +- js/items.js | 12 +- js/main.js | 3 +- js/mechanical_system.js | 127 ++++--- js/perf_profiler.js | 122 +++++-- js/physics_shape_editor_system.js | 16 +- js/placement_collision_system.js | 41 --- js/render.js | 49 ++- js/save_codec.js | 496 +++++++++++++++++++++------- js/save_schema.js | 6 +- js/save_storage.js | 2 +- js/sim_core.js | 4 +- js/simulation_maintenance_system.js | 4 +- js/snapshot_system.js | 11 +- js/structure_lifecycle.js | 50 ++- js/structures.js | 27 +- js/tarinai.js | 9 + js/tarinai_action_definitions.js | 24 +- js/tarinai_action_state.js | 8 - js/tarinai_behavior_state.js | 2 +- js/tarinai_behavior_text.js | 6 +- js/tarinai_building_behavior.js | 2 +- js/tarinai_consumable_behavior.js | 5 +- js/tarinai_contact_item_system.js | 18 +- js/tarinai_disease_nest.js | 113 ++++++- js/tarinai_forced_behavior.js | 2 +- js/tarinai_identity_social.js | 15 +- js/tarinai_item_effects.js | 4 - js/tarinai_item_targeting.js | 48 +-- js/tarinai_needs_items.js | 17 +- js/tarinai_render.js | 101 +++--- js/tarinai_social_action_runtime.js | 31 ++ js/tarinai_social_move_life.js | 155 +++++++-- js/tarinai_update_policy.js | 2 +- js/tarinai_update_step_frame.js | 8 +- js/text_catalog.js | 53 +-- js/ui.js | 3 + js/ui_bind.js | 45 ++- js/ui_charts.js | 2 +- js/ui_family_layout.js | 18 +- js/ui_selected.js | 6 +- js/ui_tools.js | 2 +- js/ui_tooltips.js | 8 +- js/version.js | 4 +- js/weather_system.js | 4 +- js/world_combat_effects.js | 14 +- js/world_environment.js | 33 +- js/world_family_social.js | 98 ++++-- js/world_placement_log.js | 33 +- js/world_spatial_budget.js | 5 - js/world_tool_actions.js | 14 + js/world_update.js | 12 +- scripts/ai_inventory.ps1 | 2 +- scripts/ai_inventory.py | 2 +- scripts/regression_check.py | 17 +- service-worker.js | 2 +- 82 files changed, 2189 insertions(+), 910 deletions(-) create mode 100644 BUILD_NOTE.txt delete mode 100644 js/placement_collision_system.js diff --git a/AI_MAP.md b/AI_MAP.md index 78a68e1..a51e7cc 100644 --- a/AI_MAP.md +++ b/AI_MAP.md @@ -6,9 +6,9 @@ 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.47`. +- Version/cache: `app_manifest.json`, `js/version.js`, and generated `service-worker.js` share `39.15.92`. - Main loop: `js/main.js` initializes assets/audio/world/UI/save, then drives update/render. -- Update order: `js/system_order.js` calls phase facades from `js/world_update_phases.js` / `js/simulation_systems.js`. +- Update order: `js/system_order.js` calls phase facades from `js/simulation_systems.js`. - Command path: UI/input emits command objects; `js/command_dispatcher.js` routes tool, pointer, selection, save, reset, and UI intents. - Persistence: save files are schema/codec/storage/coordinator modules; snapshot/history modules keep world restoration and stats consistent. diff --git a/BUILD_NOTE.txt b/BUILD_NOTE.txt new file mode 100644 index 0000000..9122311 --- /dev/null +++ b/BUILD_NOTE.txt @@ -0,0 +1,7 @@ +tarinai_king_fix_v9 +- Added fire item: spreads to tarinai, ants, and grass; burning causes continuous damage and panic movement. +- Added flame_firecracker: scatters fire when the fuse ends without blast damage/explosion. +- Burning tarinai behavior text and fire-sighting panic text are forced through observation data. +- Fire can be extinguished by water droplets or random extinguish checks; rain and <=10C increase extinguish chance. +- Fixed duplicator stored-water preview color by rendering droplet sprites instead of fallback orange food shape. +- Version bumped to 39.15.98. diff --git a/FILES.json b/FILES.json index 89f458d..8e8fab2 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.77", + "version": "39.15.92", "entrypoints": { "app": "index.html", "runtime": "js/main.js", diff --git a/GAME_FEATURES.md b/GAME_FEATURES.md index a3d0acb..d71fcb5 100644 --- a/GAME_FEATURES.md +++ b/GAME_FEATURES.md @@ -31,68 +31,68 @@ The core loop is: ### Operation -- **解除 / clear**: cancels the selected tool and returns to normal observe mode. -- **たりないデータ / observe**: select a tarinai or inspect compatible objects such as signboards. -- **追加 / new**: calls a new tarinai into the field. -- **つつく / poke**: pokes tarinai and can push balls. -- **つまむ / pinch**: drags tarinai and some placed objects. -- **コピー / copy**: copies a placed item and pastes a new instance with its settings. -- **戻す / undo** and **進む / redo**: reverse or reapply placement/edit actions. -- **削除 / delete**: removes placed tools, objects, and stains. -- **範囲削除 / area delete**: removes many nearby objects or stains around the cursor. -- **洗浄 / water hose**: drag to clean dirt, zunchi, corpses, and stains. +- **解除 / clear**: cancels the selected tool and returns to normal observe mode. +- **たりないデータ / observe**: select a tarinai or inspect compatible objects such as signboards. +- **追加 / new**: calls a new tarinai into the field. +- **つつく / poke**: pokes tarinai and can push balls. +- **つまむ / pinch**: drags tarinai and some placed objects. +- **コピー / copy**: copies a placed item and pastes a new instance with its settings. +- **戻す / undo** and **進む / redo**: reverse or reapply placement/edit actions. +- **削除 / delete**: removes placed tools, objects, and stains. +- **範囲削除 / area delete**: removes many nearby objects or stains around the cursor. +- **洗浄 / water hose**: drag to clean dirt, zunchi, corpses, and stains. ### Food -- **ずんだ餅 / sweet**: favored food; can cure some illness. -- **へこ餅 / love mochi**: makes reproduction behavior more likely for a while. -- **けんか餅 / fight mochi**: makes fighting behavior more likely for a while. -- **草 / grass**: food and comfort source; can grow and be used for simple beds. -- **水滴 / water**: drinkable water, also appears during rain and can be set in duplicators. -- **ずんだ汁 / zunda juice**: clears item effects from a tarinai. -- **複製機 / duplicator**: can be loaded with compatible food, medicine, grass, water, pushpins, or oshibyo and then produces or applies that content. +- **ずんだ餅 / sweet**: favored food; can cure some illness. +- **へこ餅 / love mochi**: makes reproduction behavior more likely for a while. +- **けんか餅 / fight mochi**: makes fighting behavior more likely for a while. +- **草 / grass**: food and comfort source; can grow and be used for simple beds. +- **水滴 / water**: drinkable water, also appears during rain and can be set in duplicators. +- **ずんだ汁 / zunda juice**: clears item effects from a tarinai. +- **複製機 / duplicator**: can be loaded with compatible food, medicine, grass, water, pushpins, or oshibyo and then produces or applies that content. ### Medicine -- **ねむり薬 / sleep drug**: causes sleepiness or sleep disease; damage can cure the disease. -- **下剤 / laxative**: causes repeated zunchi and reduces food benefit. -- **プロテイン / protein**: permanent power mode; more damage dealt, lower disease chance. -- **ンイテロプ / niteropu**: permanent weak mode; less damage dealt, higher disease chance. -- **弾薬 / ammo**: temporary high-speed movement and strong collision impact. -- **怪しい薬 / mystery drug**: randomly applies an eligible item effect or disease. -- **水銀 / mercury**: increases lifespan multiplier on each use. -- **巨大薬 / giant drug**: greatly increases size, attack, and speed, but deals ongoing damage. -- **矮小薬 / dwarf drug**: greatly decreases size, attack, and speed, and also deals ongoing damage. +- **ねむり薬 / sleep drug**: causes sleepiness or sleep disease; damage can cure the disease. +- **下剤 / laxative**: causes repeated zunchi and reduces food benefit. +- **プロテイン / protein**: permanent power mode; more damage dealt, lower disease chance. +- **ンイテロプ / niteropu**: permanent weak mode; less damage dealt, higher disease chance. +- **弾薬 / ammo**: temporary high-speed movement and strong collision impact. +- **怪しい薬 / mystery drug**: randomly applies an eligible item effect or disease. +- **水銀 / mercury**: increases lifespan multiplier on each use. +- **巨大薬 / giant drug**: greatly increases size, attack, and speed, but deals ongoing damage. +- **矮小薬 / dwarf drug**: greatly decreases size, attack, and speed, and also deals ongoing damage. ### Habitat -- **ずんち / zunchi**: tarinai waste; affects disease and can fertilize grass. -- **ロボ掃除機 / robot_cleaner**: moves through the field at fixed normal speed 60, or 120 in high-speed mode. It checks the nearest matching cleanup target every 2 seconds, keeps pursuing it between scans, and cleans every matching object it touches. The 死骸 target also covers blood traces; clicking the item opens its target settings. -- **干草寝床 / bed**: placeable sleeping spot; helps HP recovery. -- **巣箱 / nest box**: reduces stress nearby; improves sleep quality when used. -- **ボール / ball**: toy that tarinai can play with and the player can poke. -- **看板 / signboard**: editable text object; inspect with observe after placing. +- **ずんち / zunchi**: tarinai waste; affects disease and can fertilize grass. +- **ロボ掃除機 / robot_cleaner**: moves through the field at fixed normal speed 60, or 120 in high-speed mode. It checks the nearest matching cleanup target every 2 seconds, keeps pursuing it between scans, and cleans every matching object it touches. The 死骸 target also covers blood traces; clicking the item opens its target settings. +- **干草寝床 / bed**: placeable sleeping spot; helps HP recovery. +- **巣箱 / nest box**: reduces stress nearby; improves sleep quality when used. +- **ボール / ball**: toy that tarinai can play with and the player can poke. +- **看板 / signboard**: editable text object; inspect with observe after placing. ### Physics -- **ヒモ / rope**: connect two targets with a flexible link. -- **棒 / rod**: connect two targets with a rigid link. -- **柵 / fence**: blocks tarinai movement; Q/E rotate by 45 degrees, Shift+Q/E by 5 degrees. -- **バウンス柵 / bounce fence**: fence that rebounds things that hit it. -- **ゲート柵 / gate fence**: click to open or close. -- **回転体 / rotator**: custom mechanical shape that rotates; click to edit shape and speed. -- **毒ブロック / poison block**: custom hazard block; touching it damages skin; click to edit shape. -- **往復体 / reciprocator**: custom mechanical shape that moves back and forth; click to edit shape and speed. +- **ヒモ / rope**: connect two targets with a flexible link. +- **棒 / rod**: connect two targets with a rigid link. +- **柵 / fence**: blocks tarinai movement; Q/E rotate by 45 degrees, Shift+Q/E by 5 degrees. +- **バウンス柵 / bounce fence**: fence that rebounds things that hit it. +- **ゲート柵 / gate fence**: click to open or close. +- **回転体 / rotator**: custom mechanical shape that rotates; click to edit shape and speed. +- **毒ブロック / poison block**: custom hazard block; touching it damages skin; click to edit shape. +- **往復体 / reciprocator**: custom mechanical shape that moves back and forth; click to edit shape and speed. ### Danger -- **石 / stone**: heavy object; dangerous when dropped or moved into others. -- **げんこつ / genkotsu**: large fist impact on the ground. -- **爆竹 / firecracker**: creates an explosion. -- **画鋲 / pushpin**: rolls when dropped; can lodge in tarinai and cause panic plus continuous damage. -- **おしり鋲 / oshibyo**: blocks zunchi when lodged; pulling it out releases stored zunchi. -- **射撃 / shoot**: attacks with a gun effect. -- **アリの巣 / ant nest**: spawns ants that search for tarinai and carry them to the nest. +- **石 / stone**: heavy object; dangerous when dropped or moved into others. +- **げんこつ / genkotsu**: large fist impact on the ground. +- **爆竹 / firecracker**: creates an explosion. +- **画鋲 / pushpin**: rolls when dropped; can lodge in tarinai and cause panic plus continuous damage. +- **おしり鋲 / oshibyo**: blocks zunchi when lodged; pulling it out releases stored zunchi. +- **射撃 / shoot**: attacks with a gun effect. +- **アリの巣 / ant nest**: spawns ants that search for tarinai and carry them to the nest. ## Tarinai Needs And Stats diff --git a/README.md b/README.md index 51fe40e..a473d5e 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ AI-first entrypoint for a static browser simulation/game. Keep this file small; read deeper docs only when needed. ## v39.15.70 robot cleaner tuning -- Tuned ロボ掃除機 targeting: normal speed is 60, high-speed mode is 120, and speed no longer changes based on the selected cleanup targets. +- Tuned ロボ掃除機 targeting: normal speed is 60, high-speed mode is 120, and speed no longer changes based on the selected cleanup targets. - The cleaner checks the nearest matching target every 2 seconds, then keeps trying to clean that target between scans. Contact cleanup still removes every matching object it touches. -- The 死骸 target also covers blood traces. When たりない is enabled, nearby Tarinai panic while chased and are cleaned on contact. +- The 死骸 target also covers blood traces. When たりない is enabled, nearby Tarinai panic while chased and are cleaned on contact. ## Read Strategy @@ -18,7 +18,7 @@ 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.47`. +- No bundler; `index.html` loads ordered global-IIFE scripts with `?v=39.15.92`. - 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`. @@ -57,7 +57,7 @@ AI-first entrypoint for a static browser simulation/game. Keep this file small; - Inventory sanity: `powershell -NoProfile -ExecutionPolicy Bypass -File scripts/ai_inventory.ps1 -All` -## v39.15.47 UI media isolation / scroll repair +## UI media isolation / scroll repair - PC / smartphone UI override rules are separated into `@media (min-width: 981px)` and `@media (max-width: 980px)`. - PC family tree card is restored below the main game layout, not inside the right menu. @@ -65,7 +65,7 @@ AI-first entrypoint for a static browser simulation/game. Keep this file small; - Auto-scroll does not open collapsed cards. -## v39.15.47 event/family/oshibyo UI fixes +## Event/family/oshibyo UI fixes - Event UI hides direct player item placement records while keeping those records in the internal log. - Collapsed Event UI no longer leaves a large blank area from the log-card min-height. @@ -73,14 +73,14 @@ AI-first entrypoint for a static browser simulation/game. Keep this file small; - Oshibyo lodged position is anchored to the left side of the tarinai sprite. -## v39.15.47 family polish +## Family polish - Family tree generation row spacing is tightened. - Family tree personality tags also use a 2x2 grid (up to 4 visible tags). - Sprinkler effective cleaning radius is increased to 3x the previous value and still filters targets by actual distance. -## v39.15.47 owned object panic / shoot effect +## Owned object panic / shoot effect - Tarinai panic when their own plushie or simple grass bed is destroyed. - The selected Tarinai data behavior text explicitly shows the owned-object panic reason. diff --git a/app_manifest.json b/app_manifest.json index 0e1a0fe..131aa90 100644 --- a/app_manifest.json +++ b/app_manifest.json @@ -1,5 +1,5 @@ { - "version": "39.15.90", + "version": "39.15.98", "css": [ "css/base.css", "css/layout.css", @@ -155,14 +155,5 @@ "js/ui_family_render.js", "js/main.js", "js/debug_tools.js" - ], - "assetGlobs": [ - "assets/ui/*.webp", - "assets/objects/*.webp", - "assets/sprites/*.webp", - "assets/sounds/*.wav", - "assets/sounds/*.mp3", - "assets/objects/*.png" - ], - "notes": "Boundary cleanup v38: freezer removed, washing expanded and continuous, laboratory ground added, and save schema synchronized." + ] } diff --git a/css/base.css b/css/base.css index ed57595..176ffbc 100644 --- a/css/base.css +++ b/css/base.css @@ -85,15 +85,17 @@ button { .topbar { display: flex; justify-content: space-between; - gap: 18px; + gap: 14px; align-items: center; + flex-wrap: nowrap; margin-bottom: 16px; } .top-left { display: flex; align-items: center; - gap: 12px; + gap: 10px; + flex: 1 1 auto; min-width: 0; } @@ -121,16 +123,19 @@ h1 { .top-actions { display: flex; - gap: 8px; - flex-wrap: wrap; + gap: 6px; + flex: 0 0 auto; + flex-wrap: nowrap; justify-content: flex-end; + align-items: center; + white-space: nowrap; } .btn, .tool { border: 1px solid var(--line); background: rgba(255,255,255,0.76); border-radius: 999px; - padding: 9px 13px; + padding: 8px 11px; cursor: pointer; box-shadow: 0 4px 14px rgba(80,60,40,0.06); transition: transform 130ms ease, background 130ms ease, border-color 130ms ease; @@ -448,15 +453,15 @@ h1 { .tool[data-tool="oshibyo"] { --tool-icon: url("../assets/ui/tool_oshibyo.webp"); } /* Generated parameter item tool icons. */ -.tool[data-tool="laxative"] { --tool-icon: url("../assets/ui/tool_laxative.webp?v=15.20.16"); } -.tool[data-tool="protein"] { --tool-icon: url("../assets/ui/tool_protein.webp?v=15.20.16"); } -.tool[data-tool="niteropu"] { --tool-icon: url("../assets/ui/tool_niteropu.webp?v=15.20.16"); } -.tool[data-tool="ammo"] { --tool-icon: url("../assets/ui/tool_ammo.webp?v=15.20.16"); } -.tool[data-tool="mystery_drug"] { --tool-icon: url("../assets/ui/tool_mystery_drug.webp?v=15.20.16"); } -.tool[data-tool="mercury"] { --tool-icon: url("../assets/ui/tool_mercury.webp?v=15.20.16"); } -.tool[data-tool="giant_drug"] { --tool-icon: url("../assets/ui/tool_giant_drug.webp?v=15.20.16"); } -.tool[data-tool="dwarf_drug"] { --tool-icon: url("../assets/ui/tool_dwarf_drug.webp?v=15.20.16"); } -.tool[data-tool="zunda_juice"] { --tool-icon: url("../assets/ui/tool_zunda_juice.webp?v=15.20.16"); } +.tool[data-tool="laxative"] { --tool-icon: url("../assets/ui/tool_laxative.webp?v=39.15.92"); } +.tool[data-tool="protein"] { --tool-icon: url("../assets/ui/tool_protein.webp?v=39.15.92"); } +.tool[data-tool="niteropu"] { --tool-icon: url("../assets/ui/tool_niteropu.webp?v=39.15.92"); } +.tool[data-tool="ammo"] { --tool-icon: url("../assets/ui/tool_ammo.webp?v=39.15.92"); } +.tool[data-tool="mystery_drug"] { --tool-icon: url("../assets/ui/tool_mystery_drug.webp?v=39.15.92"); } +.tool[data-tool="mercury"] { --tool-icon: url("../assets/ui/tool_mercury.webp?v=39.15.92"); } +.tool[data-tool="giant_drug"] { --tool-icon: url("../assets/ui/tool_giant_drug.webp?v=39.15.92"); } +.tool[data-tool="dwarf_drug"] { --tool-icon: url("../assets/ui/tool_dwarf_drug.webp?v=39.15.92"); } +.tool[data-tool="zunda_juice"] { --tool-icon: url("../assets/ui/tool_zunda_juice.webp?v=39.15.92"); } .signboard-editor { diff --git a/css/components.css b/css/components.css index 49fbfb5..df2d727 100644 --- a/css/components.css +++ b/css/components.css @@ -17,7 +17,7 @@ backdrop-filter: blur(1px); text-shadow: 0 1px 3px rgba(25, 18, 12, 0.55); pointer-events: none; - white-space: normal; + white-space: pre-line; overflow-wrap: anywhere; word-break: break-word; } @@ -643,6 +643,60 @@ font-size: 12px; line-height: 1.45; } +.visual-settings-dialog-panel { + width: min(560px, calc(100vw - 32px)); +} +.visual-setting-row { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 12px; + align-items: center; + padding: 12px 0; + border-top: 1px solid rgba(115, 91, 62, 0.16); +} +.visual-setting-row strong, +.visual-setting-row span { + display: block; +} +.visual-setting-row strong { + color: #4f3928; + font-size: 15px; +} +.visual-setting-row span { + margin-top: 3px; + color: #6d5a46; + font-size: 12px; +} +.visual-setting-options { + display: inline-flex; + gap: 5px; + padding: 4px; + border: 1px solid rgba(115, 91, 62, 0.18); + border-radius: 999px; + background: rgba(255, 255, 255, 0.50); +} +.visual-setting-options button { + min-width: 46px; + min-height: 32px; + border: 1px solid transparent; + border-radius: 999px; + background: transparent; + color: #5d4938; + cursor: pointer; + font: inherit; + font-weight: 800; +} +.visual-setting-options button.active, +.visual-setting-options button[aria-pressed="true"] { + border-color: rgba(127, 94, 54, 0.28); + background: #fff4d8; + color: #3f3023; + box-shadow: 0 2px 8px rgba(96, 70, 40, 0.12); +} +.visual-setting-options button:focus-visible { + outline: 2px solid rgba(184, 128, 54, 0.45); + outline-offset: 2px; +} @media (max-width: 640px) { .save-slot-row { grid-template-columns: 1fr; @@ -650,6 +704,16 @@ .save-slot-actions { justify-content: flex-start; } + .visual-setting-row { + grid-template-columns: 1fr; + } + .visual-setting-options { + width: 100%; + justify-content: stretch; + } + .visual-setting-options button { + flex: 1 1 0; + } } .ground-stat { @@ -738,7 +802,7 @@ } } -/* v39.15.47: collapsed event card must shrink to its header. +/* Collapsed event card must shrink to its header. layout.css gives .log-card a min-height, which left a large blank panel when folded. */ .collapsible-card.collapsed { min-height: 0 !important; } .log-card.collapsed { min-height: 0 !important; height: auto !important; flex: 0 0 auto !important; flex-basis: auto !important; } diff --git a/css/mobile.css b/css/mobile.css index dd123e7..63a3603 100644 --- a/css/mobile.css +++ b/css/mobile.css @@ -362,18 +362,18 @@ body.touch-mobile-ui .tool-tip-popover { } -/* v39.15.47: desktop rollback guard. Keep the normal PC layout; only remove duplicated quick-scroll buttons. */ +/* Desktop rollback guard. Keep the normal PC layout; only remove duplicated quick-scroll buttons. */ @media (min-width: 981px) { .topbar { display: flex; align-items: center; justify-content: space-between; - flex-wrap: wrap; - gap: 14px 18px; + flex-wrap: nowrap; + gap: 12px; } .top-left { - flex: 1 0 auto; - min-width: max-content; + flex: 1 1 auto; + min-width: 0; max-width: 100%; } .brand, @@ -386,19 +386,26 @@ body.touch-mobile-ui .tool-tip-popover { text-overflow: clip !important; } .top-actions { - flex: 1 1 560px; + flex: 0 0 auto; margin-left: auto; justify-content: flex-end; align-items: center; - gap: 10px; + flex-wrap: nowrap; + gap: 6px; + white-space: nowrap; } .top-actions .btn, .top-actions .sound-menu-btn, .room-link { - min-height: 42px; - padding: 10px 16px; - font-size: 13px; - line-height: 1.15; + min-height: 38px; + padding: 8px 10px; + font-size: 12px; + line-height: 1.12; + } + .room-link { + max-width: 180px; + overflow: hidden; + text-overflow: ellipsis; } .panel-quick-tabs { grid-template-columns: repeat(5, minmax(0, 1fr)); @@ -408,7 +415,7 @@ body.touch-mobile-ui .tool-tip-popover { } } -/* v39.15.47: PC / smartphone UI isolation. All override UI placement is scoped by width. */ +/* PC / smartphone UI isolation. All override UI placement is scoped by width. */ @media (min-width: 981px) { html, body { @@ -424,12 +431,12 @@ body.touch-mobile-ui .tool-tip-popover { display: flex; align-items: center; justify-content: space-between; - flex-wrap: wrap; - gap: 14px 18px; + flex-wrap: nowrap; + gap: 12px; } .top-left { - flex: 1 0 auto; - min-width: max-content; + flex: 1 1 auto; + min-width: 0; max-width: 100%; } .brand, @@ -442,19 +449,26 @@ body.touch-mobile-ui .tool-tip-popover { text-overflow: clip !important; } .top-actions { - flex: 1 1 560px; + flex: 0 0 auto; margin-left: auto; justify-content: flex-end; align-items: center; - gap: 10px; + flex-wrap: nowrap; + gap: 6px; + white-space: nowrap; } .top-actions .btn, .top-actions .sound-menu-btn, .room-link { - min-height: 42px; - padding: 10px 16px; - font-size: 13px; - line-height: 1.15; + min-height: 38px; + padding: 8px 10px; + font-size: 12px; + line-height: 1.12; + } + .room-link { + max-width: 180px; + overflow: hidden; + text-overflow: ellipsis; } .layout { display: grid; diff --git a/css/panel.css b/css/panel.css index 80cfa3e..e14e3fd 100644 --- a/css/panel.css +++ b/css/panel.css @@ -157,7 +157,7 @@ body::before { box-shadow: inset 0 0 0 1px rgba(247, 200, 64, 0.30), 0 3px 8px rgba(120, 78, 12, 0.09); } .lineage-family-tree .tree-node.champion::before { - content: "♛"; + content: "\265B "; position: absolute; right: 6px; top: 4px; @@ -488,3 +488,31 @@ body::before { .lineage-family-tree .tree-node .family-copy > span:not(.family-personality-tags) { max-width: 100% !important; } + + +/* v39.15.92: keep personality tags inside the family-tree node bottom edge. */ +.lineage-family-tree .tree-node { + overflow: hidden !important; +} +.lineage-family-tree .tree-node .family-copy { + position: static !important; +} +.lineage-family-tree .tree-node .family-copy > .family-personality-tags { + position: absolute !important; + left: 7px !important; + right: 7px !important; + bottom: 5px !important; + width: auto !important; + max-width: none !important; + height: 26px !important; + max-height: 26px !important; + margin: 0 !important; + grid-auto-rows: 12px !important; + gap: 1px 3px !important; + z-index: 3 !important; +} +.lineage-family-tree .tree-node .family-personality-tags em { + height: 12px !important; + line-height: 10px !important; + font-size: 7px !important; +} diff --git a/index.html b/index.html index 30ac200..3665853 100644 --- a/index.html +++ b/index.html @@ -7,11 +7,11 @@ - - - - - + + + + +
@@ -48,6 +48,7 @@
+ @@ -102,8 +103,8 @@
状態安定
地面
-
-
気温10℃
+
+
気温10℃
@@ -182,6 +183,39 @@ + + + +