diff --git a/lexicons/ai.syui.card.admin.json b/lexicons/ai.syui.card.admin.json index d459aa3..954e06b 100644 --- a/lexicons/ai.syui.card.admin.json +++ b/lexicons/ai.syui.card.admin.json @@ -6,24 +6,55 @@ "main": { "type": "record", "key": "literal:self", - "description": "Card game configuration (admin only)", + "description": "Card game configuration and master data (admin only)", "record": { "type": "object", - "required": ["card", "rate", "createdAt", "updatedAt"], + "required": ["gacha", "card", "createdAt", "updatedAt"], "properties": { - "card": { + "gacha": { "type": "object", - "required": ["pickup"], + "required": ["pickup", "rate"], "properties": { - "pickup": { "type": "integer", "description": "Pickup card ID" } + "pickup": { "type": "integer", "description": "Pickup card ID" }, + "rate": { + "type": "object", + "required": ["pickup", "rare"], + "properties": { + "pickup": { "type": "integer", "description": "1/n for pickup rate (100 = 1%)" }, + "rare": { "type": "integer", "description": "1/n for rare:1 rate (10 = 10%), rare:2 = 1/(n*10), rare:3 = 1/(n*100)" } + } + } } }, - "rate": { - "type": "object", - "required": ["pickup", "rare"], - "properties": { - "pickup": { "type": "integer", "description": "1/n for pickup rate (100 = 1%)" }, - "rare": { "type": "integer", "description": "1/n for rare:1 rate (10 = 10%), rare:2 = 1/(n*10), rare:3 = 1/(n*100)" } + "card": { + "type": "array", + "description": "Card master data", + "items": { + "type": "object", + "required": ["id", "character", "name", "text", "cp", "effect"], + "properties": { + "id": { "type": "integer", "description": "Card ID" }, + "character": { "type": "integer", "description": "Associated character ID" }, + "name": { + "type": "object", + "required": ["ja", "en"], + "properties": { + "ja": { "type": "string" }, + "en": { "type": "string" } + } + }, + "text": { + "type": "object", + "required": ["ja", "en"], + "properties": { + "ja": { "type": "string" }, + "en": { "type": "string" } + } + }, + "cp": { "type": "string", "description": "CP type (status, time, damage)" }, + "effect": { "type": "string", "description": "Effect type (status, fly, mode, damage)" }, + "key": { "type": "string", "description": "Key binding (R1, L1, Y, X, etc.)" } + } } }, "createdAt": { "type": "string", "format": "datetime" }, diff --git a/public/content/did:plc:6qyecktefllvenje24fcxnie/ai.syui.card.admin/self.json b/public/content/did:plc:6qyecktefllvenje24fcxnie/ai.syui.card.admin/self.json index 1e30891..aa910fe 100644 --- a/public/content/did:plc:6qyecktefllvenje24fcxnie/ai.syui.card.admin/self.json +++ b/public/content/did:plc:6qyecktefllvenje24fcxnie/ai.syui.card.admin/self.json @@ -18,8 +18,10 @@ { "id": 13, "character": 0, "name": { "ja": "創造", "en": "create" }, "text": { "ja": "アイは、自身の周囲に真空を作り出し、物理と属性の範囲ダメージを与える。的に与える属性ダメージは、このカードのcpを基準にアップする。", "en": "This card's CP is referenced for elemental damage" }, "cp": "damage", "effect": "damage", "key": "X" }, { "id": 100, "character": 1, "name": { "ja": "世界", "en": "world" }, "text": { "ja": "このカードのcpはキャラクターの基礎ステータスに参照される", "en": "This card's CP is referenced for the character's base status" }, "cp": "status", "effect": "status", "key": null }, { "id": 200, "character": 2, "name": { "ja": "d", "en": "d" }, "text": { "ja": "このカードのcpはキャラクターの基礎ステータスに参照される", "en": "This card's CP is referenced for the character's base status" }, "cp": "status", "effect": "status", "key": null }, + { "id": 201, "character": 2, "name": { "ja": "ドラゴン", "en": "dragon" }, "text": { "ja": "", "en": "" }, "cp": "skill", "effect": "skill", "key": null }, { "id": 300, "character": 3, "name": { "ja": "r", "en": "r" }, "text": { "ja": "このカードのcpはキャラクターの基礎ステータスに参照される", "en": "This card's CP is referenced for the character's base status" }, "cp": "status", "effect": "status", "key": null }, - { "id": 400, "character": 4, "name": { "ja": "c", "en": "c" }, "text": { "ja": "このカードのcpはキャラクターの基礎ステータスに参照される", "en": "This card's CP is referenced for the character's base status" }, "cp": "status", "effect": "status", "key": null } + { "id": 301, "character": 3, "name": { "ja": "ロボット", "en": "robot" }, "text": { "ja": "", "en": "" }, "cp": "skill", "effect": "skill", "key": null }, + { "id": 400, "character": 4, "name": { "ja": "c", "en": "c" }, "text": { "ja": "", "en": "This card's CP is referenced for the character's base status" }, "cp": "status", "effect": "status", "key": null } ], "createdAt": "2026-01-25T09:02:20.000Z", "updatedAt": "2026-01-25T09:02:20.000Z" diff --git a/src/web/styles/card.css b/src/web/styles/card.css index 67eec6b..cd2b3bd 100644 --- a/src/web/styles/card.css +++ b/src/web/styles/card.css @@ -554,24 +554,33 @@ max-width: 250px; } -/* RSE card grid (smaller cards below character) */ +/* RSE card grid (cards below character) */ .rse-card-grid { display: grid; - grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); - gap: 16px; + grid-template-columns: repeat(3, 1fr); + gap: 20px; width: 100%; - max-width: 500px; - padding: 16px; + max-width: 600px; + padding: 20px; background: rgba(128, 128, 128, 0.08); border-radius: 12px; } -.rse-card-grid .card-item { - max-width: 140px; +.rse-card-grid .card-wrapper { + max-width: 180px; } -.rse-card-grid .card-wrapper { - max-width: 140px; +.rse-card-grid .card-info-name { + font-size: 11px; +} + +.rse-card-grid .card-info-text { + font-size: 10px; +} + +.rse-card-grid .card-key-btn { + font-size: 9px; + padding: 2px 8px; } /* Card info (below card) */ @@ -607,11 +616,7 @@ .card-info-text { font-size: 11px; color: var(--text-secondary, #666); - line-height: 1.4; - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden; + line-height: 1.5; } .card-key-btn {