diff --git a/FILES.json b/FILES.json index 61b1ba9..89f458d 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.75", + "version": "39.15.77", "entrypoints": { "app": "index.html", "runtime": "js/main.js", diff --git a/app_manifest.json b/app_manifest.json index 86a315a..ebe8554 100644 --- a/app_manifest.json +++ b/app_manifest.json @@ -1,5 +1,5 @@ { - "version": "39.15.75", + "version": "39.15.84", "css": [ "css/base.css", "css/layout.css", diff --git a/assets/sounds/voice_008_temperature_buruburu.wav b/assets/sounds/voice_008_temperature_buruburu.wav new file mode 100644 index 0000000..fbf4666 Binary files /dev/null and b/assets/sounds/voice_008_temperature_buruburu.wav differ diff --git a/assets/sounds/voice_009_temperature_achui.wav b/assets/sounds/voice_009_temperature_achui.wav new file mode 100644 index 0000000..6870f41 Binary files /dev/null and b/assets/sounds/voice_009_temperature_achui.wav differ diff --git a/assets/sprites/tarinai_34_hot_01.webp b/assets/sprites/tarinai_34_hot_01.webp new file mode 100644 index 0000000..2c8eebd Binary files /dev/null and b/assets/sprites/tarinai_34_hot_01.webp differ diff --git a/assets/sprites/tarinai_35_hot_02.webp b/assets/sprites/tarinai_35_hot_02.webp new file mode 100644 index 0000000..68d341f Binary files /dev/null and b/assets/sprites/tarinai_35_hot_02.webp differ diff --git a/assets/sprites/tarinai_36_hot_03.webp b/assets/sprites/tarinai_36_hot_03.webp new file mode 100644 index 0000000..ab1d668 Binary files /dev/null and b/assets/sprites/tarinai_36_hot_03.webp differ diff --git a/assets/sprites/tarinai_37_cold_01.webp b/assets/sprites/tarinai_37_cold_01.webp new file mode 100644 index 0000000..7ce7782 Binary files /dev/null and b/assets/sprites/tarinai_37_cold_01.webp differ diff --git a/assets/sprites/tarinai_38_cold_02.webp b/assets/sprites/tarinai_38_cold_02.webp new file mode 100644 index 0000000..f412a10 Binary files /dev/null and b/assets/sprites/tarinai_38_cold_02.webp differ diff --git a/assets/sprites/tarinai_39_cold_03.webp b/assets/sprites/tarinai_39_cold_03.webp new file mode 100644 index 0000000..b747187 Binary files /dev/null and b/assets/sprites/tarinai_39_cold_03.webp differ diff --git a/css/base.css b/css/base.css index 0952812..ed57595 100644 --- a/css/base.css +++ b/css/base.css @@ -214,9 +214,30 @@ h1 { color: var(--ink); } .field-choice:hover { border-color: rgba(112,178,66,0.45); } +.field-choice.active, +.field-choice[aria-pressed="true"] { + border-color: rgba(112,178,66,0.72); + box-shadow: 0 0 0 2px rgba(112,178,66,0.18), inset 0 0 0 1px rgba(255,255,255,0.64); + background: linear-gradient(180deg, rgba(248,255,240,0.96), rgba(231,246,210,0.82)); +} .field-choice strong, .field-choice span { display: block; } .field-choice strong { font-size: 15px; } .field-choice span { margin-top: 4px; color: var(--muted); font-size: 12px; } +.field-dialog-lead { + margin: -4px 0 12px; + color: var(--muted); + font-size: 12px; + line-height: 1.5; +} +.field-dialog-section-title { + margin: 12px 0 7px; + font-size: 12px; + font-weight: 700; + color: rgba(75,62,43,0.78); +} +.reset-dialog-panel { width: min(760px, 100%); } +.reset-preset-choice-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); } +.reset-preset-choice-grid .field-choice { min-height: 66px; padding: 7px 5px; } .field-dialog-actions { margin-top: 12px; display: flex; diff --git a/css/components.css b/css/components.css index 7a20e67..512dbb1 100644 --- a/css/components.css +++ b/css/components.css @@ -743,3 +743,37 @@ .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; } .log-card.collapsed .panel-card-body { display: none !important; } + + +.temperature-control { + margin: 10px 0 2px; + padding: 10px 11px 11px; + border: 1px solid rgba(118, 92, 61, 0.16); + border-radius: 14px; + background: rgba(255, 251, 244, 0.56); +} +.temperature-control-head { + display: flex; + align-items: center; + gap: 8px; + font-size: 12px; + color: rgba(68, 55, 41, 0.84); +} +.temperature-control-head strong { + margin-left: auto; + font-size: 15px; +} +.temperature-auto { + display: inline-flex; + align-items: center; + gap: 4px; + margin-left: 4px; + user-select: none; +} +.temperature-slider { + width: 100%; + margin-top: 8px; +} +.temperature-slider:disabled { + opacity: 0.52; +} diff --git a/css/layout.css b/css/layout.css index c5eb8dd..ed5e7b7 100644 --- a/css/layout.css +++ b/css/layout.css @@ -325,6 +325,7 @@ meter { #gameCanvas { height: var(--field-mobile-height, 66vh); min-height: var(--field-mobile-min-height, 460px); } .stage-wrap { min-height: var(--field-mobile-min-height, 460px); } .field-choice-grid { grid-template-columns: 1fr; } + .reset-preset-choice-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } diff --git a/css/panel.css b/css/panel.css index caa34bc..1843516 100644 --- a/css/panel.css +++ b/css/panel.css @@ -187,14 +187,14 @@ body::before { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: minmax(13px, auto); align-items: stretch; - overflow: visible !important; - text-overflow: clip !important; - gap: 2px 3px; + gap: 2px 4px; margin-top: 2px; + max-width: 84px; + width: 84px; + max-height: 34px; + overflow: hidden !important; + text-overflow: clip !important; white-space: normal !important; - max-height: none; - max-width: 100%; - width: 100%; } .family-personality-tags em { display: flex; @@ -210,32 +210,245 @@ body::before { font-size: 8.2px; font-style: normal; line-height: 1.18; - overflow: visible; - text-overflow: clip; - white-space: normal; - overflow-wrap: anywhere; - word-break: keep-all; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .tool[data-tip] { position: relative; } -.lineage-family-tree .tree-node .family-copy { - max-width: calc(100% - 8px); + + +.lineage-family-tree .lineage-tree-panel { + position: relative; + overflow: visible; + min-width: 360px; + margin-top: 6px; + border-radius: 14px; + background: + linear-gradient(90deg, rgba(84,68,48,0.045) 1px, transparent 1px), + linear-gradient(180deg, rgba(84,68,48,0.040) 1px, transparent 1px), + rgba(255,250,244,0.48); + background-size: 34px 34px, 34px 34px, auto; + border: 1px solid rgba(84,68,48,0.10); +} +.lineage-family-tree .lineage-links { + position: absolute; + inset: 0; width: 100%; + height: 100%; + overflow: visible; + pointer-events: none; + z-index: 1; + isolation: isolate; +} +.lineage-actions { + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; + justify-content: flex-end; +} +.btn.active { + background: #efffde; + border-color: rgba(103,178,44,0.46); + font-weight: 700; +} +.lineage-render-status { + position: sticky; + top: 0; + left: 0; + z-index: 6; + width: max-content; + margin: 0 0 8px; + padding: 6px 10px; + border-radius: 999px; + font-size: 12px; + color: var(--muted); + background: rgba(255,255,255,0.88); + border: 1px solid rgba(84,68,48,0.10); + box-shadow: 0 4px 10px rgba(64,48,32,0.06); +} +.lineage-stale-status { + position: sticky; + top: 0; + left: 0; + z-index: 6; + width: max-content; + max-width: calc(100% - 12px); + margin: 0 0 8px; + padding: 6px 10px; + border-radius: 999px; + font-size: 12px; + color: rgba(92, 75, 52, 0.82); + background: rgba(255, 249, 232, 0.92); + border: 1px solid rgba(150, 115, 46, 0.16); + box-shadow: 0 4px 10px rgba(64,48,32,0.05); +} +.lineage-family-tree .lineage-links path { + fill: none; + stroke: rgba(107, 88, 61, 0.58); + stroke-width: 2; + stroke-linecap: round; + stroke-linejoin: round; +} +.lineage-family-tree .lineage-links .partner-link { + stroke-width: 2.4; + stroke: rgba(98, 80, 56, 0.68); + stroke-dasharray: 5 4; +} +.lineage-family-tree .lineage-links .child-link { + stroke-width: 2; + stroke: rgba(107, 88, 61, 0.58); +} +.lineage-family-tree .tree-node { + position: absolute; + width: 150px; + height: 104px; + min-height: 104px; + box-sizing: border-box; + align-items: flex-start; + background: linear-gradient(180deg, #fffdf8, #f8f1e5); + box-shadow: 0 2px 5px rgba(64,48,32,0.035); + contain: layout paint style; + z-index: 2; + isolation: isolate; +} +.lineage-family-tree .tree-node.child { + border-color: rgba(103,178,44,0.34); +} +.lineage-family-tree .tree-node.dead { + opacity: 1; + filter: none; +} +.lineage-family-tree .tree-node[data-family-tarinai-id]:hover { + transform: none; +} +.lineage-family-tree .tree-node .family-portrait { + right: 4px; + top: 4px; + bottom: auto; + width: 48px; + height: 48px; +} +.lineage-family-tree .tree-generation-label { + position: absolute; + left: 10px; + width: 54px; + padding: 3px 0; + border-radius: 999px; + font-size: 11px; + color: var(--muted); + text-align: center; + background: rgba(255,255,255,0.70); + border: 1px solid rgba(84,68,48,0.08); + z-index: 2; +} +.lineage-family-tree .lineage-empty-family { + position: absolute; + left: 72px; + bottom: 8px; + padding: 5px 8px; + border-radius: 9px; + background: rgba(255,255,255,0.70); +} +.lineage-family-tree .tree-node .family-copy { + max-width: calc(100% - 46px); + width: auto; } .lineage-family-tree .tree-node .family-copy strong, .lineage-family-tree .tree-node .family-copy > span:not(.family-genetic-stats):not(.family-fight-stat):not(.family-personality-tags) { max-width: 100%; } - - .lineage-family-tree .tree-node .family-personality-tags { - max-width: 100%; - width: 100%; + max-width: 84px; + width: 84px; } .lineage-family-tree .tree-node .family-personality-tags em { - overflow: visible; - text-overflow: clip; - white-space: normal; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +@media (max-width: 720px) { + .lineage-main-content { + height: 70vh; + min-height: 420px; + max-height: none; + } +} + +/* Restored from the original ZIP: fixed colony graph/legend sizing. */ +.colony-card { overflow: visible; min-height: 0; flex: 0 0 auto; } +.colony-stats { + grid-template-columns: repeat(2, 1fr); + margin-bottom: 8px; +} +.colony-chart { + display: block; + width: 100%; + height: 188px; + min-height: 188px; + border: 1px solid rgba(84, 68, 48, 0.14); + border-radius: 14px; + background: linear-gradient(180deg, rgba(255,255,255,0.70), rgba(246,240,228,0.54)); + overflow: hidden; +} +.colony-card h2 { line-height: 1.45; margin-bottom: 10px; } +.colony-chart svg { display: block; width: 100%; height: 100%; } +.colony-chart-legend { + display: flex; + flex-wrap: wrap; + gap: 4px 8px; + align-items: center; + margin: 4px 0 8px; + font-size: 11px; + color: var(--muted); + line-height: 1.25; +} +.colony-chart-legend span { + display: inline-flex; + align-items: center; + gap: 4px; + white-space: nowrap; +} +.colony-chart-legend i { + width: 8px; + height: 8px; + border-radius: 999px; + display: inline-block; + box-shadow: 0 0 0 1px rgba(70, 52, 36, 0.10); +} + + +/* v9: keep 2x2 personality tags inside fixed family-tree nodes. */ +.lineage-family-tree .tree-node .family-personality-tags, +.family-personality-tags { + box-sizing: border-box !important; + display: grid !important; + grid-template-columns: repeat(2, minmax(0, 1fr)) !important; + grid-auto-rows: 13px !important; + gap: 2px 3px !important; + width: 86px !important; + max-width: 86px !important; + height: 28px !important; + max-height: 28px !important; + overflow: hidden !important; +} +.lineage-family-tree .tree-node .family-personality-tags em, +.family-personality-tags em { + box-sizing: border-box !important; + display: block !important; + width: 100% !important; + min-width: 0 !important; + max-width: 100% !important; + height: 13px !important; + padding: 1px 2px !important; + overflow: hidden !important; + text-overflow: ellipsis !important; + white-space: nowrap !important; + line-height: 11px !important; + font-size: 7.2px !important; + letter-spacing: -0.08em !important; + text-align: center !important; } diff --git a/index.html b/index.html index 0d8fa5a..e663d11 100644 --- a/index.html +++ b/index.html @@ -7,11 +7,11 @@ - - - - - + + + + +