CREATE TABLE IF NOT EXISTS cosmetics ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, type VARCHAR(20) NOT NULL CHECK (type IN ('hat','outfit','accessory')), unlock_level INTEGER NOT NULL, css_data JSONB NOT NULL DEFAULT '{}' ); CREATE TABLE IF NOT EXISTS player_cosmetics ( id SERIAL PRIMARY KEY, cosmetic_id INTEGER NOT NULL REFERENCES cosmetics(id) ON DELETE CASCADE UNIQUE, equipped BOOLEAN NOT NULL DEFAULT FALSE, unlocked_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() ); INSERT INTO cosmetics (name, type, unlock_level, css_data) VALUES ('Chapéu de Aventureiro', 'hat', 2, '{"color":"#8B4513","accent":"#d4a85a"}'), ('Roupa de Marinheiro', 'outfit', 3, '{"primary":"#1e3a5f","accent":"#ffffff"}'), ('Óculos de Sol', 'accessory', 4, '{"color":"#1a1a1a"}'), ('Chapéu de Capitão', 'hat', 5, '{"color":"#1e293b","badge":"#ffd700"}'), ('Roupa Dourada', 'outfit', 7, '{"primary":"#d4af37","accent":"#ffd700"}'), ('Coroa de Campeão', 'hat', 10, '{"color":"#ffd700","gems":"#e11d48"}') ON CONFLICT DO NOTHING; INSERT INTO schema_migrations (version) VALUES (8) ON CONFLICT DO NOTHING;