Login Incentives (#8230)
* feat(incentives): login bennies WIP * feat(content): incentive prize content WIP * fix(content): placeholders pass tests * WIP(content): Bard instrument placeholder * feat(content): Incentives build * chore(sprites): compile and fix some strings * WIP(incentives): quests and backgrounds * fix(quests): correct buy/launch handling * [WIP] Incentives rewarding (#8226) * Added login incentive rewards * Updated incentive rewards * Added incentive modal and updated notification structure * Added analytics to sleeping * Added login incentives to user analytics * Fixed unit tests and ensured that prizes are incremented and not replaced * Updated style of daily login incentive modal * Added rewards modal * Added translations * Added loigin incentive ui elements to profile * Updated login incentives structure and abstracted to common.content * Added dynamic display for login incentives on profile * Added purple potion image * Updated daily login modal * Fixed progress calculation * Added bard gear * Updated login incentive rewards * Fixed styles and text * Added multiple read for notifications * Fixed lint issues * Fixed styles and added 50 limit * Updated quest keys * Added login incentives reward page * Fixed tests * Fixed linting and tests * Read named notifications route. Add image for backgrounds * Fixed style issues and added tranlsations to login incentive notification * Hided abiltiy to purchase incentive backgrounds and added message to detail how to unlock * Updated awarded message * Fixed text and updated progress counter to display better * Fixed purple potion reward text * Fixed check in backgrouns reward text * fix(quest): pass tests * Added display of multiple rewards * Updated modal styles * Fixed neagtive 50 issue * Remvoed total count from daily login incentives modal * Fixed magic paw display * fix(awards): give bunnies again * WIP(incentives): more progress on BG shop * fix(incentives): actually award backgrounds * fix(incentives): more BG fixy * fix(backgrounds): don't gem-buy checkin bgs * Added dust bunny notification * fix(incentives): don't redisplay bunny award * chore(news): Bailey and different promo sprite
@@ -0,0 +1,26 @@
|
|||||||
|
import {
|
||||||
|
generateUser,
|
||||||
|
translate as t,
|
||||||
|
} from '../../../../helpers/api-v3-integration.helper';
|
||||||
|
import { v4 as generateUUID } from 'uuid';
|
||||||
|
|
||||||
|
describe('POST /notifications/:notificationId/read', () => {
|
||||||
|
let user;
|
||||||
|
|
||||||
|
before(async () => {
|
||||||
|
user = await generateUser();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('errors when notification is not found', async () => {
|
||||||
|
let dummyId = generateUUID();
|
||||||
|
await expect(user.post(`/notifications/${dummyId}/read`))
|
||||||
|
.to.eventually.be.rejected.and.eql({
|
||||||
|
code: 404,
|
||||||
|
error: 'NotFound',
|
||||||
|
message: t('messageNotificationNotFound'),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
xit('removes a notification', async () => {
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -278,6 +278,7 @@ describe('analyticsService', () => {
|
|||||||
todos: [{_id: 'todo'}],
|
todos: [{_id: 'todo'}],
|
||||||
rewards: [{_id: 'reward'}],
|
rewards: [{_id: 'reward'}],
|
||||||
balance: 12,
|
balance: 12,
|
||||||
|
loginIncentives: 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
data.user = user;
|
data.user = user;
|
||||||
@@ -302,6 +303,7 @@ describe('analyticsService', () => {
|
|||||||
contributorLevel: 1,
|
contributorLevel: 1,
|
||||||
subscription: 'foo-plan',
|
subscription: 'foo-plan',
|
||||||
balance: 12,
|
balance: 12,
|
||||||
|
loginIncentives: 1,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import { model as User } from '../../../../../website/server/models/user';
|
|||||||
import * as Tasks from '../../../../../website/server/models/task';
|
import * as Tasks from '../../../../../website/server/models/task';
|
||||||
import { clone } from 'lodash';
|
import { clone } from 'lodash';
|
||||||
import common from '../../../../../website/common';
|
import common from '../../../../../website/common';
|
||||||
|
import analytics from '../../../../../website/server/libs/analyticsService';
|
||||||
|
|
||||||
// const scoreTask = common.ops.scoreTask;
|
// const scoreTask = common.ops.scoreTask;
|
||||||
|
|
||||||
@@ -17,9 +18,6 @@ describe('cron', () => {
|
|||||||
let user;
|
let user;
|
||||||
let tasksByType = {habits: [], dailys: [], todos: [], rewards: []};
|
let tasksByType = {habits: [], dailys: [], todos: [], rewards: []};
|
||||||
let daysMissed = 0;
|
let daysMissed = 0;
|
||||||
let analytics = {
|
|
||||||
track: sinon.spy(),
|
|
||||||
};
|
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
user = new User({
|
user = new User({
|
||||||
@@ -34,11 +32,17 @@ describe('cron', () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
sinon.spy(analytics, 'track');
|
||||||
|
|
||||||
user._statsComputed = {
|
user._statsComputed = {
|
||||||
mp: 10,
|
mp: 10,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
analytics.track.restore();
|
||||||
|
});
|
||||||
|
|
||||||
it('updates user.preferences.timezoneOffsetAtLastCron', () => {
|
it('updates user.preferences.timezoneOffsetAtLastCron', () => {
|
||||||
let timezoneOffsetFromUserPrefs = 1;
|
let timezoneOffsetFromUserPrefs = 1;
|
||||||
|
|
||||||
@@ -59,6 +63,11 @@ describe('cron', () => {
|
|||||||
expect(user.flags.cronCount).to.be.greaterThan(cronCountBefore);
|
expect(user.flags.cronCount).to.be.greaterThan(cronCountBefore);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('calls analytics', () => {
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(analytics.track.callCount).to.equal(1);
|
||||||
|
});
|
||||||
|
|
||||||
describe('end of the month perks', () => {
|
describe('end of the month perks', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
user.purchased.plan.customerId = 'subscribedId';
|
user.purchased.plan.customerId = 'subscribedId';
|
||||||
@@ -257,6 +266,11 @@ describe('cron', () => {
|
|||||||
user.preferences.sleep = true;
|
user.preferences.sleep = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('calls analytics', () => {
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(analytics.track.callCount).to.equal(1);
|
||||||
|
});
|
||||||
|
|
||||||
it('clears user buffs', () => {
|
it('clears user buffs', () => {
|
||||||
user.stats.buffs = {
|
user.stats.buffs = {
|
||||||
str: 1,
|
str: 1,
|
||||||
@@ -656,9 +670,9 @@ describe('cron', () => {
|
|||||||
|
|
||||||
cron({user, tasksByType, daysMissed, analytics});
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
|
||||||
expect(user.notifications.length).to.equal(1);
|
expect(user.notifications.length).to.be.greaterThan(0);
|
||||||
expect(user.notifications[0].type).to.equal('CRON');
|
expect(user.notifications[1].type).to.equal('CRON');
|
||||||
expect(user.notifications[0].data).to.eql({
|
expect(user.notifications[1].data).to.eql({
|
||||||
hp: user.stats.hp - hpBefore,
|
hp: user.stats.hp - hpBefore,
|
||||||
mp: user.stats.mp - mpBefore,
|
mp: user.stats.mp - mpBefore,
|
||||||
});
|
});
|
||||||
@@ -675,13 +689,14 @@ describe('cron', () => {
|
|||||||
|
|
||||||
cron({user, tasksByType, daysMissed, analytics});
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
|
||||||
expect(user.notifications.length).to.equal(1);
|
expect(user.notifications.length).to.be.greaterThan(0);
|
||||||
expect(user.notifications[0].type).to.equal('CRON');
|
expect(user.notifications[1].type).to.equal('CRON');
|
||||||
expect(user.notifications[0].data).to.eql({
|
expect(user.notifications[1].data).to.eql({
|
||||||
hp: user.stats.hp - hpBefore1,
|
hp: user.stats.hp - hpBefore1,
|
||||||
mp: user.stats.mp - mpBefore1,
|
mp: user.stats.mp - mpBefore1,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let notifsBefore2 = user.notifications.length;
|
||||||
let hpBefore2 = user.stats.hp;
|
let hpBefore2 = user.stats.hp;
|
||||||
let mpBefore2 = user.stats.mp;
|
let mpBefore2 = user.stats.mp;
|
||||||
|
|
||||||
@@ -689,12 +704,14 @@ describe('cron', () => {
|
|||||||
|
|
||||||
cron({user, tasksByType, daysMissed, analytics});
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
|
||||||
expect(user.notifications.length).to.equal(1);
|
expect(user.notifications.length - notifsBefore2).to.equal(1);
|
||||||
expect(user.notifications[0].type).to.equal('CRON');
|
expect(user.notifications[1].type).to.not.equal('CRON');
|
||||||
expect(user.notifications[0].data).to.eql({
|
expect(user.notifications[2].type).to.equal('CRON');
|
||||||
|
expect(user.notifications[2].data).to.eql({
|
||||||
hp: user.stats.hp - hpBefore2 - (hpBefore2 - hpBefore1),
|
hp: user.stats.hp - hpBefore2 - (hpBefore2 - hpBefore1),
|
||||||
mp: user.stats.mp - mpBefore2 - (mpBefore2 - mpBefore1),
|
mp: user.stats.mp - mpBefore2 - (mpBefore2 - mpBefore1),
|
||||||
});
|
});
|
||||||
|
expect(user.notifications[1].type).to.not.equal('CRON');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -747,6 +764,178 @@ describe('cron', () => {
|
|||||||
expect(user.inbox.messages[messageId]).to.not.exist;
|
expect(user.inbox.messages[messageId]).to.not.exist;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('login incentives', () => {
|
||||||
|
it('increments incentive counter each cron', () => {
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(1);
|
||||||
|
user.lastCron = moment(new Date()).subtract({days: 1});
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('pushes a notification of the day\'s incentive each cron', () => {
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.notifications.length).to.be.greaterThan(1);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('increments loginIncentives by 1 even if days are skipped in between', () => {
|
||||||
|
daysMissed = 3;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('increments loginIncentives by 1 even if user has Dailies paused', () => {
|
||||||
|
user.preferences.sleep = true;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user bard robes if login incentive is 1', () => {
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(1);
|
||||||
|
expect(user.items.gear.owned.armor_special_bardRobes).to.eql(true);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user incentive backgrounds if login incentive is 2', () => {
|
||||||
|
user.loginIncentives = 1;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(2);
|
||||||
|
expect(user.purchased.background.blue).to.eql(true);
|
||||||
|
expect(user.purchased.background.green).to.eql(true);
|
||||||
|
expect(user.purchased.background.purple).to.eql(true);
|
||||||
|
expect(user.purchased.background.red).to.eql(true);
|
||||||
|
expect(user.purchased.background.yellow).to.eql(true);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user Bard Hat if login incentive is 3', () => {
|
||||||
|
user.loginIncentives = 2;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(3);
|
||||||
|
expect(user.items.gear.owned.head_special_bardHat).to.eql(true);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user RoyalPurple Hatching Potion if login incentive is 4', () => {
|
||||||
|
user.loginIncentives = 3;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(4);
|
||||||
|
expect(user.items.hatchingPotions.RoyalPurple).to.eql(1);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user a Chocolate, Meat and Pink Contton Candy if login incentive is 5', () => {
|
||||||
|
user.loginIncentives = 4;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(5);
|
||||||
|
|
||||||
|
expect(user.items.food.Chocolate).to.eql(1);
|
||||||
|
expect(user.items.food.Meat).to.eql(1);
|
||||||
|
expect(user.items.food.CottonCandyPink).to.eql(1);
|
||||||
|
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user moon quest if login incentive is 7', () => {
|
||||||
|
user.loginIncentives = 6;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(7);
|
||||||
|
expect(user.items.quests.moon1).to.eql(1);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user RoyalPurple Hatching Potion if login incentive is 10', () => {
|
||||||
|
user.loginIncentives = 9;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(10);
|
||||||
|
expect(user.items.hatchingPotions.RoyalPurple).to.eql(1);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user a Strawberry, Patato and Blue Contton Candy if login incentive is 14', () => {
|
||||||
|
user.loginIncentives = 13;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(14);
|
||||||
|
|
||||||
|
expect(user.items.food.Strawberry).to.eql(1);
|
||||||
|
expect(user.items.food.Potatoe).to.eql(1);
|
||||||
|
expect(user.items.food.CottonCandyBlue).to.eql(1);
|
||||||
|
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user a bard instrument if login incentive is 18', () => {
|
||||||
|
user.loginIncentives = 17;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(18);
|
||||||
|
expect(user.items.gear.owned.weapon_special_bardInstrument).to.eql(true);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user second moon quest if login incentive is 22', () => {
|
||||||
|
user.loginIncentives = 21;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(22);
|
||||||
|
expect(user.items.quests.moon2).to.eql(1);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user a RoyalPurple hatching potion if login incentive is 26', () => {
|
||||||
|
user.loginIncentives = 25;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(26);
|
||||||
|
expect(user.items.hatchingPotions.RoyalPurple).to.eql(1);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user Fish, Milk, Rotten Meat and Honey if login incentive is 30', () => {
|
||||||
|
user.loginIncentives = 29;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(30);
|
||||||
|
|
||||||
|
expect(user.items.food.Fish).to.eql(1);
|
||||||
|
expect(user.items.food.Milk).to.eql(1);
|
||||||
|
expect(user.items.food.RottenMeat).to.eql(1);
|
||||||
|
expect(user.items.food.Honey).to.eql(1);
|
||||||
|
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user a RoyalPurple hatching potion if login incentive is 35', () => {
|
||||||
|
user.loginIncentives = 34;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(35);
|
||||||
|
expect(user.items.hatchingPotions.RoyalPurple).to.eql(1);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user the third moon quest if login incentive is 40', () => {
|
||||||
|
user.loginIncentives = 39;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(40);
|
||||||
|
expect(user.items.quests.moon3).to.eql(1);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user a RoyalPurple hatching potion if login incentive is 45', () => {
|
||||||
|
user.loginIncentives = 44;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(45);
|
||||||
|
expect(user.items.hatchingPotions.RoyalPurple).to.eql(1);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('awards user a saddle if login incentive is 50', () => {
|
||||||
|
user.loginIncentives = 49;
|
||||||
|
cron({user, tasksByType, daysMissed, analytics});
|
||||||
|
expect(user.loginIncentives).to.eql(50);
|
||||||
|
expect(user.items.food.Saddle).to.eql(1);
|
||||||
|
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('recoverCron', () => {
|
describe('recoverCron', () => {
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ describe('Notification Controller', function() {
|
|||||||
let User = {
|
let User = {
|
||||||
user,
|
user,
|
||||||
readNotification: function noop () {},
|
readNotification: function noop () {},
|
||||||
|
readNotifications: function noop () {},
|
||||||
sync: userSync
|
sync: userSync
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
.promo_android {
|
.promo_android {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1558px -681px;
|
background-position: -1377px -151px;
|
||||||
width: 175px;
|
width: 175px;
|
||||||
height: 175px;
|
height: 175px;
|
||||||
}
|
}
|
||||||
.promo_backgrounds_armoire_201602 {
|
.promo_backgrounds_armoire_201602 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1299px -573px;
|
background-position: -306px -220px;
|
||||||
width: 141px;
|
width: 141px;
|
||||||
height: 294px;
|
height: 294px;
|
||||||
}
|
}
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
}
|
}
|
||||||
.promo_backtoschool {
|
.promo_backtoschool {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: 0px -1572px;
|
background-position: -1699px -900px;
|
||||||
width: 150px;
|
width: 150px;
|
||||||
height: 150px;
|
height: 150px;
|
||||||
}
|
}
|
||||||
@@ -78,10 +78,16 @@
|
|||||||
}
|
}
|
||||||
.promo_chairs_glasses {
|
.promo_chairs_glasses {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1805px 0px;
|
background-position: -1805px -176px;
|
||||||
width: 51px;
|
width: 51px;
|
||||||
height: 210px;
|
height: 210px;
|
||||||
}
|
}
|
||||||
|
.promo_checkin_incentives {
|
||||||
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
|
background-position: -1299px -573px;
|
||||||
|
width: 141px;
|
||||||
|
height: 294px;
|
||||||
|
}
|
||||||
.promo_classes_fall_2014 {
|
.promo_classes_fall_2014 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -643px -1313px;
|
background-position: -643px -1313px;
|
||||||
@@ -96,25 +102,25 @@
|
|||||||
}
|
}
|
||||||
.promo_classes_fall_2016 {
|
.promo_classes_fall_2016 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1558px -332px;
|
background-position: -1558px -295px;
|
||||||
width: 103px;
|
width: 103px;
|
||||||
height: 348px;
|
height: 348px;
|
||||||
}
|
}
|
||||||
.promo_contrib_spotlight_beffymaroo {
|
.promo_contrib_spotlight_beffymaroo {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1441px -573px;
|
background-position: -1558px -644px;
|
||||||
width: 114px;
|
width: 114px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.promo_contrib_spotlight_blade {
|
.promo_contrib_spotlight_blade {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1715px -1033px;
|
background-position: -1441px -661px;
|
||||||
width: 89px;
|
width: 89px;
|
||||||
height: 111px;
|
height: 111px;
|
||||||
}
|
}
|
||||||
.promo_contrib_spotlight_cantras {
|
.promo_contrib_spotlight_cantras {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1709px -1181px;
|
background-position: -1438px -868px;
|
||||||
width: 87px;
|
width: 87px;
|
||||||
height: 109px;
|
height: 109px;
|
||||||
}
|
}
|
||||||
@@ -126,7 +132,7 @@
|
|||||||
}
|
}
|
||||||
.promo_dilatoryDistress {
|
.promo_dilatoryDistress {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -1046px;
|
background-position: -930px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
@@ -144,37 +150,37 @@
|
|||||||
}
|
}
|
||||||
.promo_enchanted_armoire_201507 {
|
.promo_enchanted_armoire_201507 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1558px -1332px;
|
background-position: -1070px -1461px;
|
||||||
width: 217px;
|
width: 217px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_enchanted_armoire_201508 {
|
.promo_enchanted_armoire_201508 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -794px -1461px;
|
background-position: -1506px -1461px;
|
||||||
width: 180px;
|
width: 180px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_enchanted_armoire_201509 {
|
.promo_enchanted_armoire_201509 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -864px;
|
background-position: -748px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_enchanted_armoire_201511 {
|
.promo_enchanted_armoire_201511 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -734px -1022px;
|
background-position: -1016px -879px;
|
||||||
width: 122px;
|
width: 122px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_enchanted_armoire_201601 {
|
.promo_enchanted_armoire_201601 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -500px;
|
background-position: -384px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_floral_potions {
|
.promo_floral_potions {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1662px -332px;
|
background-position: -1699px -176px;
|
||||||
width: 105px;
|
width: 105px;
|
||||||
height: 273px;
|
height: 273px;
|
||||||
}
|
}
|
||||||
@@ -186,7 +192,7 @@
|
|||||||
}
|
}
|
||||||
.promo_habitica {
|
.promo_habitica {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1558px -857px;
|
background-position: -1699px 0px;
|
||||||
width: 175px;
|
width: 175px;
|
||||||
height: 175px;
|
height: 175px;
|
||||||
}
|
}
|
||||||
@@ -204,205 +210,205 @@
|
|||||||
}
|
}
|
||||||
.promo_haunted_hair {
|
.promo_haunted_hair {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -734px -884px;
|
background-position: -1558px -1087px;
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 137px;
|
height: 137px;
|
||||||
}
|
}
|
||||||
.promo_item_notif {
|
.promo_item_notif {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -326px -1461px;
|
background-position: -820px -1461px;
|
||||||
width: 249px;
|
width: 249px;
|
||||||
height: 102px;
|
height: 102px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201405 {
|
.promo_mystery_201405 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -955px;
|
background-position: -839px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201406 {
|
.promo_mystery_201406 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -312px;
|
background-position: -593px -884px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 96px;
|
height: 96px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201407 {
|
.promo_mystery_201407 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1805px -412px;
|
background-position: -968px -884px;
|
||||||
width: 42px;
|
width: 42px;
|
||||||
height: 62px;
|
height: 62px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201408 {
|
.promo_mystery_201408 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1734px -939px;
|
background-position: -1470px -1210px;
|
||||||
width: 60px;
|
width: 60px;
|
||||||
height: 71px;
|
height: 71px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201409 {
|
.promo_mystery_201409 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -591px;
|
background-position: -475px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201410 {
|
.promo_mystery_201410 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1016px -1027px;
|
background-position: -1174px -1114px;
|
||||||
width: 72px;
|
width: 72px;
|
||||||
height: 63px;
|
height: 63px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201411 {
|
.promo_mystery_201411 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -409px;
|
background-position: -293px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201412 {
|
.promo_mystery_201412 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1805px -345px;
|
background-position: -1499px -498px;
|
||||||
width: 42px;
|
width: 42px;
|
||||||
height: 66px;
|
height: 66px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201501 {
|
.promo_mystery_201501 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1805px -211px;
|
background-position: -1819px -1347px;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 63px;
|
height: 63px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201502 {
|
.promo_mystery_201502 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -1137px;
|
background-position: -1021px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201503 {
|
.promo_mystery_201503 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -682px;
|
background-position: -566px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201504 {
|
.promo_mystery_201504 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -875px -1032px;
|
background-position: -1637px -1313px;
|
||||||
width: 60px;
|
width: 60px;
|
||||||
height: 69px;
|
height: 69px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201505 {
|
.promo_mystery_201505 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -773px;
|
background-position: -657px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201506 {
|
.promo_mystery_201506 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1805px -275px;
|
background-position: -1819px -1411px;
|
||||||
width: 42px;
|
width: 42px;
|
||||||
height: 69px;
|
height: 69px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201507 {
|
.promo_mystery_201507 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px 0px;
|
background-position: -875px -988px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 105px;
|
height: 105px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201508 {
|
.promo_mystery_201508 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -459px -1572px;
|
background-position: -593px -981px;
|
||||||
width: 93px;
|
width: 93px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201509 {
|
.promo_mystery_201509 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -1410px;
|
background-position: -1294px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201510 {
|
.promo_mystery_201510 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -553px -1572px;
|
background-position: -452px -884px;
|
||||||
width: 93px;
|
width: 93px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201511 {
|
.promo_mystery_201511 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -1501px;
|
background-position: -1385px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201512 {
|
.promo_mystery_201512 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1734px -857px;
|
background-position: -1813px -1495px;
|
||||||
width: 60px;
|
width: 60px;
|
||||||
height: 81px;
|
height: 81px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201601 {
|
.promo_mystery_201601 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -452px -884px;
|
background-position: -1016px -970px;
|
||||||
width: 120px;
|
width: 120px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201602 {
|
.promo_mystery_201602 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -1683px;
|
background-position: -1567px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201603 {
|
.promo_mystery_201603 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -1228px;
|
background-position: -1112px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201604 {
|
.promo_mystery_201604 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -647px -1572px;
|
background-position: -452px -975px;
|
||||||
width: 93px;
|
width: 93px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201605 {
|
.promo_mystery_201605 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -1592px;
|
background-position: -1476px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201606 {
|
.promo_mystery_201606 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -106px;
|
background-position: -734px -884px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 105px;
|
height: 105px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201607 {
|
.promo_mystery_201607 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -1319px;
|
background-position: -1203px -1627px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201608 {
|
.promo_mystery_201608 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -741px -1572px;
|
background-position: -1543px -1313px;
|
||||||
width: 93px;
|
width: 93px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201609 {
|
.promo_mystery_201609 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -835px -1572px;
|
background-position: -199px -1627px;
|
||||||
width: 93px;
|
width: 93px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201610 {
|
.promo_mystery_201610 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1734px -681px;
|
background-position: -1658px -1627px;
|
||||||
width: 63px;
|
width: 63px;
|
||||||
height: 84px;
|
height: 84px;
|
||||||
}
|
}
|
||||||
.promo_mystery_201611 {
|
.promo_mystery_201611 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1857px -212px;
|
background-position: -734px -990px;
|
||||||
width: 90px;
|
width: 90px;
|
||||||
height: 99px;
|
height: 99px;
|
||||||
}
|
}
|
||||||
.promo_mystery_3014 {
|
.promo_mystery_3014 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -576px -1461px;
|
background-position: -1288px -1461px;
|
||||||
width: 217px;
|
width: 217px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
@@ -414,13 +420,13 @@
|
|||||||
}
|
}
|
||||||
.promo_orca {
|
.promo_orca {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -593px -998px;
|
background-position: -1428px -392px;
|
||||||
width: 105px;
|
width: 105px;
|
||||||
height: 105px;
|
height: 105px;
|
||||||
}
|
}
|
||||||
.promo_partyhats {
|
.promo_partyhats {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1662px -606px;
|
background-position: -1377px -327px;
|
||||||
width: 115px;
|
width: 115px;
|
||||||
height: 47px;
|
height: 47px;
|
||||||
}
|
}
|
||||||
@@ -438,31 +444,31 @@
|
|||||||
}
|
}
|
||||||
.promo_peppermint_flame {
|
.promo_peppermint_flame {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1016px -879px;
|
background-position: -1699px -1051px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.promo_pet_skins {
|
.promo_pet_skins {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -875px -884px;
|
background-position: -1699px -1199px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.customize-option.promo_pet_skins {
|
.customize-option.promo_pet_skins {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -900px -899px;
|
background-position: -1724px -1214px;
|
||||||
width: 60px;
|
width: 60px;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
}
|
}
|
||||||
.promo_pyromancer {
|
.promo_pyromancer {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -593px -884px;
|
background-position: -1699px -1495px;
|
||||||
width: 113px;
|
width: 113px;
|
||||||
height: 113px;
|
height: 113px;
|
||||||
}
|
}
|
||||||
.promo_rainbow_armor {
|
.promo_rainbow_armor {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: 0px -1723px;
|
background-position: -875px -884px;
|
||||||
width: 92px;
|
width: 92px;
|
||||||
height: 103px;
|
height: 103px;
|
||||||
}
|
}
|
||||||
@@ -480,19 +486,19 @@
|
|||||||
}
|
}
|
||||||
.promo_splashyskins {
|
.promo_splashyskins {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -151px -1572px;
|
background-position: 0px -1627px;
|
||||||
width: 198px;
|
width: 198px;
|
||||||
height: 91px;
|
height: 91px;
|
||||||
}
|
}
|
||||||
.customize-option.promo_splashyskins {
|
.customize-option.promo_splashyskins {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -176px -1587px;
|
background-position: -25px -1642px;
|
||||||
width: 60px;
|
width: 60px;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
}
|
}
|
||||||
.promo_spooky_sparkles_fall_2016 {
|
.promo_spooky_sparkles_fall_2016 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -306px -220px;
|
background-position: -1558px 0px;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
height: 294px;
|
height: 294px;
|
||||||
}
|
}
|
||||||
@@ -516,19 +522,19 @@
|
|||||||
}
|
}
|
||||||
.promo_staff_spotlight_Lemoness {
|
.promo_staff_spotlight_Lemoness {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1441px -721px;
|
background-position: -1558px -792px;
|
||||||
width: 102px;
|
width: 102px;
|
||||||
height: 146px;
|
height: 146px;
|
||||||
}
|
}
|
||||||
.promo_staff_spotlight_Viirus {
|
.promo_staff_spotlight_Viirus {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1428px -392px;
|
background-position: -1699px -1347px;
|
||||||
width: 119px;
|
width: 119px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.promo_staff_spotlight_paglias {
|
.promo_staff_spotlight_paglias {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1438px -868px;
|
background-position: -1558px -939px;
|
||||||
width: 99px;
|
width: 99px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
@@ -552,13 +558,13 @@
|
|||||||
}
|
}
|
||||||
.promo_takeThis_gear {
|
.promo_takeThis_gear {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -452px -975px;
|
background-position: -1558px -1225px;
|
||||||
width: 114px;
|
width: 114px;
|
||||||
height: 87px;
|
height: 87px;
|
||||||
}
|
}
|
||||||
.promo_takethis_armor {
|
.promo_takethis_armor {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -975px -1461px;
|
background-position: -1441px -573px;
|
||||||
width: 114px;
|
width: 114px;
|
||||||
height: 87px;
|
height: 87px;
|
||||||
}
|
}
|
||||||
@@ -570,25 +576,25 @@
|
|||||||
}
|
}
|
||||||
.promo_unconventional_armor {
|
.promo_unconventional_armor {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1089px -1027px;
|
background-position: -1805px -387px;
|
||||||
width: 60px;
|
width: 60px;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
}
|
}
|
||||||
.promo_unconventional_armor2 {
|
.promo_unconventional_armor2 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1734px -766px;
|
background-position: -1428px -498px;
|
||||||
width: 70px;
|
width: 70px;
|
||||||
height: 74px;
|
height: 74px;
|
||||||
}
|
}
|
||||||
.promo_updos {
|
.promo_updos {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1558px -1033px;
|
background-position: -1699px -450px;
|
||||||
width: 156px;
|
width: 156px;
|
||||||
height: 147px;
|
height: 147px;
|
||||||
}
|
}
|
||||||
.promo_veteran_pets {
|
.promo_veteran_pets {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -874px -1114px;
|
background-position: -1027px -1114px;
|
||||||
width: 146px;
|
width: 146px;
|
||||||
height: 75px;
|
height: 75px;
|
||||||
}
|
}
|
||||||
@@ -600,13 +606,13 @@
|
|||||||
}
|
}
|
||||||
.promo_winterclasses2015 {
|
.promo_winterclasses2015 {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: 0px -1461px;
|
background-position: -494px -1461px;
|
||||||
width: 325px;
|
width: 325px;
|
||||||
height: 110px;
|
height: 110px;
|
||||||
}
|
}
|
||||||
.promo_winteryhair {
|
.promo_winteryhair {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1377px -302px;
|
background-position: -874px -1114px;
|
||||||
width: 152px;
|
width: 152px;
|
||||||
height: 75px;
|
height: 75px;
|
||||||
}
|
}
|
||||||
@@ -618,7 +624,7 @@
|
|||||||
}
|
}
|
||||||
.npc_viirus {
|
.npc_viirus {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -350px -1572px;
|
background-position: -1441px -773px;
|
||||||
width: 108px;
|
width: 108px;
|
||||||
height: 90px;
|
height: 90px;
|
||||||
}
|
}
|
||||||
@@ -630,19 +636,19 @@
|
|||||||
}
|
}
|
||||||
.scene_coding {
|
.scene_coding {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1377px -151px;
|
background-position: -1699px -749px;
|
||||||
width: 150px;
|
width: 150px;
|
||||||
height: 150px;
|
height: 150px;
|
||||||
}
|
}
|
||||||
.scene_phone_peek {
|
.scene_phone_peek {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1558px -1181px;
|
background-position: -1699px -598px;
|
||||||
width: 150px;
|
width: 150px;
|
||||||
height: 150px;
|
height: 150px;
|
||||||
}
|
}
|
||||||
.welcome_basic_avatars {
|
.welcome_basic_avatars {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1558px 0px;
|
background-position: 0px -1461px;
|
||||||
width: 246px;
|
width: 246px;
|
||||||
height: 165px;
|
height: 165px;
|
||||||
}
|
}
|
||||||
@@ -654,7 +660,7 @@
|
|||||||
}
|
}
|
||||||
.welcome_sample_tasks {
|
.welcome_sample_tasks {
|
||||||
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
background-image: url(/static/sprites/spritesmith-largeSprites-0.png);
|
||||||
background-position: -1558px -166px;
|
background-position: -247px -1461px;
|
||||||
width: 246px;
|
width: 246px;
|
||||||
height: 165px;
|
height: 165px;
|
||||||
}
|
}
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 987 KiB After Width: | Height: | Size: 987 KiB |
1054
website/assets/sprites/dist/spritesmith-main-0.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-0.png
vendored
|
Before Width: | Height: | Size: 432 KiB After Width: | Height: | Size: 443 KiB |
2328
website/assets/sprites/dist/spritesmith-main-1.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-1.png
vendored
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 73 KiB |
1294
website/assets/sprites/dist/spritesmith-main-10.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-10.png
vendored
|
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 148 KiB |
1860
website/assets/sprites/dist/spritesmith-main-11.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-11.png
vendored
|
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 142 KiB |
1444
website/assets/sprites/dist/spritesmith-main-12.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-12.png
vendored
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 157 KiB |
1596
website/assets/sprites/dist/spritesmith-main-13.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-13.png
vendored
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 150 KiB |
664
website/assets/sprites/dist/spritesmith-main-14.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-14.png
vendored
|
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 171 KiB |
910
website/assets/sprites/dist/spritesmith-main-15.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-15.png
vendored
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 99 KiB |
6608
website/assets/sprites/dist/spritesmith-main-2.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-2.png
vendored
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 66 KiB |
5970
website/assets/sprites/dist/spritesmith-main-3.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-3.png
vendored
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
2266
website/assets/sprites/dist/spritesmith-main-4.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-4.png
vendored
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 130 KiB |
1912
website/assets/sprites/dist/spritesmith-main-5.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-5.png
vendored
|
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 138 KiB |
1912
website/assets/sprites/dist/spritesmith-main-6.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-6.png
vendored
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 135 KiB |
968
website/assets/sprites/dist/spritesmith-main-7.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-7.png
vendored
|
Before Width: | Height: | Size: 426 KiB After Width: | Height: | Size: 385 KiB |
1426
website/assets/sprites/dist/spritesmith-main-8.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-8.png
vendored
|
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 216 KiB |
890
website/assets/sprites/dist/spritesmith-main-9.css
vendored
BIN
website/assets/sprites/dist/spritesmith-main-9.png
vendored
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 141 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
BIN
website/assets/sprites/spritesmith/quests/bosses/quest_moon1.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
website/assets/sprites/spritesmith/quests/bosses/quest_moon2.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
website/assets/sprites/spritesmith/quests/bosses/quest_moon3.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 575 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 899 B |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 734 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1007 B |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 708 B |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 864 B |
|
After Width: | Height: | Size: 927 B |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 622 B |
|
After Width: | Height: | Size: 1.7 KiB |