diff --git a/current/AdminClient.html b/current/AdminClient.html new file mode 100644 index 00000000..047121b0 --- /dev/null +++ b/current/AdminClient.html @@ -0,0 +1,1292 @@ + + + + + JSDoc: Class: AdminClient + + + + + + + + + + + + + + + +
+
+ +
+

Class: AdminClient

+ + + + + + +
+ +
+ +

AdminClient

+ + +
+ +
+
+ + + + + +

+ new AdminClient(conf) +

+ + + + + +
+

AdminClient class for administering Kafka + +This client is the way you can interface with the Kafka Admin APIs. +This class should not be made using the constructor, but instead +should be made using the factory method. + + +var client = AdminClient.create({ ... }); + + +Once you instantiate this object, it will have a handle to the kafka broker. +Unlike the other node-rdkafka classes, this class does not ensure that +it is connected to the upstream broker. Instead, making an action will +validate that.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
conf + + +object + + + + + Key value pairs to configure the admin client +topic configuration
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+
+

Methods:

+
+ +
+ + + + + + + +

+ connect() +

+ + + + + +
+

Connect using the admin client. + +Should be run using the factory method, so should never +need to be called outside. + +Unlike the other connect methods, this one is synchronous.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ createPartitions(topic, totalPartitions, timeout, cb) +

+ + + + + +
+

Create new partitions for a topic.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + The topic to add partitions to, by name.
totalPartitions + + +number + + + + + The total number of partitions the topic should have + after the request
timeout + + +number + + + + + Number of milliseconds to wait while trying to create the partitions.
cb + + +function + + + + + The callback to be executed when finished
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ createTopic(topic, timeout, cb) +

+ + + + + +
+

Create a topic with a given config.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +NewTopic + + + + + Topic to create.
timeout + + +number + + + + + Number of milliseconds to wait while trying to create the topic.
cb + + +function + + + + + The callback to be executed when finished
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ deleteTopic(topic, timeout, cb) +

+ + + + + +
+

Delete a topic.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + The topic to delete, by name.
timeout + + +number + + + + + Number of milliseconds to wait while trying to delete the topic.
cb + + +function + + + + + The callback to be executed when finished
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ disconnect() +

+ + + + + +
+

Disconnect the admin client. + +This is a synchronous method, but all it does is clean up +some memory and shut some threads down

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+
+

Type Definitions:

+
+ +
+ + + + +

NewTopic

+ + + + +
+

+ NewTopic model. + +This is the representation of a new message that is requested to be made +using the Admin client. +

+
+ + + +
Type:
+
    +
  • + +object + + + +
  • +
+ + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + the topic name to create
num_partitions + + +number + + + + + the number of partitions to give the topic
replication_factor + + +number + + + + + the replication factor of the topic
config + + +object + + + + + a list of key values to be passed as configuration +for the topic.
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + +
+ +
+ + + + +
+ +
+ +
+ + +
+ + + + + + + + + + \ No newline at end of file diff --git a/current/Client.html b/current/Client.html new file mode 100644 index 00000000..f830b329 --- /dev/null +++ b/current/Client.html @@ -0,0 +1,3681 @@ + + + + + JSDoc: Class: Client + + + + + + + + + + + + + + + +
+
+ +
+

Class: Client

+ + + + + + +
+ +
+ +

Client

+ + +
+ +
+
+ + + + + +

+ new Client(globalConf, SubClientType, topicConf) +

+ + + + + +
+

Base class for Consumer and Producer + +This should not be created independently, but rather is +the base class on which both producer and consumer +get their common functionality.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
globalConf + + +object + + + + + Global configuration in key value pairs.
SubClientType + + +function + + + + + The function representing the subclient +type. In C++ land this needs to be a class that inherits from Connection.
topicConf + + +object + + + + + Topic configuration in key value pairs
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + +
+
+

Extends:

+
+ +
+ + + + + +
    +
  • Emitter
  • +
+ + + + + + + + + + + + + +
+
+

Members:

+
+ +
+ + + + +

_metadata :Client~Metadata

+ + + + +
+

+ Metadata object. Starts out empty but will be filled with information after +the initial connect. +

+
+ + + +
Type:
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + +
+
+

Methods:

+
+ +
+ + + + + + + +

+ connect(metadataOptions, cb) → {Client} +

+ + + + + +
+

Connect to the broker and receive its metadata. + +Connects to a broker by establishing the client and fetches its metadata.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
metadataOptions + + +object + + + + + Options to be sent to the metadata. +
Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + Topic to fetch metadata for. Empty string is treated as empty.
allTopics + + +boolean + + + + + Fetch metadata for all topics, not just the ones we know about.
timeout + + +int + + + + + The timeout, in ms, to allow for fetching metadata. Defaults to 30000ms
+ +
cb + + +Client~connectionCallback + + + + + Callback that indicates we are +done connecting.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns itself. +
+ + + +
+
+ Type +
+
+ +Client + + + +
+
+ + + + + + + + + + + +

+ connectedTime() → {number} +

+ + + + + +
+

Find out how long we have been connected to Kafka.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Milliseconds since the connection has been established. +
+ + + +
+
+ Type +
+
+ +number + + + +
+
+ + + + + + + + + + + +

+ disconnect() → {function} +

+ + + + + +
+

Disconnect from the Kafka client. + +This method will disconnect us from Kafka unless we are already in a +disconnecting state. Use this when you're done reading or producing messages +on a given client. + +It will also emit the disconnected event.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + +
+
+

Fires:

+
+
+ + + + + + + + + + + +
Returns:
+ + +
+ - Callback to call when disconnection is complete. +
+ + + +
+
+ Type +
+
+ +function + + + +
+
+ + + + + + + + + + + +

+ getClient() → {Connection} +

+ + + + + +
+

Get the native Kafka client. + +You probably shouldn't use this, but if you want to execute methods directly +on the c++ wrapper you can do it here.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + +
See:
+
+
    +
  • connection.cc
  • +
+
+ + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - The native Kafka client. +
+ + + +
+
+ Type +
+
+ +Connection + + + +
+
+ + + + + + + + + + + +

+ getLastError() → {LibrdKafkaError} +

+ + + + + +
+

Get the last error emitted if it exists.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns the LibrdKafkaError or null if +one hasn't been thrown. +
+ + + +
+
+ Type +
+
+ +LibrdKafkaError + + + +
+
+ + + + + + + + + + + +

+ getMetadata(metadataOptions, cb) +

+ + + + + +
+

Get client metadata. + +Note: using a metadataOptions.topic parameter has a potential side-effect. +A Topic object will be created, if it did not exist yet, with default options +and it will be cached by librdkafka. + +A subsequent call to create the topic object with specific options (e.g. acks) will return +the previous instance and the specific options will be silently ignored. + +To avoid this side effect, the topic object can be created with the expected options before requesting metadata, +or the metadata request can be performed for all topics (by omitting metadataOptions.topic).

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
metadataOptions + + +object + + + + + Metadata options to pass to the client. +
Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + Topic string for which to fetch +metadata
timeout + + +number + + + + + Max time, in ms, to try to fetch +metadata before timing out. Defaults to 3000.
+ +
cb + + +Client~metadataCallback + + + + + Callback to fire with the metadata.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ isConnected() → {boolean} +

+ + + + + +
+

Whether or not we are connected to Kafka.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Whether we are connected. +
+ + + +
+
+ Type +
+
+ +boolean + + + +
+
+ + + + + + + + + + + +

+ offsetsForTimes(toppars, timeout, cb) +

+ + + + + +
+

Query offsets for times from the broker. + +This function makes a call to the broker to get the offsets for times specified.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
toppars + + +Array.<TopicPartition> + + + + + Array of topic partitions. The offset in these + should instead refer to a timestamp you want + offsets for
timeout + + +number + + + + + Number of ms to wait to recieve a response.
cb + + +Client~offsetsForTimesCallback + + + + + Callback to fire with the filled in offsets.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ queryWatermarkOffsets(topic, partition, timeout, cb) +

+ + + + + +
+

Query offsets from the broker. + +This function makes a call to the broker to get the current low (oldest/beginning) +and high (newest/end) offsets for a topic partition.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + Topic to recieve offsets from.
partition + + +number + + + + + Partition of the provided topic to recieve offsets from
timeout + + +number + + + + + Number of ms to wait to recieve a response.
cb + + +Client~watermarkOffsetsCallback + + + + + Callback to fire with the offsets.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+
+

Type Definitions:

+
+ +
+ + + + + + + +

+ connectionCallback(err, metadata) +

+ + + + + +
+

This callback is used to pass metadata or an error after a successful +connection

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
err + + +Error + + + + + An error, if one occurred while connecting.
metadata + + +Client~Metadata + + + + + Metadata object.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + +

Metadata

+ + + + +
+

+ Metadata object. + +This is the representation of Kafka metadata in JavaScript. +

+
+ + + +
Type:
+
    +
  • + +object + + + +
  • +
+ + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
orig_broker_id + + +number + + + + + The broker ID of the original bootstrap +broker.
orig_broker_name + + +string + + + + + The name of the original bootstrap +broker.
brokers + + +Array.<Client~MetadataBroker> + + + + + An array of broker objects
topics + + +Array.<Client~MetadataTopic> + + + + + An array of topics.
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + +

MetadataBroker

+ + + + + + +
Type:
+
    +
  • + +object + + + +
  • +
+ + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
id + + +number + + + + + Broker ID
host + + +string + + + + + Broker host
port + + +number + + + + + Broker port.
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + +

MetadataPartition

+ + + + + + +
Type:
+
    +
  • + +object + + + +
  • +
+ + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
id + + +number + + + + + Partition id
leader + + +number + + + + + Broker ID for the partition leader
replicas + + +Array.<number> + + + + + Array of replica IDs
isrs + + +Array.<number> + + + + + Arrqay of ISRS ids
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + +

MetadataTopic

+ + + + + + +
Type:
+
    +
  • + +object + + + +
  • +
+ + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
name + + +string + + + + + Topic name
partitions + + +Array.<Client~MetadataPartition> + + + + + Array of partitions
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + +

+ offsetsForTimesCallback(err, toppars) +

+ + + + + +
+

This callback is used to pass toppars or an error after a successful +times query

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
err + + +Error + + + + + An error, if one occurred while connecting.
toppars + + +Array.<TopicPartition> + + + + + Topic partitions with offsets filled in
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + +

watermarkOffsets

+ + + + + + +
Type:
+
    +
  • + +object + + + +
  • +
+ + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
high + + +number + + + + + High (newest/end) offset
low + + +number + + + + + Low (oldest/beginning) offset
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + +

+ watermarkOffsetsCallback(err, offsets) +

+ + + + + +
+

This callback is used to pass offsets or an error after a successful +query

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
err + + +Error + + + + + An error, if one occurred while connecting.
offsets + + +Client~watermarkOffsets + + + + + Watermark offsets
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + +

+ disconnected +

+ + + + + +
+

Disconnect event. Called after disconnection is finished.

+
+ + + + + +
+
+

Type:

+
+
+ +
    +
  • + +object + + + +
  • +
+ + + + + + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
connectionOpened + + +date + + + + + when the connection was opened.
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ ready +

+ + + + + +
+

Ready event. Called when the Client connects successfully

+
+ + + + + +
+
+

Type:

+
+
+ +
    +
  • + +object + + + +
  • +
+ + + + + + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
name + + +string + + + + + the name of the broker.
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ +
+ +
+ + +
+ + + + + + + + + + \ No newline at end of file diff --git a/current/HighLevelProducer.html b/current/HighLevelProducer.html new file mode 100644 index 00000000..8f4be47b --- /dev/null +++ b/current/HighLevelProducer.html @@ -0,0 +1,4811 @@ + + + + + JSDoc: Class: HighLevelProducer + + + + + + + + + + + + + + + +
+
+ +
+

Class: HighLevelProducer

+ + + + + + +
+ +
+ +

HighLevelProducer

+ + +
+ +
+
+ + + + + +

+ new HighLevelProducer(conf, topicConf) +

+ + + + + +
+

Producer class for sending messages to Kafka in a higher level fashion + +This is the main entry point for writing data to Kafka if you want more +functionality than librdkafka supports out of the box. You +configure this like you do any other client, with a global +configuration and default topic configuration. + +Once you instantiate this object, you need to connect to it first. +This allows you to get the metadata and make sure the connection +can be made before you depend on it. After that, problems with +the connection will by brought down by using poll, which automatically +runs when a transaction is made on the object. + +This has a few restrictions, so it is not for free! + +1. You may not define opaque tokens + The higher level producer is powered by opaque tokens. +2. Every message ack will dispatch an event on the node thread. +3. Will use a ref counter to determine if there are outgoing produces. + +This will return the new object you should use instead when doing your +produce calls

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
conf + + +object + + + + + Key value pairs to configure the producer
topicConf + + +object + + + + + Key value pairs to create a default +topic configuration
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + +
+
+

Extends:

+
+ +
+ + + + + + + + + + + + + + + + + + + +
+
+

Members:

+
+ +
+ + + + +

_disconnect

+ + + + +
+

+ Save the base disconnect method here so we can overwrite it and add a flush +

+
+ + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + +

_metadata :Client~Metadata

+ + + + +
+

+ Metadata object. Starts out empty but will be filled with information after +the initial connect. +

+
+ + + +
Type:
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + +
+
+

Methods:

+
+ +
+ + + + + + + +

+ _modifiedProduce(topic, partition, message, key, timestamp, headers, callback) → {boolean} +

+ + + + + +
+

Produce a message to Kafka asynchronously. + +This is the method mainly used in this class. Use it to produce +a message to Kafka. + +When this is sent off, and you recieve your callback, the assurances afforded +to you will be equal to those provided by your ack level.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + The topic name to produce to.
partition + + +number +| + +null + + + + + The partition number to produce to.
message + + +Buffer +| + +null + + + + + The message to produce.
key + + +string + + + + + The key associated with the message.
timestamp + + +number +| + +null + + + + + Timestamp to send with the message.
headers + + +object + + + + + A list of custom key value pairs that provide message metadata.
callback + + +function + + + + + Callback to call when the delivery report is recieved.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + +
See:
+
+ +
+ + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+
+
+ - Throws a librdkafka error if it failed. +
+
+
+
+
+
+ Type +
+
+ +LibrdKafkaError + + + +
+
+
+
+
+ + + + + +
Returns:
+ + +
+ - returns an error if it failed, or true if not +
+ + + +
+
+ Type +
+
+ +boolean + + + +
+
+ + + + + + + + + + + +

+ abortTransaction(timeout, cb) → {Producer} +

+ + + + + +
+

Aborts the ongoing transaction.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
timeout + + +number + + + + + Number of milliseconds to try to abort, defaults to 5 seconds
cb + + +function + + + + + Callback to return when operation is completed
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ beginTransaction() → {Producer} +

+ + + + + +
+

Begin a transaction. + +'initTransaction' must have been called successfully (once) before this function is called.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ commitTransaction(timeout, cb) → {Producer} +

+ + + + + +
+

Commit the current transaction (as started with 'beginTransaction').

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
timeout + + +number + + + + + Number of milliseconds to try to commit before giving up, defaults to 5 seconds
cb + + +function + + + + + Callback to return when operation is completed
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ connect(metadataOptions, cb) → {Client} +

+ + + + + +
+

Connect to the broker and receive its metadata. + +Connects to a broker by establishing the client and fetches its metadata.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
metadataOptions + + +object + + + + + Options to be sent to the metadata. +
Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + Topic to fetch metadata for. Empty string is treated as empty.
allTopics + + +boolean + + + + + Fetch metadata for all topics, not just the ones we know about.
timeout + + +int + + + + + The timeout, in ms, to allow for fetching metadata. Defaults to 30000ms
+ +
cb + + +Client~connectionCallback + + + + + Callback that indicates we are +done connecting.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns itself. +
+ + + +
+
+ Type +
+
+ +Client + + + +
+
+ + + + + + + + + + + +

+ connectedTime() → {number} +

+ + + + + +
+

Find out how long we have been connected to Kafka.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Milliseconds since the connection has been established. +
+ + + +
+
+ Type +
+
+ +number + + + +
+
+ + + + + + + + + + + +

+ disconnect(timeout, cb) +

+ + + + + +
+

Disconnect the producer + +Flush everything on the internal librdkafka producer buffer. Then disconnect

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
timeout + + +number + + + + + Number of milliseconds to try to flush before giving up, defaults to 5 seconds.
cb + + +function + + + + + The callback to fire when
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ flush(timeout, callback) → {Producer} +

+ + + + + +
+

Flush the producer + +Flush everything on the internal librdkafka producer buffer. Do this before +disconnects usually

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
timeout + + +number + + + + + Number of milliseconds to try to flush before giving up.
callback + + +function + + + + + Callback to fire when the flush is done.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ getClient() → {Connection} +

+ + + + + +
+

Get the native Kafka client. + +You probably shouldn't use this, but if you want to execute methods directly +on the c++ wrapper you can do it here.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + +
See:
+
+
    +
  • connection.cc
  • +
+
+ + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - The native Kafka client. +
+ + + +
+
+ Type +
+
+ +Connection + + + +
+
+ + + + + + + + + + + +

+ getLastError() → {LibrdKafkaError} +

+ + + + + +
+

Get the last error emitted if it exists.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns the LibrdKafkaError or null if +one hasn't been thrown. +
+ + + +
+
+ Type +
+
+ +LibrdKafkaError + + + +
+
+ + + + + + + + + + + +

+ getMetadata(metadataOptions, cb) +

+ + + + + +
+

Get client metadata. + +Note: using a metadataOptions.topic parameter has a potential side-effect. +A Topic object will be created, if it did not exist yet, with default options +and it will be cached by librdkafka. + +A subsequent call to create the topic object with specific options (e.g. acks) will return +the previous instance and the specific options will be silently ignored. + +To avoid this side effect, the topic object can be created with the expected options before requesting metadata, +or the metadata request can be performed for all topics (by omitting metadataOptions.topic).

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
metadataOptions + + +object + + + + + Metadata options to pass to the client. +
Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + Topic string for which to fetch +metadata
timeout + + +number + + + + + Max time, in ms, to try to fetch +metadata before timing out. Defaults to 3000.
+ +
cb + + +Client~metadataCallback + + + + + Callback to fire with the metadata.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ initTransactions(timeout, cb) → {Producer} +

+ + + + + +
+

Init a transaction. + +Initialize transactions, this is only performed once per transactional producer.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
timeout + + +number + + + + + Number of milliseconds to try to initialize before giving up, defaults to 5 seconds.
cb + + +function + + + + + Callback to return when operation is completed
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ isConnected() → {boolean} +

+ + + + + +
+

Whether or not we are connected to Kafka.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Whether we are connected. +
+ + + +
+
+ Type +
+
+ +boolean + + + +
+
+ + + + + + + + + + + +

+ offsetsForTimes(toppars, timeout, cb) +

+ + + + + +
+

Query offsets for times from the broker. + +This function makes a call to the broker to get the offsets for times specified.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
toppars + + +Array.<TopicPartition> + + + + + Array of topic partitions. The offset in these + should instead refer to a timestamp you want + offsets for
timeout + + +number + + + + + Number of ms to wait to recieve a response.
cb + + +Client~offsetsForTimesCallback + + + + + Callback to fire with the filled in offsets.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ poll() → {Producer} +

+ + + + + +
+

Poll for events + +We need to run poll in order to learn about new events that have occurred. +This is no longer done automatically when we produce, so we need to run +it manually, or set the producer to automatically poll.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ produce(topic, partition, message, key, timestamp, opaque, headers) → {boolean} +

+ + + + + +
+

Produce a message to Kafka synchronously. + +This is the method mainly used in this class. Use it to produce +a message to Kafka. + +When this is sent off, there is no guarantee it is delivered. If you need +guaranteed delivery, change your *acks* settings, or use delivery reports.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + The topic name to produce to.
partition + + +number +| + +null + + + + + The partition number to produce to.
message + + +Buffer +| + +null + + + + + The message to produce.
key + + +string + + + + + The key associated with the message.
timestamp + + +number +| + +null + + + + + Timestamp to send with the message.
opaque + + +object + + + + + An object you want passed along with this message, if provided.
headers + + +object + + + + + A list of custom key value pairs that provide message metadata.
+ + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + +
See:
+
+ +
+ + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+
+
+ - Throws a librdkafka error if it failed. +
+
+
+
+
+
+ Type +
+
+ +LibrdKafkaError + + + +
+
+
+
+
+ + + + + +
Returns:
+ + +
+ - returns an error if it failed, or true if not +
+ + + +
+
+ Type +
+
+ +boolean + + + +
+
+ + + + + + + + + + + +

+ queryWatermarkOffsets(topic, partition, timeout, cb) +

+ + + + + +
+

Query offsets from the broker. + +This function makes a call to the broker to get the current low (oldest/beginning) +and high (newest/end) offsets for a topic partition.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + Topic to recieve offsets from.
partition + + +number + + + + + Partition of the provided topic to recieve offsets from
timeout + + +number + + + + + Number of ms to wait to recieve a response.
cb + + +Client~watermarkOffsetsCallback + + + + + Callback to fire with the offsets.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ sendOffsetsToTransaction(offsets, consumer, timeout, cb) → {Producer} +

+ + + + + +
+

Send the current offsets of the consumer to the ongoing transaction.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
offsets + + +number + + + + + Offsets to send as part of the next commit
consumer + + +Consumer + + + + + An instance of the consumer
timeout + + +number + + + + + Number of milliseconds to try to send offsets, defaults to 5 seconds
cb + + +function + + + + + Callback to return when operation is completed
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ setKeySerializer() +

+ + + + + +
+

Set the key serializer + +This allows the value inside the produce call to differ from the value of the +value actually produced to kafka. Good if, for example, you want to serialize +it to a particular format.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ setPollInterval(interval) → {Producer} +

+ + + + + +
+

Set automatic polling for events. + +We need to run poll in order to learn about new events that have occurred. +If you would like this done on an interval with disconnects and reconnections +managed, you can do it here

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
interval + + +number + + + + + Interval, in milliseconds, to poll
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ setValueSerializer() +

+ + + + + +
+

Set the value serializer + +This allows the value inside the produce call to differ from the value of the +value actually produced to kafka. Good if, for example, you want to serialize +it to a particular format.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + +

+ disconnected +

+ + + + + +
+

Disconnect event. Called after disconnection is finished.

+
+ + + + + +
+
+

Type:

+
+
+ +
    +
  • + +object + + + +
  • +
+ + + + + + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
connectionOpened + + +date + + + + + when the connection was opened.
+ + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ ready +

+ + + + + +
+

Ready event. Called when the Client connects successfully

+
+ + + + + +
+
+

Type:

+
+
+ +
    +
  • + +object + + + +
  • +
+ + + + + + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
name + + +string + + + + + the name of the broker.
+ + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ +
+ +
+ + +
+ + + + + + + + + + \ No newline at end of file diff --git a/current/KafkaConsumer.html b/current/KafkaConsumer.html new file mode 100644 index 00000000..cf5b217b --- /dev/null +++ b/current/KafkaConsumer.html @@ -0,0 +1,6859 @@ + + + + + JSDoc: Class: KafkaConsumer + + + + + + + + + + + + + + + +
+
+ +
+

Class: KafkaConsumer

+ + + + + + +
+ +
+ +

KafkaConsumer

+ + +
+ +
+
+ + + + + +

+ new KafkaConsumer(conf, topicConf) +

+ + + + + +
+

KafkaConsumer class for reading messages from Kafka + +This is the main entry point for reading data from Kafka. You +configure this like you do any other client, with a global +configuration and default topic configuration. + +Once you instantiate this object, connecting will open a socket. +Data will not be read until you tell the consumer what topics +you want to read from.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
conf + + +object + + + + + Key value pairs to configure the consumer
topicConf + + +object + + + + + Key value pairs to create a default +topic configuration
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + +
+
+

Extends:

+
+ +
+ + + + + + + + + + + + + + + + + + + +
+
+

Members:

+
+ +
+ + + + +

_metadata :Client~Metadata

+ + + + +
+

+ Metadata object. Starts out empty but will be filled with information after +the initial connect. +

+
+ + + +
Type:
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + +
+
+

Methods:

+
+ +
+ + + + + + + +

+ (static) createReadStream(conf, topicConf, streamOptions) → {KafkaConsumerStream} +

+ + + + + +
+

Get a stream representation of this KafkaConsumer

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
conf + + +object + + + + + Key value pairs to configure the consumer
topicConf + + +object + + + + + Key value pairs to create a default +topic configuration
streamOptions + + +object + + + + + Stream options +
Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topics + + +array + + + + + Array of topics to subscribe to.
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + +
See:
+
+
    +
  • TopicReadable
  • +
+
+ + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Readable stream that receives messages +when new ones become available. +
+ + + +
+
+ Type +
+
+ +KafkaConsumerStream + + + +
+
+ + + + + + +

+ +

+ + + + + + + + + + +

+ assign(assignments) → {Client} +

+ + + + + +
+

Assign the consumer specific partitions and topics

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
assignments + + +array + + + + + Assignments array. Should contain +objects with topic and partition set.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns itself +
+ + + +
+
+ Type +
+
+ +Client + + + +
+
+ + + + + + + + + + + +

+ assignments() → {array} +

+ + + + + +
+

Get the assignments for the consumer

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ assignments - Array of topic partitions +
+ + + +
+
+ Type +
+
+ +array + + + +
+
+ + + + + + + + + + + +

+ commit(topicPartition) → {KafkaConsumer} +

+ + + + + +
+

Commit a topic partition or all topic partitions that have been read + +If you provide a topic partition, it will commit that. Otherwise, +it will commit all read offsets for all topic partitions.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topicPartition + + +object +| + +array +| + +null + + + + + Topic partition object to commit, list of topic +partitions, or null if you want to commit all read offsets.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+ + When commit returns a non 0 error code + +
+ + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +KafkaConsumer + + + +
+
+ + + + + + + + + + + +

+ commitMessage(msg) → {KafkaConsumer} +

+ + + + + +
+

Commit a message + +This is basically a convenience method to map commit properly. We need to +add one to the offset in this case

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
msg + + +object + + + + + Message object to commit
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+ + When commit returns a non 0 error code + +
+ + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +KafkaConsumer + + + +
+
+ + + + + + + + + + + +

+ commitMessageSync(msg) → {KafkaConsumer} +

+ + + + + +
+

Commit a message synchronously

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
msg + + +object + + + + + A message object to commit.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + +
See:
+
+ +
+ + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+
+
+ - if the commit fails +
+
+
+
+
+
+ Type +
+
+ +LibrdKafkaError + + + +
+
+
+
+
+ + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +KafkaConsumer + + + +
+
+ + + + + + + + + + + +

+ commitSync(topicPartition) → {KafkaConsumer} +

+ + + + + +
+

Commit a topic partition (or all topic partitions) synchronously

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topicPartition + + +object +| + +array +| + +null + + + + + Topic partition object to commit, list of topic +partitions, or null if you want to commit all read offsets.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+
+
+ - if the commit fails +
+
+
+
+
+
+ Type +
+
+ +LibrdKafkaError + + + +
+
+
+
+
+ + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +KafkaConsumer + + + +
+
+ + + + + + + + + + + +

+ committed(toppars, timeout, cb) → {Client} +

+ + + + + +
+

Get a current list of the committed offsets per topic partition + +Returns an array of objects in the form of a topic partition list

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
toppars + + +Array.<TopicPartition> + + + + + Topic partition list to query committed +offsets for. Defaults to the current assignment
timeout + + +number + + + + + Number of ms to block before calling back +and erroring
cb + + +function + + + + + Callback method to execute when finished or timed +out
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns itself +
+ + + +
+
+ Type +
+
+ +Client + + + +
+
+ + + + + + + + + + + +

+ connect(metadataOptions, cb) → {Client} +

+ + + + + +
+

Connect to the broker and receive its metadata. + +Connects to a broker by establishing the client and fetches its metadata.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
metadataOptions + + +object + + + + + Options to be sent to the metadata. +
Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + Topic to fetch metadata for. Empty string is treated as empty.
allTopics + + +boolean + + + + + Fetch metadata for all topics, not just the ones we know about.
timeout + + +int + + + + + The timeout, in ms, to allow for fetching metadata. Defaults to 30000ms
+ +
cb + + +Client~connectionCallback + + + + + Callback that indicates we are +done connecting.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns itself. +
+ + + +
+
+ Type +
+
+ +Client + + + +
+
+ + + + + + + + + + + +

+ connectedTime() → {number} +

+ + + + + +
+

Find out how long we have been connected to Kafka.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Milliseconds since the connection has been established. +
+ + + +
+
+ Type +
+
+ +number + + + +
+
+ + + + + + + + + + + +

+ consume(size, cb) +

+ + + + + +
+

Read a number of messages from Kafka. + +This method is similar to the main one, except that it reads a number +of messages before calling back. This may get better performance than +reading a single message each time in stream implementations. + +This will keep going until it gets ERR__PARTITION_EOF or ERR__TIMED_OUT +so the array may not be the same size you ask for. The size is advisory, +but we will not exceed it.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
size + + +number + + + + + Number of messages to read
cb + + +KafkaConsumer~readCallback + + + + + Callback to return when work is done.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ consume(cb) +

+ + + + + +
+

Read messages from Kafka as fast as possible + +This method keeps a background thread running to fetch the messages +as quickly as it can, sleeping only in between EOF and broker timeouts. + +Use this to get the maximum read performance if you don't care about the +stream backpressure.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
cb + + +KafkaConsumer~readCallback + + + + + Callback to return when a message +is fetched.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ disconnect() → {function} +

+ + + + + +
+

Disconnect from the Kafka client. + +This method will disconnect us from Kafka unless we are already in a +disconnecting state. Use this when you're done reading or producing messages +on a given client. + +It will also emit the disconnected event.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + +
+
+

Fires:

+
+
+ + + + + + + + + + + +
Returns:
+ + +
+ - Callback to call when disconnection is complete. +
+ + + +
+
+ Type +
+
+ +function + + + +
+
+ + + + + + + + + + + +

+ getClient() → {Connection} +

+ + + + + +
+

Get the native Kafka client. + +You probably shouldn't use this, but if you want to execute methods directly +on the c++ wrapper you can do it here.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + +
See:
+
+
    +
  • connection.cc
  • +
+
+ + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - The native Kafka client. +
+ + + +
+
+ Type +
+
+ +Connection + + + +
+
+ + + + + + + + + + + +

+ getLastError() → {LibrdKafkaError} +

+ + + + + +
+

Get the last error emitted if it exists.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns the LibrdKafkaError or null if +one hasn't been thrown. +
+ + + +
+
+ Type +
+
+ +LibrdKafkaError + + + +
+
+ + + + + + + + + + + +

+ getMetadata(metadataOptions, cb) +

+ + + + + +
+

Get client metadata. + +Note: using a metadataOptions.topic parameter has a potential side-effect. +A Topic object will be created, if it did not exist yet, with default options +and it will be cached by librdkafka. + +A subsequent call to create the topic object with specific options (e.g. acks) will return +the previous instance and the specific options will be silently ignored. + +To avoid this side effect, the topic object can be created with the expected options before requesting metadata, +or the metadata request can be performed for all topics (by omitting metadataOptions.topic).

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
metadataOptions + + +object + + + + + Metadata options to pass to the client. +
Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + Topic string for which to fetch +metadata
timeout + + +number + + + + + Max time, in ms, to try to fetch +metadata before timing out. Defaults to 3000.
+ +
cb + + +Client~metadataCallback + + + + + Callback to fire with the metadata.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ getWatermarkOffsets(topic, partition) → {Client~watermarkOffsets} +

+ + + + + +
+

Get last known offsets from the client. + +The low offset is updated periodically (if statistics.interval.ms is set) +while the high offset is updated on each fetched message set from the +broker. + +If there is no cached offset (either low or high, or both), then this will +throw an error.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + Topic to recieve offsets from.
partition + + +number + + + + + Partition of the provided topic to recieve offsets from
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+
+
+ - Throws when there is no offset stored +
+
+
+
+
+
+ Type +
+
+ +LibrdKafkaError + + + +
+
+
+
+
+ + + + + +
Returns:
+ + +
+ - Returns an object with a high and low property, specifying +the high and low offsets for the topic partition +
+ + + +
+
+ Type +
+
+ +Client~watermarkOffsets + + + +
+
+ + + + + + + + + + + +

+ isConnected() → {boolean} +

+ + + + + +
+

Whether or not we are connected to Kafka.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Whether we are connected. +
+ + + +
+
+ Type +
+
+ +boolean + + + +
+
+ + + + + + + + + + + +

+ offsetsForTimes(toppars, timeout, cb) +

+ + + + + +
+

Query offsets for times from the broker. + +This function makes a call to the broker to get the offsets for times specified.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
toppars + + +Array.<TopicPartition> + + + + + Array of topic partitions. The offset in these + should instead refer to a timestamp you want + offsets for
timeout + + +number + + + + + Number of ms to wait to recieve a response.
cb + + +Client~offsetsForTimesCallback + + + + + Callback to fire with the filled in offsets.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ offsetsStore(topicPartitions) +

+ + + + + +
+

Store offset for topic partition. + +The offset will be committed (written) to the offset store according to the auto commit interval, +if auto commit is on, or next manual offset if not. + +enable.auto.offset.store must be set to false to use this API,

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topicPartitions + + +Array.<TopicPartition> + + + + + Topic partitions with offsets to store offsets for.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + +
See:
+
+ +
+ + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+
+
+ - Throws when there is no offset stored +
+
+
+
+
+
+ Type +
+
+ +LibrdKafkaError + + + +
+
+
+
+
+ + + + + + + + + + + + + +

+ pause(topicPartitions) +

+ + + + + +
+

Pause producing or consumption for the provided list of partitions.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topicPartitions + + +Array.<TopicPartition> + + + + + List of topics to pause consumption on.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+
+
+ - Throws when there is no offset stored +
+
+
+
+
+
+ Type +
+
+ +LibrdKafkaError + + + +
+
+
+
+
+ + + + + + + + + + + + + +

+ position(toppars) → {array} +

+ + + + + +
+

Get the current offset position of the KafkaConsumer + +Returns a list of RdKafka::TopicPartitions on success, or throws +an error on failure

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
toppars + + +Array.<TopicPartition> + + + + + List of topic partitions to query +position for. Defaults to the current assignment
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+ + - Throws when an error code came back from native land + +
+ + + + + +
Returns:
+ + +
+ - TopicPartition array. Each item is an object with +an offset, topic, and partition +
+ + + +
+
+ Type +
+
+ +array + + + +
+
+ + + + + + + + + + + +

+ queryWatermarkOffsets(topic, partition, timeout, cb) +

+ + + + + +
+

Query offsets from the broker. + +This function makes a call to the broker to get the current low (oldest/beginning) +and high (newest/end) offsets for a topic partition.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + Topic to recieve offsets from.
partition + + +number + + + + + Partition of the provided topic to recieve offsets from
timeout + + +number + + + + + Number of ms to wait to recieve a response.
cb + + +Client~watermarkOffsetsCallback + + + + + Callback to fire with the offsets.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ resume(topicPartitions) +

+ + + + + +
+

Resume consumption for the provided list of partitions.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topicPartitions + + +Array.<TopicPartition> + + + + + List of topic partitions to resume consumption on.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+
+
+ - Throws when there is no offset stored +
+
+
+
+
+
+ Type +
+
+ +LibrdKafkaError + + + +
+
+
+
+
+ + + + + + + + + + + + + +

+ seek(toppar, timeout, cb) → {Client} +

+ + + + + +
+

Seek consumer for topic+partition to offset which is either an absolute or +logical offset. + +Does not return anything, as it is asynchronous. There are special cases +with the timeout parameter. The consumer must have previously been assigned +to topics and partitions that seek seeks to seek.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
toppar + + +TopicPartition + + + + + Topic partition to seek.
timeout + + +number + + + + + Number of ms to block before calling back +and erroring. If the parameter is null or 0, the call will not wait +for the seek to be performed. Essentially, it will happen in the background +with no notification
cb + + +function + + + + + Callback method to execute when finished or timed +out. If the seek timed out, the internal state of the consumer is unknown.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns itself +
+ + + +
+
+ Type +
+
+ +Client + + + +
+
+ + + + + + +

+ +

+ + + + + + + + + + +

+ setDefaultConsumeLoopTimeoutDelay(intervalMs) +

+ + + + + +
+

Set the default sleep delay for the next consume loop after the previous one has timed out.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
intervalMs + + +number + + + + + number of milliseconds to sleep after a message fetch has timed out
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ setDefaultConsumeTimeout(timeoutMs) +

+ + + + + +
+

Set the default consume timeout provided to c++land

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
timeoutMs + + +number + + + + + number of milliseconds to wait for a message to be fetched
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ subscribe(topics) → {KafkaConsumer} +

+ + + + + +
+

Subscribe to an array of topics (synchronously). + +This operation is pretty fast because it just sets +an assignment in librdkafka. This is the recommended +way to deal with subscriptions in a situation where you +will be reading across multiple files or as part of +your configure-time initialization. + +This is also a good way to do it for streams.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topics + + +array + + + + + An array of topics to listen to
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+ + - Throws when an error code came back from native land + +
+ + + + + +
Returns:
+ + +
+ - Returns itself. +
+ + + +
+
+ Type +
+
+ +KafkaConsumer + + + +
+
+ + + + + + + + + + + +

+ subscription() → {array} +

+ + + + + +
+

Get the current subscription of the KafkaConsumer + +Get a list of subscribed topics. Should generally match what you +passed on via subscribe

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + +
See:
+
+
    +
  • KafkaConsumer::subscribe
  • +
+
+ + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+ + - Throws when an error code came back from native land + +
+ + + + + +
Returns:
+ + +
+ - Array of strings to show the current assignment +
+ + + +
+
+ Type +
+
+ +array + + + +
+
+ + + + + + + + + + + +

+ unassign() → {Client} +

+ + + + + +
+

Unassign the consumer from its assigned partitions and topics.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns itself +
+ + + +
+
+ Type +
+
+ +Client + + + +
+
+ + + + + + + + + + + +

+ unsubscribe() → {KafkaConsumer} +

+ + + + + +
+

Unsubscribe from all currently subscribed topics + +Before you subscribe to new topics you need to unsubscribe +from the old ones, if there is an active subscription. +Otherwise, you will get an error because there is an +existing subscription.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+ + - Throws when an error code comes back from native land + +
+ + + + + +
Returns:
+ + +
+ - Returns itself. +
+ + + +
+
+ Type +
+
+ +KafkaConsumer + + + +
+
+ + + + + + + + + + +
+
+

Type Definitions:

+
+ +
+ + + + +

Message

+ + + + +
+

+ KafkaConsumer message. + +This is the representation of a message read from Kafka. +

+
+ + + +
Type:
+
    +
  • + +object + + + +
  • +
+ + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
value + + +buffer + + + + + the message buffer from Kafka.
topic + + +string + + + + + the topic name
partition + + +number + + + + + the partition on the topic the +message was on
offset + + +number + + + + + the offset of the message
key + + +string + + + + + the message key
size + + +number + + + + + message size, in bytes.
timestamp + + +number + + + + + message timestamp
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + +

+ readCallback(err, message) +

+ + + + + +
+

This callback returns the message read from Kafka.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
err + + +LibrdKafkaError + + + + + An error, if one occurred while reading +the data.
message + + +KafkaConsumer~Message + + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +

Events

+ + + + + + +

+ data +

+ + + + + +
+

Data event. called whenever a message is received.

+
+ + + + + +
+
+

Type:

+
+
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ disconnected +

+ + + + + +
+

Disconnect event. Called after disconnection is finished.

+
+ + + + + +
+
+

Type:

+
+
+ +
    +
  • + +object + + + +
  • +
+ + + + + + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
connectionOpened + + +date + + + + + when the connection was opened.
+ + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ ready +

+ + + + + +
+

Ready event. Called when the Client connects successfully

+
+ + + + + +
+
+

Type:

+
+
+ +
    +
  • + +object + + + +
  • +
+ + + + + + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
name + + +string + + + + + the name of the broker.
+ + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ +
+ +
+ + +
+ + + + + + + + + + \ No newline at end of file diff --git a/current/KafkaConsumerStream.html b/current/KafkaConsumerStream.html new file mode 100644 index 00000000..a5595d45 --- /dev/null +++ b/current/KafkaConsumerStream.html @@ -0,0 +1,412 @@ + + + + + JSDoc: Class: KafkaConsumerStream + + + + + + + + + + + + + + + +
+
+ +
+

Class: KafkaConsumerStream

+ + + + + + +
+ +
+ +

KafkaConsumerStream

+ + +
+ +
+
+ + + + + +

+ new KafkaConsumerStream(consumer, options) +

+ + + + + +
+

ReadableStream integrating with the Kafka Consumer. + +This class is used to read data off of Kafka in a streaming way. It is +useful if you'd like to have a way to pipe Kafka into other systems. You +should generally not make this class yourself, as it is not even exposed +as part of module.exports. Instead, you should KafkaConsumer.createReadStream. + +The stream implementation is slower than the continuous subscribe callback. +If you don't care so much about backpressure and would rather squeeze +out performance, use that method. Using the stream will ensure you read only +as fast as you write. + +The stream detects if Kafka is already connected. If it is, it will begin +reading. If it is not, it will connect and read when it is ready. + +This stream operates in objectMode. It streams {Consumer~Message}

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
consumer + + +Consumer + + + + + The Kafka Consumer object.
options + + +object + + + + + Options to configure the stream. +
Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
waitInterval + + +number + + + + + Number of ms to wait if Kafka reports +that it has timed out or that we are out of messages (right now).
topics + + +array + + + + + Array of topics, or a function that parses +metadata into an array of topics
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + +
See:
+
+
    +
  • Consumer~Message
  • +
+
+ + + +
+ + + + + + + + + + + + + + + + + +
+ + +
+
+

Extends:

+
+ +
+ + + + + +
    +
  • stream.Readable
  • +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ +
+ +
+ + +
+ + + + + + + + + + \ No newline at end of file diff --git a/current/LibrdKafkaError.html b/current/LibrdKafkaError.html new file mode 100644 index 00000000..cd7129a1 --- /dev/null +++ b/current/LibrdKafkaError.html @@ -0,0 +1,4473 @@ + + + + + JSDoc: Class: LibrdKafkaError + + + + + + + + + + + + + + + +
+
+ +
+

Class: LibrdKafkaError

+ + + + + + +
+ +
+ +

LibrdKafkaError

+ + +
+ +
+
+ + + + + +

+ new LibrdKafkaError(e) +

+ + + + + +
+

Representation of a librdkafka error + +This can be created by giving either another error +to piggy-back on. In this situation it tries to parse +the error string to figure out the intent. However, more usually, +it is constructed by an error object created by a C++ Baton.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
e + + +object +| + +error + + + + + An object or error to wrap
+ + + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
message + + +string + + + + + The error message
code + + +number + + + + + The error code.
origin + + +string + + + + + The origin, whether it is local or remote
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+
+

Members:

+
+ +
+ + + + +

(static, constant) codes :number

+ + + + +
+

+ Enum for identifying errors reported by the library + +You can find this list in the C++ code at +https://github.com/edenhill/librdkafka/blob/master/src-cpp/rdkafkacpp.h#L148 +

+
+ + + +
Type:
+
    +
  • + +number + + + +
  • +
+ + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
ERR__BEGIN + + +number + + + + + Begin internal error codes
ERR__BAD_MSG + + +number + + + + + Received message is incorrect
ERR__BAD_COMPRESSION + + +number + + + + + Bad/unknown compression
ERR__DESTROY + + +number + + + + + Broker is going away
ERR__FAIL + + +number + + + + + Generic failure
ERR__TRANSPORT + + +number + + + + + Broker transport failure
ERR__CRIT_SYS_RESOURCE + + +number + + + + + Critical system resource
ERR__RESOLVE + + +number + + + + + Failed to resolve broker
ERR__MSG_TIMED_OUT + + +number + + + + + Produced message timed out
ERR__PARTITION_EOF + + +number + + + + + Reached the end of the topic+partition queue on + the broker. Not really an error. + This event is disabled by default, + see the `enable.partition.eof` configuration property.
ERR__UNKNOWN_PARTITION + + +number + + + + + Permanent: Partition does not exist in cluster.
ERR__FS + + +number + + + + + File or filesystem error
ERR__UNKNOWN_TOPIC + + +number + + + + + Permanent: Topic does not exist in cluster.
ERR__ALL_BROKERS_DOWN + + +number + + + + + All broker connections are down.
ERR__INVALID_ARG + + +number + + + + + Invalid argument, or invalid configuration
ERR__TIMED_OUT + + +number + + + + + Operation timed out
ERR__QUEUE_FULL + + +number + + + + + Queue is full
ERR__ISR_INSUFF + + +number + + + + + ISR count < required.acks
ERR__NODE_UPDATE + + +number + + + + + Broker node update
ERR__SSL + + +number + + + + + SSL error
ERR__WAIT_COORD + + +number + + + + + Waiting for coordinator to become available.
ERR__UNKNOWN_GROUP + + +number + + + + + Unknown client group
ERR__IN_PROGRESS + + +number + + + + + Operation in progress
ERR__PREV_IN_PROGRESS + + +number + + + + + Previous operation in progress, wait for it to finish.
ERR__EXISTING_SUBSCRIPTION + + +number + + + + + This operation would interfere with an existing subscription
ERR__ASSIGN_PARTITIONS + + +number + + + + + Assigned partitions (rebalance_cb)
ERR__REVOKE_PARTITIONS + + +number + + + + + Revoked partitions (rebalance_cb)
ERR__CONFLICT + + +number + + + + + Conflicting use
ERR__STATE + + +number + + + + + Wrong state
ERR__UNKNOWN_PROTOCOL + + +number + + + + + Unknown protocol
ERR__NOT_IMPLEMENTED + + +number + + + + + Not implemented
ERR__AUTHENTICATION + + +number + + + + + Authentication failure
ERR__NO_OFFSET + + +number + + + + + No stored offset
ERR__OUTDATED + + +number + + + + + Outdated
ERR__TIMED_OUT_QUEUE + + +number + + + + + Timed out in queue
ERR__UNSUPPORTED_FEATURE + + +number + + + + + Feature not supported by broker
ERR__WAIT_CACHE + + +number + + + + + Awaiting cache update
ERR__INTR + + +number + + + + + Operation interrupted
ERR__KEY_SERIALIZATION + + +number + + + + + Key serialization error
ERR__VALUE_SERIALIZATION + + +number + + + + + Value serialization error
ERR__KEY_DESERIALIZATION + + +number + + + + + Key deserialization error
ERR__VALUE_DESERIALIZATION + + +number + + + + + Value deserialization error
ERR__PARTIAL + + +number + + + + + Partial response
ERR__READ_ONLY + + +number + + + + + Modification attempted on read-only object
ERR__NOENT + + +number + + + + + No such entry / item not found
ERR__UNDERFLOW + + +number + + + + + Read underflow
ERR__INVALID_TYPE + + +number + + + + + Invalid type
ERR__RETRY + + +number + + + + + Retry operation
ERR__PURGE_QUEUE + + +number + + + + + Purged in queue
ERR__PURGE_INFLIGHT + + +number + + + + + Purged in flight
ERR__FATAL + + +number + + + + + Fatal error: see RdKafka::Handle::fatal_error()
ERR__INCONSISTENT + + +number + + + + + Inconsistent state
ERR__GAPLESS_GUARANTEE + + +number + + + + + Gap-less ordering would not be guaranteed if proceeding
ERR__MAX_POLL_EXCEEDED + + +number + + + + + Maximum poll interval exceeded
ERR__UNKNOWN_BROKER + + +number + + + + + Unknown broker
ERR__NOT_CONFIGURED + + +number + + + + + Functionality not configured
ERR__FENCED + + +number + + + + + Instance has been fenced
ERR__APPLICATION + + +number + + + + + Application generated error
ERR__ASSIGNMENT_LOST + + +number + + + + + Assignment lost
ERR__NOOP + + +number + + + + + No operation performed
ERR__AUTO_OFFSET_RESET + + +number + + + + + No offset to automatically reset to
ERR__LOG_TRUNCATION + + +number + + + + + Partition log truncation detected
ERR__END + + +number + + + + + End internal error codes
ERR_UNKNOWN + + +number + + + + + Unknown broker error
ERR_NO_ERROR + + +number + + + + + Success
ERR_OFFSET_OUT_OF_RANGE + + +number + + + + + Offset out of range
ERR_INVALID_MSG + + +number + + + + + Invalid message
ERR_UNKNOWN_TOPIC_OR_PART + + +number + + + + + Unknown topic or partition
ERR_INVALID_MSG_SIZE + + +number + + + + + Invalid message size
ERR_LEADER_NOT_AVAILABLE + + +number + + + + + Leader not available
ERR_NOT_LEADER_FOR_PARTITION + + +number + + + + + Not leader for partition
ERR_REQUEST_TIMED_OUT + + +number + + + + + Request timed out
ERR_BROKER_NOT_AVAILABLE + + +number + + + + + Broker not available
ERR_REPLICA_NOT_AVAILABLE + + +number + + + + + Replica not available
ERR_MSG_SIZE_TOO_LARGE + + +number + + + + + Message size too large
ERR_STALE_CTRL_EPOCH + + +number + + + + + StaleControllerEpochCode
ERR_OFFSET_METADATA_TOO_LARGE + + +number + + + + + Offset metadata string too large
ERR_NETWORK_EXCEPTION + + +number + + + + + Broker disconnected before response received
ERR_COORDINATOR_LOAD_IN_PROGRESS + + +number + + + + + Coordinator load in progress
ERR_GROUP_LOAD_IN_PROGRESS + + +number + + + + + Group coordinator load in progress
ERR_COORDINATOR_NOT_AVAILABLE + + +number + + + + + Coordinator not available
ERR_GROUP_COORDINATOR_NOT_AVAILABLE + + +number + + + + + Group coordinator not available
ERR_NOT_COORDINATOR + + +number + + + + + Not coordinator
ERR_NOT_COORDINATOR_FOR_GROUP + + +number + + + + + Not coordinator for group
ERR_TOPIC_EXCEPTION + + +number + + + + + Invalid topic
ERR_RECORD_LIST_TOO_LARGE + + +number + + + + + Message batch larger than configured server segment size
ERR_NOT_ENOUGH_REPLICAS + + +number + + + + + Not enough in-sync replicas
ERR_NOT_ENOUGH_REPLICAS_AFTER_APPEND + + +number + + + + + Message(s) written to insufficient number of in-sync replicas
ERR_INVALID_REQUIRED_ACKS + + +number + + + + + Invalid required acks value
ERR_ILLEGAL_GENERATION + + +number + + + + + Specified group generation id is not valid
ERR_INCONSISTENT_GROUP_PROTOCOL + + +number + + + + + Inconsistent group protocol
ERR_INVALID_GROUP_ID + + +number + + + + + Invalid group.id
ERR_UNKNOWN_MEMBER_ID + + +number + + + + + Unknown member
ERR_INVALID_SESSION_TIMEOUT + + +number + + + + + Invalid session timeout
ERR_REBALANCE_IN_PROGRESS + + +number + + + + + Group rebalance in progress
ERR_INVALID_COMMIT_OFFSET_SIZE + + +number + + + + + Commit offset data size is not valid
ERR_TOPIC_AUTHORIZATION_FAILED + + +number + + + + + Topic authorization failed
ERR_GROUP_AUTHORIZATION_FAILED + + +number + + + + + Group authorization failed
ERR_CLUSTER_AUTHORIZATION_FAILED + + +number + + + + + Cluster authorization failed
ERR_INVALID_TIMESTAMP + + +number + + + + + Invalid timestamp
ERR_UNSUPPORTED_SASL_MECHANISM + + +number + + + + + Unsupported SASL mechanism
ERR_ILLEGAL_SASL_STATE + + +number + + + + + Illegal SASL state
ERR_UNSUPPORTED_VERSION + + +number + + + + + Unuspported version
ERR_TOPIC_ALREADY_EXISTS + + +number + + + + + Topic already exists
ERR_INVALID_PARTITIONS + + +number + + + + + Invalid number of partitions
ERR_INVALID_REPLICATION_FACTOR + + +number + + + + + Invalid replication factor
ERR_INVALID_REPLICA_ASSIGNMENT + + +number + + + + + Invalid replica assignment
ERR_INVALID_CONFIG + + +number + + + + + Invalid config
ERR_NOT_CONTROLLER + + +number + + + + + Not controller for cluster
ERR_INVALID_REQUEST + + +number + + + + + Invalid request
ERR_UNSUPPORTED_FOR_MESSAGE_FORMAT + + +number + + + + + Message format on broker does not support request
ERR_POLICY_VIOLATION + + +number + + + + + Policy violation
ERR_OUT_OF_ORDER_SEQUENCE_NUMBER + + +number + + + + + Broker received an out of order sequence number
ERR_DUPLICATE_SEQUENCE_NUMBER + + +number + + + + + Broker received a duplicate sequence number
ERR_INVALID_PRODUCER_EPOCH + + +number + + + + + Producer attempted an operation with an old epoch
ERR_INVALID_TXN_STATE + + +number + + + + + Producer attempted a transactional operation in an invalid state
ERR_INVALID_PRODUCER_ID_MAPPING + + +number + + + + + Producer attempted to use a producer id which is not + currently assigned to its transactional id
ERR_INVALID_TRANSACTION_TIMEOUT + + +number + + + + + Transaction timeout is larger than the maximum + value allowed by the broker's max.transaction.timeout.ms
ERR_CONCURRENT_TRANSACTIONS + + +number + + + + + Producer attempted to update a transaction while another + concurrent operation on the same transaction was ongoing
ERR_TRANSACTION_COORDINATOR_FENCED + + +number + + + + + Indicates that the transaction coordinator sending a + WriteTxnMarker is no longer the current coordinator for a + given producer
ERR_TRANSACTIONAL_ID_AUTHORIZATION_FAILED + + +number + + + + + Transactional Id authorization failed
ERR_SECURITY_DISABLED + + +number + + + + + Security features are disabled
ERR_OPERATION_NOT_ATTEMPTED + + +number + + + + + Operation not attempted
ERR_KAFKA_STORAGE_ERROR + + +number + + + + + Disk error when trying to access log file on the disk
ERR_LOG_DIR_NOT_FOUND + + +number + + + + + The user-specified log directory is not found in the broker config
ERR_SASL_AUTHENTICATION_FAILED + + +number + + + + + SASL Authentication failed
ERR_UNKNOWN_PRODUCER_ID + + +number + + + + + Unknown Producer Id
ERR_REASSIGNMENT_IN_PROGRESS + + +number + + + + + Partition reassignment is in progress
ERR_DELEGATION_TOKEN_AUTH_DISABLED + + +number + + + + + Delegation Token feature is not enabled
ERR_DELEGATION_TOKEN_NOT_FOUND + + +number + + + + + Delegation Token is not found on server
ERR_DELEGATION_TOKEN_OWNER_MISMATCH + + +number + + + + + Specified Principal is not valid Owner/Renewer
ERR_DELEGATION_TOKEN_REQUEST_NOT_ALLOWED + + +number + + + + + Delegation Token requests are not allowed on this connection
ERR_DELEGATION_TOKEN_AUTHORIZATION_FAILED + + +number + + + + + Delegation Token authorization failed
ERR_DELEGATION_TOKEN_EXPIRED + + +number + + + + + Delegation Token is expired
ERR_INVALID_PRINCIPAL_TYPE + + +number + + + + + Supplied principalType is not supported
ERR_NON_EMPTY_GROUP + + +number + + + + + The group is not empty
ERR_GROUP_ID_NOT_FOUND + + +number + + + + + The group id does not exist
ERR_FETCH_SESSION_ID_NOT_FOUND + + +number + + + + + The fetch session ID was not found
ERR_INVALID_FETCH_SESSION_EPOCH + + +number + + + + + The fetch session epoch is invalid
ERR_LISTENER_NOT_FOUND + + +number + + + + + No matching listener
ERR_TOPIC_DELETION_DISABLED + + +number + + + + + Topic deletion is disabled
ERR_FENCED_LEADER_EPOCH + + +number + + + + + Leader epoch is older than broker epoch
ERR_UNKNOWN_LEADER_EPOCH + + +number + + + + + Leader epoch is newer than broker epoch
ERR_UNSUPPORTED_COMPRESSION_TYPE + + +number + + + + + Unsupported compression type
ERR_STALE_BROKER_EPOCH + + +number + + + + + Broker epoch has changed
ERR_OFFSET_NOT_AVAILABLE + + +number + + + + + Leader high watermark is not caught up
ERR_MEMBER_ID_REQUIRED + + +number + + + + + Group member needs a valid member ID
ERR_PREFERRED_LEADER_NOT_AVAILABLE + + +number + + + + + Preferred leader was not available
ERR_GROUP_MAX_SIZE_REACHED + + +number + + + + + Consumer group has reached maximum size
ERR_FENCED_INSTANCE_ID + + +number + + + + + Static consumer fenced by other consumer with same +group.instance.id.
ERR_ELIGIBLE_LEADERS_NOT_AVAILABLE + + +number + + + + + Eligible partition leaders are not available
ERR_ELECTION_NOT_NEEDED + + +number + + + + + Leader election not needed for topic partition
ERR_NO_REASSIGNMENT_IN_PROGRESS + + +number + + + + + No partition reassignment is in progress
ERR_GROUP_SUBSCRIBED_TO_TOPIC + + +number + + + + + Deleting offsets of a topic while the consumer group is + subscribed to it
ERR_INVALID_RECORD + + +number + + + + + Broker failed to validate record
ERR_UNSTABLE_OFFSET_COMMIT + + +number + + + + + There are unstable offsets that need to be cleared
ERR_THROTTLING_QUOTA_EXCEEDED + + +number + + + + + Throttling quota has been exceeded
ERR_PRODUCER_FENCED + + +number + + + + + There is a newer producer with the same transactionalId + which fences the current one
ERR_RESOURCE_NOT_FOUND + + +number + + + + + Request illegally referred to resource that does not exist
ERR_DUPLICATE_RESOURCE + + +number + + + + + Request illegally referred to the same resource twice
ERR_UNACCEPTABLE_CREDENTIAL + + +number + + + + + Requested credential would not meet criteria for acceptability
ERR_INCONSISTENT_VOTER_SET + + +number + + + + + Indicates that the either the sender or recipient of a + voter-only request is not one of the expected voters
ERR_INVALID_UPDATE_VERSION + + +number + + + + + Invalid update version
ERR_FEATURE_UPDATE_FAILED + + +number + + + + + Unable to update finalized features due to server error
ERR_PRINCIPAL_DESERIALIZATION_FAILURE + + +number + + + + + Request principal deserialization failed during forwarding
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + +
+ +
+ + + + +
+ +
+ +
+ + +
+ + + + + + + + + + \ No newline at end of file diff --git a/current/Producer.html b/current/Producer.html new file mode 100644 index 00000000..52630751 --- /dev/null +++ b/current/Producer.html @@ -0,0 +1,4650 @@ + + + + + JSDoc: Class: Producer + + + + + + + + + + + + + + + +
+
+ +
+

Class: Producer

+ + + + + + +
+ +
+ +

Producer

+ + +
+ +
+
+ + + + + +

+ new Producer(conf, topicConf) +

+ + + + + +
+

Producer class for sending messages to Kafka + +This is the main entry point for writing data to Kafka. You +configure this like you do any other client, with a global +configuration and default topic configuration. + +Once you instantiate this object, you need to connect to it first. +This allows you to get the metadata and make sure the connection +can be made before you depend on it. After that, problems with +the connection will by brought down by using poll, which automatically +runs when a transaction is made on the object.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
conf + + +object + + + + + Key value pairs to configure the producer
topicConf + + +object + + + + + Key value pairs to create a default +topic configuration
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + +
+
+

Extends:

+
+ +
+ + + + + + + + + + + + + + + + + + + +
+
+

Members:

+
+ +
+ + + + +

_disconnect

+ + + + +
+

+ Save the base disconnect method here so we can overwrite it and add a flush +

+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + +

_metadata :Client~Metadata

+ + + + +
+

+ Metadata object. Starts out empty but will be filled with information after +the initial connect. +

+
+ + + +
Type:
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + +
+
+

Methods:

+
+ +
+ + + + + + + +

+ (static) createWriteStream(conf, topicConf, streamOptions) → {ProducerStream} +

+ + + + + +
+

Create a write stream interface for a producer. + +This stream does not run in object mode. It only takes buffers of data.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
conf + + +object + + + + + Key value pairs to configure the producer
topicConf + + +object + + + + + Key value pairs to create a default +topic configuration
streamOptions + + +object + + + + + Stream options
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns the write stream for writing to Kafka. +
+ + + +
+
+ Type +
+
+ +ProducerStream + + + +
+
+ + + + + + + + + + + +

+ abortTransaction(timeout, cb) → {Producer} +

+ + + + + +
+

Aborts the ongoing transaction.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
timeout + + +number + + + + + Number of milliseconds to try to abort, defaults to 5 seconds
cb + + +function + + + + + Callback to return when operation is completed
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ beginTransaction() → {Producer} +

+ + + + + +
+

Begin a transaction. + +'initTransaction' must have been called successfully (once) before this function is called.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ commitTransaction(timeout, cb) → {Producer} +

+ + + + + +
+

Commit the current transaction (as started with 'beginTransaction').

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
timeout + + +number + + + + + Number of milliseconds to try to commit before giving up, defaults to 5 seconds
cb + + +function + + + + + Callback to return when operation is completed
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ connect(metadataOptions, cb) → {Client} +

+ + + + + +
+

Connect to the broker and receive its metadata. + +Connects to a broker by establishing the client and fetches its metadata.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
metadataOptions + + +object + + + + + Options to be sent to the metadata. +
Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + Topic to fetch metadata for. Empty string is treated as empty.
allTopics + + +boolean + + + + + Fetch metadata for all topics, not just the ones we know about.
timeout + + +int + + + + + The timeout, in ms, to allow for fetching metadata. Defaults to 30000ms
+ +
cb + + +Client~connectionCallback + + + + + Callback that indicates we are +done connecting.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns itself. +
+ + + +
+
+ Type +
+
+ +Client + + + +
+
+ + + + + + + + + + + +

+ connectedTime() → {number} +

+ + + + + +
+

Find out how long we have been connected to Kafka.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Milliseconds since the connection has been established. +
+ + + +
+
+ Type +
+
+ +number + + + +
+
+ + + + + + + + + + + +

+ disconnect(timeout, cb) +

+ + + + + +
+

Disconnect the producer + +Flush everything on the internal librdkafka producer buffer. Then disconnect

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
timeout + + +number + + + + + Number of milliseconds to try to flush before giving up, defaults to 5 seconds.
cb + + +function + + + + + The callback to fire when
+ + + + + + +
+ + + + + + + + +
Overrides:
+
+ + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ flush(timeout, callback) → {Producer} +

+ + + + + +
+

Flush the producer + +Flush everything on the internal librdkafka producer buffer. Do this before +disconnects usually

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
timeout + + +number + + + + + Number of milliseconds to try to flush before giving up.
callback + + +function + + + + + Callback to fire when the flush is done.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ getClient() → {Connection} +

+ + + + + +
+

Get the native Kafka client. + +You probably shouldn't use this, but if you want to execute methods directly +on the c++ wrapper you can do it here.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + +
See:
+
+
    +
  • connection.cc
  • +
+
+ + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - The native Kafka client. +
+ + + +
+
+ Type +
+
+ +Connection + + + +
+
+ + + + + + + + + + + +

+ getLastError() → {LibrdKafkaError} +

+ + + + + +
+

Get the last error emitted if it exists.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns the LibrdKafkaError or null if +one hasn't been thrown. +
+ + + +
+
+ Type +
+
+ +LibrdKafkaError + + + +
+
+ + + + + + + + + + + +

+ getMetadata(metadataOptions, cb) +

+ + + + + +
+

Get client metadata. + +Note: using a metadataOptions.topic parameter has a potential side-effect. +A Topic object will be created, if it did not exist yet, with default options +and it will be cached by librdkafka. + +A subsequent call to create the topic object with specific options (e.g. acks) will return +the previous instance and the specific options will be silently ignored. + +To avoid this side effect, the topic object can be created with the expected options before requesting metadata, +or the metadata request can be performed for all topics (by omitting metadataOptions.topic).

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
metadataOptions + + +object + + + + + Metadata options to pass to the client. +
Properties
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + Topic string for which to fetch +metadata
timeout + + +number + + + + + Max time, in ms, to try to fetch +metadata before timing out. Defaults to 3000.
+ +
cb + + +Client~metadataCallback + + + + + Callback to fire with the metadata.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ initTransactions(timeout, cb) → {Producer} +

+ + + + + +
+

Init a transaction. + +Initialize transactions, this is only performed once per transactional producer.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
timeout + + +number + + + + + Number of milliseconds to try to initialize before giving up, defaults to 5 seconds.
cb + + +function + + + + + Callback to return when operation is completed
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ isConnected() → {boolean} +

+ + + + + +
+

Whether or not we are connected to Kafka.

+
+ + + + + + + + + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Whether we are connected. +
+ + + +
+
+ Type +
+
+ +boolean + + + +
+
+ + + + + + + + + + + +

+ offsetsForTimes(toppars, timeout, cb) +

+ + + + + +
+

Query offsets for times from the broker. + +This function makes a call to the broker to get the offsets for times specified.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
toppars + + +Array.<TopicPartition> + + + + + Array of topic partitions. The offset in these + should instead refer to a timestamp you want + offsets for
timeout + + +number + + + + + Number of ms to wait to recieve a response.
cb + + +Client~offsetsForTimesCallback + + + + + Callback to fire with the filled in offsets.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ poll() → {Producer} +

+ + + + + +
+

Poll for events + +We need to run poll in order to learn about new events that have occurred. +This is no longer done automatically when we produce, so we need to run +it manually, or set the producer to automatically poll.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ produce(topic, partition, message, key, timestamp, opaque, headers) → {boolean} +

+ + + + + +
+

Produce a message to Kafka synchronously. + +This is the method mainly used in this class. Use it to produce +a message to Kafka. + +When this is sent off, there is no guarantee it is delivered. If you need +guaranteed delivery, change your *acks* settings, or use delivery reports.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + The topic name to produce to.
partition + + +number +| + +null + + + + + The partition number to produce to.
message + + +Buffer +| + +null + + + + + The message to produce.
key + + +string + + + + + The key associated with the message.
timestamp + + +number +| + +null + + + + + Timestamp to send with the message.
opaque + + +object + + + + + An object you want passed along with this message, if provided.
headers + + +object + + + + + A list of custom key value pairs that provide message metadata.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + +
See:
+
+ +
+ + + +
+ + + + + + + + + + + +
+
+

Throws:

+
+
+ + + + +
+
+
+ - Throws a librdkafka error if it failed. +
+
+
+
+
+
+ Type +
+
+ +LibrdKafkaError + + + +
+
+
+
+
+ + + + + +
Returns:
+ + +
+ - returns an error if it failed, or true if not +
+ + + +
+
+ Type +
+
+ +boolean + + + +
+
+ + + + + + + + + + + +

+ queryWatermarkOffsets(topic, partition, timeout, cb) +

+ + + + + +
+

Query offsets from the broker. + +This function makes a call to the broker to get the current low (oldest/beginning) +and high (newest/end) offsets for a topic partition.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
topic + + +string + + + + + Topic to recieve offsets from.
partition + + +number + + + + + Partition of the provided topic to recieve offsets from
timeout + + +number + + + + + Number of ms to wait to recieve a response.
cb + + +Client~watermarkOffsetsCallback + + + + + Callback to fire with the offsets.
+ + + + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ sendOffsetsToTransaction(offsets, consumer, timeout, cb) → {Producer} +

+ + + + + +
+

Send the current offsets of the consumer to the ongoing transaction.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
offsets + + +number + + + + + Offsets to send as part of the next commit
consumer + + +Consumer + + + + + An instance of the consumer
timeout + + +number + + + + + Number of milliseconds to try to send offsets, defaults to 5 seconds
cb + + +function + + + + + Callback to return when operation is completed
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + + +

+ setPollInterval(interval) → {Producer} +

+ + + + + +
+

Set automatic polling for events. + +We need to run poll in order to learn about new events that have occurred. +If you would like this done on an interval with disconnects and reconnections +managed, you can do it here

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
interval + + +number + + + + + Interval, in milliseconds, to poll
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - returns itself. +
+ + + +
+
+ Type +
+
+ +Producer + + + +
+
+ + + + + + + + + + +
+
+

Type Definitions:

+
+ +
+ + + + +

Message

+ + + + +
+

+ Producer message. This is sent to the wrapper, not received from it +

+
+ + + +
Type:
+
    +
  • + +object + + + +
  • +
+ + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
message + + +string +| + +buffer + + + + + The buffer to send to Kafka.
topic + + +Topic + + + + + The Kafka topic to produce to.
partition + + +number + + + + + The partition to produce to. Defaults to +the partitioner
key + + +string + + + + + The key string to use for the message.
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + +
See:
+
+
    +
  • Consumer~Message
  • +
+
+ + + +
+ + + + + + + + + + +

Events

+ + + + + + +

+ disconnected +

+ + + + + +
+

Disconnect event. Called after disconnection is finished.

+
+ + + + + +
+
+

Type:

+
+
+ +
    +
  • + +object + + + +
  • +
+ + + + + + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
connectionOpened + + +date + + + + + when the connection was opened.
+ + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ ready +

+ + + + + +
+

Ready event. Called when the Client connects successfully

+
+ + + + + +
+
+

Type:

+
+
+ +
    +
  • + +object + + + +
  • +
+ + + + + + + + + +
Properties:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
name + + +string + + + + + the name of the broker.
+ + + + +
+ + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ +
+ +
+ + +
+ + + + + + + + + + \ No newline at end of file diff --git a/current/ProducerStream.html b/current/ProducerStream.html new file mode 100644 index 00000000..d7606703 --- /dev/null +++ b/current/ProducerStream.html @@ -0,0 +1,348 @@ + + + + + JSDoc: Class: ProducerStream + + + + + + + + + + + + + + + +
+
+ +
+

Class: ProducerStream

+ + + + + + +
+ +
+ +

ProducerStream

+ + +
+ +
+
+ + + + + +

+ new ProducerStream(producer, topics, options) +

+ + + + + +
+

Writable stream integrating with the Kafka Producer. + +This class is used to write data to Kafka in a streaming way. It takes +buffers of data and puts them into the appropriate Kafka topic. If you need +finer control over partitions or keys, this is probably not the class for +you. In that situation just use the Producer itself. + +The stream detects if Kafka is already connected. You can safely begin +writing right away. + +This stream does not operate in Object mode and can only be given buffers.

+
+ + + + + + + + + +
+
+

Parameters:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
producer + + +Producer + + + + + The Kafka Producer object.
topics + + +array + + + + + Array of topics
options + + +object + + + + + Topic configuration.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + +
+
+

Extends:

+
+ +
+ + + + + +
    +
  • stream.Writable
  • +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ +
+ +
+ + +
+ + + + + + + + + + \ No newline at end of file diff --git a/current/admin.js.html b/current/admin.js.html new file mode 100644 index 00000000..3aad70e9 --- /dev/null +++ b/current/admin.js.html @@ -0,0 +1,310 @@ + + + + + JSDoc: Source: admin.js + + + + + + + + + + + + + + + +
+
+ +
+

Source: admin.js

+ + + + + + +
+
+
/*
+ * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
+ *
+ * Copyright (c) 2016 Blizzard Entertainment
+ *
+ * This software may be modified and distributed under the terms
+ * of the MIT license.  See the LICENSE.txt file for details.
+ */
+'use strict';
+
+module.exports = {
+  create: createAdminClient,
+};
+
+var Client = require('./client');
+var util = require('util');
+var Kafka = require('../librdkafka');
+var LibrdKafkaError = require('./error');
+var shallowCopy = require('./util').shallowCopy;
+
+/**
+ * Create a new AdminClient for making topics, partitions, and more.
+ *
+ * This is a factory method because it immediately starts an
+ * active handle with the brokers.
+ *
+ */
+function createAdminClient(conf) {
+  var client = new AdminClient(conf);
+
+  // Wrap the error so we throw if it failed with some context
+  LibrdKafkaError.wrap(client.connect(), true);
+
+  // Return the client if we succeeded
+  return client;
+}
+
+/**
+ * AdminClient class for administering Kafka
+ *
+ * This client is the way you can interface with the Kafka Admin APIs.
+ * This class should not be made using the constructor, but instead
+ * should be made using the factory method.
+ *
+ * <code>
+ * var client = AdminClient.create({ ... });
+ * </code>
+ *
+ * Once you instantiate this object, it will have a handle to the kafka broker.
+ * Unlike the other node-rdkafka classes, this class does not ensure that
+ * it is connected to the upstream broker. Instead, making an action will
+ * validate that.
+ *
+ * @param {object} conf - Key value pairs to configure the admin client
+ * topic configuration
+ * @constructor
+ */
+function AdminClient(conf) {
+  if (!(this instanceof AdminClient)) {
+    return new AdminClient(conf);
+  }
+
+  conf = shallowCopy(conf);
+
+  /**
+   * NewTopic model.
+   *
+   * This is the representation of a new message that is requested to be made
+   * using the Admin client.
+   *
+   * @typedef {object} AdminClient~NewTopic
+   * @property {string} topic - the topic name to create
+   * @property {number} num_partitions - the number of partitions to give the topic
+   * @property {number} replication_factor - the replication factor of the topic
+   * @property {object} config - a list of key values to be passed as configuration
+   * for the topic.
+   */
+
+  this._client = new Kafka.AdminClient(conf);
+  this._isConnected = false;
+  this.globalConfig = conf;
+}
+
+/**
+ * Connect using the admin client.
+ *
+ * Should be run using the factory method, so should never
+ * need to be called outside.
+ *
+ * Unlike the other connect methods, this one is synchronous.
+ */
+AdminClient.prototype.connect = function() {
+  LibrdKafkaError.wrap(this._client.connect(), true);
+  this._isConnected = true;
+};
+
+/**
+ * Disconnect the admin client.
+ *
+ * This is a synchronous method, but all it does is clean up
+ * some memory and shut some threads down
+ */
+AdminClient.prototype.disconnect = function() {
+  LibrdKafkaError.wrap(this._client.disconnect(), true);
+  this._isConnected = false;
+};
+
+/**
+ * Create a topic with a given config.
+ *
+ * @param {NewTopic} topic - Topic to create.
+ * @param {number} timeout - Number of milliseconds to wait while trying to create the topic.
+ * @param {function} cb - The callback to be executed when finished
+ */
+AdminClient.prototype.createTopic = function(topic, timeout, cb) {
+  if (!this._isConnected) {
+    throw new Error('Client is disconnected');
+  }
+
+  if (typeof timeout === 'function') {
+    cb = timeout;
+    timeout = 5000;
+  }
+
+  if (!timeout) {
+    timeout = 5000;
+  }
+
+  this._client.createTopic(topic, timeout, function(err) {
+    if (err) {
+      if (cb) {
+        cb(LibrdKafkaError.create(err));
+      }
+      return;
+    }
+
+    if (cb) {
+      cb();
+    }
+  });
+};
+
+/**
+ * Delete a topic.
+ *
+ * @param {string} topic - The topic to delete, by name.
+ * @param {number} timeout - Number of milliseconds to wait while trying to delete the topic.
+ * @param {function} cb - The callback to be executed when finished
+ */
+AdminClient.prototype.deleteTopic = function(topic, timeout, cb) {
+  if (!this._isConnected) {
+    throw new Error('Client is disconnected');
+  }
+
+  if (typeof timeout === 'function') {
+    cb = timeout;
+    timeout = 5000;
+  }
+
+  if (!timeout) {
+    timeout = 5000;
+  }
+
+  this._client.deleteTopic(topic, timeout, function(err) {
+    if (err) {
+      if (cb) {
+        cb(LibrdKafkaError.create(err));
+      }
+      return;
+    }
+
+    if (cb) {
+      cb();
+    }
+  });
+};
+
+/**
+ * Create new partitions for a topic.
+ *
+ * @param {string} topic - The topic to add partitions to, by name.
+ * @param {number} totalPartitions - The total number of partitions the topic should have
+ *                                   after the request
+ * @param {number} timeout - Number of milliseconds to wait while trying to create the partitions.
+ * @param {function} cb - The callback to be executed when finished
+ */
+AdminClient.prototype.createPartitions = function(topic, totalPartitions, timeout, cb) {
+  if (!this._isConnected) {
+    throw new Error('Client is disconnected');
+  }
+
+  if (typeof timeout === 'function') {
+    cb = timeout;
+    timeout = 5000;
+  }
+
+  if (!timeout) {
+    timeout = 5000;
+  }
+
+  this._client.createPartitions(topic, totalPartitions, timeout, function(err) {
+    if (err) {
+      if (cb) {
+        cb(LibrdKafkaError.create(err));
+      }
+      return;
+    }
+
+    if (cb) {
+      cb();
+    }
+  });
+};
+
+
+
+ + + + + +
+ +
+ +
+ + +
+ + + + + + + + + + diff --git a/current/client.js.html b/current/client.js.html new file mode 100644 index 00000000..42f6d5bb --- /dev/null +++ b/current/client.js.html @@ -0,0 +1,651 @@ + + + + + JSDoc: Source: client.js + + + + + + + + + + + + + + + +
+
+ +
+

Source: client.js

+ + + + + + +
+
+
/*
+ * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
+ *
+ * Copyright (c) 2016 Blizzard Entertainment
+ *
+ * This software may be modified and distributed under the terms
+ * of the MIT license.  See the LICENSE.txt file for details.
+ */
+
+module.exports = Client;
+
+var Emitter = require('events').EventEmitter;
+var util = require('util');
+var Kafka = require('../librdkafka.js');
+var assert = require('assert');
+
+var LibrdKafkaError = require('./error');
+
+util.inherits(Client, Emitter);
+
+/**
+ * Base class for Consumer and Producer
+ *
+ * This should not be created independently, but rather is
+ * the base class on which both producer and consumer
+ * get their common functionality.
+ *
+ * @param {object} globalConf - Global configuration in key value pairs.
+ * @param {function} SubClientType - The function representing the subclient
+ * type. In C++ land this needs to be a class that inherits from Connection.
+ * @param {object} topicConf - Topic configuration in key value pairs
+ * @constructor
+ * @extends Emitter
+ */
+function Client(globalConf, SubClientType, topicConf) {
+  if (!(this instanceof Client)) {
+    return new Client(globalConf, SubClientType, topicConf);
+  }
+
+  Emitter.call(this);
+
+  // This superclass must be initialized with the Kafka.{Producer,Consumer}
+  // @example var client = new Client({}, Kafka.Producer);
+  // remember this is a superclass so this will get taken care of in
+  // the producer and consumer main wrappers
+
+  var no_event_cb = globalConf.event_cb === false;
+  topicConf = topicConf || {};
+
+  // delete this because librdkafka will complain since this particular
+  // key is a real conf value
+  delete globalConf.event_cb;
+
+  this._client = new SubClientType(globalConf, topicConf);
+
+  var extractFunctions = function(obj) {
+    obj = obj || {};
+    var obj2 = {};
+    for (var p in obj) {
+      if (typeof obj[p] === "function") {
+        obj2[p] = obj[p];
+      }
+    }
+    return obj2;
+  }
+  this._cb_configs = {
+    global: extractFunctions(globalConf),
+    topic: extractFunctions(topicConf),
+    event: {},
+  }
+
+  if (!no_event_cb) {
+    this._cb_configs.event.event_cb = function(eventType, eventData) {
+      switch (eventType) {
+        case 'error':
+          this.emit('event.error', LibrdKafkaError.create(eventData));
+          break;
+        case 'stats':
+          this.emit('event.stats', eventData);
+          break;
+        case 'log':
+          this.emit('event.log', eventData);
+          break;
+        default:
+          this.emit('event.event', eventData);
+          this.emit('event.' + eventType, eventData);
+      }
+    }.bind(this);
+  }
+
+  this.metrics = {};
+  this._isConnected = false;
+  this.errorCounter = 0;
+
+  /**
+   * Metadata object. Starts out empty but will be filled with information after
+   * the initial connect.
+   *
+   * @type {Client~Metadata}
+   */
+  this._metadata = {};
+
+  var self = this;
+
+  this.on('ready', function(info) {
+    self.metrics.connectionOpened = Date.now();
+    self.name = info.name;
+  })
+  .on('disconnected', function() {
+    // reset metrics
+    self.metrics = {};
+    self._isConnected = false;
+    // keep the metadata. it still may be useful
+  })
+  .on('event.error', function(err) {
+    self.lastError = err;
+    ++self.errorCounter;
+  });
+
+}
+
+/**
+ * Connect to the broker and receive its metadata.
+ *
+ * Connects to a broker by establishing the client and fetches its metadata.
+ *
+ * @param {object} metadataOptions - Options to be sent to the metadata.
+ * @param {string} metadataOptions.topic - Topic to fetch metadata for. Empty string is treated as empty.
+ * @param {boolean} metadataOptions.allTopics - Fetch metadata for all topics, not just the ones we know about.
+ * @param {int} metadataOptions.timeout - The timeout, in ms, to allow for fetching metadata. Defaults to 30000ms
+ * @param  {Client~connectionCallback} cb - Callback that indicates we are
+ * done connecting.
+ * @return {Client} - Returns itself.
+ */
+Client.prototype.connect = function(metadataOptions, cb) {
+  var self = this;
+
+  var next = function(err, data) {
+    self._isConnecting = false;
+    if (cb) {
+      cb(err, data);
+    }
+  };
+
+  if (this._isConnected) {
+    setImmediate(next);
+    return self;
+  }
+
+  if (this._isConnecting) {
+    this.once('ready', function() {
+      next(null, this._metadata);
+    });
+    return self;
+  }
+
+  this._isConnecting = true;
+
+  var fail = function(err) {
+    var callbackCalled = false;
+    var t;
+
+    if (self._isConnected) {
+      self._isConnected = false;
+      self._client.disconnect(function() {
+        if (callbackCalled) {
+          return;
+        }
+        clearTimeout(t);
+        callbackCalled = true;
+
+        next(err); return;
+      });
+
+      // don't take too long. this is a failure, after all
+      t = setTimeout(function() {
+        if (callbackCalled) {
+          return;
+        }
+        callbackCalled = true;
+
+        next(err); return;
+      }, 10000).unref();
+
+      self.emit('connection.failure', err, self.metrics);
+    } else {
+
+      next(err);
+    }
+  };
+
+  this._client.configureCallbacks(true, this._cb_configs);
+
+  this._client.connect(function(err, info) {
+    if (err) {
+      fail(LibrdKafkaError.create(err)); return;
+    }
+
+    self._isConnected = true;
+
+    // Otherwise we are successful
+    self.getMetadata(metadataOptions || {}, function(err, metadata) {
+      if (err) {
+        // We are connected so we need to disconnect
+        fail(LibrdKafkaError.create(err)); return;
+      }
+
+      self._isConnecting = false;
+      // We got the metadata otherwise. It is set according to above param
+      // Set it here as well so subsequent ready callbacks
+      // can check it
+      self._isConnected = true;
+
+      /**
+       * Ready event. Called when the Client connects successfully
+       *
+       * @event Client#ready
+       * @type {object}
+       * @property {string} name - the name of the broker.
+       */
+      self.emit('ready', info, metadata);
+      next(null, metadata); return;
+
+    });
+
+  });
+
+  return self;
+
+};
+
+/**
+ * Get the native Kafka client.
+ *
+ * You probably shouldn't use this, but if you want to execute methods directly
+ * on the c++ wrapper you can do it here.
+ *
+ * @see connection.cc
+ * @return {Connection} - The native Kafka client.
+ */
+Client.prototype.getClient = function() {
+  return this._client;
+};
+
+/**
+ * Find out how long we have been connected to Kafka.
+ *
+ * @return {number} - Milliseconds since the connection has been established.
+ */
+Client.prototype.connectedTime = function() {
+  if (!this.isConnected()) {
+    return 0;
+  }
+  return Date.now() - this.metrics.connectionOpened;
+};
+
+/**
+ * Whether or not we are connected to Kafka.
+ *
+ * @return {boolean} - Whether we are connected.
+ */
+Client.prototype.isConnected = function() {
+  return !!(this._isConnected && this._client);
+};
+
+/**
+ * Get the last error emitted if it exists.
+ *
+ * @return {LibrdKafkaError} - Returns the LibrdKafkaError or null if
+ * one hasn't been thrown.
+ */
+Client.prototype.getLastError = function() {
+  return this.lastError || null;
+};
+
+/**
+ * Disconnect from the Kafka client.
+ *
+ * This method will disconnect us from Kafka unless we are already in a
+ * disconnecting state. Use this when you're done reading or producing messages
+ * on a given client.
+ *
+ * It will also emit the disconnected event.
+ *
+ * @fires Client#disconnected
+ * @return {function} - Callback to call when disconnection is complete.
+ */
+Client.prototype.disconnect = function(cb) {
+  var self = this;
+
+  if (!this._isDisconnecting && this._client) {
+    this._isDisconnecting = true;
+    this._client.disconnect(function() {
+      // this take 5000 milliseconds. Librdkafka needs to make sure the memory
+      // has been cleaned up before we delete things. @see RdKafka::wait_destroyed
+      self._client.configureCallbacks(false, self._cb_configs);
+
+      // Broadcast metrics. Gives people one last chance to do something with them
+      self._isDisconnecting = false;
+      /**
+       * Disconnect event. Called after disconnection is finished.
+       *
+       * @event Client#disconnected
+       * @type {object}
+       * @property {date} connectionOpened - when the connection was opened.
+       */
+      var metricsCopy = Object.assign({}, self.metrics);
+      self.emit('disconnected', metricsCopy);
+      if (cb) {
+        cb(null, metricsCopy);
+      }
+
+    });
+
+  }
+
+  return self;
+};
+
+/**
+ * Get client metadata.
+ *
+ * Note: using a <code>metadataOptions.topic</code> parameter has a potential side-effect.
+ * A Topic object will be created, if it did not exist yet, with default options
+ * and it will be cached by librdkafka.
+ *
+ * A subsequent call to create the topic object with specific options (e.g. <code>acks</code>) will return
+ * the previous instance and the specific options will be silently ignored.
+ *
+ * To avoid this side effect, the topic object can be created with the expected options before requesting metadata,
+ * or the metadata request can be performed for all topics (by omitting <code>metadataOptions.topic</code>).
+ *
+ * @param {object} metadataOptions - Metadata options to pass to the client.
+ * @param {string} metadataOptions.topic - Topic string for which to fetch
+ * metadata
+ * @param {number} metadataOptions.timeout - Max time, in ms, to try to fetch
+ * metadata before timing out. Defaults to 3000.
+ * @param {Client~metadataCallback} cb - Callback to fire with the metadata.
+ */
+Client.prototype.getMetadata = function(metadataOptions, cb) {
+  if (!this.isConnected()) {
+    return cb(new Error('Client is disconnected'));
+  }
+
+  var self = this;
+
+  this._client.getMetadata(metadataOptions || {}, function(err, metadata) {
+    if (err) {
+      if (cb) {
+        cb(LibrdKafkaError.create(err));
+      }
+      return;
+    }
+
+    // No error otherwise
+    self._metadata = metadata;
+
+    if (cb) {
+      cb(null, metadata);
+    }
+
+  });
+
+};
+
+/**
+ * Query offsets from the broker.
+ *
+ * This function makes a call to the broker to get the current low (oldest/beginning)
+ * and high (newest/end) offsets for a topic partition.
+ *
+ * @param {string} topic - Topic to recieve offsets from.
+ * @param {number} partition - Partition of the provided topic to recieve offsets from
+ * @param {number} timeout - Number of ms to wait to recieve a response.
+ * @param {Client~watermarkOffsetsCallback} cb - Callback to fire with the offsets.
+ */
+Client.prototype.queryWatermarkOffsets = function(topic, partition, timeout, cb) {
+  if (!this.isConnected()) {
+    if (cb) {
+      return cb(new Error('Client is disconnected'));
+    } else {
+      return;
+    }
+  }
+
+  var self = this;
+
+  if (typeof timeout === 'function') {
+    cb = timeout;
+    timeout = 1000;
+  }
+
+  if (!timeout) {
+    timeout = 1000;
+  }
+
+  this._client.queryWatermarkOffsets(topic, partition, timeout, function(err, offsets) {
+    if (err) {
+      if (cb) {
+        cb(LibrdKafkaError.create(err));
+      }
+      return;
+    }
+
+    if (cb) {
+      cb(null, offsets);
+    }
+
+  });
+};
+
+/**
+ * Query offsets for times from the broker.
+ *
+ * This function makes a call to the broker to get the offsets for times specified.
+ *
+ * @param {TopicPartition[]} toppars - Array of topic partitions. The offset in these
+ *                                     should instead refer to a timestamp you want
+ *                                     offsets for
+ * @param {number} timeout - Number of ms to wait to recieve a response.
+ * @param {Client~offsetsForTimesCallback} cb - Callback to fire with the filled in offsets.
+ */
+Client.prototype.offsetsForTimes = function(toppars, timeout, cb) {
+  if (!this.isConnected()) {
+    if (cb) {
+      return cb(new Error('Client is disconnected'));
+    } else {
+      return;
+    }
+  }
+
+  var self = this;
+
+  if (typeof timeout === 'function') {
+    cb = timeout;
+    timeout = 1000;
+  }
+
+  if (!timeout) {
+    timeout = 1000;
+  }
+
+  this._client.offsetsForTimes(toppars, timeout, function(err, toppars) {
+    if (err) {
+      if (cb) {
+        cb(LibrdKafkaError.create(err));
+      }
+      return;
+    }
+
+    if (cb) {
+      cb(null, toppars);
+    }
+
+  });
+};
+
+/**
+ * Wrap a potential RdKafka error.
+ *
+ * This internal method is meant to take a return value
+ * from a function that returns an RdKafka error code, throw if it
+ * is an error (Making it a proper librdkafka error object), or
+ * return the appropriate value otherwise.
+ *
+ * It is intended to be used in a return statement,
+ *
+ * @private
+ * @param {number} errorCode - Error code returned from a native method
+ * @param {bool} intIsError - If specified true, any non-number return type will be classified as a success
+ * @return {boolean} - Returns true or the method return value unless it throws.
+ */
+Client.prototype._errorWrap = function(errorCode, intIsError) {
+  var returnValue = true;
+  if (intIsError) {
+    returnValue = errorCode;
+    errorCode = typeof errorCode === 'number' ? errorCode : 0;
+  }
+
+  if (errorCode !== LibrdKafkaError.codes.ERR_NO_ERROR) {
+    var e = LibrdKafkaError.create(errorCode);
+    throw e;
+  }
+
+  return returnValue;
+};
+
+/**
+ * This callback is used to pass metadata or an error after a successful
+ * connection
+ *
+ * @callback Client~connectionCallback
+ * @param {Error} err - An error, if one occurred while connecting.
+ * @param {Client~Metadata} metadata - Metadata object.
+ */
+
+ /**
+  * This callback is used to pass offsets or an error after a successful
+  * query
+  *
+  * @callback Client~watermarkOffsetsCallback
+  * @param {Error} err - An error, if one occurred while connecting.
+  * @param {Client~watermarkOffsets} offsets - Watermark offsets
+  */
+
+  /**
+   * This callback is used to pass toppars or an error after a successful
+   * times query
+   *
+   * @callback Client~offsetsForTimesCallback
+   * @param {Error} err - An error, if one occurred while connecting.
+   * @param {TopicPartition[]} toppars - Topic partitions with offsets filled in
+   */
+
+/**
+ * @typedef {object} Client~watermarkOffsets
+ * @property {number} high - High (newest/end) offset
+ * @property {number} low - Low (oldest/beginning) offset
+ */
+
+/**
+ * @typedef {object} Client~MetadataBroker
+ * @property {number} id - Broker ID
+ * @property {string} host - Broker host
+ * @property {number} port - Broker port.
+ */
+
+/**
+ * @typedef {object} Client~MetadataTopic
+ * @property {string} name - Topic name
+ * @property {Client~MetadataPartition[]} partitions - Array of partitions
+ */
+
+/**
+ * @typedef {object} Client~MetadataPartition
+ * @property {number} id - Partition id
+ * @property {number} leader - Broker ID for the partition leader
+ * @property {number[]} replicas - Array of replica IDs
+ * @property {number[]} isrs - Arrqay of ISRS ids
+*/
+
+/**
+ * Metadata object.
+ *
+ * This is the representation of Kafka metadata in JavaScript.
+ *
+ * @typedef {object} Client~Metadata
+ * @property {number} orig_broker_id - The broker ID of the original bootstrap
+ * broker.
+ * @property {string} orig_broker_name - The name of the original bootstrap
+ * broker.
+ * @property {Client~MetadataBroker[]} brokers - An array of broker objects
+ * @property {Client~MetadataTopic[]} topics - An array of topics.
+ */
+
+
+
+ + + + + +
+ +
+ +
+ + +
+ + + + + + + + + + diff --git a/current/error.js.html b/current/error.js.html new file mode 100644 index 00000000..351ff44f --- /dev/null +++ b/current/error.js.html @@ -0,0 +1,569 @@ + + + + + JSDoc: Source: error.js + + + + + + + + + + + + + + + +
+
+ +
+

Source: error.js

+ + + + + + +
+
+
/*
+ * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
+ *
+ * Copyright (c) 2016 Blizzard Entertainment
+ *
+ * This software may be modified and distributed under the terms
+ * of the MIT license.  See the LICENSE.txt file for details.
+ */
+
+module.exports = LibrdKafkaError;
+
+var util = require('util');
+var librdkafka = require('../librdkafka');
+
+util.inherits(LibrdKafkaError, Error);
+
+LibrdKafkaError.create = createLibrdkafkaError;
+LibrdKafkaError.wrap = errorWrap;
+
+/**
+ * Enum for identifying errors reported by the library
+ *
+ * You can find this list in the C++ code at
+ * https://github.com/edenhill/librdkafka/blob/master/src-cpp/rdkafkacpp.h#L148
+ *
+ * @readonly
+ * @enum {number}
+ * @constant
+ */
+// ====== Generated from librdkafka 2.3.0 file src-cpp/rdkafkacpp.h ======
+LibrdKafkaError.codes = {
+
+  /* Internal errors to rdkafka: */
+  /** Begin internal error codes */
+  ERR__BEGIN: -200,
+  /** Received message is incorrect */
+  ERR__BAD_MSG: -199,
+  /** Bad/unknown compression */
+  ERR__BAD_COMPRESSION: -198,
+  /** Broker is going away */
+  ERR__DESTROY: -197,
+  /** Generic failure */
+  ERR__FAIL: -196,
+  /** Broker transport failure */
+  ERR__TRANSPORT: -195,
+  /** Critical system resource */
+  ERR__CRIT_SYS_RESOURCE: -194,
+  /** Failed to resolve broker */
+  ERR__RESOLVE: -193,
+  /** Produced message timed out*/
+  ERR__MSG_TIMED_OUT: -192,
+  /** Reached the end of the topic+partition queue on
+  *  the broker. Not really an error.
+  *  This event is disabled by default,
+  *  see the `enable.partition.eof` configuration property. */
+  ERR__PARTITION_EOF: -191,
+  /** Permanent: Partition does not exist in cluster. */
+  ERR__UNKNOWN_PARTITION: -190,
+  /** File or filesystem error */
+  ERR__FS: -189,
+  /** Permanent: Topic does not exist in cluster. */
+  ERR__UNKNOWN_TOPIC: -188,
+  /** All broker connections are down. */
+  ERR__ALL_BROKERS_DOWN: -187,
+  /** Invalid argument, or invalid configuration */
+  ERR__INVALID_ARG: -186,
+  /** Operation timed out */
+  ERR__TIMED_OUT: -185,
+  /** Queue is full */
+  ERR__QUEUE_FULL: -184,
+  /** ISR count < required.acks */
+  ERR__ISR_INSUFF: -183,
+  /** Broker node update */
+  ERR__NODE_UPDATE: -182,
+  /** SSL error */
+  ERR__SSL: -181,
+  /** Waiting for coordinator to become available. */
+  ERR__WAIT_COORD: -180,
+  /** Unknown client group */
+  ERR__UNKNOWN_GROUP: -179,
+  /** Operation in progress */
+  ERR__IN_PROGRESS: -178,
+  /** Previous operation in progress, wait for it to finish. */
+  ERR__PREV_IN_PROGRESS: -177,
+  /** This operation would interfere with an existing subscription */
+  ERR__EXISTING_SUBSCRIPTION: -176,
+  /** Assigned partitions (rebalance_cb) */
+  ERR__ASSIGN_PARTITIONS: -175,
+  /** Revoked partitions (rebalance_cb) */
+  ERR__REVOKE_PARTITIONS: -174,
+  /** Conflicting use */
+  ERR__CONFLICT: -173,
+  /** Wrong state */
+  ERR__STATE: -172,
+  /** Unknown protocol */
+  ERR__UNKNOWN_PROTOCOL: -171,
+  /** Not implemented */
+  ERR__NOT_IMPLEMENTED: -170,
+  /** Authentication failure*/
+  ERR__AUTHENTICATION: -169,
+  /** No stored offset */
+  ERR__NO_OFFSET: -168,
+  /** Outdated */
+  ERR__OUTDATED: -167,
+  /** Timed out in queue */
+  ERR__TIMED_OUT_QUEUE: -166,
+  /** Feature not supported by broker */
+  ERR__UNSUPPORTED_FEATURE: -165,
+  /** Awaiting cache update */
+  ERR__WAIT_CACHE: -164,
+  /** Operation interrupted */
+  ERR__INTR: -163,
+  /** Key serialization error */
+  ERR__KEY_SERIALIZATION: -162,
+  /** Value serialization error */
+  ERR__VALUE_SERIALIZATION: -161,
+  /** Key deserialization error */
+  ERR__KEY_DESERIALIZATION: -160,
+  /** Value deserialization error */
+  ERR__VALUE_DESERIALIZATION: -159,
+  /** Partial response */
+  ERR__PARTIAL: -158,
+  /** Modification attempted on read-only object */
+  ERR__READ_ONLY: -157,
+  /** No such entry / item not found */
+  ERR__NOENT: -156,
+  /** Read underflow */
+  ERR__UNDERFLOW: -155,
+  /** Invalid type */
+  ERR__INVALID_TYPE: -154,
+  /** Retry operation */
+  ERR__RETRY: -153,
+  /** Purged in queue */
+  ERR__PURGE_QUEUE: -152,
+  /** Purged in flight */
+  ERR__PURGE_INFLIGHT: -151,
+  /** Fatal error: see RdKafka::Handle::fatal_error() */
+  ERR__FATAL: -150,
+  /** Inconsistent state */
+  ERR__INCONSISTENT: -149,
+  /** Gap-less ordering would not be guaranteed if proceeding */
+  ERR__GAPLESS_GUARANTEE: -148,
+  /** Maximum poll interval exceeded */
+  ERR__MAX_POLL_EXCEEDED: -147,
+  /** Unknown broker */
+  ERR__UNKNOWN_BROKER: -146,
+  /** Functionality not configured */
+  ERR__NOT_CONFIGURED: -145,
+  /** Instance has been fenced */
+  ERR__FENCED: -144,
+  /** Application generated error */
+  ERR__APPLICATION: -143,
+  /** Assignment lost */
+  ERR__ASSIGNMENT_LOST: -142,
+  /** No operation performed */
+  ERR__NOOP: -141,
+  /** No offset to automatically reset to */
+  ERR__AUTO_OFFSET_RESET: -140,
+  /** Partition log truncation detected */
+  ERR__LOG_TRUNCATION: -139,
+  /** End internal error codes */
+  ERR__END: -100,
+  /* Kafka broker errors: */
+  /** Unknown broker error */
+  ERR_UNKNOWN: -1,
+  /** Success */
+  ERR_NO_ERROR: 0,
+  /** Offset out of range */
+  ERR_OFFSET_OUT_OF_RANGE: 1,
+  /** Invalid message */
+  ERR_INVALID_MSG: 2,
+  /** Unknown topic or partition */
+  ERR_UNKNOWN_TOPIC_OR_PART: 3,
+  /** Invalid message size */
+  ERR_INVALID_MSG_SIZE: 4,
+  /** Leader not available */
+  ERR_LEADER_NOT_AVAILABLE: 5,
+  /** Not leader for partition */
+  ERR_NOT_LEADER_FOR_PARTITION: 6,
+  /** Request timed out */
+  ERR_REQUEST_TIMED_OUT: 7,
+  /** Broker not available */
+  ERR_BROKER_NOT_AVAILABLE: 8,
+  /** Replica not available */
+  ERR_REPLICA_NOT_AVAILABLE: 9,
+  /** Message size too large */
+  ERR_MSG_SIZE_TOO_LARGE: 10,
+  /** StaleControllerEpochCode */
+  ERR_STALE_CTRL_EPOCH: 11,
+  /** Offset metadata string too large */
+  ERR_OFFSET_METADATA_TOO_LARGE: 12,
+  /** Broker disconnected before response received */
+  ERR_NETWORK_EXCEPTION: 13,
+  /** Coordinator load in progress */
+  ERR_COORDINATOR_LOAD_IN_PROGRESS: 14,
+/** Group coordinator load in progress */
+  ERR_GROUP_LOAD_IN_PROGRESS: 14,
+  /** Coordinator not available */
+  ERR_COORDINATOR_NOT_AVAILABLE: 15,
+/** Group coordinator not available */
+  ERR_GROUP_COORDINATOR_NOT_AVAILABLE: 15,
+  /** Not coordinator */
+  ERR_NOT_COORDINATOR: 16,
+/** Not coordinator for group */
+  ERR_NOT_COORDINATOR_FOR_GROUP: 16,
+  /** Invalid topic */
+  ERR_TOPIC_EXCEPTION: 17,
+  /** Message batch larger than configured server segment size */
+  ERR_RECORD_LIST_TOO_LARGE: 18,
+  /** Not enough in-sync replicas */
+  ERR_NOT_ENOUGH_REPLICAS: 19,
+  /** Message(s) written to insufficient number of in-sync replicas */
+  ERR_NOT_ENOUGH_REPLICAS_AFTER_APPEND: 20,
+  /** Invalid required acks value */
+  ERR_INVALID_REQUIRED_ACKS: 21,
+  /** Specified group generation id is not valid */
+  ERR_ILLEGAL_GENERATION: 22,
+  /** Inconsistent group protocol */
+  ERR_INCONSISTENT_GROUP_PROTOCOL: 23,
+  /** Invalid group.id */
+  ERR_INVALID_GROUP_ID: 24,
+  /** Unknown member */
+  ERR_UNKNOWN_MEMBER_ID: 25,
+  /** Invalid session timeout */
+  ERR_INVALID_SESSION_TIMEOUT: 26,
+  /** Group rebalance in progress */
+  ERR_REBALANCE_IN_PROGRESS: 27,
+  /** Commit offset data size is not valid */
+  ERR_INVALID_COMMIT_OFFSET_SIZE: 28,
+  /** Topic authorization failed */
+  ERR_TOPIC_AUTHORIZATION_FAILED: 29,
+  /** Group authorization failed */
+  ERR_GROUP_AUTHORIZATION_FAILED: 30,
+  /** Cluster authorization failed */
+  ERR_CLUSTER_AUTHORIZATION_FAILED: 31,
+  /** Invalid timestamp */
+  ERR_INVALID_TIMESTAMP: 32,
+  /** Unsupported SASL mechanism */
+  ERR_UNSUPPORTED_SASL_MECHANISM: 33,
+  /** Illegal SASL state */
+  ERR_ILLEGAL_SASL_STATE: 34,
+  /** Unuspported version */
+  ERR_UNSUPPORTED_VERSION: 35,
+  /** Topic already exists */
+  ERR_TOPIC_ALREADY_EXISTS: 36,
+  /** Invalid number of partitions */
+  ERR_INVALID_PARTITIONS: 37,
+  /** Invalid replication factor */
+  ERR_INVALID_REPLICATION_FACTOR: 38,
+  /** Invalid replica assignment */
+  ERR_INVALID_REPLICA_ASSIGNMENT: 39,
+  /** Invalid config */
+  ERR_INVALID_CONFIG: 40,
+  /** Not controller for cluster */
+  ERR_NOT_CONTROLLER: 41,
+  /** Invalid request */
+  ERR_INVALID_REQUEST: 42,
+  /** Message format on broker does not support request */
+  ERR_UNSUPPORTED_FOR_MESSAGE_FORMAT: 43,
+  /** Policy violation */
+  ERR_POLICY_VIOLATION: 44,
+  /** Broker received an out of order sequence number */
+  ERR_OUT_OF_ORDER_SEQUENCE_NUMBER: 45,
+  /** Broker received a duplicate sequence number */
+  ERR_DUPLICATE_SEQUENCE_NUMBER: 46,
+  /** Producer attempted an operation with an old epoch */
+  ERR_INVALID_PRODUCER_EPOCH: 47,
+  /** Producer attempted a transactional operation in an invalid state */
+  ERR_INVALID_TXN_STATE: 48,
+  /** Producer attempted to use a producer id which is not
+  *  currently assigned to its transactional id */
+  ERR_INVALID_PRODUCER_ID_MAPPING: 49,
+  /** Transaction timeout is larger than the maximum
+  *  value allowed by the broker's max.transaction.timeout.ms */
+  ERR_INVALID_TRANSACTION_TIMEOUT: 50,
+  /** Producer attempted to update a transaction while another
+  *  concurrent operation on the same transaction was ongoing */
+  ERR_CONCURRENT_TRANSACTIONS: 51,
+  /** Indicates that the transaction coordinator sending a
+  *  WriteTxnMarker is no longer the current coordinator for a
+  *  given producer */
+  ERR_TRANSACTION_COORDINATOR_FENCED: 52,
+  /** Transactional Id authorization failed */
+  ERR_TRANSACTIONAL_ID_AUTHORIZATION_FAILED: 53,
+  /** Security features are disabled */
+  ERR_SECURITY_DISABLED: 54,
+  /** Operation not attempted */
+  ERR_OPERATION_NOT_ATTEMPTED: 55,
+  /** Disk error when trying to access log file on the disk */
+  ERR_KAFKA_STORAGE_ERROR: 56,
+  /** The user-specified log directory is not found in the broker config */
+  ERR_LOG_DIR_NOT_FOUND: 57,
+  /** SASL Authentication failed */
+  ERR_SASL_AUTHENTICATION_FAILED: 58,
+  /** Unknown Producer Id */
+  ERR_UNKNOWN_PRODUCER_ID: 59,
+  /** Partition reassignment is in progress */
+  ERR_REASSIGNMENT_IN_PROGRESS: 60,
+  /** Delegation Token feature is not enabled */
+  ERR_DELEGATION_TOKEN_AUTH_DISABLED: 61,
+  /** Delegation Token is not found on server */
+  ERR_DELEGATION_TOKEN_NOT_FOUND: 62,
+  /** Specified Principal is not valid Owner/Renewer */
+  ERR_DELEGATION_TOKEN_OWNER_MISMATCH: 63,
+  /** Delegation Token requests are not allowed on this connection */
+  ERR_DELEGATION_TOKEN_REQUEST_NOT_ALLOWED: 64,
+  /** Delegation Token authorization failed */
+  ERR_DELEGATION_TOKEN_AUTHORIZATION_FAILED: 65,
+  /** Delegation Token is expired */
+  ERR_DELEGATION_TOKEN_EXPIRED: 66,
+  /** Supplied principalType is not supported */
+  ERR_INVALID_PRINCIPAL_TYPE: 67,
+  /** The group is not empty */
+  ERR_NON_EMPTY_GROUP: 68,
+  /** The group id does not exist */
+  ERR_GROUP_ID_NOT_FOUND: 69,
+  /** The fetch session ID was not found */
+  ERR_FETCH_SESSION_ID_NOT_FOUND: 70,
+  /** The fetch session epoch is invalid */
+  ERR_INVALID_FETCH_SESSION_EPOCH: 71,
+  /** No matching listener */
+  ERR_LISTENER_NOT_FOUND: 72,
+  /** Topic deletion is disabled */
+  ERR_TOPIC_DELETION_DISABLED: 73,
+  /** Leader epoch is older than broker epoch */
+  ERR_FENCED_LEADER_EPOCH: 74,
+  /** Leader epoch is newer than broker epoch */
+  ERR_UNKNOWN_LEADER_EPOCH: 75,
+  /** Unsupported compression type */
+  ERR_UNSUPPORTED_COMPRESSION_TYPE: 76,
+  /** Broker epoch has changed */
+  ERR_STALE_BROKER_EPOCH: 77,
+  /** Leader high watermark is not caught up */
+  ERR_OFFSET_NOT_AVAILABLE: 78,
+  /** Group member needs a valid member ID */
+  ERR_MEMBER_ID_REQUIRED: 79,
+  /** Preferred leader was not available */
+  ERR_PREFERRED_LEADER_NOT_AVAILABLE: 80,
+  /** Consumer group has reached maximum size */
+  ERR_GROUP_MAX_SIZE_REACHED: 81,
+  /** Static consumer fenced by other consumer with same
+  * group.instance.id. */
+  ERR_FENCED_INSTANCE_ID: 82,
+  /** Eligible partition leaders are not available */
+  ERR_ELIGIBLE_LEADERS_NOT_AVAILABLE: 83,
+  /** Leader election not needed for topic partition */
+  ERR_ELECTION_NOT_NEEDED: 84,
+  /** No partition reassignment is in progress */
+  ERR_NO_REASSIGNMENT_IN_PROGRESS: 85,
+  /** Deleting offsets of a topic while the consumer group is
+  *  subscribed to it */
+  ERR_GROUP_SUBSCRIBED_TO_TOPIC: 86,
+  /** Broker failed to validate record */
+  ERR_INVALID_RECORD: 87,
+  /** There are unstable offsets that need to be cleared */
+  ERR_UNSTABLE_OFFSET_COMMIT: 88,
+  /** Throttling quota has been exceeded */
+  ERR_THROTTLING_QUOTA_EXCEEDED: 89,
+  /** There is a newer producer with the same transactionalId
+  *  which fences the current one */
+  ERR_PRODUCER_FENCED: 90,
+  /** Request illegally referred to resource that does not exist */
+  ERR_RESOURCE_NOT_FOUND: 91,
+  /** Request illegally referred to the same resource twice */
+  ERR_DUPLICATE_RESOURCE: 92,
+  /** Requested credential would not meet criteria for acceptability */
+  ERR_UNACCEPTABLE_CREDENTIAL: 93,
+  /** Indicates that the either the sender or recipient of a
+  *  voter-only request is not one of the expected voters */
+  ERR_INCONSISTENT_VOTER_SET: 94,
+  /** Invalid update version */
+  ERR_INVALID_UPDATE_VERSION: 95,
+  /** Unable to update finalized features due to server error */
+  ERR_FEATURE_UPDATE_FAILED: 96,
+  /** Request principal deserialization failed during forwarding */
+  ERR_PRINCIPAL_DESERIALIZATION_FAILURE: 97
+};
+
+/**
+ * Representation of a librdkafka error
+ *
+ * This can be created by giving either another error
+ * to piggy-back on. In this situation it tries to parse
+ * the error string to figure out the intent. However, more usually,
+ * it is constructed by an error object created by a C++ Baton.
+ *
+ * @param {object|error} e - An object or error to wrap
+ * @property {string} message - The error message
+ * @property {number} code - The error code.
+ * @property {string} origin - The origin, whether it is local or remote
+ * @constructor
+ */
+function LibrdKafkaError(e) {
+  if (!(this instanceof LibrdKafkaError)) {
+    return new LibrdKafkaError(e);
+  }
+
+  if (typeof e === 'number') {
+    this.message = librdkafka.err2str(e);
+    this.code = e;
+    this.errno = e;
+    if (e >= LibrdKafkaError.codes.ERR__END) {
+      this.origin = 'local';
+    } else {
+      this.origin = 'kafka';
+    }
+    Error.captureStackTrace(this, this.constructor);
+  } else if (!util.isError(e)) {
+    // This is the better way
+    this.message = e.message;
+    this.code = e.code;
+    this.errno = e.code;
+    if (e.code >= LibrdKafkaError.codes.ERR__END) {
+      this.origin = 'local';
+    } else {
+      this.origin = 'kafka';
+    }
+    Error.captureStackTrace(this, this.constructor);
+  } else {
+    var message = e.message;
+    var parsedMessage = message.split(': ');
+
+    var origin, msg;
+
+    if (parsedMessage.length > 1) {
+      origin = parsedMessage[0].toLowerCase();
+      msg = parsedMessage[1].toLowerCase();
+    } else {
+      origin = 'unknown';
+      msg = message.toLowerCase();
+    }
+
+    // special cases
+    if (msg === 'consumer is disconnected' || msg === 'producer is disconnected') {
+      this.origin = 'local';
+      this.code = LibrdKafkaError.codes.ERR__STATE;
+      this.errno = this.code;
+      this.message = msg;
+    } else {
+      this.origin = origin;
+      this.message = msg;
+      this.code = typeof e.code === 'number' ? e.code : -1;
+      this.errno = this.code;
+      this.stack = e.stack;
+    }
+
+  }
+
+  if (e.hasOwnProperty('isFatal')) this.isFatal = e.isFatal;
+  if (e.hasOwnProperty('isRetriable')) this.isRetriable = e.isRetriable;
+  if (e.hasOwnProperty('isTxnRequiresAbort')) this.isTxnRequiresAbort = e.isTxnRequiresAbort;
+
+}
+
+function createLibrdkafkaError(e) {
+  return new LibrdKafkaError(e);
+}
+
+function errorWrap(errorCode, intIsError) {
+  var returnValue = true;
+  if (intIsError) {
+    returnValue = errorCode;
+    errorCode = typeof errorCode === 'number' ? errorCode : 0;
+  }
+
+  if (errorCode !== LibrdKafkaError.codes.ERR_NO_ERROR) {
+    var e = LibrdKafkaError.create(errorCode);
+    throw e;
+  }
+
+  return returnValue;
+}
+
+
+
+ + + + + +
+ +
+ +
+ + +
+ + + + + + + + + + diff --git a/current/global.html b/current/global.html new file mode 100644 index 00000000..99720758 --- /dev/null +++ b/current/global.html @@ -0,0 +1,660 @@ + + + + + JSDoc: Global + + + + + + + + + + + + + + + +
+
+ +
+

Global

+ + + + + + +
+ +
+ +

+ + +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + +
+
+

Methods:

+
+ +
+ + + + + + + +

+ createAdminClient() +

+ + + + + +
+

Create a new AdminClient for making topics, partitions, and more. + +This is a factory method because it immediately starts an +active handle with the brokers.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ createSerializer() → {function} +

+ + + + + +
+

Create a serializer + +Method simply wraps a serializer provided by a user +so it adds context to the error

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ Serialization function +
+ + + +
+
+ Type +
+
+ +function + + + +
+
+ + + + + + + + + + + +

+ RefCounter() +

+ + + + + +
+

Ref counter class. + +Is used to basically determine active/inactive and allow callbacks that +hook into each. + +For the producer, it is used to begin rapid polling after a produce until +the delivery report is dispatched.

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ Topic() +

+ + + + + +
+

Create a topic. Just returns the string you gave it right now. + +Looks like a class, but all it does is return the topic name. +This is so that one day if there are interface changes that allow +different use of topic parameters, we can just add to this constructor and +have it return something richer

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +

+ TopicPartition() +

+ + + + + +
+

Create a topic partition. Just does some validation and decoration +on topic partitions provided. + +Goal is still to behave like a plain javascript object but with validation +and potentially some extra methods

+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ +
+ +
+ + +
+ + + + + + + + + + \ No newline at end of file diff --git a/current/index.html b/current/index.html new file mode 100644 index 00000000..e2856db0 --- /dev/null +++ b/current/index.html @@ -0,0 +1,777 @@ + + + + + JSDoc: Home + + + + + + + + + + + + + + + +
+
+ +
+

Home

+ + + + + + + + +

+ + + + + + + + + + + + + + + +
+

node-rdkafka - Node.js wrapper for Kafka C/C++ library

+

Copyright (c) 2016 Blizzard Entertainment.

+

https://github.com/blizzard/node-rdkafka

+

Build Status

+

npm version

+

Looking for Collaborators!

+

I am looking for your help to make this project even better! If you're interested, check this out

+

Overview

+

The node-rdkafka library is a high-performance NodeJS client for Apache Kafka that wraps the native librdkafka library. All the complexity of balancing writes across partitions and managing (possibly ever-changing) brokers should be encapsulated in the library.

+

This library currently uses librdkafka version 2.3.0.

+

Reference Docs

+

To view the reference docs for the current version, go here

+

Contributing

+

For guidelines on contributing please see CONTRIBUTING.md

+

Code of Conduct

+

Play nice; Play fair.

+

Requirements

+
    +
  • Apache Kafka >=0.9
  • +
  • Node.js >=4
  • +
  • Linux/Mac
  • +
  • Windows?! See below
  • +
  • OpenSSL
  • +
+

Mac OS High Sierra / Mojave

+

OpenSSL has been upgraded in High Sierra and homebrew does not overwrite default system libraries. That means when building node-rdkafka, because you are using openssl, you need to tell the linker where to find it:

+
export CPPFLAGS=-I/usr/local/opt/openssl/include
+export LDFLAGS=-L/usr/local/opt/openssl/lib
+
+

Then you can run npm install on your application to get it to build correctly.

+

NOTE: From the librdkafka docs

+
+

WARNING: Due to a bug in Apache Kafka 0.9.0.x, the ApiVersionRequest (as sent by the client when connecting to the broker) will be silently ignored by the broker causing the request to time out after 10 seconds. This causes client-broker connections to stall for 10 seconds during connection-setup before librdkafka falls back on the broker.version.fallback protocol features. The workaround is to explicitly configure api.version.request to false on clients communicating with <=0.9.0.x brokers.

+
+

Alpine

+

Using Alpine Linux? Check out the docs.

+

Windows

+

Windows build is not compiled from librdkafka source but it is rather linked against the appropriate version of NuGet librdkafka.redist static binary that gets downloaded from https://globalcdn.nuget.org/packages/librdkafka.redist.2.3.0.nupkg during installation. This download link can be changed using the environment variable NODE_RDKAFKA_NUGET_BASE_URL that defaults to https://globalcdn.nuget.org/packages/ when it's no set.

+

Requirements:

+ +

Note: I still do not recommend using node-rdkafka in production on Windows. This feature was in high demand and is provided to help develop, but we do not test against Windows, and windows support may lag behind Linux/Mac support because those platforms are the ones used to develop this library. Contributors are welcome if any Windows issues are found :)

+

Tests

+

This project includes two types of unit tests in this project:

+
    +
  • end-to-end integration tests
  • +
  • unit tests
  • +
+

You can run both types of tests by using Makefile. Doing so calls mocha in your locally installed node_modules directory.

+
    +
  • Before you run the tests, be sure to init and update the submodules: +
      +
    1. git submodule init
    2. +
    3. git submodule update
    4. +
    +
  • +
  • To run the unit tests, you can run make lint or make test.
  • +
  • To run the integration tests, you must have a running Kafka installation available. By default, the test tries to connect to localhost:9092; however, you can supply the KAFKA_HOST environment variable to override this default behavior. Run make e2e.
  • +
+

Usage

+

You can install the node-rdkafka module like any other module:

+
npm install node-rdkafka
+
+

To use the module, you must require it.

+
const Kafka = require('node-rdkafka');
+
+

Configuration

+

You can pass many configuration options to librdkafka. A full list can be found in librdkafka's Configuration.md

+

Configuration keys that have the suffix _cb are designated as callbacks. Some +of these keys are informational and you can choose to opt-in (for example, dr_cb). Others are callbacks designed to +return a value, such as partitioner_cb.

+

Not all of these options are supported. +The library will throw an error if the value you send in is invalid.

+

The library currently supports the following callbacks:

+
    +
  • partitioner_cb
  • +
  • dr_cb or dr_msg_cb
  • +
  • event_cb
  • +
  • rebalance_cb (see Rebalancing)
  • +
  • offset_commit_cb (see Commits)
  • +
+

Librdkafka Methods

+

This library includes two utility functions for detecting the status of your installation. Please try to include these when making issue reports where applicable.

+

You can get the features supported by your compile of librdkafka by reading the variable "features" on the root of the node-rdkafka object.

+
const Kafka = require('node-rdkafka');
+console.log(Kafka.features);
+
+// #=> [ 'gzip', 'snappy', 'ssl', 'sasl', 'regex', 'lz4' ]
+
+

You can also get the version of librdkafka

+
const Kafka = require('node-rdkafka');
+console.log(Kafka.librdkafkaVersion);
+
+// #=> 2.3.0
+
+

Sending Messages

+

A Producer sends messages to Kafka. The Producer constructor takes a configuration object, as shown in the following example:

+
const producer = new Kafka.Producer({
+  'metadata.broker.list': 'kafka-host1:9092,kafka-host2:9092'
+});
+
+

A Producer requires only metadata.broker.list (the Kafka brokers) to be created. The values in this list are separated by commas. For other configuration options, see the Configuration.md file described previously.

+

The following example illustrates a list with several librdkafka options set.

+
const producer = new Kafka.Producer({
+  'client.id': 'kafka',
+  'metadata.broker.list': 'localhost:9092',
+  'compression.codec': 'gzip',
+  'retry.backoff.ms': 200,
+  'message.send.max.retries': 10,
+  'socket.keepalive.enable': true,
+  'queue.buffering.max.messages': 100000,
+  'queue.buffering.max.ms': 1000,
+  'batch.num.messages': 1000000,
+  'dr_cb': true
+});
+
+

Stream API

+

You can easily use the Producer as a writable stream immediately after creation (as shown in the following example):

+
// Our producer with its Kafka brokers
+// This call returns a new writable stream to our topic 'topic-name'
+const stream = Kafka.Producer.createWriteStream({
+  'metadata.broker.list': 'kafka-host1:9092,kafka-host2:9092'
+}, {}, {
+  topic: 'topic-name'
+});
+
+// Writes a message to the stream
+const queuedSuccess = stream.write(Buffer.from('Awesome message'));
+
+if (queuedSuccess) {
+  console.log('We queued our message!');
+} else {
+  // Note that this only tells us if the stream's queue is full,
+  // it does NOT tell us if the message got to Kafka!  See below...
+  console.log('Too many messages in our queue already');
+}
+
+// NOTE: MAKE SURE TO LISTEN TO THIS IF YOU WANT THE STREAM TO BE DURABLE
+// Otherwise, any error will bubble up as an uncaught exception.
+stream.on('error', (err) => {
+  // Here's where we'll know if something went wrong sending to Kafka
+  console.error('Error in our kafka stream');
+  console.error(err);
+})
+
+

If you do not want your code to crash when an error happens, ensure you have an error listener on the stream. Most errors are not necessarily fatal, but the ones that are will immediately destroy the stream. If you use autoClose, the stream will close itself at the first sign of a problem.

+

Standard API

+

The Standard API is more performant, particularly when handling high volumes of messages. +However, it requires more manual setup to use. The following example illustrates its use:

+
const producer = new Kafka.Producer({
+  'metadata.broker.list': 'localhost:9092',
+  'dr_cb': true
+});
+
+// Connect to the broker manually
+producer.connect();
+
+// Wait for the ready event before proceeding
+producer.on('ready', () => {
+  try {
+    producer.produce(
+      // Topic to send the message to
+      'topic',
+      // optionally we can manually specify a partition for the message
+      // this defaults to -1 - which will use librdkafka's default partitioner (consistent random for keyed messages, random for unkeyed messages)
+      null,
+      // Message to send. Must be a buffer
+      Buffer.from('Awesome message'),
+      // for keyed messages, we also specify the key - note that this field is optional
+      'Stormwind',
+      // you can send a timestamp here. If your broker version supports it,
+      // it will get added. Otherwise, we default to 0
+      Date.now(),
+      // you can send an opaque token here, which gets passed along
+      // to your delivery reports
+    );
+  } catch (err) {
+    console.error('A problem occurred when sending our message');
+    console.error(err);
+  }
+});
+
+// Any errors we encounter, including connection errors
+producer.on('event.error', (err) => {
+  console.error('Error from producer');
+  console.error(err);
+})
+
+// We must either call .poll() manually after sending messages
+// or set the producer to poll on an interval (.setPollInterval).
+// Without this, we do not get delivery events and the queue
+// will eventually fill up.
+producer.setPollInterval(100);
+
+

To see the configuration options available to you, see the Configuration section.

+
Methods
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
producer.connect()Connects to the broker.

The connect() method emits the ready event when it connects successfully. If it does not, the error will be passed through the callback.
producer.disconnect()Disconnects from the broker.

The disconnect() method emits the disconnected event when it has disconnected. If it does not, the error will be passed through the callback.
producer.poll()Polls the producer for delivery reports or other events to be transmitted via the emitter.

In order to get the events in librdkafka's queue to emit, you must call this regularly.
producer.setPollInterval(interval)Polls the producer on this interval, handling disconnections and reconnection. Set it to 0 to turn it off.
producer.produce(topic, partition, msg, key, timestamp, opaque)Sends a message.

The produce() method throws when produce would return an error. Ordinarily, this is just if the queue is full.
producer.flush(timeout, callback)Flush the librdkafka internal queue, sending all messages. Default timeout is 500ms
producer.initTransactions(timeout, callback)Initializes the transactional producer.
producer.beginTransaction(callback)Starts a new transaction.
producer.sendOffsetsToTransaction(offsets, consumer, timeout, callback)Sends consumed topic-partition-offsets to the broker, which will get committed along with the transaction.
producer.abortTransaction(timeout, callback)Aborts the ongoing transaction.
producer.commitTransaction(timeout, callback)Commits the ongoing transaction.
+
Events
+

Some configuration properties that end in _cb indicate that an event should be generated for that option. You can either:

+
    +
  • provide a value of true and react to the event
  • +
  • provide a callback function directly
  • +
+

The following example illustrates an event:

+
const producer = new Kafka.Producer({
+  'client.id': 'my-client', // Specifies an identifier to use to help trace activity in Kafka
+  'metadata.broker.list': 'localhost:9092', // Connect to a Kafka instance on localhost
+  'dr_cb': true // Specifies that we want a delivery-report event to be generated
+});
+
+// Poll for events every 100 ms
+producer.setPollInterval(100);
+
+producer.on('delivery-report', (err, report) => {
+  // Report of delivery statistics here:
+  //
+  console.log(report);
+});
+
+

The following table describes types of events.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EventDescription
disconnectedThe disconnected event is emitted when the broker has disconnected.

This event is emitted only when .disconnect is called. The wrapper will always try to reconnect otherwise.
readyThe ready event is emitted when the Producer is ready to send messages.
eventThe event event is emitted when librdkafka reports an event (if you opted in via the event_cb option).
event.logThe event.log event is emitted when logging events come in (if you opted into logging via the event_cb option).

You will need to set a value for debug if you want to send information.
event.statsThe event.stats event is emitted when librdkafka reports stats (if you opted in by setting the statistics.interval.ms to a non-zero value).
event.errorThe event.error event is emitted when librdkafka reports an error
event.throttleThe event.throttle event emitted when librdkafka reports throttling.
delivery-reportThe delivery-report event is emitted when a delivery report has been found via polling.

To use this event, you must set request.required.acks to 1 or -1 in topic configuration and dr_cb (or dr_msg_cb if you want the report to contain the message payload) to true in the Producer constructor options.
+

Higher Level Producer

+

The higher level producer is a variant of the producer which can propagate callbacks to you upon message delivery.

+
const producer = new Kafka.HighLevelProducer({
+  'metadata.broker.list': 'localhost:9092',
+});
+
+

This will enrich the produce call so it will have a callback to tell you when the message has been delivered. You lose the ability to specify opaque tokens.

+
producer.produce(topicName, null, Buffer.from('alliance4ever'), null, Date.now(), (err, offset) => {
+  // The offset if our acknowledgement level allows us to receive delivery offsets
+  console.log(offset);
+});
+
+

Additionally you can add serializers to modify the value of a produce for a key or value before it is sent over to Kafka.

+
producer.setValueSerializer((value) => {
+  return Buffer.from(JSON.stringify(value));
+});
+
+

Otherwise the behavior of the class should be exactly the same.

+

Kafka.KafkaConsumer

+

To read messages from Kafka, you use a KafkaConsumer. You instantiate a KafkaConsumer object as follows:

+
const consumer = new Kafka.KafkaConsumer({
+  'group.id': 'kafka',
+  'metadata.broker.list': 'localhost:9092',
+}, {});
+
+

The first parameter is the global config, while the second parameter is the topic config that gets applied to all subscribed topics. To view a list of all supported configuration properties, see the Configuration.md file described previously. Look for the C and * keys.

+

The group.id and metadata.broker.list properties are required for a consumer.

+

Rebalancing

+

Rebalancing is managed internally by librdkafka by default. If you would like to override this functionality, you may provide your own logic as a rebalance callback.

+
const consumer = new Kafka.KafkaConsumer({
+  'group.id': 'kafka',
+  'metadata.broker.list': 'localhost:9092',
+  'rebalance_cb': (err, assignment) => {
+
+    if (err.code === Kafka.CODES.ERRORS.ERR__ASSIGN_PARTITIONS) {
+      // Note: this can throw when you are disconnected. Take care and wrap it in
+      // a try catch if that matters to you
+      this.assign(assignment);
+    } else if (err.code == Kafka.CODES.ERRORS.ERR__REVOKE_PARTITIONS){
+      // Same as above
+      this.unassign();
+    } else {
+      // We had a real error
+      console.error(err);
+    }
+
+  }
+})
+
+

this is bound to the KafkaConsumer you have created. By specifying a rebalance_cb you can also listen to the rebalance event as an emitted event. This event is not emitted when using the internal librdkafka rebalancer.

+

Commits

+

When you commit in node-rdkafka, the standard way is to queue the commit request up with the next librdkafka request to the broker. When doing this, there isn't a way to know the result of the commit. Luckily there is another callback you can listen to to get this information

+
const consumer = new Kafka.KafkaConsumer({
+  'group.id': 'kafka',
+  'metadata.broker.list': 'localhost:9092',
+  'offset_commit_cb': (err, topicPartitions) => {
+
+    if (err) {
+      // There was an error committing
+      console.error(err);
+    } else {
+      // Commit went through. Let's log the topic partitions
+      console.log(topicPartitions);
+    }
+
+  }
+})
+
+

this is bound to the KafkaConsumer you have created. By specifying an offset_commit_cb you can also listen to the offset.commit event as an emitted event. It receives an error and the list of topic partitions as argument. This is not emitted unless opted in.

+

Message Structure

+

Messages that are returned by the KafkaConsumer have the following structure.

+
{
+  value: Buffer.from('hi'), // message contents as a Buffer
+  size: 2, // size of the message, in bytes
+  topic: 'librdtesting-01', // topic the message comes from
+  offset: 1337, // offset the message was read from
+  partition: 1, // partition the message was on
+  key: 'someKey', // key of the message if present
+  timestamp: 1510325354780 // timestamp of message creation
+}
+
+

Stream API

+

The stream API is the easiest way to consume messages. The following example illustrates the use of the stream API:

+
// Read from the librdtesting-01 topic... note that this creates a new stream on each call!
+const stream = KafkaConsumer.createReadStream(globalConfig, topicConfig, {
+  topics: ['librdtesting-01']
+});
+
+stream.on('data', (message) => {
+  console.log('Got message');
+  console.log(message.value.toString());
+});
+
+

You can also get the consumer from the streamConsumer, for using consumer methods. The following example illustrates that:

+
stream.consumer.commit(); // Commits all locally stored offsets
+
+

Standard API

+

You can also use the Standard API and manage callbacks and events yourself. You can choose different modes for consuming messages:

+
    +
  • Flowing mode. This mode flows all of the messages it can read by maintaining an infinite loop in the event loop. It only stops when it detects the consumer has issued the unsubscribe or disconnect method.
  • +
  • Non-flowing mode. This mode reads a single message from Kafka at a time manually.
  • +
+

The following example illustrates flowing mode:

+
// Flowing mode
+consumer.connect();
+
+consumer
+  .on('ready', () => {
+    consumer.subscribe(['librdtesting-01']);
+
+    // Consume from the librdtesting-01 topic. This is what determines
+    // the mode we are running in. By not specifying a callback (or specifying
+    // only a callback) we get messages as soon as they are available.
+    consumer.consume();
+  })
+  .on('data', (data) => {
+    // Output the actual message contents
+    console.log(data.value.toString());
+  });
+
+

The following example illustrates non-flowing mode:

+
// Non-flowing mode
+consumer.connect();
+
+consumer
+  .on('ready', () => {
+    // Subscribe to the librdtesting-01 topic
+    // This makes subsequent consumes read from that topic.
+    consumer.subscribe(['librdtesting-01']);
+
+    // Read one message every 1000 milliseconds
+    setInterval(() => {
+      consumer.consume(1);
+    }, 1000);
+  })
+  .on('data', (data) => {
+    console.log('Message found!  Contents below.');
+    console.log(data.value.toString());
+  });
+
+

The following table lists important methods for this API.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
consumer.connect()Connects to the broker.

The connect() emits the event ready when it has successfully connected. If it does not, the error will be passed through the callback.
consumer.disconnect()Disconnects from the broker.

The disconnect() method emits disconnected when it has disconnected. If it does not, the error will be passed through the callback.
consumer.subscribe(topics)Subscribes to an array of topics.
consumer.unsubscribe()Unsubscribes from the currently subscribed topics.

You cannot subscribe to different topics without calling the unsubscribe() method first.
consumer.consume(cb)Gets messages from the existing subscription as quickly as possible. If cb is specified, invokes cb(err, message).

This method keeps a background thread running to do the work. Note that the number of threads in nodejs process is limited by UV_THREADPOOL_SIZE (default value is 4) and using up all of them blocks other parts of the application that need threads. If you need multiple consumers then consider increasing UV_THREADPOOL_SIZE or using consumer.consume(number, cb) instead.
consumer.consume(number, cb)Gets number of messages from the existing subscription. If cb is specified, invokes cb(err, message).
consumer.commit()Commits all locally stored offsets
consumer.commit(topicPartition)Commits offsets specified by the topic partition
consumer.commitMessage(message)Commits the offsets specified by the message
+

The following table lists events for this API.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EventDescription
dataWhen using the Standard API consumed messages are emitted in this event.
partition.eofWhen using Standard API and the configuration option enable.partition.eof is set, partition.eof events are emitted in this event. The event contains topic, partition and offset properties.
warningThe event is emitted in case of UNKNOWN_TOPIC_OR_PART or TOPIC_AUTHORIZATION_FAILED errors when consuming in Flowing mode. Since the consumer will continue working if the error is still happening, the warning event should reappear after the next metadata refresh. To control the metadata refresh rate set topic.metadata.refresh.interval.ms property. Once you resolve the error, you can manually call getMetadata to speed up consumer recovery.
disconnectedThe disconnected event is emitted when the broker disconnects.

This event is only emitted when .disconnect is called. The wrapper will always try to reconnect otherwise.
readyThe ready event is emitted when the Consumer is ready to read messages.
eventThe event event is emitted when librdkafka reports an event (if you opted in via the event_cb option).
event.logThe event.log event is emitted when logging events occur (if you opted in for logging via the event_cb option).

You will need to set a value for debug if you want information to send.
event.statsThe event.stats event is emitted when librdkafka reports stats (if you opted in by setting the statistics.interval.ms to a non-zero value).
event.errorThe event.error event is emitted when librdkafka reports an error
event.throttleThe event.throttle event is emitted when librdkafka reports throttling.
+

Reading current offsets from the broker for a topic

+

Some times you find yourself in the situation where you need to know the latest (and earliest) offset for one of your topics. Connected producers and consumers both allow you to query for these through queryWaterMarkOffsets like follows:

+
const timeout = 5000, partition = 0;
+consumer.queryWatermarkOffsets('my-topic', partition, timeout, (err, offsets) => {
+  const high = offsets.highOffset;
+  const low = offsets.lowOffset;
+});
+
+producer.queryWatermarkOffsets('my-topic', partition, timeout, (err, offsets) => {
+  const high = offsets.highOffset;
+  const low = offsets.lowOffset;
+});
+
+An error will be returned if the client was not connected or the request timed out within the specified interval.
+
+
+

Metadata

+

Both Kafka.Producer and Kafka.KafkaConsumer include a getMetadata method to retrieve metadata from Kafka.

+

Getting metadata on any connection returns the following data structure:

+
{
+  orig_broker_id: 1,
+  orig_broker_name: "broker_name",
+  brokers: [
+    {
+      id: 1,
+      host: 'localhost',
+      port: 40
+    }
+  ],
+  topics: [
+    {
+      name: 'awesome-topic',
+      partitions: [
+        {
+          id: 1,
+          leader: 20,
+          replicas: [1, 2],
+          isrs: [1, 2]
+        }
+      ]
+    }
+  ]
+}
+
+

The following example illustrates how to use the getMetadata method.

+

When fetching metadata for a specific topic, if a topic reference does not exist, one is created using the default config. +Please see the documentation on Client.getMetadata if you want to set configuration parameters, e.g. acks, on a topic to produce messages to.

+
const opts = {
+  topic: 'librdtesting-01',
+  timeout: 10000
+};
+
+producer.getMetadata(opts, (err, metadata) => {
+  if (err) {
+    console.error('Error getting metadata');
+    console.error(err);
+  } else {
+    console.log('Got metadata');
+    console.log(metadata);
+  }
+});
+
+

Admin Client

+

node-rdkafka now supports the admin client for creating, deleting, and scaling out topics. The librdkafka APIs also support altering configuration of topics and broker, but that is not currently implemented.

+

To create an Admin client, you can do as follows:

+
const Kafka = require('node-rdkafka');
+
+const client = Kafka.AdminClient.create({
+  'client.id': 'kafka-admin',
+  'metadata.broker.list': 'broker01'
+});
+
+

This will instantiate the AdminClient, which will allow the calling of the admin methods.

+
client.createTopic({
+  topic: topicName,
+  num_partitions: 1,
+  replication_factor: 1
+}, (err) => {
+  // Done!
+});
+
+

All of the admin api methods can have an optional timeout as their penultimate parameter.

+

The following table lists important methods for this API.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
client.disconnect()Destroy the admin client, making it invalid for further use.
client.createTopic(topic, timeout, cb)Create a topic on the broker with the given configuration. See JS doc for more on structure of the topic object
client.deleteTopic(topicName, timeout, cb)Delete a topic of the given name
client.createPartitions(topicName, desiredPartitions, timeout, cb)Create partitions until the topic has the desired number of partitions.
+

Check the tests for an example of how to use this API!

+
+ + + + + + +
+ +
+ +
+ + +
+ + + + + + + + + + \ No newline at end of file diff --git a/current/kafka-consumer-stream.js.html b/current/kafka-consumer-stream.js.html new file mode 100644 index 00000000..6ec74311 --- /dev/null +++ b/current/kafka-consumer-stream.js.html @@ -0,0 +1,478 @@ + + + + + JSDoc: Source: kafka-consumer-stream.js + + + + + + + + + + + + + + + +
+
+ +
+

Source: kafka-consumer-stream.js

+ + + + + + +
+
+
/*
+ * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
+ *
+ * Copyright (c) 2016 Blizzard Entertainment
+ *
+ * This software may be modified and distributed under the terms
+ * of the MIT license.  See the LICENSE.txt file for details.
+ */
+
+'use strict';
+
+module.exports = KafkaConsumerStream;
+
+var Readable = require('stream').Readable;
+var util = require('util');
+
+util.inherits(KafkaConsumerStream, Readable);
+
+/**
+ * ReadableStream integrating with the Kafka Consumer.
+ *
+ * This class is used to read data off of Kafka in a streaming way. It is
+ * useful if you'd like to have a way to pipe Kafka into other systems. You
+ * should generally not make this class yourself, as it is not even exposed
+ * as part of module.exports. Instead, you should KafkaConsumer.createReadStream.
+ *
+ * The stream implementation is slower than the continuous subscribe callback.
+ * If you don't care so much about backpressure and would rather squeeze
+ * out performance, use that method. Using the stream will ensure you read only
+ * as fast as you write.
+ *
+ * The stream detects if Kafka is already connected. If it is, it will begin
+ * reading. If it is not, it will connect and read when it is ready.
+ *
+ * This stream operates in objectMode. It streams {Consumer~Message}
+ *
+ * @param {Consumer} consumer - The Kafka Consumer object.
+ * @param {object} options - Options to configure the stream.
+ * @param {number} options.waitInterval - Number of ms to wait if Kafka reports
+ * that it has timed out or that we are out of messages (right now).
+ * @param {array} options.topics - Array of topics, or a function that parses
+ * metadata into an array of topics
+ * @constructor
+ * @extends stream.Readable
+ * @see Consumer~Message
+ */
+function KafkaConsumerStream(consumer, options) {
+  if (!(this instanceof KafkaConsumerStream)) {
+    return new KafkaConsumerStream(consumer, options);
+  }
+
+  if (options === undefined) {
+    options = { waitInterval: 1000 };
+  } else if (typeof options === 'number') {
+    options = { waitInterval: options };
+  } else if (options === null || typeof options !== 'object') {
+    throw new TypeError('"options" argument must be a number or an object');
+  }
+
+  var topics = options.topics;
+
+  if (typeof topics === 'function') {
+    // Just ignore the rest of the checks here
+  } else if (!Array.isArray(topics)) {
+    if (typeof topics !== 'string' && !(topics instanceof RegExp)) {
+      throw new TypeError('"topics" argument must be a string, regex, or an array');
+    } else {
+      topics = [topics];
+    }
+  }
+
+  options = Object.create(options);
+
+  var fetchSize = options.fetchSize || 1;
+
+  // Run in object mode by default.
+  if (options.objectMode === null || options.objectMode === undefined) {
+    options.objectMode = true;
+
+    // If they did not explicitly set high water mark, and we are running
+    // in object mode, set it to the fetch size + 2 to ensure there is room
+    // for a standard fetch
+    if (!options.highWaterMark) {
+      options.highWaterMark = fetchSize + 2;
+    }
+  }
+
+  if (options.objectMode !== true) {
+    this._read = this._read_buffer;
+  } else {
+    this._read = this._read_message;
+  }
+
+  Readable.call(this, options);
+
+  this.consumer = consumer;
+  this.topics = topics;
+  this.autoClose = options.autoClose === undefined ? true : !!options.autoClose;
+  this.waitInterval = options.waitInterval === undefined ? 1000 : options.waitInterval;
+  this.fetchSize = fetchSize;
+  this.connectOptions = options.connectOptions || {};
+  this.streamAsBatch = options.streamAsBatch || false;
+
+  // Hold the messages in here
+  this.messages = [];
+
+  var self = this;
+
+  this.consumer
+    .on('unsubscribed', function() {
+      // Invalidate the stream when we unsubscribe
+      self.push(null);
+    });
+
+  // Call connect. Handles potentially being connected already
+  this.connect(this.connectOptions);
+
+  this.once('end', function() {
+    if (this.autoClose) {
+      this.destroy();
+    }
+  });
+
+}
+
+/**
+ * Internal stream read method. This method reads message objects.
+ * @param {number} size - This parameter is ignored for our cases.
+ * @private
+ */
+KafkaConsumerStream.prototype._read_message = function(size) {
+  if (this.messages.length > 0) {
+    return this.push(this.messages.shift());
+  }
+
+  if (!this.consumer) {
+    // This consumer is set to `null` in the close function
+    return;
+  }
+
+  if (!this.consumer.isConnected()) {
+    this.consumer.once('ready', function() {
+      // This is the way Node.js does it
+      // https://github.com/nodejs/node/blob/master/lib/fs.js#L1733
+      this._read(size);
+    }.bind(this));
+    return;
+  }
+
+  if (this.destroyed) {
+    return;
+  }
+
+  var self = this;
+
+  // If the size (number of messages) we are being advised to fetch is
+  // greater than or equal to the fetch size, use the fetch size.
+  // Only opt to use the size in case it is LESS than the fetch size.
+  // Essentially, we want to use the smaller value here
+  var fetchSize = size >= this.fetchSize ? this.fetchSize : size;
+
+  this.consumer.consume(fetchSize, onread);
+
+  // Retry function. Will wait up to the wait interval, with some
+  // random noise if one is provided. Otherwise, will go immediately.
+  function retry() {
+    if (!self.waitInterval) {
+      setImmediate(function() {
+        self._read(size);
+      });
+    } else {
+      setTimeout(function() {
+        self._read(size);
+      }, self.waitInterval * Math.random()).unref();
+    }
+  }
+
+  function onread(err, messages) {
+
+    // If there was an error we still want to emit it.
+    // Essentially, if the user does not register an error
+    // handler, it will still cause the stream to blow up.
+    //
+    // But... if one is provided, consumption will move on
+    // as normal
+    if (err) {
+      self.emit('error', err);
+    }
+
+    // If there are no messages it means we reached EOF or a timeout.
+    // Do what we used to do
+
+    if (err || messages.length < 1) {
+      // If we got an error or if there were no messages, initiate a retry
+      retry();
+      return;
+    } else {
+      if (self.streamAsBatch) {
+        self.push(messages);
+      } else {
+        for (var i = 0; i < messages.length; i++) {
+          self.messages.push(messages[i]);
+        }
+
+        // Now that we have added them all the inner messages buffer,
+        // we can just push the most recent one
+        self.push(self.messages.shift());
+      }
+    }
+
+  }
+};
+
+/**
+ * Internal stream read method. This method reads message buffers.
+ * @param {number} size - This parameter is ignored for our cases.
+ * @private
+ */
+KafkaConsumerStream.prototype._read_buffer = function(size) {
+  if (this.messages.length > 0) {
+    return this.push(this.messages.shift());
+  }
+
+  if (!this.consumer) {
+    // This consumer is set to `null` in the close function
+    return;
+  }
+
+  if (!this.consumer.isConnected()) {
+    this.consumer.once('ready', function() {
+      // This is the way Node.js does it
+      // https://github.com/nodejs/node/blob/master/lib/fs.js#L1733
+      this._read(size);
+    }.bind(this));
+    return;
+  }
+
+  if (this.destroyed) {
+    return;
+  }
+
+  var self = this;
+
+  // If the size (number of messages) we are being advised to fetch is
+  // greater than or equal to the fetch size, use the fetch size.
+  // Only opt to use the size in case it is LESS than the fetch size.
+  // Essentially, we want to use the smaller value here
+  var fetchSize = size >= this.fetchSize ? this.fetchSize : size;
+
+  this.consumer.consume(fetchSize, onread);
+
+  // Retry function. Will wait up to the wait interval, with some
+  // random noise if one is provided. Otherwise, will go immediately.
+  function retry() {
+    if (!self.waitInterval) {
+      setImmediate(function() {
+        self._read(size);
+      });
+    } else {
+      setTimeout(function() {
+        self._read(size);
+      }, self.waitInterval * Math.random()).unref();
+    }
+  }
+
+  function onread(err, messages) {
+    // If there was an error we still want to emit it.
+    // Essentially, if the user does not register an error
+    // handler, it will still cause the stream to blow up.
+    //
+    // But... if one is provided, consumption will move on
+    // as normal
+    if (err) {
+      self.emit('error', err);
+    }
+
+    // If there are no messages it means we reached EOF or a timeout.
+    // Do what we used to do
+
+    if (err || messages.length < 1) {
+      // If we got an error or if there were no messages, initiate a retry
+      retry();
+      return;
+    } else {
+      if (self.streamAsBatch) {
+        self.push(messages);
+      } else {
+        for (var i = 0; i < messages.length; i++) {
+          self.messages.push(messages[i].value);
+        }
+        // Now that we have added them all the inner messages buffer,
+        // we can just push the most recent one
+        self.push(self.messages.shift());
+      }
+    }
+
+  }
+};
+
+KafkaConsumerStream.prototype.connect = function(options) {
+  var self = this;
+
+  function connectCallback(err, metadata) {
+    if (err) {
+      self.emit('error', err);
+      self.destroy();
+      return;
+    }
+
+    try {
+      // Subscribe to the topics as well so we will be ready
+      // If this throws the stream is invalid
+
+      // This is the magic part. If topics is a function, before we subscribe,
+      // pass the metadata in
+      if (typeof self.topics === 'function') {
+        var topics = self.topics(metadata);
+        self.consumer.subscribe(topics);
+      } else {
+        self.consumer.subscribe(self.topics);
+      }
+    } catch (e) {
+      self.emit('error', e);
+      self.destroy();
+      return;
+    }
+
+    // start the flow of data
+    self.read();
+  }
+
+  if (!this.consumer.isConnected()) {
+    self.consumer.connect(options, connectCallback);
+  } else {
+    // Immediately call the connect callback
+    setImmediate(function() {
+      connectCallback(null, self.consumer._metadata);
+    });
+  }
+
+};
+
+KafkaConsumerStream.prototype.destroy = function() {
+  if (this.destroyed) {
+    return;
+  }
+  this.destroyed = true;
+  this.close();
+};
+
+KafkaConsumerStream.prototype.close = function(cb) {
+  var self = this;
+  if (cb) {
+    this.once('close', cb);
+  }
+
+  if (!self.consumer._isConnecting && !self.consumer._isConnected) {
+    // If we aren't even connected just exit. We are done.
+    close();
+    return;
+  }
+
+  if (self.consumer._isConnecting) {
+    self.consumer.once('ready', function() {
+      // Don't pass the CB because it has already been passed.
+      self.close();
+    });
+    return;
+  }
+
+  if (self.consumer._isConnected) {
+    self.consumer.unsubscribe();
+    self.consumer.disconnect(function() {
+      close();
+    });
+  }
+
+  function close() {
+    self.emit('close');
+  }
+};
+
+
+
+ + + + + +
+ +
+ +
+ + +
+ + + + + + + + + + diff --git a/current/kafka-consumer.js.html b/current/kafka-consumer.js.html new file mode 100644 index 00000000..0822a9f3 --- /dev/null +++ b/current/kafka-consumer.js.html @@ -0,0 +1,753 @@ + + + + + JSDoc: Source: kafka-consumer.js + + + + + + + + + + + + + + + +
+
+ +
+

Source: kafka-consumer.js

+ + + + + + +
+
+
/*
+ * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
+ *
+ * Copyright (c) 2016 Blizzard Entertainment
+ *
+ * This software may be modified and distributed under the terms
+ * of the MIT license.  See the LICENSE.txt file for details.
+ */
+'use strict';
+
+module.exports = KafkaConsumer;
+
+var Client = require('./client');
+var util = require('util');
+var Kafka = require('../librdkafka');
+var KafkaConsumerStream = require('./kafka-consumer-stream');
+var LibrdKafkaError = require('./error');
+var TopicPartition = require('./topic-partition');
+var shallowCopy = require('./util').shallowCopy;
+var DEFAULT_CONSUME_LOOP_TIMEOUT_DELAY = 500;
+var DEFAULT_CONSUME_TIME_OUT = 1000;
+util.inherits(KafkaConsumer, Client);
+
+/**
+ * KafkaConsumer class for reading messages from Kafka
+ *
+ * This is the main entry point for reading data from Kafka. You
+ * configure this like you do any other client, with a global
+ * configuration and default topic configuration.
+ *
+ * Once you instantiate this object, connecting will open a socket.
+ * Data will not be read until you tell the consumer what topics
+ * you want to read from.
+ *
+ * @param {object} conf - Key value pairs to configure the consumer
+ * @param {object} topicConf - Key value pairs to create a default
+ * topic configuration
+ * @extends Client
+ * @constructor
+ */
+function KafkaConsumer(conf, topicConf) {
+  if (!(this instanceof KafkaConsumer)) {
+    return new KafkaConsumer(conf, topicConf);
+  }
+
+  conf = shallowCopy(conf);
+  topicConf = shallowCopy(topicConf);
+
+  var onRebalance = conf.rebalance_cb;
+
+  var self = this;
+
+  // If rebalance is undefined we don't want any part of this
+  if (onRebalance && typeof onRebalance === 'boolean') {
+    conf.rebalance_cb = function(err, assignment) {
+      // Create the librdkafka error
+      err = LibrdKafkaError.create(err);
+      // Emit the event
+      self.emit('rebalance', err, assignment);
+
+      // That's it
+      try {
+        if (err.code === -175 /*ERR__ASSIGN_PARTITIONS*/) {
+          self.assign(assignment);
+        } else if (err.code === -174 /*ERR__REVOKE_PARTITIONS*/) {
+          self.unassign();
+        }
+      } catch (e) {
+        // Ignore exceptions if we are not connected
+        if (self.isConnected()) {
+          self.emit('rebalance.error', e);
+        }
+      }
+    };
+  } else if (onRebalance && typeof onRebalance === 'function') {
+    /*
+     * Once this is opted in to, that's it. It's going to manually rebalance
+     * forever. There is no way to unset config values in librdkafka, just
+     * a way to override them.
+     */
+
+     conf.rebalance_cb = function(err, assignment) {
+       // Create the librdkafka error
+       err = err ? LibrdKafkaError.create(err) : undefined;
+
+       self.emit('rebalance', err, assignment);
+       onRebalance.call(self, err, assignment);
+     };
+  }
+
+  // Same treatment for offset_commit_cb
+  var onOffsetCommit = conf.offset_commit_cb;
+
+  if (onOffsetCommit && typeof onOffsetCommit === 'boolean') {
+    conf.offset_commit_cb = function(err, offsets) {
+      if (err) {
+        err = LibrdKafkaError.create(err);
+      }
+      // Emit the event
+      self.emit('offset.commit', err, offsets);
+    };
+  } else if (onOffsetCommit && typeof onOffsetCommit === 'function') {
+    conf.offset_commit_cb = function(err, offsets) {
+      if (err) {
+        err = LibrdKafkaError.create(err);
+      }
+      // Emit the event
+      self.emit('offset.commit', err, offsets);
+      onOffsetCommit.call(self, err, offsets);
+    };
+  }
+
+  /**
+   * KafkaConsumer message.
+   *
+   * This is the representation of a message read from Kafka.
+   *
+   * @typedef {object} KafkaConsumer~Message
+   * @property {buffer} value - the message buffer from Kafka.
+   * @property {string} topic - the topic name
+   * @property {number} partition - the partition on the topic the
+   * message was on
+   * @property {number} offset - the offset of the message
+   * @property {string} key - the message key
+   * @property {number} size - message size, in bytes.
+   * @property {number} timestamp - message timestamp
+   */
+
+  Client.call(this, conf, Kafka.KafkaConsumer, topicConf);
+
+  this.globalConfig = conf;
+  this.topicConfig = topicConf;
+
+  this._consumeTimeout = DEFAULT_CONSUME_TIME_OUT;
+  this._consumeLoopTimeoutDelay = DEFAULT_CONSUME_LOOP_TIMEOUT_DELAY;
+}
+
+/**
+ * Set the default consume timeout provided to c++land
+ * @param {number} timeoutMs - number of milliseconds to wait for a message to be fetched
+ */
+KafkaConsumer.prototype.setDefaultConsumeTimeout = function(timeoutMs) {
+  this._consumeTimeout = timeoutMs;
+};
+
+/**
+ * Set the default sleep delay for the next consume loop after the previous one has timed out.
+ * @param {number} intervalMs - number of milliseconds to sleep after a message fetch has timed out
+ */
+KafkaConsumer.prototype.setDefaultConsumeLoopTimeoutDelay = function(intervalMs) {
+  this._consumeLoopTimeoutDelay = intervalMs;
+};
+
+/**
+ * Get a stream representation of this KafkaConsumer
+ *
+ * @see TopicReadable
+ * @example
+ * var consumerStream = Kafka.KafkaConsumer.createReadStream({
+ * 	'metadata.broker.list': 'localhost:9092',
+ * 	'group.id': 'librd-test',
+ * 	'socket.keepalive.enable': true,
+ * 	'enable.auto.commit': false
+ * }, {}, { topics: [ 'test' ] });
+ *
+ * @param {object} conf - Key value pairs to configure the consumer
+ * @param {object} topicConf - Key value pairs to create a default
+ * topic configuration
+ * @param {object} streamOptions - Stream options
+ * @param {array} streamOptions.topics - Array of topics to subscribe to.
+ * @return {KafkaConsumerStream} - Readable stream that receives messages
+ * when new ones become available.
+ */
+KafkaConsumer.createReadStream = function(conf, topicConf, streamOptions) {
+  var consumer = new KafkaConsumer(conf, topicConf);
+  return new KafkaConsumerStream(consumer, streamOptions);
+};
+
+/**
+ * Get a current list of the committed offsets per topic partition
+ *
+ * Returns an array of objects in the form of a topic partition list
+ *
+ * @param {TopicPartition[]} toppars - Topic partition list to query committed
+ * offsets for. Defaults to the current assignment
+ * @param  {number} timeout - Number of ms to block before calling back
+ * and erroring
+ * @param  {Function} cb - Callback method to execute when finished or timed
+ * out
+ * @return {Client} - Returns itself
+ */
+KafkaConsumer.prototype.committed = function(toppars, timeout, cb) {
+  // We want to be backwards compatible here, and the previous version of
+  // this function took two arguments
+
+  // If CB is not set, shift to backwards compatible version
+  if (!cb) {
+    cb = arguments[1];
+    timeout = arguments[0];
+    toppars = this.assignments();
+  } else {
+    toppars = toppars || this.assignments();
+  }
+
+  var self = this;
+  this._client.committed(toppars, timeout, function(err, topicPartitions) {
+    if (err) {
+      cb(LibrdKafkaError.create(err));
+      return;
+    }
+
+    cb(null, topicPartitions);
+  });
+  return this;
+};
+
+/**
+ * Seek consumer for topic+partition to offset which is either an absolute or
+ * logical offset.
+ *
+ * Does not return anything, as it is asynchronous. There are special cases
+ * with the timeout parameter. The consumer must have previously been assigned
+ * to topics and partitions that seek seeks to seek.
+ *
+ * @example
+ * consumer.seek({ topic: 'topic', partition: 0, offset: 1000 }, 0, function(err) {
+ *   if (err) {
+ *
+ *   }
+ * });
+ *
+ * @param {TopicPartition} toppar - Topic partition to seek.
+ * @param  {number} timeout - Number of ms to block before calling back
+ * and erroring. If the parameter is null or 0, the call will not wait
+ * for the seek to be performed. Essentially, it will happen in the background
+ * with no notification
+ * @param  {Function} cb - Callback method to execute when finished or timed
+ * out. If the seek timed out, the internal state of the consumer is unknown.
+ * @return {Client} - Returns itself
+ */
+KafkaConsumer.prototype.seek = function(toppar, timeout, cb) {
+  var self = this;
+  this._client.seek(TopicPartition.create(toppar), timeout, function(err) {
+    if (err) {
+      cb(LibrdKafkaError.create(err));
+      return;
+    }
+
+    cb();
+  });
+  return this;
+};
+
+/**
+ * Assign the consumer specific partitions and topics
+ *
+ * @param {array} assignments - Assignments array. Should contain
+ * objects with topic and partition set.
+ * @return {Client} - Returns itself
+ */
+
+KafkaConsumer.prototype.assign = function(assignments) {
+  this._client.assign(TopicPartition.map(assignments));
+  return this;
+};
+
+/**
+ * Unassign the consumer from its assigned partitions and topics.
+ *
+ * @return {Client} - Returns itself
+ */
+
+KafkaConsumer.prototype.unassign = function() {
+  this._client.unassign();
+  return this;
+};
+
+
+/**
+ * Get the assignments for the consumer
+ *
+ * @return {array} assignments - Array of topic partitions
+ */
+
+KafkaConsumer.prototype.assignments = function() {
+  return this._errorWrap(this._client.assignments(), true);
+};
+
+/**
+ * Subscribe to an array of topics (synchronously).
+ *
+ * This operation is pretty fast because it just sets
+ * an assignment in librdkafka. This is the recommended
+ * way to deal with subscriptions in a situation where you
+ * will be reading across multiple files or as part of
+ * your configure-time initialization.
+ *
+ * This is also a good way to do it for streams.
+ *
+ * @param  {array} topics - An array of topics to listen to
+ * @throws - Throws when an error code came back from native land
+ * @return {KafkaConsumer} - Returns itself.
+ */
+KafkaConsumer.prototype.subscribe = function(topics) {
+  // Will throw if it is a bad error.
+  this._errorWrap(this._client.subscribe(topics));
+  this.emit('subscribed', topics);
+  return this;
+};
+
+/**
+ * Get the current subscription of the KafkaConsumer
+ *
+ * Get a list of subscribed topics. Should generally match what you
+ * passed on via subscribe
+ *
+ * @see KafkaConsumer::subscribe
+ * @throws - Throws when an error code came back from native land
+ * @return {array} - Array of strings to show the current assignment
+ */
+KafkaConsumer.prototype.subscription = function() {
+  return this._errorWrap(this._client.subscription(), true);
+};
+
+/**
+ * Get the current offset position of the KafkaConsumer
+ *
+ * Returns a list of RdKafka::TopicPartitions on success, or throws
+ * an error on failure
+ *
+ * @param {TopicPartition[]} toppars - List of topic partitions to query
+ * position for. Defaults to the current assignment
+ * @throws - Throws when an error code came back from native land
+ * @return {array} - TopicPartition array. Each item is an object with
+ * an offset, topic, and partition
+ */
+KafkaConsumer.prototype.position = function(toppars) {
+  if (!toppars) {
+    toppars = this.assignments();
+  }
+  return this._errorWrap(this._client.position(toppars), true);
+};
+
+/**
+ * Unsubscribe from all currently subscribed topics
+ *
+ * Before you subscribe to new topics you need to unsubscribe
+ * from the old ones, if there is an active subscription.
+ * Otherwise, you will get an error because there is an
+ * existing subscription.
+ *
+ * @throws - Throws when an error code comes back from native land
+ * @return {KafkaConsumer} - Returns itself.
+ */
+KafkaConsumer.prototype.unsubscribe = function() {
+  this._errorWrap(this._client.unsubscribe());
+  this.emit('unsubscribed', []);
+  // Backwards compatible change
+  this.emit('unsubscribe', []);
+  return this;
+};
+
+/**
+ * Read a number of messages from Kafka.
+ *
+ * This method is similar to the main one, except that it reads a number
+ * of messages before calling back. This may get better performance than
+ * reading a single message each time in stream implementations.
+ *
+ * This will keep going until it gets ERR__PARTITION_EOF or ERR__TIMED_OUT
+ * so the array may not be the same size you ask for. The size is advisory,
+ * but we will not exceed it.
+ *
+ * @param {number} size - Number of messages to read
+ * @param {KafkaConsumer~readCallback} cb - Callback to return when work is done.
+ *//**
+ * Read messages from Kafka as fast as possible
+ *
+ * This method keeps a background thread running to fetch the messages
+ * as quickly as it can, sleeping only in between EOF and broker timeouts.
+ *
+ * Use this to get the maximum read performance if you don't care about the
+ * stream backpressure.
+ * @param {KafkaConsumer~readCallback} cb - Callback to return when a message
+ * is fetched.
+ */
+KafkaConsumer.prototype.consume = function(number, cb) {
+  var timeoutMs = this._consumeTimeout !== undefined ? this._consumeTimeout : DEFAULT_CONSUME_TIME_OUT;
+  var self = this;
+
+  if ((number && typeof number === 'number') || (number && cb)) {
+
+    if (cb === undefined) {
+      cb = function() {};
+    } else if (typeof cb !== 'function') {
+      throw new TypeError('Callback must be a function');
+    }
+
+    this._consumeNum(timeoutMs, number, cb);
+  } else {
+
+    // See https://github.com/Blizzard/node-rdkafka/issues/220
+    // Docs specify just a callback can be provided but really we needed
+    // a fallback to the number argument
+    // @deprecated
+    if (cb === undefined) {
+      if (typeof number === 'function') {
+        cb = number;
+      } else {
+        cb = function() {};
+      }
+    }
+
+    this._consumeLoop(timeoutMs, cb);
+  }
+};
+
+/**
+ * Open a background thread and keep getting messages as fast
+ * as we can. Should not be called directly, and instead should
+ * be called using consume.
+ *
+ * @private
+ * @see consume
+ */
+KafkaConsumer.prototype._consumeLoop = function(timeoutMs, cb) {
+  var self = this;
+  var retryReadInterval = this._consumeLoopTimeoutDelay;
+  self._client.consumeLoop(timeoutMs, retryReadInterval, function readCallback(err, message, eofEvent, warning) {
+
+    if (err) {
+      // A few different types of errors here
+      // but the two we do NOT care about are
+      // time outs at least now
+      // Broker no more messages will also not come here
+      cb(LibrdKafkaError.create(err));
+    } else if (eofEvent) {
+      self.emit('partition.eof', eofEvent);
+    } else if (warning) {
+      self.emit('warning', LibrdKafkaError.create(warning));
+    } else {
+      /**
+       * Data event. called whenever a message is received.
+       *
+       * @event KafkaConsumer#data
+       * @type {KafkaConsumer~Message}
+       */
+      self.emit('data', message);
+      cb(err, message);
+    }
+  });
+
+};
+
+/**
+ * Consume a number of messages and wrap in a try catch with
+ * proper error reporting. Should not be called directly,
+ * and instead should be called using consume.
+ *
+ * @private
+ * @see consume
+ */
+KafkaConsumer.prototype._consumeNum = function(timeoutMs, numMessages, cb) {
+  var self = this;
+
+  this._client.consume(timeoutMs, numMessages, function(err, messages, eofEvents) {
+    if (err) {
+      err = LibrdKafkaError.create(err);
+      if (cb) {
+        cb(err);
+      }
+      return;
+    }
+
+    var currentEofEventsIndex = 0;
+
+    function emitEofEventsFor(messageIndex) {
+      while (currentEofEventsIndex < eofEvents.length && eofEvents[currentEofEventsIndex].messageIndex === messageIndex) {
+        delete eofEvents[currentEofEventsIndex].messageIndex;
+        self.emit('partition.eof', eofEvents[currentEofEventsIndex])
+        ++currentEofEventsIndex;
+      }
+    }
+
+    emitEofEventsFor(-1);
+
+    for (var i = 0; i < messages.length; i++) {
+      self.emit('data', messages[i]);
+      emitEofEventsFor(i);
+    }
+
+    emitEofEventsFor(messages.length);
+
+    if (cb) {
+      cb(null, messages);
+    }
+
+  });
+
+};
+
+/**
+ * This callback returns the message read from Kafka.
+ *
+ * @callback KafkaConsumer~readCallback
+ * @param {LibrdKafkaError} err - An error, if one occurred while reading
+ * the data.
+ * @param {KafkaConsumer~Message} message
+ */
+
+/**
+ * Commit a topic partition or all topic partitions that have been read
+ *
+ * If you provide a topic partition, it will commit that. Otherwise,
+ * it will commit all read offsets for all topic partitions.
+ *
+ * @param {object|array|null} - Topic partition object to commit, list of topic
+ * partitions, or null if you want to commit all read offsets.
+ * @throws When commit returns a non 0 error code
+ *
+ * @return {KafkaConsumer} - returns itself.
+ */
+KafkaConsumer.prototype.commit = function(topicPartition) {
+  this._errorWrap(this._client.commit(topicPartition), true);
+  return this;
+};
+
+/**
+ * Commit a message
+ *
+ * This is basically a convenience method to map commit properly. We need to
+ * add one to the offset in this case
+ *
+ * @param {object} - Message object to commit
+ * @throws When commit returns a non 0 error code
+ *
+ * @return {KafkaConsumer} - returns itself.
+ */
+KafkaConsumer.prototype.commitMessage = function(msg) {
+  var topicPartition = {
+    topic: msg.topic,
+    partition: msg.partition,
+    offset: msg.offset + 1
+  };
+
+  this._errorWrap(this._client.commit(topicPartition), true);
+  return this;
+};
+
+/**
+ * Commit a topic partition (or all topic partitions) synchronously
+ *
+ * @param {object|array|null} - Topic partition object to commit, list of topic
+ * partitions, or null if you want to commit all read offsets.
+ * @throws {LibrdKafkaError} - if the commit fails
+ *
+ * @return {KafkaConsumer} - returns itself.
+ */
+KafkaConsumer.prototype.commitSync = function(topicPartition) {
+  this._errorWrap(this._client.commitSync(topicPartition), true);
+  return this;
+};
+
+/**
+ * Commit a message synchronously
+ *
+ * @see KafkaConsumer#commitMessageSync
+ * @param  {object} msg - A message object to commit.
+ *
+ * @throws {LibrdKafkaError} - if the commit fails
+ *
+ * @return {KafkaConsumer} - returns itself.
+ */
+KafkaConsumer.prototype.commitMessageSync = function(msg) {
+  var topicPartition = {
+    topic: msg.topic,
+    partition: msg.partition,
+    offset: msg.offset + 1
+  };
+
+  this._errorWrap(this._client.commitSync(topicPartition), true);
+  return this;
+};
+
+/**
+ * Get last known offsets from the client.
+ *
+ * The low offset is updated periodically (if statistics.interval.ms is set)
+ * while the high offset is updated on each fetched message set from the
+ * broker.
+ *
+ * If there is no cached offset (either low or high, or both), then this will
+ * throw an error.
+ *
+ * @param {string} topic - Topic to recieve offsets from.
+ * @param {number} partition - Partition of the provided topic to recieve offsets from
+ * @return {Client~watermarkOffsets} - Returns an object with a high and low property, specifying
+ * the high and low offsets for the topic partition
+ * @throws {LibrdKafkaError} - Throws when there is no offset stored
+ */
+KafkaConsumer.prototype.getWatermarkOffsets = function(topic, partition) {
+  if (!this.isConnected()) {
+    throw new Error('Client is disconnected');
+  }
+
+  return this._errorWrap(this._client.getWatermarkOffsets(topic, partition), true);
+};
+
+/**
+ * Store offset for topic partition.
+ *
+ * The offset will be committed (written) to the offset store according to the auto commit interval,
+ * if auto commit is on, or next manual offset if not.
+ *
+ * enable.auto.offset.store must be set to false to use this API,
+ *
+ * @see https://github.com/edenhill/librdkafka/blob/261371dc0edef4cea9e58a076c8e8aa7dc50d452/src-cpp/rdkafkacpp.h#L1702
+ *
+ * @param {Array.<TopicPartition>} topicPartitions - Topic partitions with offsets to store offsets for.
+ * @throws {LibrdKafkaError} - Throws when there is no offset stored
+ */
+KafkaConsumer.prototype.offsetsStore = function(topicPartitions) {
+  if (!this.isConnected()) {
+    throw new Error('Client is disconnected');
+  }
+
+  return this._errorWrap(this._client.offsetsStore(topicPartitions), true);
+};
+
+/**
+ * Resume consumption for the provided list of partitions.
+ *
+ * @param {Array.<TopicPartition>} topicPartitions - List of topic partitions to resume consumption on.
+ * @throws {LibrdKafkaError} - Throws when there is no offset stored
+ */
+KafkaConsumer.prototype.resume = function(topicPartitions) {
+  if (!this.isConnected()) {
+    throw new Error('Client is disconnected');
+  }
+
+  return this._errorWrap(this._client.resume(topicPartitions), true);
+};
+
+/**
+ * Pause producing or consumption for the provided list of partitions.
+ *
+ * @param {Array.<TopicPartition>} topicPartitions - List of topics to pause consumption on.
+ * @throws {LibrdKafkaError} - Throws when there is no offset stored
+ */
+KafkaConsumer.prototype.pause = function(topicPartitions) {
+  if (!this.isConnected()) {
+    throw new Error('Client is disconnected');
+  }
+
+  return this._errorWrap(this._client.pause(topicPartitions), true);
+};
+
+
+
+ + + + + +
+ +
+ +
+ + +
+ + + + + + + + + + diff --git a/current/producer-stream.js.html b/current/producer-stream.js.html new file mode 100644 index 00000000..20591fad --- /dev/null +++ b/current/producer-stream.js.html @@ -0,0 +1,404 @@ + + + + + JSDoc: Source: producer-stream.js + + + + + + + + + + + + + + + +
+
+ +
+

Source: producer-stream.js

+ + + + + + +
+
+
/*
+ * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
+ *
+ * Copyright (c) 2016 Blizzard Entertainment
+ *
+ * This software may be modified and distributed under the terms
+ * of the MIT license.  See the LICENSE.txt file for details.
+ */
+
+'use strict';
+
+module.exports = ProducerStream;
+
+var Writable = require('stream').Writable;
+var util = require('util');
+var ErrorCode = require('./error').codes;
+
+util.inherits(ProducerStream, Writable);
+
+/**
+ * Writable stream integrating with the Kafka Producer.
+ *
+ * This class is used to write data to Kafka in a streaming way. It takes
+ * buffers of data and puts them into the appropriate Kafka topic. If you need
+ * finer control over partitions or keys, this is probably not the class for
+ * you. In that situation just use the Producer itself.
+ *
+ * The stream detects if Kafka is already connected. You can safely begin
+ * writing right away.
+ *
+ * This stream does not operate in Object mode and can only be given buffers.
+ *
+ * @param {Producer} producer - The Kafka Producer object.
+ * @param {array} topics - Array of topics
+ * @param {object} options - Topic configuration.
+ * @constructor
+ * @extends stream.Writable
+ */
+function ProducerStream(producer, options) {
+  if (!(this instanceof ProducerStream)) {
+    return new ProducerStream(producer, options);
+  }
+
+  if (options === undefined) {
+    options = {};
+  } else if (typeof options === 'string') {
+    options = { encoding: options };
+  } else if (options === null || typeof options !== 'object') {
+    throw new TypeError('"streamOptions" argument must be a string or an object');
+  }
+
+  if (!options.objectMode && !options.topic) {
+    throw new TypeError('ProducerStreams not using objectMode must provide a topic to produce to.');
+  }
+
+  if (options.objectMode !== true) {
+    this._write = this._write_buffer;
+  } else {
+    this._write = this._write_message;
+  }
+
+  Writable.call(this, options);
+
+  this.producer = producer;
+  this.topicName = options.topic;
+
+  this.autoClose = options.autoClose === undefined ? true : !!options.autoClose;
+  this.connectOptions = options.connectOptions || {};
+
+  this.producer.setPollInterval(options.pollInterval || 1000);
+
+  if (options.encoding) {
+    this.setDefaultEncoding(options.encoding);
+  }
+
+  // Connect to the producer. Unless we are already connected
+  if (!this.producer.isConnected()) {
+    this.connect(this.connectOptions);
+  }
+
+  var self = this;
+
+  this.once('finish', function() {
+    if (this.autoClose) {
+      this.close();
+    }
+  });
+
+}
+
+ProducerStream.prototype.connect = function(options) {
+  this.producer.connect(options, function(err, data) {
+    if (err) {
+      this.emit('error', err);
+      return;
+    }
+
+  }.bind(this));
+};
+
+/**
+ * Internal stream write method for ProducerStream when writing buffers.
+ *
+ * This method should never be called externally. It has some recursion to
+ * handle cases where the producer is not yet connected.
+ *
+ * @param  {buffer} chunk - Chunk to write.
+ * @param  {string} encoding - Encoding for the buffer
+ * @param  {Function} cb - Callback to call when the stream is done processing
+ * the data.
+ * @private
+ * @see https://github.com/nodejs/node/blob/master/lib/fs.js#L1901
+ */
+ProducerStream.prototype._write_buffer = function(data, encoding, cb) {
+  if (!(data instanceof Buffer)) {
+    this.emit('error', new Error('Invalid data. Can only produce buffers'));
+    return;
+  }
+
+  var self = this;
+
+  if (!this.producer.isConnected()) {
+    this.producer.once('ready', function() {
+      self._write(data, encoding, cb);
+    });
+    return;
+  }
+
+  try {
+    this.producer.produce(self.topicName, null, data, null);
+    setImmediate(cb);
+  } catch (e) {
+    if (ErrorCode.ERR__QUEUE_FULL === e.code) {
+      // Poll for good measure
+      self.producer.poll();
+
+      // Just delay this thing a bit and pass the params
+      // backpressure will get exerted this way.
+      setTimeout(function() {
+        self._write(data, encoding, cb);
+      }, 500);
+    } else {
+      if (self.autoClose) {
+        self.close();
+      }
+      setImmediate(function() {
+        cb(e);
+      });
+    }
+  }
+};
+
+/**
+ * Internal stream write method for ProducerStream when writing objects.
+ *
+ * This method should never be called externally. It has some recursion to
+ * handle cases where the producer is not yet connected.
+ *
+ * @param  {object} message - Message to write.
+ * @param  {string} encoding - Encoding for the buffer
+ * @param  {Function} cb - Callback to call when the stream is done processing
+ * the data.
+ * @private
+ * @see https://github.com/nodejs/node/blob/master/lib/fs.js#L1901
+ */
+ProducerStream.prototype._write_message = function(message, encoding, cb) {
+  var self = this;
+
+  if (!this.producer.isConnected()) {
+    this.producer.once('ready', function() {
+      self._write(message, encoding, cb);
+    });
+    return;
+  }
+
+  try {
+    this.producer.produce(message.topic, message.partition, message.value, message.key, message.timestamp, message.opaque, message.headers);
+    setImmediate(cb);
+  } catch (e) {
+    if (ErrorCode.ERR__QUEUE_FULL === e.code) {
+      // Poll for good measure
+      self.producer.poll();
+
+      // Just delay this thing a bit and pass the params
+      // backpressure will get exerted this way.
+      setTimeout(function() {
+        self._write(message, encoding, cb);
+      }, 500);
+    } else {
+      if (self.autoClose) {
+        self.close();
+      }
+      setImmediate(function() {
+        cb(e);
+      });
+    }
+  }
+};
+
+function writev(producer, topic, chunks, cb) {
+
+  // @todo maybe a produce batch method?
+  var doneCount = 0;
+  var err = null;
+  var chunk = null;
+
+  function maybeDone(e) {
+    if (e) {
+      err = e;
+    }
+    doneCount ++;
+    if (doneCount === chunks.length) {
+      cb(err);
+    }
+  }
+
+  function retry(restChunks) {
+    // Poll for good measure
+    producer.poll();
+
+    // Just delay this thing a bit and pass the params
+    // backpressure will get exerted this way.
+    setTimeout(function() {
+      writev(producer, topic, restChunks, cb);
+    }, 500);
+  }
+
+  for (var i = 0; i < chunks.length; i++) {
+    chunk = chunks[i];
+
+    try {
+      if (Buffer.isBuffer(chunk)) {
+        producer.produce(topic, null, chunk, null);
+      } else {
+        producer.produce(chunk.topic, chunk.partition, chunk.value, chunk.key, chunk.timestamp, chunk.opaque, chunk.headers);
+      }
+      maybeDone();
+    } catch (e) {
+      if (ErrorCode.ERR__QUEUE_FULL === e.code) {
+        retry(chunks.slice(i));
+      } else {
+        cb(e);
+      }
+      break;
+    }
+  }
+
+}
+
+ProducerStream.prototype._writev = function(data, cb) {
+  if (!this.producer.isConnected()) {
+    this.once('ready', function() {
+      this._writev(data, cb);
+    });
+    return;
+  }
+
+  var self = this;
+  var len = data.length;
+  var chunks = new Array(len);
+  var size = 0;
+
+  for (var i = 0; i < len; i++) {
+    var chunk = data[i].chunk;
+
+    chunks[i] = chunk;
+    size += chunk.length;
+  }
+
+  writev(this.producer, this.topicName, chunks, function(err) {
+    if (err) {
+      self.close();
+      cb(err);
+      return;
+    }
+    cb();
+  });
+
+};
+
+ProducerStream.prototype.close = function(cb) {
+  var self = this;
+  if (cb) {
+    this.once('close', cb);
+  }
+
+  // Use interval variables in here
+  if (self.producer._isConnected) {
+    self.producer.disconnect(function() {
+      // Previously this set the producer to null. I'm not sure there is any benefit
+      // to that other than I guess helping flag it for GC?
+      // https://github.com/Blizzard/node-rdkafka/issues/344
+      close();
+    });
+  } else if (self.producer._isConnecting){
+    self.producer.once('ready', function() {
+      // Don't pass CB this time because it has already been passed
+      self.close();
+    });
+  } else {
+    setImmediate(close);
+  }
+
+  function close() {
+    self.emit('close');
+  }
+};
+
+
+
+ + + + + +
+ +
+ +
+ + +
+ + + + + + + + + + diff --git a/current/producer.js.html b/current/producer.js.html new file mode 100644 index 00000000..6bc7fd0a --- /dev/null +++ b/current/producer.js.html @@ -0,0 +1,472 @@ + + + + + JSDoc: Source: producer.js + + + + + + + + + + + + + + + +
+
+ +
+

Source: producer.js

+ + + + + + +
+
+
/*
+ * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
+ *
+ * Copyright (c) 2016 Blizzard Entertainment
+ *
+ * This software may be modified and distributed under the terms
+ * of the MIT license.  See the LICENSE.txt file for details.
+ */
+
+module.exports = Producer;
+
+var Client = require('./client');
+
+var util = require('util');
+var Kafka = require('../librdkafka.js');
+var ProducerStream = require('./producer-stream');
+var LibrdKafkaError = require('./error');
+var shallowCopy = require('./util').shallowCopy;
+
+util.inherits(Producer, Client);
+
+/**
+ * Producer class for sending messages to Kafka
+ *
+ * This is the main entry point for writing data to Kafka. You
+ * configure this like you do any other client, with a global
+ * configuration and default topic configuration.
+ *
+ * Once you instantiate this object, you need to connect to it first.
+ * This allows you to get the metadata and make sure the connection
+ * can be made before you depend on it. After that, problems with
+ * the connection will by brought down by using poll, which automatically
+ * runs when a transaction is made on the object.
+ *
+ * @param {object} conf - Key value pairs to configure the producer
+ * @param {object} topicConf - Key value pairs to create a default
+ * topic configuration
+ * @extends Client
+ * @constructor
+ */
+function Producer(conf, topicConf) {
+  if (!(this instanceof Producer)) {
+    return new Producer(conf, topicConf);
+  }
+
+  conf = shallowCopy(conf);
+  topicConf = shallowCopy(topicConf);
+
+  /**
+   * Producer message. This is sent to the wrapper, not received from it
+   *
+   * @typedef {object} Producer~Message
+   * @property {string|buffer} message - The buffer to send to Kafka.
+   * @property {Topic} topic - The Kafka topic to produce to.
+   * @property {number} partition - The partition to produce to. Defaults to
+   * the partitioner
+   * @property {string} key - The key string to use for the message.
+   * @see Consumer~Message
+   */
+
+  var gTopic = conf.topic || false;
+  var gPart = conf.partition || null;
+  var dr_cb = conf.dr_cb || null;
+  var dr_msg_cb = conf.dr_msg_cb || null;
+
+  // delete keys we don't want to pass on
+  delete conf.topic;
+  delete conf.partition;
+
+  delete conf.dr_cb;
+  delete conf.dr_msg_cb;
+
+  // client is an initialized consumer object
+  // @see NodeKafka::Producer::Init
+  Client.call(this, conf, Kafka.Producer, topicConf);
+
+  // Delete these keys after saving them in vars
+  this.globalConfig = conf;
+  this.topicConfig = topicConf;
+  this.defaultTopic = gTopic || null;
+  this.defaultPartition = gPart == null ? -1 : gPart;
+
+  this.sentMessages = 0;
+
+  this.pollInterval = undefined;
+
+  if (dr_msg_cb || dr_cb) {
+    this._cb_configs.event.delivery_cb =  function(err, report) {
+      if (err) {
+        err = LibrdKafkaError.create(err);
+      }
+      this.emit('delivery-report', err, report);
+    }.bind(this);
+    this._cb_configs.event.delivery_cb.dr_msg_cb = !!dr_msg_cb;
+
+    if (typeof dr_cb === 'function') {
+      this.on('delivery-report', dr_cb);
+    }
+
+  }
+}
+
+/**
+ * Produce a message to Kafka synchronously.
+ *
+ * This is the method mainly used in this class. Use it to produce
+ * a message to Kafka.
+ *
+ * When this is sent off, there is no guarantee it is delivered. If you need
+ * guaranteed delivery, change your *acks* settings, or use delivery reports.
+ *
+ * @param {string} topic - The topic name to produce to.
+ * @param {number|null} partition - The partition number to produce to.
+ * @param {Buffer|null} message - The message to produce.
+ * @param {string} key - The key associated with the message.
+ * @param {number|null} timestamp - Timestamp to send with the message.
+ * @param {object} opaque - An object you want passed along with this message, if provided.
+ * @param {object} headers - A list of custom key value pairs that provide message metadata.
+ * @throws {LibrdKafkaError} - Throws a librdkafka error if it failed.
+ * @return {boolean} - returns an error if it failed, or true if not
+ * @see Producer#produce
+ */
+Producer.prototype.produce = function(topic, partition, message, key, timestamp, opaque, headers) {
+  if (!this._isConnected) {
+    throw new Error('Producer not connected');
+  }
+
+  // I have removed support for using a topic object. It is going to be removed
+  // from librdkafka soon, and it causes issues with shutting down
+  if (!topic || typeof topic !== 'string') {
+    throw new TypeError('"topic" must be a string');
+  }
+
+  this.sentMessages++;
+
+  partition = partition == null ? this.defaultPartition : partition;
+
+  return this._errorWrap(
+    this._client.produce(topic, partition, message, key, timestamp, opaque, headers));
+
+};
+
+/**
+ * Create a write stream interface for a producer.
+ *
+ * This stream does not run in object mode. It only takes buffers of data.
+ *
+ * @param {object} conf - Key value pairs to configure the producer
+ * @param {object} topicConf - Key value pairs to create a default
+ * topic configuration
+ * @param {object} streamOptions - Stream options
+ * @return {ProducerStream} - returns the write stream for writing to Kafka.
+ */
+Producer.createWriteStream = function(conf, topicConf, streamOptions) {
+  var producer = new Producer(conf, topicConf);
+  return new ProducerStream(producer, streamOptions);
+};
+
+/**
+ * Poll for events
+ *
+ * We need to run poll in order to learn about new events that have occurred.
+ * This is no longer done automatically when we produce, so we need to run
+ * it manually, or set the producer to automatically poll.
+ *
+ * @return {Producer} - returns itself.
+ */
+Producer.prototype.poll = function() {
+  if (!this._isConnected) {
+    throw new Error('Producer not connected');
+  }
+  this._client.poll();
+  return this;
+};
+
+/**
+ * Set automatic polling for events.
+ *
+ * We need to run poll in order to learn about new events that have occurred.
+ * If you would like this done on an interval with disconnects and reconnections
+ * managed, you can do it here
+ *
+ * @param {number} interval - Interval, in milliseconds, to poll
+ *
+ * @return {Producer} - returns itself.
+ */
+Producer.prototype.setPollInterval = function(interval) {
+  // If we already have a poll interval we need to stop it
+  if (this.pollInterval) {
+    clearInterval(this.pollInterval);
+    this.pollInterval = undefined;
+  }
+
+  if (interval === 0) {
+    // If the interval was set to 0, bail out. We don't want to process this.
+    // If there was an interval previously set, it has been removed.
+    return;
+  }
+
+  var self = this;
+
+  // Now we want to make sure we are connected.
+  if (!this._isConnected) {
+    // If we are not, execute this once the connection goes through.
+    this.once('ready', function() {
+      self.setPollInterval(interval);
+    });
+    return;
+  }
+
+  // We know we are connected at this point.
+  // Unref this interval
+  this.pollInterval = setInterval(function() {
+    try {
+      self.poll();
+    } catch (e) {
+      // We can probably ignore errors here as far as broadcasting.
+      // Disconnection issues will get handled below
+    }
+  }, interval).unref();
+
+  // Handle disconnections
+  this.once('disconnected', function() {
+    // Just rerun this function with interval 0. If any
+    // poll interval is set, this will remove it
+    self.setPollInterval(0);
+  });
+
+  return this;
+};
+
+/**
+ * Flush the producer
+ *
+ * Flush everything on the internal librdkafka producer buffer. Do this before
+ * disconnects usually
+ *
+ * @param {number} timeout - Number of milliseconds to try to flush before giving up.
+ * @param {function} callback - Callback to fire when the flush is done.
+ *
+ * @return {Producer} - returns itself.
+ */
+Producer.prototype.flush = function(timeout, callback) {
+  if (!this._isConnected) {
+    throw new Error('Producer not connected');
+  }
+
+  if (timeout === undefined || timeout === null) {
+    timeout = 500;
+  }
+
+  this._client.flush(timeout, function(err) {
+    if (err) {
+      err = LibrdKafkaError.create(err);
+    }
+
+    if (callback) {
+      callback(err);
+    }
+  });
+  return this;
+};
+
+/**
+ * Save the base disconnect method here so we can overwrite it and add a flush
+ */
+Producer.prototype._disconnect = Producer.prototype.disconnect;
+
+/**
+ * Disconnect the producer
+ *
+ * Flush everything on the internal librdkafka producer buffer. Then disconnect
+ *
+ * @param {number} timeout - Number of milliseconds to try to flush before giving up, defaults to 5 seconds.
+ * @param {function} cb - The callback to fire when
+ */
+Producer.prototype.disconnect = function(timeout, cb) {
+  var self = this;
+  var timeoutInterval = 5000;
+
+  if (typeof timeout === 'function') {
+    cb = timeout;
+  } else {
+    timeoutInterval = timeout;
+  }
+
+  this.flush(timeoutInterval, function() {
+    self._disconnect(cb);
+  });
+};
+
+/**
+ * Init a transaction.
+ *
+ * Initialize transactions, this is only performed once per transactional producer.
+ *
+ * @param {number} timeout - Number of milliseconds to try to initialize before giving up, defaults to 5 seconds.
+ * @param {function} cb - Callback to return when operation is completed
+ * @return {Producer} - returns itself.
+ */
+Producer.prototype.initTransactions = function(timeout, cb) {
+  if (typeof timeout === 'function') {
+    cb = timeout;
+    timeout = 5000;
+  }
+  this._client.initTransactions(timeout, function(err) {
+    cb(err ? LibrdKafkaError.create(err) : err);
+  });
+};
+
+/**
+ * Begin a transaction.
+ *
+ * 'initTransaction' must have been called successfully (once) before this function is called.
+ *
+ * @return {Producer} - returns itself.
+ */
+Producer.prototype.beginTransaction = function(cb) {
+  this._client.beginTransaction(function(err) {
+    cb(err ? LibrdKafkaError.create(err) : err);
+  });
+};
+
+/**
+ * Commit the current transaction (as started with 'beginTransaction').
+ *
+ * @param {number} timeout - Number of milliseconds to try to commit before giving up, defaults to 5 seconds
+ * @param {function} cb - Callback to return when operation is completed
+ * @return {Producer} - returns itself.
+ */
+Producer.prototype.commitTransaction = function(timeout, cb) {
+  if (typeof timeout === 'function') {
+    cb = timeout;
+    timeout = 5000;
+  }
+  this._client.commitTransaction(timeout, function(err) {
+    cb(err ? LibrdKafkaError.create(err) : err);
+  });
+};
+
+/**
+ * Aborts the ongoing transaction.
+ *
+ * @param {number} timeout - Number of milliseconds to try to abort, defaults to 5 seconds
+ * @param {function} cb - Callback to return when operation is completed
+ * @return {Producer} - returns itself.
+ */
+Producer.prototype.abortTransaction = function(timeout, cb) {
+  if (typeof timeout === 'function') {
+    cb = timeout;
+    timeout = 5000;
+  }
+  this._client.abortTransaction(timeout, function(err) {
+    cb(err ? LibrdKafkaError.create(err) : err);
+  });
+};
+
+/**
+ * Send the current offsets of the consumer to the ongoing transaction.
+ *
+ * @param {number} offsets - Offsets to send as part of the next commit
+ * @param {Consumer} consumer - An instance of the consumer
+ * @param {number} timeout - Number of milliseconds to try to send offsets, defaults to 5 seconds
+ * @param {function} cb - Callback to return when operation is completed
+ * @return {Producer} - returns itself.
+ */
+Producer.prototype.sendOffsetsToTransaction = function(offsets, consumer, timeout, cb) {
+  if (typeof timeout === 'function') {
+    cb = timeout;
+    timeout = 5000;
+  }
+  this._client.sendOffsetsToTransaction(offsets, consumer.getClient(), timeout, function(err) {
+    cb(err ? LibrdKafkaError.create(err) : err);
+  });
+};
+
+
+
+ + + + + +
+ +
+ +
+ + +
+ + + + + + + + + + diff --git a/current/producer_high-level-producer.js.html b/current/producer_high-level-producer.js.html new file mode 100644 index 00000000..a576b745 --- /dev/null +++ b/current/producer_high-level-producer.js.html @@ -0,0 +1,420 @@ + + + + + JSDoc: Source: producer/high-level-producer.js + + + + + + + + + + + + + + + +
+
+ +
+

Source: producer/high-level-producer.js

+ + + + + + +
+
+
/*
+ * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
+ *
+ * Copyright (c) 2016 Blizzard Entertainment
+ *
+ * This software may be modified and distributed under the terms
+ * of the MIT license.  See the LICENSE.txt file for details.
+ */
+
+module.exports = HighLevelProducer;
+
+var util = require('util');
+var Producer = require('../producer');
+var LibrdKafkaError = require('../error');
+var EventEmitter = require('events').EventEmitter;
+var RefCounter = require('../tools/ref-counter');
+var shallowCopy = require('../util').shallowCopy;
+var isObject = require('../util').isObject;
+
+util.inherits(HighLevelProducer, Producer);
+
+var noopSerializer = createSerializer(function (v) { return v; });
+
+/**
+ * Create a serializer
+ *
+ * Method simply wraps a serializer provided by a user
+ * so it adds context to the error
+ *
+ * @returns {function} Serialization function
+ */
+function createSerializer(serializer) {
+  var applyFn = function serializationWrapper(v, cb) {
+    try {
+      return cb ? serializer(v, cb) : serializer(v);
+    } catch (e) {
+      var modifiedError = new Error('Could not serialize value: ' + e.message);
+      modifiedError.value = v;
+      modifiedError.serializer = serializer;
+      throw modifiedError;
+    }
+  };
+
+  // We can check how many parameters the function has and activate the asynchronous
+  // operation if the number of parameters the function accepts is > 1
+  return {
+    apply: applyFn,
+    async: serializer.length > 1
+  };
+}
+
+/**
+ * Producer class for sending messages to Kafka in a higher level fashion
+ *
+ * This is the main entry point for writing data to Kafka if you want more
+ * functionality than librdkafka supports out of the box. You
+ * configure this like you do any other client, with a global
+ * configuration and default topic configuration.
+ *
+ * Once you instantiate this object, you need to connect to it first.
+ * This allows you to get the metadata and make sure the connection
+ * can be made before you depend on it. After that, problems with
+ * the connection will by brought down by using poll, which automatically
+ * runs when a transaction is made on the object.
+ *
+ * This has a few restrictions, so it is not for free!
+ *
+ * 1. You may not define opaque tokens
+ *    The higher level producer is powered by opaque tokens.
+ * 2. Every message ack will dispatch an event on the node thread.
+ * 3. Will use a ref counter to determine if there are outgoing produces.
+ *
+ * This will return the new object you should use instead when doing your
+ * produce calls
+ *
+ * @param {object} conf - Key value pairs to configure the producer
+ * @param {object} topicConf - Key value pairs to create a default
+ * topic configuration
+ * @extends Producer
+ * @constructor
+ */
+function HighLevelProducer(conf, topicConf) {
+  if (!(this instanceof HighLevelProducer)) {
+    return new HighLevelProducer(conf, topicConf);
+  }
+
+  // Force this to be true for the high level producer
+  conf = shallowCopy(conf);
+  conf.dr_cb = true;
+
+  // producer is an initialized consumer object
+  // @see NodeKafka::Producer::Init
+  Producer.call(this, conf, topicConf);
+  var self = this;
+
+  // Add a delivery emitter to the producer
+  this._hl = {
+    deliveryEmitter: new EventEmitter(),
+    messageId: 0,
+    // Special logic for polling. We use a reference counter to know when we need
+    // to be doing it and when we can stop. This means when we go into fast polling
+    // mode we don't need to do multiple calls to poll since they all will yield
+    // the same result
+    pollingRefTimeout: null,
+  };
+
+  // Add the polling ref counter to the class which ensures we poll when we go active
+  this._hl.pollingRef = new RefCounter(function() {
+    self._hl.pollingRefTimeout = setInterval(function() {
+      try {
+        self.poll();
+      } catch (e) {
+        if (!self._isConnected) {
+          // If we got disconnected for some reason there is no point
+          // in polling anymore
+          clearInterval(self._hl.pollingRefTimeout);
+        }
+      }
+    }, 1);
+  }, function() {
+    clearInterval(self._hl.pollingRefTimeout);
+  });
+
+  // Default poll interval. More sophisticated polling is also done in create rule method
+  this.setPollInterval(1000);
+
+  // Listen to all delivery reports to propagate elements with a _message_id to the emitter
+  this.on('delivery-report', function(err, report) {
+    if (report.opaque && report.opaque.__message_id !== undefined) {
+      self._hl.deliveryEmitter.emit(report.opaque.__message_id, err, report.offset);
+    }
+  });
+
+  // Save old produce here since we are making some modifications for it
+  this._oldProduce = this.produce;
+  this.produce = this._modifiedProduce;
+
+  // Serializer information
+  this.keySerializer = noopSerializer;
+  this.valueSerializer = noopSerializer;
+}
+
+/**
+ * Produce a message to Kafka asynchronously.
+ *
+ * This is the method mainly used in this class. Use it to produce
+ * a message to Kafka.
+ *
+ * When this is sent off, and you recieve your callback, the assurances afforded
+ * to you will be equal to those provided by your ack level.
+ *
+ * @param {string} topic - The topic name to produce to.
+ * @param {number|null} partition - The partition number to produce to.
+ * @param {Buffer|null} message - The message to produce.
+ * @param {string} key - The key associated with the message.
+ * @param {number|null} timestamp - Timestamp to send with the message.
+ * @param {object} headers - A list of custom key value pairs that provide message metadata.
+ * @param {function} callback - Callback to call when the delivery report is recieved.
+ * @throws {LibrdKafkaError} - Throws a librdkafka error if it failed.
+ * @return {boolean} - returns an error if it failed, or true if not
+ * @see Producer#produce
+ */
+HighLevelProducer.prototype._modifiedProduce = function(topic, partition, message, key, timestamp, headers, callback) {
+  // headers are optional
+  if (arguments.length === 6) {
+    callback = headers;
+    headers = undefined;
+  }
+
+  // Add the message id
+  var opaque = {
+    __message_id: this._hl.messageId++,
+  };
+
+  this._hl.pollingRef.increment();
+
+  var self = this;
+
+  var resolvedSerializedValue;
+  var resolvedSerializedKey;
+  var calledBack = false;
+
+  // Actually do the produce with new key and value based on deserialized
+  // results
+  function doProduce(v, k) {
+    try {
+      var r = self._oldProduce(topic, partition,
+        v, k,
+        timestamp, opaque, headers);
+
+      self._hl.deliveryEmitter.once(opaque.__message_id, function(err, offset) {
+        self._hl.pollingRef.decrement();
+        setImmediate(function() {
+          // Offset must be greater than or equal to 0 otherwise it is a null offset
+          // Possibly because we have acks off
+          callback(err, offset >= 0 ? offset : null);
+        });
+      });
+
+      return r;
+    } catch (e) {
+      callback(e);
+    }
+  }
+
+  function produceIfComplete() {
+    if (resolvedSerializedKey !== undefined && resolvedSerializedValue !== undefined) {
+      doProduce(resolvedSerializedValue, resolvedSerializedKey);
+    }
+  }
+
+  // To run on a promise if returned by the serializer
+  function finishSerializedValue(v) {
+    if (!calledBack) {
+      resolvedSerializedValue = v;
+      produceIfComplete();
+    }
+  }
+
+  // To run on a promise of returned by the serializer
+  function finishSerializedKey(k) {
+    resolvedSerializedKey = k;
+
+    if (!calledBack) {
+      produceIfComplete();
+    }
+  }
+
+  function failSerializedValue(err) {
+    if (!calledBack) {
+      calledBack = true;
+      callback(err);
+    }
+  }
+
+  function failSerializedKey(err) {
+    if (!calledBack) {
+      calledBack = true;
+      callback(err);
+    }
+  }
+
+  function valueSerializerCallback(err, v) {
+    if (err) {
+      failSerializedValue(err);
+    } else {
+      finishSerializedValue(v);
+    }
+  }
+
+  function keySerializerCallback(err, v) {
+    if (err) {
+      failSerializedKey(err);
+    } else {
+      finishSerializedKey(v);
+    }
+  }
+
+  try {
+    if (this.valueSerializer.async) {
+      // If this is async we need to give it a callback
+      this.valueSerializer.apply(message, valueSerializerCallback);
+    } else {
+      var serializedValue = this.valueSerializer.apply(message);
+      // Check if we were returned a promise in order to support promise behavior
+      if (serializedValue &&
+          typeof serializedValue.then === 'function' &&
+          typeof serializedValue.catch === 'function') {
+        // This is a promise. We need to hook into its then and catch
+        serializedValue.then(finishSerializedValue).catch(failSerializedValue);
+      } else {
+        resolvedSerializedValue = serializedValue;
+      }
+    }
+
+    if (this.keySerializer.async) {
+      // If this is async we need to give it a callback
+      this.keySerializer.apply(key, keySerializerCallback);
+    } else {
+      var serializedKey = this.keySerializer.apply(key);
+      // Check if we were returned a promise in order to support promise behavior
+      if (serializedKey &&
+          typeof serializedKey.then === 'function' &&
+          typeof serializedKey.catch === 'function') {
+        // This is a promise. We need to hook into its then and catch
+        serializedKey.then(finishSerializedKey).catch(failSerializedKey);
+      } else {
+        resolvedSerializedKey = serializedKey;
+      }
+    }
+
+    // Only do the produce here if we are complete. That is, if the key
+    // and value have been serialized.
+    produceIfComplete();
+  } catch (e) {
+    setImmediate(function() {
+      calledBack = true;
+      callback(e);
+    });
+  }
+};
+
+/**
+ * Set the key serializer
+ *
+ * This allows the value inside the produce call to differ from the value of the
+ * value actually produced to kafka. Good if, for example, you want to serialize
+ * it to a particular format.
+ */
+HighLevelProducer.prototype.setKeySerializer = function(serializer) {
+  this.keySerializer = createSerializer(serializer);
+};
+
+/**
+ * Set the value serializer
+ *
+ * This allows the value inside the produce call to differ from the value of the
+ * value actually produced to kafka. Good if, for example, you want to serialize
+ * it to a particular format.
+ */
+HighLevelProducer.prototype.setValueSerializer = function(serializer) {
+  this.valueSerializer = createSerializer(serializer);
+};
+
+
+
+ + + + + +
+ +
+ +
+ + +
+ + + + + + + + + + diff --git a/current/scripts/prettify/lang-css.js b/current/scripts/prettify/lang-css.js new file mode 100644 index 00000000..041e1f59 --- /dev/null +++ b/current/scripts/prettify/lang-css.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", +/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/current/scripts/prettify/prettify.js b/current/scripts/prettify/prettify.js new file mode 100644 index 00000000..eef5ad7e --- /dev/null +++ b/current/scripts/prettify/prettify.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p li { + float: right; +} + +dl dd { + margin-left: 0px; +} + +.navigation-sidebar { + margin-right: 40px; +} + +.navigation-sidebar > ul { + border: 1px solid rgba(255,255,255,0.1); +} + +.navigation-sidebar > ul > li > a { + border-top: 1px solid rgba(255,255,255,0.1); + border-bottom: 1px solid rgba(255,255,255,0.1); + background: rgba(255,255,255,0.03); + display: block; + width: 100%; + height: 40px; + line-height: 40px; + padding: 0 40px 0 10px; + position: relative; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: color .2s,background-color .2s; + transition: color .2s,background-color .2s; +} + +.navigation-sidebar > ul > li:last-child { + margin-bottom: 10px; +} + +.navigation-sidebar > ul > li > a:after { + /*content: "";*/ + display: block; + position: absolute; + width: 16px; + height: 16px; + overflow: hidden; + right: 7px; + top: 12px; + background-image: url("../toolkit/images/toolkit/themes/bnet/icons/sprite-16-blue.png"); + background-position: 0 0; + background-repeat: no-repeat; + background-position: -80px -256px; +} + +.navigation-sidebar > ul > li > ul > li > a { + display: block; + height: 20px; + white-space: nowrap; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + line-height: 20px; + padding: 0 10px; + color: rgba(255,255,255,0.5); + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.navigation-sidebar > ul > li > ul > li:first-child { + margin-top: 10px; +} + +.navigation-sidebar > ul > li > ul > li { + margin: 0; +} + +.navigation-sidebar > ul > li > ul > li:last-child { + margin-bottom: 0px; +} diff --git a/current/styles/prettify.css b/current/styles/prettify.css new file mode 100644 index 00000000..0fd654ff --- /dev/null +++ b/current/styles/prettify.css @@ -0,0 +1 @@ +.str{color:#ec7600}.kwd{color:#93c763}.com{color:#66747b}.typ{color:#678cb1}.lit{color:#facd22}.pun{color:#f1f2f3}.pln{color:#f1f2f3}.tag{color:#8ac763}.atn{color:#e0e2e4}.atv{color:#ec7600}.dec{color:#a082bd}pre.prettyprint{padding:10px;border:1px solid rgba(255,255,255,.1)}.prettyprint.linenums{box-shadow:40px 0 0 #293134 inset,41px 0 0 #255c6f inset}ol.linenums{margin-top:0;margin-bottom:0}.prettyprint{background:#22282a;color:#f1f2f3;overflow:hidden}li.L0,li.L1,li.L2,li.L3,li.L4,li.L5,li.L6,li.L7,li.L8,li.L9{color:rgba(255,255,255,.3);list-style-type:decimal;margin:0 -10px 0 1px;padding:0 10px 0 10px}li.L1,li.L3,li.L5,li.L7,li.L9{background:rgba(255,255,255,.01)}@media print{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun{color:#440}.pln{color:#000}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}} diff --git a/current/toolkit/css/toolkit/bnet-responsive-ie8.min.css b/current/toolkit/css/toolkit/bnet-responsive-ie8.min.css new file mode 100644 index 00000000..082fc8a5 --- /dev/null +++ b/current/toolkit/css/toolkit/bnet-responsive-ie8.min.css @@ -0,0 +1,2818 @@ +/** + * Battle.net Front end Toolkit + * + * @copyright ©2013 Blizzard Entertainment, Inc. All rights reserved. + * + * Twitter Bootstrap + * + * @see http://twitter.github.com/bootstrap/ + * @copyright ©2011 Twitter, Inc. All rights reserved. + * @license http://www.apache.org/licenses/LICENSE-2.0 + * + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Twitter typeahead.js + * + * @see https://github.com/twitter/typeahead.js + * @copyright ©2013 Twitter, Inc. All rights reserved. + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) 2013 Twitter, Inc + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Normalize.css + * + * @see http://git.io/normalize + * @copyright Nicolas Gallagher and Jonathan Neal + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) Nicolas Gallagher and Jonathan Neal + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Normalize.css + * + * @see http://scobo.github.io/lodestone/ + * @copyright D Scott Boyce + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) D Scott Boyce + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Unsemantic + * + * @see http://unsemantic.com + * @copyright Nathan Smith + * @license http://opensource.org/licenses/mit-license.php + * @license http://www.gnu.org/licenses/gpl.html + */ +/*! Lodestone v2.0.1 | MIT License | http://scobo.github.io/lodestone/ */.affix{position:fixed} +.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.clearfix:before,.clearfix:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.clearfix:after{clear:both} +.pull-right{float:right} +.pull-left{float:left} +.icon-spacer{background-image:none!important} +body .body-content{-webkit-transition:opacity,0.4s;transition:opacity .4s} +body.preload .body-content{opacity:0} +.fade{opacity:0;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.fade.in{opacity:1} +.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height,0.4s;transition:height .4s} +.collapse.in{height:auto} +.invisible{visibility:hidden!important} +.hide{display:none!important} +.show{display:block!important} +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} +audio,canvas,video{display:inline-block} +audio:not([controls]){display:none;height:0} +[hidden],template{display:none} +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;height:auto} +body{margin:0;height:auto} +a{text-decoration:none;background:transparent} +a:focus{outline:0} +a:active,a:hover{outline:0} +h1{font-size:2em;margin:.67em 0} +abbr[title]{border-bottom:1px dotted} +b,strong{font-weight:700} +dfn{font-style:italic} +hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} +mark{background:#ff0;color:#000} +code,kbd,pre,samp{font-family:monospace,serif;font-size:1em} +pre{white-space:pre-wrap} +q{quotes:"???" "???" "???" "???"} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-0.5em} +sub{bottom:-0.25em} +img{border:0} +svg:not(:root){overflow:hidden} +figure{margin:0} +fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em} +legend{border:0;padding:0} +button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +button,input{line-height:normal} +button,select{text-transform:none} +button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} +input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box} +input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +textarea{overflow:auto;vertical-align:top} +table{border-collapse:collapse;border-spacing:0} +.accordion-heading .accordion-toggle{display:block} +.modal.agegate{overflow:visible} +.modal.agegate .modal-body{overflow:visible} +.btn{display:inline-block;text-align:center;vertical-align:middle;cursor:pointer;-moz-box-sizing:border-box;box-sizing:border-box} +.btn:focus{outline:0} +.btn.active,.btn:active{outline:0} +.btn.loading{position:relative;overflow:hidden} +.btn.disabled,.btn[disabled]{cursor:default!important} +.btn.disabled-loading{overflow:hidden;position:relative} +.btn-block{display:block;width:100%;padding-left:0;padding-right:0} +input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%} +.carousel{position:relative} +.carousel .carousel-inner{overflow:hidden;width:100%;height:100%;position:relative} +.carousel .carousel-inner .cover{width:100%;height:100%;position:absolute;z-index:1} +.carousel .carousel-inner .carousel-caption{width:100%;height:100px;position:absolute;bottom:-55px;z-index:0} +.carousel .carousel-inner .carousel-caption .bg-layer{width:100%;height:100%;position:absolute;top:60px;left:0;z-index:-1} +.carousel .carousel-inner .carousel-caption .summary{height:32px} +.carousel .carousel-inner>.item{display:none;position:relative} +.carousel .carousel-inner>.item img{display:block;line-height:1;width:100%;height:auto} +.carousel .carousel-inner>.active,.carousel .carousel-inner>.next,.carousel .carousel-inner>.prev{display:block} +.carousel .carousel-inner>.active{left:0} +.carousel .carousel-inner>.next,.carousel .carousel-inner>.prev{position:absolute;top:0;width:100%} +.carousel .carousel-inner>.next{left:100%} +.carousel .carousel-inner>.prev{left:-100%} +.carousel .carousel-inner>.next.left,.carousel .carousel-inner>.prev.right{left:0} +.carousel .carousel-inner>.active.left{left:-100%} +.carousel .carousel-inner>.active.right{left:100%} +.carousel.crossfade .carousel-inner{overflow:hidden;width:100%;height:100%;position:relative} +.carousel.crossfade .carousel-inner>.item{display:none;position:relative;opacity:0} +.carousel.crossfade .carousel-inner>.item img{display:block;line-height:1;width:100%;height:auto} +.carousel.crossfade .carousel-inner>.active,.carousel.crossfade .carousel-inner>.next,.carousel.crossfade .carousel-inner>.prev{display:block} +.carousel.crossfade .carousel-inner>.active{opacity:1} +.carousel.crossfade .carousel-inner>.next,.carousel.crossfade .carousel-inner>.prev{position:absolute;top:0;left:0;opacity:0} +.carousel.crossfade .carousel-inner>.active.left,.carousel.crossfade .carousel-inner>.active.right{left:0;opacity:0} +.carousel .carousel-controls{position:absolute;z-index:100} +.carousel .carousel-controls button{position:absolute} +.carousel .carousel-controls button span{display:block;position:relative;z-index:-1} +code{white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box} +pre{display:block;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;-moz-box-sizing:border-box;box-sizing:border-box} +pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0} +.pre-scrollable{max-height:340px;overflow-y:scroll} +.dropdown{position:relative} +.dropdown-toggle{display:inline-block;position:relative} +.dropdown-toggle:active,.open .dropdown-toggle{outline:0} +.dropdown-menu{position:absolute;top:100%;display:none;float:left;min-width:160px;margin:0;list-style:none} +.dropdown-menu.pull-right{right:0;left:auto} +.dropdown-menu li>a{display:block;clear:both;white-space:nowrap} +.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{text-decoration:none} +.dropdown-menu .active>a,.dropdown-menu .active>a:hover,.dropdown-menu .active>a:focus{text-decoration:none} +.dropdown-menu .disabled>a:hover,.dropdown-menu .disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;cursor:default} +.open>.dropdown-menu{display:block} +.pull-right>.dropdown-menu{right:0;left:auto} +.dropdown-submenu{position:relative} +.dropdown .dropdown-menu .nav-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.label,.badge{display:inline-block;vertical-align:baseline;white-space:nowrap} +.badge{text-align:center} +.label:empty,.badge:empty{display:none} +a.label:focus,a.label:hover,a.badge:focus,a.badge:hover{cursor:pointer} +.media{overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box} +.media .img{float:left} +.media .img img{display:block} +.media .bd{overflow:hidden} +.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000} +.modal-backdrop.fade{opacity:0} +.modal-backdrop,.modal-backdrop.fade.in{opacity:.8} +.nav{margin:0;list-style:none} +.nav>li{padding:0;margin:0;float:left} +.nav>li>a{display:block} +.nav>li:last-child{margin-right:0} +.nav>li.pull-right{float:right} +.navbar .nav:before,.navbar .nav:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.navbar .nav:after{clear:both} +.navbar .nav>li:last-child{margin-right:0} +.navbar:not(.header) .nav>li:last-child,.navbar:not(.header) .nav>li.pull-right{margin-right:0} +.nav-list>li{float:none} +.nav-list>li>a{display:inline-block} +.nav-list>li.disabled>a{cursor:default} +.nav-list.icons>li{position:relative} +.nav-list.icons>li [class^="icon-"]:not(.icon-external-link),.nav-list.icons>li [class*="icon-"]:not(.icon-external-link){position:absolute} +.nav-tabs:before{content:"";display:table;line-height:0;visibility:hidden} +.nav.nav-tabs:after{content:"\00A0\00A0\00A0";display:table-cell;clear:both;width:1%;overflow:hidden;visibility:visible} +.nav-tabs>li{float:left} +.nav-tabs>li:first-child{padding-left:0} +.nav-tabs>li>a{-webkit-transition:background-color .2s,color .2s;transition:background-color .2s,color .2s} +.nav-tabs>li.active{border-bottom:0} +.nav-tabs>li.active>a{border-bottom-color:transparent;cursor:default} +.nav-tabs>li.disabled>a{cursor:default} +.nav-pills:before,.nav-pills:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.nav-pills:after{clear:both} +.nav-pills>li{float:left} +.nav-pills>li>a{text-decoration:none;-webkit-transition:box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.nav-pills>li>a:active{outline:0} +.nav-pills>li:last-child>a{margin:0} +.nav-pills>li.disabled>a{cursor:default} +.nav-header{display:block} +.tabbable:before,.tabbable:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.tabbable:after{clear:both} +.tab-content{overflow:auto} +.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;overflow:hidden} +.tab-content>.active,.pill-content>.active{display:block} +.pager{display:inline-block;margin-left:0;margin-bottom:0} +.pager:before,.pager:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.pager:after{clear:both} +.pager>li{padding-left:0;display:block;float:left} +.pager>li>a,.pager>li>span{display:block;text-align:center} +.pager>li>a:focus{outline:0} +.pager.aligned{display:block} +.pager.aligned>.next{float:right} +.pagination ul{display:inline-block;margin-left:0;margin-bottom:0} +.pagination ul>li{padding-left:0;display:block;float:left} +.pagination ul>li>a,.pagination ul>li>span{display:block;text-align:center} +.pagination ul>li>a:active{outline:0} +.pagination-group{overflow:hidden} +.pagination-group .pagination-left{float:left} +.pagination-group .pagination-right{float:right} +.pagination-group .pagination-right-absolute{position:absolute;right:0} +.pagination-left{text-align:right} +.pagination-centered{text-align:center} +.pagination-right{text-align:right} +.pagination-inline{display:inline-block;vertical-align:middle} +.pagination select.view-per-page{float:left;margin:0 6px 0 0} +.popover{position:absolute;top:0;left:0;display:none;text-align:left;white-space:normal} +.popover-content p:last-child,.popover-content ul:last-child,.popover-content ol:last-child{margin-bottom:0} +.progress{overflow:hidden;position:relative} +.progress:after{content:"";display:block;position:absolute;width:100%} +.progress .bar{position:relative;float:left;top:0;width:0;text-align:left;padding:0;z-index:1} +.progress.active .bar:after{content:"";display:block;overflow:hidden;position:absolute} +.progress-striped .bar:before{content:"";display:block;width:100%;overflow:hidden;position:absolute;left:0} +.progress .description{position:absolute;display:block;z-index:2} +.progress-tracker{overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.progress-tracker:before,.progress-tracker:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.progress-tracker:after{clear:both} +.progress-tracker li{display:block;float:left} +.progress-tracker li:first-of-type{padding-left:0} +.progress-tracker li:last-of-type{padding-right:0} +.scrollbar-content{position:relative} +.scrollbar-content .viewport{overflow:hidden;position:relative} +.scrollbar-content .overview{list-style:none;position:absolute;left:0;top:0;padding:0;margin:0} +.scrollbar-content .scrollbar{position:absolute;right:0;top:0} +.scrollbar-content .track{position:relative;height:100%} +.scrollbar-content .thumb{overflow:hidden;position:absolute;top:0;left:0;-moz-box-sizing:border-box;box-sizing:border-box} +.scrollbar-content .thumb .end{overflow:hidden;display:block;height:100%} +.scrollbar-content .disable{display:none} +.no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +[class^="icon-"],[class*=" icon-"]{display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-repeat:no-repeat;text-indent:-9999px;-webkit-transition:opacity,0.2s;transition:opacity .2s} +[class^="icon-24-"],[class*=" icon-24-"]{width:24px;height:24px} +[class^="icon-32-"],[class*=" icon-32-"]{width:32px;height:32px} +[class^="icon-48-"],[class*=" icon-48-"]{width:48px;height:48px} +[class^="icon-64-"],[class*=" icon-64-"]{width:64px;height:64px} +[class^="icon-128-"],[class*=" icon-128-"]{width:128px;height:128px} +[class^="icon-payment-"],[class*=" icon-payment-"]{width:24px} +[class^="icon-24-payment-"],[class*=" icon-24-payment-"]{width:36px} +.icon-placeholder{background-position:0 0} +.icon-ban-circle{background-position:-16px 0} +.icon-time{background-position:-32px 0} +.icon-add-time{background-position:-48px 0} +.icon-question-circle{background-position:-64px 0} +.icon-balance{background-position:-80px 0} +.icon-remove-circle{background-position:-96px 0} +.icon-mouse{background-position:-112px 0} +.icon-mouse-delete{background-position:-128px 0} +.icon-envelope{background-position:-144px 0} +.icon-open-envelope{background-position:0 -16px} +.icon-home{background-position:-16px -16px} +.icon-play{background-position:-32px -16px} +.icon-pause{background-position:-48px -16px} +.icon-file{background-position:-64px -16px} +.icon-search{background-position:-80px -16px} +.icon-edit{background-position:-96px -16px} +.icon-shopping-cart{background-position:-112px -16px} +.icon-download-alt{background-position:-128px -16px} +.icon-achievement{background-position:-144px -16px} +.icon-heart{background-position:0 -32px} +.icon-heart-broken{background-position:-16px -32px} +.icon-comment{background-position:-32px -32px} +.icon-gavel{background-position:-48px -32px} +.icon-broadcast{background-position:-64px -32px} +.icon-service{background-position:-80px -32px} +.icon-headphones-alt{background-position:-96px -32px} +.icon-user{background-position:-112px -32px} +.icon-flask{background-position:-128px -32px} +.icon-chevron-left{background-position:-144px -32px} +.icon-chevron-right{background-position:0 -48px} +.icon-share{background-position:-16px -48px} +.icon-bookmarks{background-position:-32px -48px} +.icon-cog{background-position:-48px -48px} +.icon-mobile{background-position:-64px -48px} +.icon-download-square{background-position:-80px -48px} +.icon-upload{background-position:-96px -48px} +.icon-group{background-position:-112px -48px} +.icon-crown{background-position:-128px -48px} +.icon-globe-alt{background-position:-144px -48px} +.icon-series{background-position:0 -64px} +.icon-paw{background-position:-16px -64px} +.icon-trash{background-position:-32px -64px} +.icon-windows{background-position:-48px -64px} +.icon-apple{background-position:-64px -64px} +.icon-gift{background-position:-80px -64px} +.icon-refresh{background-position:-96px -64px} +.icon-reset{background-position:-112px -64px} +.icon-check{background-position:-128px -64px} +.icon-external-link{background-position:-144px -64px} +.icon-character{background-position:0 -80px} +.icon-character-add{background-position:-16px -80px} +.icon-character-search{background-position:-32px -80px} +.icon-character-remove{background-position:-48px -80px} +.icon-character-cog{background-position:-64px -80px} +.icon-download-alt-cog{background-position:-80px -80px} +.icon-download-alt-search{background-position:-96px -80px} +.icon-lock{background-position:-112px -80px} +.icon-warning-sign{background-position:-128px -80px} +.icon-ok{background-position:-144px -80px} +.icon-speaker{background-position:0 -96px} +.icon-wow{background-position:-16px -96px} +.icon-warcraft{background-position:-32px -96px} +.icon-starcraft{background-position:-48px -96px} +.icon-starcraft-2{background-position:-64px -96px} +.icon-diablo-3{background-position:-80px -96px} +.icon-battlenet{background-position:-96px -96px} +.icon-remove{background-position:-112px -96px} +.icon-repeat{background-position:-128px -96px} +.icon-dropdown{background-position:-144px -96px} +.icon-shortcut{background-position:0 -112px} +.icon-wrench{background-position:-16px -112px} +.icon-plus{background-position:-32px -112px} +.icon-fullscreen{background-position:-48px -112px} +.icon-glass{background-position:-64px -112px} +.icon-music-alt{background-position:-80px -112px} +.icon-music{background-position:-96px -112px} +.icon-star-empty{background-position:-112px -112px} +.icon-star{background-position:-128px -112px} +.icon-film{background-position:-144px -112px} +.icon-th-large{background-position:0 -128px} +.icon-th{background-position:-16px -128px} +.icon-th-list{background-position:-32px -128px} +.icon-zoom-in{background-position:-48px -128px} +.icon-zoom-out{background-position:-64px -128px} +.icon-off{background-position:-80px -128px} +.icon-signal{background-position:-96px -128px} +.icon-road{background-position:-112px -128px} +.icon-upload-square{background-position:-128px -128px} +.icon-download{background-position:-144px -128px} +.icon-inbox{background-position:0 -144px} +.icon-play-circle{background-position:-16px -144px} +.icon-list-alt{background-position:-32px -144px} +.icon-flag{background-position:-48px -144px} +.icon-headphones{background-position:-64px -144px} +.icon-volume{background-position:-80px -144px} +.icon-volume-off{background-position:-96px -144px} +.icon-volume-down{background-position:-112px -144px} +.icon-volume-up{background-position:-128px -144px} +.icon-qrcode{background-position:-144px -144px} +.icon-barcode{background-position:0 -160px} +.icon-tag{background-position:-16px -160px} +.icon-tags{background-position:-32px -160px} +.icon-book{background-position:-48px -160px} +.icon-bookmark{background-position:-64px -160px} +.icon-print{background-position:-80px -160px} +.icon-camera{background-position:-96px -160px} +.icon-font{background-position:-112px -160px} +.icon-bold{background-position:-128px -160px} +.icon-italic{background-position:-144px -160px} +.icon-text-height{background-position:0 -176px} +.icon-text-width{background-position:-16px -176px} +.icon-align-left{background-position:-32px -176px} +.icon-align-center{background-position:-48px -176px} +.icon-align-right{background-position:-64px -176px} +.icon-align-justify{background-position:-80px -176px} +.icon-list{background-position:-96px -176px} +.icon-indent-left{background-position:-112px -176px} +.icon-indent-right{background-position:-128px -176px} +.icon-facetime-video{background-position:-144px -176px} +.icon-picture{background-position:0 -192px} +.icon-pencil{background-position:-16px -192px} +.icon-map-marker{background-position:-32px -192px} +.icon-adjust{background-position:-48px -192px} +.icon-tint{background-position:-64px -192px} +.icon-move{background-position:-80px -192px} +.icon-step-backward{background-position:-96px -192px} +.icon-fast-backward{background-position:-112px -192px} +.icon-backward{background-position:-128px -192px} +.icon-step-forward{background-position:-144px -192px} +.icon-fast-forward{background-position:0 -208px} +.icon-forward{background-position:-16px -208px} +.icon-eject{background-position:-32px -208px} +.icon-square{background-position:-48px -208px} +.icon-plus-circle{background-position:-64px -208px} +.icon-minus-circle{background-position:-80px -208px} +.icon-plus-sign{background-position:-96px -208px} +.icon-minus-sign{background-position:-112px -208px} +.icon-remove-sign{background-position:-128px -208px} +.icon-ok-circle{background-position:-144px -208px} +.icon-ok-sign{background-position:0 -224px} +.icon-minus{background-position:-16px -224px} +.icon-info-circle{background-position:-32px -224px} +.icon-info-sign{background-position:-48px -224px} +.icon-question-sign{background-position:-64px -224px} +.icon-screenshot{background-position:-80px -224px} +.icon-arrow-right{background-position:-96px -224px} +.icon-arrow-left{background-position:-112px -224px} +.icon-arrow-up{background-position:-128px -224px} +.icon-arrow-down{background-position:-144px -224px} +.icon-share-alt{background-position:0 -240px} +.icon-resize-full{background-position:-16px -240px} +.icon-resize-small{background-position:-32px -240px} +.icon-asterisk{background-position:-48px -240px} +.icon-exclamation-circle{background-position:-64px -240px} +.icon-exclamation-sign{background-position:-80px -240px} +.icon-leaf{background-position:-96px -240px} +.icon-fire{background-position:-112px -240px} +.icon-eye-open{background-position:-128px -240px} +.icon-eye-close{background-position:-144px -240px} +.icon-plane{background-position:0 -256px} +.icon-calendar{background-position:-16px -256px} +.icon-random{background-position:-32px -256px} +.icon-magnet{background-position:-48px -256px} +.icon-chevron-down{background-position:-64px -256px} +.icon-chevron-up{background-position:-80px -256px} +.icon-folder-close{background-position:-96px -256px} +.icon-folder-open{background-position:-112px -256px} +.icon-resize-vertical{background-position:-128px -256px} +.icon-resize-horizontal{background-position:-144px -256px} +.icon-hdd{background-position:0 -272px} +.icon-bullhorn{background-position:-16px -272px} +.icon-bell{background-position:-32px -272px} +.icon-certificate-empty{background-position:-48px -272px} +.icon-certificate{background-position:-64px -272px} +.icon-thumbs-up{background-position:-80px -272px} +.icon-thumbs-down{background-position:-96px -272px} +.icon-hand-right{background-position:-112px -272px} +.icon-hand-left{background-position:-128px -272px} +.icon-hand-up{background-position:-144px -272px} +.icon-hand-down{background-position:0 -288px} +.icon-arrow-right-square{background-position:-16px -288px} +.icon-arrow-left-square{background-position:-32px -288px} +.icon-arrow-right-circle{background-position:-48px -288px} +.icon-arrow-left-circle{background-position:-64px -288px} +.icon-globe{background-position:-80px -288px} +.icon-tasks{background-position:-96px -288px} +.icon-filter{background-position:-112px -288px} +.icon-briefcase{background-position:-128px -288px} +.icon-underline{background-position:-144px -288px} +.icon-sort{background-position:0 -304px} +.icon-sort-descending{background-position:-16px -304px} +.icon-sort-ascending{background-position:-32px -304px} +.icon-sort-disabled{background-position:-48px -304px} +.icon-arrow-down-solid{background-position:-64px -304px} +.icon-arrow-up-solid{background-position:-80px -304px} +.icon-arrow-left-solid{background-position:-96px -304px} +.icon-arrow-right-solid{background-position:-112px -304px} +.icon-0-sign{background-position:-128px -304px} +.icon-1-sign{background-position:-144px -304px} +.icon-2-sign{background-position:0 -320px} +.icon-3-sign{background-position:-16px -320px} +.icon-4-sign{background-position:-32px -320px} +.icon-5-sign{background-position:-48px -320px} +.icon-6-sign{background-position:-64px -320px} +.icon-7-sign{background-position:-80px -320px} +.icon-8-sign{background-position:-96px -320px} +.icon-9-sign{background-position:-112px -320px} +.icon-secure{background-position:-128px -320px} +.icon-not-secure{background-position:-144px -320px} +.icon-add-wow{background-position:0 -336px} +.icon-add-warcraft{background-position:-16px -336px} +.icon-add-starcraft{background-position:-32px -336px} +.icon-add-starcraft-2{background-position:-48px -336px} +.icon-add-diablo-3{background-position:-64px -336px} +.icon-add-battlenet{background-position:-80px -336px} +.icon-free-game-services{background-position:-96px -336px} +.icon-character-services{background-position:-112px -336px} +.icon-facebook{background-position:-128px -336px} +.icon-twitter{background-position:-144px -336px} +.icon-hearthstone{background-position:0 -352px} +.icon-add-hearthstone{background-position:-16px -352px} +.icon-heroes{background-position:-32px -352px} +.icon-add-heroes{background-position:-48px -352px} +.icon-friends-wow{background-position:-64px -352px} +.icon-friends-warcraft{background-position:-80px -352px} +.icon-friends-starcraft{background-position:-96px -352px} +.icon-friends-starcraft-2{background-position:-112px -352px} +.icon-friends-diablo-3{background-position:-128px -352px} +.icon-friends-battlenet{background-position:-144px -352px} +.icon-friends-hearthstone{background-position:0 -368px} +.icon-friends-heroes{background-position:-16px -368px} +.icon-news-wow{background-position:-32px -368px} +.icon-news-warcraft{background-position:-48px -368px} +.icon-news-starcraft{background-position:-64px -368px} +.icon-news-starcraft-2{background-position:-80px -368px} +.icon-news-diablo-3{background-position:-96px -368px} +.icon-news-battlenet{background-position:-112px -368px} +.icon-news-hearthstone{background-position:-128px -368px} +.icon-news-heroes{background-position:-144px -368px} +.icon-git{background-position:0 -384px} +.icon-bootstrap{background-position:-16px -384px} +.icon-maven{background-position:-32px -384px} +.icon-twitch{background-position:-48px -384px} +.icon-youtube{background-position:-64px -384px} +.icon-popout{background-position:-80px -384px} +.icon-share-opts{background-position:-96px -384px} +.icon-logout{background-position:-112px -384px} +.icon-signup{background-position:-128px -384px} +.icon-queue{background-position:-144px -384px} +.icon-maintenance{background-position:0 -400px} +.icon-security{background-position:-16px -400px} +.icon-authenticator-unknown{background-position:-32px -400px} +.icon-authenticator-present{background-position:-48px -400px} +.icon-account-forgot{background-position:-64px -400px} +.icon-account-locked{background-position:-80px -400px} +.icon-email-forgot{background-position:-96px -400px} +.icon-remove-authenticator{background-position:-112px -400px} +.icon-authenticator-mobile{background-position:-128px -400px} +.icon-ipin{background-position:-144px -400px} +.icon-overwatch{background-position:0 -416px} +.icon-add-overwatch{background-position:-16px -416px} +.icon-friends-overwatch{background-position:-32px -416px} +.icon-news-overwatch{background-position:-48px -416px} +.icon-disk{background-position:-64px -416px} +.icon-confirm{background-position:-80px -416px} +.icon-decline{background-position:-96px -416px} +.icon-android{background-position:-112px -416px} +.icon-xbone{background-position:-128px -416px} +.icon-x360{background-position:-144px -416px} +.icon-ps3{background-position:0 -432px} +.icon-ps4{background-position:-16px -432px} +.icon-48-placeholder{background-position:0 0} +.icon-48-ban-circle{background-position:-48px 0} +.icon-48-time{background-position:-96px 0} +.icon-48-add-time{background-position:-144px 0} +.icon-48-question-circle{background-position:-192px 0} +.icon-48-balance{background-position:-240px 0} +.icon-48-remove-circle{background-position:-288px 0} +.icon-48-mouse{background-position:-336px 0} +.icon-48-mouse-delete{background-position:-384px 0} +.icon-48-envelope{background-position:-432px 0} +.icon-48-open-envelope{background-position:0 -48px} +.icon-48-home{background-position:-48px -48px} +.icon-48-play{background-position:-96px -48px} +.icon-48-pause{background-position:-144px -48px} +.icon-48-file{background-position:-192px -48px} +.icon-48-search{background-position:-240px -48px} +.icon-48-edit{background-position:-288px -48px} +.icon-48-shopping-cart{background-position:-336px -48px} +.icon-48-download-alt{background-position:-384px -48px} +.icon-48-achievement{background-position:-432px -48px} +.icon-48-heart{background-position:0 -96px} +.icon-48-heart-broken{background-position:-48px -96px} +.icon-48-comment{background-position:-96px -96px} +.icon-48-gavel{background-position:-144px -96px} +.icon-48-broadcast{background-position:-192px -96px} +.icon-48-service{background-position:-240px -96px} +.icon-48-headphones-alt{background-position:-288px -96px} +.icon-48-user{background-position:-336px -96px} +.icon-48-flask{background-position:-384px -96px} +.icon-48-chevron-left{background-position:-432px -96px} +.icon-48-chevron-right{background-position:0 -144px} +.icon-48-share{background-position:-48px -144px} +.icon-48-bookmarks{background-position:-96px -144px} +.icon-48-cog{background-position:-144px -144px} +.icon-48-mobile{background-position:-192px -144px} +.icon-48-download-square{background-position:-240px -144px} +.icon-48-upload{background-position:-288px -144px} +.icon-48-group{background-position:-336px -144px} +.icon-48-crown{background-position:-384px -144px} +.icon-48-globe-alt{background-position:-432px -144px} +.icon-48-series{background-position:0 -192px} +.icon-48-paw{background-position:-48px -192px} +.icon-48-trash{background-position:-96px -192px} +.icon-48-windows{background-position:-144px -192px} +.icon-48-apple{background-position:-192px -192px} +.icon-48-gift{background-position:-240px -192px} +.icon-48-refresh{background-position:-288px -192px} +.icon-48-reset{background-position:-336px -192px} +.icon-48-check{background-position:-384px -192px} +.icon-48-external-link{background-position:-432px -192px} +.icon-48-character{background-position:0 -240px} +.icon-48-character-add{background-position:-48px -240px} +.icon-48-character-search{background-position:-96px -240px} +.icon-48-character-remove{background-position:-144px -240px} +.icon-48-character-cog{background-position:-192px -240px} +.icon-48-download-alt-cog{background-position:-240px -240px} +.icon-48-download-alt-search{background-position:-288px -240px} +.icon-48-lock{background-position:-336px -240px} +.icon-48-warning-sign{background-position:-384px -240px} +.icon-48-ok{background-position:-432px -240px} +.icon-48-speaker{background-position:0 -288px} +.icon-48-wow{background-position:-48px -288px} +.icon-48-warcraft{background-position:-96px -288px} +.icon-48-starcraft{background-position:-144px -288px} +.icon-48-starcraft-2{background-position:-192px -288px} +.icon-48-diablo-3{background-position:-240px -288px} +.icon-48-battlenet{background-position:-288px -288px} +.icon-48-remove{background-position:-336px -288px} +.icon-48-repeat{background-position:-384px -288px} +.icon-48-dropdown{background-position:-432px -288px} +.icon-48-shortcut{background-position:0 -336px} +.icon-48-wrench{background-position:-48px -336px} +.icon-48-plus{background-position:-96px -336px} +.icon-48-fullscreen{background-position:-144px -336px} +.icon-48-glass{background-position:-192px -336px} +.icon-48-music-alt{background-position:-240px -336px} +.icon-48-music{background-position:-288px -336px} +.icon-48-star-empty{background-position:-336px -336px} +.icon-48-star{background-position:-384px -336px} +.icon-48-film{background-position:-432px -336px} +.icon-48-th-large{background-position:0 -384px} +.icon-48-th{background-position:-48px -384px} +.icon-48-th-list{background-position:-96px -384px} +.icon-48-zoom-in{background-position:-144px -384px} +.icon-48-zoom-out{background-position:-192px -384px} +.icon-48-off{background-position:-240px -384px} +.icon-48-signal{background-position:-288px -384px} +.icon-48-road{background-position:-336px -384px} +.icon-48-upload-square{background-position:-384px -384px} +.icon-48-download{background-position:-432px -384px} +.icon-48-inbox{background-position:0 -432px} +.icon-48-play-circle{background-position:-48px -432px} +.icon-48-list-alt{background-position:-96px -432px} +.icon-48-flag{background-position:-144px -432px} +.icon-48-headphones{background-position:-192px -432px} +.icon-48-volume{background-position:-240px -432px} +.icon-48-volume-off{background-position:-288px -432px} +.icon-48-volume-down{background-position:-336px -432px} +.icon-48-volume-up{background-position:-384px -432px} +.icon-48-qrcode{background-position:-432px -432px} +.icon-48-barcode{background-position:0 -480px} +.icon-48-tag{background-position:-48px -480px} +.icon-48-tags{background-position:-96px -480px} +.icon-48-book{background-position:-144px -480px} +.icon-48-bookmark{background-position:-192px -480px} +.icon-48-print{background-position:-240px -480px} +.icon-48-camera{background-position:-288px -480px} +.icon-48-font{background-position:-336px -480px} +.icon-48-bold{background-position:-384px -480px} +.icon-48-italic{background-position:-432px -480px} +.icon-48-text-height{background-position:0 -528px} +.icon-48-text-width{background-position:-48px -528px} +.icon-48-align-left{background-position:-96px -528px} +.icon-48-align-right{background-position:-192px -528px} +.icon-48-align-justify{background-position:-240px -528px} +.icon-48-list{background-position:-288px -528px} +.icon-48-indent-left{background-position:-336px -528px} +.icon-48-indent-right{background-position:-384px -528px} +.icon-48-facetime-video{background-position:-432px -528px} +.icon-48-picture{background-position:0 -576px} +.icon-48-pencil{background-position:-48px -576px} +.icon-48-map-marker{background-position:-96px -576px} +.icon-48-adjust{background-position:-144px -576px} +.icon-48-tint{background-position:-192px -576px} +.icon-48-move{background-position:-240px -576px} +.icon-48-step-backward{background-position:-288px -576px} +.icon-48-fast-backward{background-position:-336px -576px} +.icon-48-backward{background-position:-384px -576px} +.icon-48-step-forward{background-position:-432px -576px} +.icon-48-fast-forward{background-position:0 -624px} +.icon-48-forward{background-position:-48px -624px} +.icon-48-eject{background-position:-96px -624px} +.icon-48-square{background-position:-144px -624px} +.icon-48-plus-circle{background-position:-192px -624px} +.icon-48-minus-circle{background-position:-240px -624px} +.icon-48-plus-sign{background-position:-288px -624px} +.icon-48-minus-sign{background-position:-336px -624px} +.icon-48-remove-sign{background-position:-384px -624px} +.icon-48-ok-circle{background-position:-432px -624px} +.icon-48-ok-sign{background-position:0 -672px} +.icon-48-minus{background-position:-48px -672px} +.icon-48-info-circle{background-position:-96px -672px} +.icon-48-info-sign{background-position:-144px -672px} +.icon-48-question-sign{background-position:-192px -672px} +.icon-48-screenshot{background-position:-240px -672px} +.icon-48-arrow-right{background-position:-288px -672px} +.icon-48-arrow-left{background-position:-336px -672px} +.icon-48-arrow-up{background-position:-384px -672px} +.icon-48-arrow-down{background-position:-432px -672px} +.icon-48-share-alt{background-position:0 -720px} +.icon-48-resize-full{background-position:-48px -720px} +.icon-48-resize-small{background-position:-96px -720px} +.icon-48-asterisk{background-position:-144px -720px} +.icon-48-exclamation-circle{background-position:-192px -720px} +.icon-48-exclamation-sign{background-position:-240px -720px} +.icon-48-leaf{background-position:-288px -720px} +.icon-48-fire{background-position:-336px -720px} +.icon-48-eye-open{background-position:-384px -720px} +.icon-48-eye-close{background-position:-432px -720px} +.icon-48-plane{background-position:0 -768px} +.icon-48-calendar{background-position:-48px -768px} +.icon-48-random{background-position:-96px -768px} +.icon-48-magnet{background-position:-144px -768px} +.icon-48-chevron-down{background-position:-192px -768px} +.icon-48-folder-close{background-position:-288px -768px} +.icon-48-folder-open{background-position:-336px -768px} +.icon-48-resize-vertical{background-position:-384px -768px} +.icon-48-resize-horizontal{background-position:-432px -768px} +.icon-48-hdd{background-position:0 -816px} +.icon-48-bullhorn{background-position:-48px -816px} +.icon-48-bell{background-position:-96px -816px} +.icon-48-certificate-empty{background-position:-144px -816px} +.icon-48-certificate{background-position:-192px -816px} +.icon-48-thumbs-up{background-position:-240px -816px} +.icon-48-thumbs-down{background-position:-288px -816px} +.icon-48-hand-right{background-position:-336px -816px} +.icon-48-hand-left{background-position:-384px -816px} +.icon-48-hand-up{background-position:-432px -816px} +.icon-48-hand-down{background-position:0 -864px} +.icon-48-arrow-right-square{background-position:-48px -864px} +.icon-48-arrow-left-square{background-position:-96px -864px} +.icon-48-arrow-right-circle{background-position:-144px -864px} +.icon-48-arrow-left-circle{background-position:-192px -864px} +.icon-48-globe{background-position:-240px -864px} +.icon-48-tasks{background-position:-288px -864px} +.icon-48-filter{background-position:-336px -864px} +.icon-48-briefcase{background-position:-384px -864px} +.icon-48-underline{background-position:-432px -864px} +.icon-48-sort{background-position:0 -912px} +.icon-48-sort-descending{background-position:-48px -912px} +.icon-48-sort-ascending{background-position:-96px -912px} +.icon-48-sort-disabled{background-position:-144px -912px} +.icon-48-arrow-down-solid{background-position:-192px -912px} +.icon-48-arrow-up-solid{background-position:-240px -912px} +.icon-48-arrow-left-solid{background-position:-288px -912px} +.icon-48-arrow-right-solid{background-position:-336px -912px} +.icon-48-0-sign{background-position:-384px -912px} +.icon-48-1-sign{background-position:-432px -912px} +.icon-48-2-sign{background-position:0 -960px} +.icon-48-3-sign{background-position:-48px -960px} +.icon-48-4-sign{background-position:-96px -960px} +.icon-48-5-sign{background-position:-144px -960px} +.icon-48-6-sign{background-position:-192px -960px} +.icon-48-7-sign{background-position:-240px -960px} +.icon-48-8-sign{background-position:-288px -960px} +.icon-48-9-sign{background-position:-336px -960px} +.icon-48-secure{background-position:-384px -960px} +.icon-48-not-secure{background-position:-432px -960px} +.icon-48-add-wow{background-position:0 -1008px} +.icon-48-add-warcraft{background-position:-48px -1008px} +.icon-48-add-starcraft{background-position:-96px -1008px} +.icon-48-add-starcraft-2{background-position:-144px -1008px} +.icon-48-add-diablo-3{background-position:-192px -1008px} +.icon-48-add-battlenet{background-position:-240px -1008px} +.icon-48-free-game-services{background-position:-288px -1008px} +.icon-48-character-services{background-position:-336px -1008px} +.icon-48-facebook{background-position:-384px -1008px} +.icon-48-twitter{background-position:-432px -1008px} +.icon-48-hearthstone{background-position:0 -1056px} +.icon-48-add-hearthstone{background-position:-48px -1056px} +.icon-48-heroes{background-position:-96px -1056px} +.icon-48-add-heroes{background-position:-144px -1056px} +.icon-48-friends-wow{background-position:-192px -1056px} +.icon-48-friends-warcraft{background-position:-240px -1056px} +.icon-48-friends-starcraft{background-position:-288px -1056px} +.icon-48-friends-starcraft-2{background-position:-336px -1056px} +.icon-48-friends-diablo-3{background-position:-384px -1056px} +.icon-48-friends-battlenet{background-position:-432px -1056px} +.icon-48-friends-hearthstone{background-position:0 -1104px} +.icon-48-friends-heroes{background-position:-48px -1104px} +.icon-48-news-wow{background-position:-96px -1104px} +.icon-48-news-warcraft{background-position:-144px -1104px} +.icon-48-news-starcraft{background-position:-192px -1104px} +.icon-48-news-starcraft-2{background-position:-240px -1104px} +.icon-48-news-diablo-3{background-position:-288px -1104px} +.icon-48-news-battlenet{background-position:-336px -1104px} +.icon-48-news-hearthstone{background-position:-384px -1104px} +.icon-48-news-heroes{background-position:-432px -1104px} +.icon-48-git{background-position:0 -1152px} +.icon-48-bootstrap{background-position:-48px -1152px} +.icon-48-maven{background-position:-96px -1152px} +.icon-48-twitch{background-position:-144px -1152px} +.icon-48-youtube{background-position:-192px -1152px} +.icon-48-popout{background-position:-240px -1152px} +.icon-48-share-opts{background-position:-288px -1152px} +.icon-48-logout{background-position:-336px -1152px} +.icon-48-signup{background-position:-384px -1152px} +.icon-48-queue{background-position:-432px -1152px} +.icon-48-maintenance{background-position:0 -1200px} +.icon-48-security{background-position:-48px -1200px} +.icon-48-authenticator-unknown{background-position:-96px -1200px} +.icon-48-authenticator-present{background-position:-144px -1200px} +.icon-48-account-forgot{background-position:-192px -1200px} +.icon-48-account-locked{background-position:-240px -1200px} +.icon-48-email-forgot{background-position:-288px -1200px} +.icon-48-remove-authenticator{background-position:-336px -1200px} +.icon-48-authenticator-mobile{background-position:-384px -1200px} +.icon-48-ipin{background-position:-432px -1200px} +.icon-48-overwatch{background-position:0 -1248px} +.icon-48-add-overwatch{background-position:-48px -1248px} +.icon-48-friends-overwatch{background-position:-96px -1248px} +.icon-48-news-overwatch{background-position:-144px -1248px} +.icon-128-placeholder{background-position:0 0} +.icon-128-ban-circle{background-position:-128px 0} +.icon-128-time{background-position:-256px 0} +.icon-128-add-time{background-position:-384px 0} +.icon-128-question-circle{background-position:-512px 0} +.icon-128-balance{background-position:-640px 0} +.icon-128-remove-circle{background-position:-768px 0} +.icon-128-mouse{background-position:-896px 0} +.icon-128-mouse-delete{background-position:-1024px 0} +.icon-128-envelope{background-position:-1152px 0} +.icon-128-open-envelope{background-position:0 -128px} +.icon-128-home{background-position:-128px -128px} +.icon-128-play{background-position:-256px -128px} +.icon-128-pause{background-position:-384px -128px} +.icon-128-file{background-position:-512px -128px} +.icon-128-search{background-position:-640px -128px} +.icon-128-edit{background-position:-768px -128px} +.icon-128-shopping-cart{background-position:-896px -128px} +.icon-128-download-alt{background-position:-1024px -128px} +.icon-128-achievement{background-position:-1152px -128px} +.icon-128-heart{background-position:0 -256px} +.icon-128-heart-broken{background-position:-128px -256px} +.icon-128-comment{background-position:-256px -256px} +.icon-128-gavel{background-position:-384px -256px} +.icon-128-broadcast{background-position:-512px -256px} +.icon-128-service{background-position:-640px -256px} +.icon-128-headphones-alt{background-position:-768px -256px} +.icon-128-user{background-position:-896px -256px} +.icon-128-flask{background-position:-1024px -256px} +.icon-128-chevron-left{background-position:-1152px -256px} +.icon-128-chevron-right{background-position:0 -384px} +.icon-128-share{background-position:-128px -384px} +.icon-128-bookmarks{background-position:-256px -384px} +.icon-128-cog{background-position:-384px -384px} +.icon-128-mobile{background-position:-512px -384px} +.icon-128-download-square{background-position:-640px -384px} +.icon-128-upload{background-position:-768px -384px} +.icon-128-group{background-position:-896px -384px} +.icon-128-crown{background-position:-1024px -384px} +.icon-128-globe-alt{background-position:-1152px -384px} +.icon-128-series{background-position:0 -512px} +.icon-128-paw{background-position:-128px -512px} +.icon-128-trash{background-position:-256px -512px} +.icon-128-windows{background-position:-384px -512px} +.icon-128-apple{background-position:-512px -512px} +.icon-128-gift{background-position:-640px -512px} +.icon-128-refresh{background-position:-768px -512px} +.icon-128-reset{background-position:-896px -512px} +.icon-128-check{background-position:-1024px -512px} +.icon-128-external-link{background-position:-1152px -512px} +.icon-128-character{background-position:0 -640px} +.icon-128-character-add{background-position:-128px -640px} +.icon-128-character-search{background-position:-256px -640px} +.icon-128-character-remove{background-position:-384px -640px} +.icon-128-character-cog{background-position:-512px -640px} +.icon-128-download-alt-cog{background-position:-640px -640px} +.icon-128-download-alt-search{background-position:-768px -640px} +.icon-128-lock{background-position:-896px -640px} +.icon-128-warning-sign{background-position:-1024px -640px} +.icon-128-ok{background-position:-1152px -640px} +.icon-128-speaker{background-position:0 -768px} +.icon-128-wow{background-position:-128px -768px} +.icon-128-warcraft{background-position:-256px -768px} +.icon-128-starcraft{background-position:-384px -768px} +.icon-128-starcraft-2{background-position:-512px -768px} +.icon-128-diablo-3{background-position:-640px -768px} +.icon-128-battlenet{background-position:-768px -768px} +.icon-128-remove{background-position:-896px -768px} +.icon-128-repeat{background-position:-1024px -768px} +.icon-128-dropdown{background-position:-1152px -768px} +.icon-128-shortcut{background-position:0 -896px} +.icon-128-wrench{background-position:-128px -896px} +.icon-128-plus{background-position:-256px -896px} +.icon-128-fullscreen{background-position:-384px -896px} +.icon-128-glass{background-position:-512px -896px} +.icon-128-music-alt{background-position:-640px -896px} +.icon-128-music{background-position:-768px -896px} +.icon-128-star-empty{background-position:-896px -896px} +.icon-128-star{background-position:-1024px -896px} +.icon-128-film{background-position:-1152px -896px} +.icon-128-th-large{background-position:0 -1024px} +.icon-128-th{background-position:-128px -1024px} +.icon-128-th-list{background-position:-256px -1024px} +.icon-128-zoom-in{background-position:-384px -1024px} +.icon-128-zoom-out{background-position:-512px -1024px} +.icon-128-off{background-position:-640px -1024px} +.icon-128-signal{background-position:-768px -1024px} +.icon-128-road{background-position:-896px -1024px} +.icon-128-upload-square{background-position:-1024px -1024px} +.icon-128-download{background-position:-1152px -1024px} +.icon-128-inbox{background-position:0 -1152px} +.icon-128-play-circle{background-position:-128px -1152px} +.icon-128-list-alt{background-position:-256px -1152px} +.icon-128-flag{background-position:-384px -1152px} +.icon-128-headphones{background-position:-512px -1152px} +.icon-128-volume{background-position:-640px -1152px} +.icon-128-volume-off{background-position:-768px -1152px} +.icon-128-volume-down{background-position:-896px -1152px} +.icon-128-volume-up{background-position:-1024px -1152px} +.icon-128-qrcode{background-position:-1152px -1152px} +.icon-128-barcode{background-position:0 -1280px} +.icon-128-tag{background-position:-128px -1280px} +.icon-128-tags{background-position:-256px -1280px} +.icon-128-book{background-position:-384px -1280px} +.icon-128-bookmark{background-position:-512px -1280px} +.icon-128-print{background-position:-640px -1280px} +.icon-128-camera{background-position:-768px -1280px} +.icon-128-font{background-position:-896px -1280px} +.icon-128-bold{background-position:-1024px -1280px} +.icon-128-italic{background-position:-1152px -1280px} +.icon-128-text-height{background-position:0 -1408px} +.icon-128-text-width{background-position:-128px -1408px} +.icon-128-align-left{background-position:-256px -1408px} +.icon-128-align-right{background-position:-512px -1408px} +.icon-128-align-justify{background-position:-640px -1408px} +.icon-128-list{background-position:-768px -1408px} +.icon-128-indent-left{background-position:-896px -1408px} +.icon-128-indent-right{background-position:-1024px -1408px} +.icon-128-facetime-video{background-position:-1152px -1408px} +.icon-128-picture{background-position:0 -1536px} +.icon-128-pencil{background-position:-128px -1536px} +.icon-128-map-marker{background-position:-256px -1536px} +.icon-128-adjust{background-position:-384px -1536px} +.icon-128-tint{background-position:-512px -1536px} +.icon-128-move{background-position:-640px -1536px} +.icon-128-step-backward{background-position:-768px -1536px} +.icon-128-fast-backward{background-position:-896px -1536px} +.icon-128-backward{background-position:-1024px -1536px} +.icon-128-step-forward{background-position:-1152px -1536px} +.icon-128-fast-forward{background-position:0 -1664px} +.icon-128-forward{background-position:-128px -1664px} +.icon-128-eject{background-position:-256px -1664px} +.icon-128-square{background-position:-384px -1664px} +.icon-128-plus-circle{background-position:-512px -1664px} +.icon-128-minus-circle{background-position:-640px -1664px} +.icon-128-plus-sign{background-position:-768px -1664px} +.icon-128-minus-sign{background-position:-896px -1664px} +.icon-128-remove-sign{background-position:-1024px -1664px} +.icon-128-ok-circle{background-position:-1152px -1664px} +.icon-128-ok-sign{background-position:0 -1792px} +.icon-128-minus{background-position:-128px -1792px} +.icon-128-info-circle{background-position:-256px -1792px} +.icon-128-info-sign{background-position:-384px -1792px} +.icon-128-question-sign{background-position:-512px -1792px} +.icon-128-screenshot{background-position:-640px -1792px} +.icon-128-arrow-right{background-position:-768px -1792px} +.icon-128-arrow-left{background-position:-896px -1792px} +.icon-128-arrow-up{background-position:-1024px -1792px} +.icon-128-arrow-down{background-position:-1152px -1792px} +.icon-128-share-alt{background-position:0 -1920px} +.icon-128-resize-full{background-position:-128px -1920px} +.icon-128-resize-small{background-position:-256px -1920px} +.icon-128-asterisk{background-position:-384px -1920px} +.icon-128-exclamation-circle{background-position:-512px -1920px} +.icon-128-exclamation-sign{background-position:-640px -1920px} +.icon-128-leaf{background-position:-768px -1920px} +.icon-128-fire{background-position:-896px -1920px} +.icon-128-eye-open{background-position:-1024px -1920px} +.icon-128-eye-close{background-position:-1152px -1920px} +.icon-128-plane{background-position:0 -2048px} +.icon-128-calendar{background-position:-128px -2048px} +.icon-128-random{background-position:-256px -2048px} +.icon-128-magnet{background-position:-384px -2048px} +.icon-128-chevron-down{background-position:-512px -2048px} +.icon-128-folder-close{background-position:-768px -2048px} +.icon-128-folder-open{background-position:-896px -2048px} +.icon-128-resize-vertical{background-position:-1024px -2048px} +.icon-128-resize-horizontal{background-position:-1152px -2048px} +.icon-128-hdd{background-position:0 -2176px} +.icon-128-bullhorn{background-position:-128px -2176px} +.icon-128-bell{background-position:-256px -2176px} +.icon-128-certificate-empty{background-position:-384px -2176px} +.icon-128-certificate{background-position:-512px -2176px} +.icon-128-thumbs-up{background-position:-640px -2176px} +.icon-128-thumbs-down{background-position:-768px -2176px} +.icon-128-hand-right{background-position:-896px -2176px} +.icon-128-hand-left{background-position:-1024px -2176px} +.icon-128-hand-up{background-position:-1152px -2176px} +.icon-128-hand-down{background-position:0 -2304px} +.icon-128-arrow-right-square{background-position:-128px -2304px} +.icon-128-arrow-left-square{background-position:-256px -2304px} +.icon-128-arrow-right-circle{background-position:-384px -2304px} +.icon-128-arrow-left-circle{background-position:-512px -2304px} +.icon-128-globe{background-position:-640px -2304px} +.icon-128-tasks{background-position:-768px -2304px} +.icon-128-filter{background-position:-896px -2304px} +.icon-128-briefcase{background-position:-1024px -2304px} +.icon-128-underline{background-position:-1152px -2304px} +.icon-128-sort{background-position:0 -2432px} +.icon-128-sort-descending{background-position:-128px -2432px} +.icon-128-sort-ascending{background-position:-256px -2432px} +.icon-128-sort-disabled{background-position:-384px -2432px} +.icon-128-arrow-down-solid{background-position:-512px -2432px} +.icon-128-arrow-up-solid{background-position:-640px -2432px} +.icon-128-arrow-left-solid{background-position:-768px -2432px} +.icon-128-arrow-right-solid{background-position:-896px -2432px} +.icon-128-0-sign{background-position:-1024px -2432px} +.icon-128-1-sign{background-position:-1152px -2432px} +.icon-128-2-sign{background-position:0 -2560px} +.icon-128-3-sign{background-position:-128px -2560px} +.icon-128-4-sign{background-position:-256px -2560px} +.icon-128-5-sign{background-position:-384px -2560px} +.icon-128-6-sign{background-position:-512px -2560px} +.icon-128-7-sign{background-position:-640px -2560px} +.icon-128-8-sign{background-position:-768px -2560px} +.icon-128-9-sign{background-position:-896px -2560px} +.icon-128-secure{background-position:-1024px -2560px} +.icon-128-not-secure{background-position:-1152px -2560px} +.icon-128-add-wow{background-position:0 -2688px} +.icon-128-add-warcraft{background-position:-128px -2688px} +.icon-128-add-starcraft{background-position:-256px -2688px} +.icon-128-add-starcraft-2{background-position:-384px -2688px} +.icon-128-add-diablo-3{background-position:-512px -2688px} +.icon-128-add-battlenet{background-position:-640px -2688px} +.icon-128-free-game-services{background-position:-768px -2688px} +.icon-128-character-services{background-position:-896px -2688px} +.icon-128-facebook{background-position:-1024px -2688px} +.icon-128-twitter{background-position:-1152px -2688px} +.icon-128-hearthstone{background-position:0 -2816px} +.icon-128-add-hearthstone{background-position:-128px -2816px} +.icon-128-heroes{background-position:-256px -2816px} +.icon-128-add-heroes{background-position:-384px -2816px} +.icon-128-friends-wow{background-position:-512px -2816px} +.icon-128-friends-warcraft{background-position:-640px -2816px} +.icon-128-friends-starcraft{background-position:-768px -2816px} +.icon-128-friends-starcraft-2{background-position:-896px -2816px} +.icon-128-friends-diablo-3{background-position:-1024px -2816px} +.icon-128-friends-battlenet{background-position:-1152px -2816px} +.icon-128-friends-hearthstone{background-position:0 -2944px} +.icon-128-friends-heroes{background-position:-128px -2944px} +.icon-128-news-wow{background-position:-256px -2944px} +.icon-128-news-warcraft{background-position:-384px -2944px} +.icon-128-news-starcraft{background-position:-512px -2944px} +.icon-128-news-starcraft-2{background-position:-640px -2944px} +.icon-128-news-diablo-3{background-position:-768px -2944px} +.icon-128-news-battlenet{background-position:-896px -2944px} +.icon-128-news-hearthstone{background-position:-1024px -2944px} +.icon-128-news-heroes{background-position:-1152px -2944px} +.icon-128-git{background-position:0 -3072px} +.icon-128-bootstrap{background-position:-128px -3072px} +.icon-128-maven{background-position:-256px -3072px} +.icon-128-twitch{background-position:-384px -3072px} +.icon-128-youtube{background-position:-512px -3072px} +.icon-128-popout{background-position:-640px -3072px} +.icon-128-share-opts{background-position:-768px -3072px} +.icon-128-logout{background-position:-896px -3072px} +.icon-128-signup{background-position:-1024px -3072px} +.icon-128-queue{background-position:-1152px -3072px} +.icon-128-maintenance{background-position:0 -3200px} +.icon-128-security{background-position:-128px -3200px} +.icon-128-authenticator-unknown{background-position:-256px -3200px} +.icon-128-authenticator-present{background-position:-384px -3200px} +.icon-128-account-forgot{background-position:-512px -3200px} +.icon-128-account-locked{background-position:-640px -3200px} +.icon-128-email-forgot{background-position:-768px -3200px} +.icon-128-remove-authenticator{background-position:-896px -3200px} +.icon-128-authenticator-mobile{background-position:-1024px -3200px} +.icon-128-ipin{background-position:-1152px -3200px} +.icon-128-overwatch{background-position:0 -3328px} +.icon-128-add-overwatch{background-position:-128px -3328px} +.icon-128-friends-overwatch{background-position:-256px -3328px} +.icon-128-news-overwatch{background-position:-384px -3328px} +.icon-payment-placeholder{background-position:0 0} +.icon-payment-visa{background-position:-24px 0} +.icon-payment-visa-electron{background-position:-48px 0} +.icon-payment-visa-debit{background-position:-72px 0} +.icon-payment-mastercard{background-position:-96px 0} +.icon-payment-maestro{background-position:-120px 0} +.icon-payment-american-express{background-position:-144px 0} +.icon-payment-discover{background-position:-168px 0} +.icon-payment-diners-club{background-position:0 -16px} +.icon-payment-jcb{background-position:-24px -16px} +.icon-payment-carte-bleue{background-position:-48px -16px} +.icon-payment-giropay{background-position:-72px -16px} +.icon-payment-webmoney{background-position:-96px -16px} +.icon-payment-ideal{background-position:-120px -16px} +.icon-payment-solo{background-position:-144px -16px} +.icon-payment-oxxo{background-position:-168px -16px} +.icon-payment-seven-eleven{background-position:0 -32px} +.icon-payment-santander{background-position:-24px -32px} +.icon-payment-bbva-bancomer{background-position:-48px -32px} +.icon-payment-ixe{background-position:-72px -32px} +.icon-payment-hsbc{background-position:-96px -32px} +.icon-payment-scotiabank{background-position:-120px -32px} +.icon-payment-t-online{background-position:-144px -32px} +.icon-payment-qiwi{background-position:-168px -32px} +.icon-payment-dineromail{background-position:0 -48px} +.icon-payment-dinheiromail{background-position:-24px -48px} +.icon-payment-pago-facil{background-position:-48px -48px} +.icon-payment-magna{background-position:-72px -48px} +.icon-payment-italcred{background-position:-96px -48px} +.icon-payment-hipercard{background-position:-120px -48px} +.icon-payment-cobro-express{background-position:-144px -48px} +.icon-payment-cabal{background-position:-168px -48px} +.icon-payment-bapro{background-position:0 -64px} +.icon-payment-banamex{background-position:-24px -64px} +.icon-payment-servipag{background-position:-48px -64px} +.icon-payment-rapipago{background-position:-72px -64px} +.icon-payment-presto{background-position:-96px -64px} +.icon-payment-payone{background-position:-120px -64px} +.icon-payment-tarjeta-shopping{background-position:-144px -64px} +.icon-payment-aura{background-position:-168px -64px} +.icon-payment-banco-de-chile{background-position:0 -80px} +.icon-payment-miscuentas{background-position:-24px -80px} +.icon-payment-argencard{background-position:-48px -80px} +.icon-payment-paggo{background-position:-72px -80px} +.icon-payment-banco-de-brasil{background-position:-96px -80px} +.icon-payment-bradesco{background-position:-120px -80px} +.icon-payment-todito-card{background-position:-144px -80px} +.icon-payment-todito-cash{background-position:-168px -80px} +.icon-payment-elv{background-position:0 -96px} +.icon-payment-automatische-incasso{background-position:-24px -96px} +.icon-payment-lastschriftverfahren{background-position:-48px -96px} +.icon-payment-domiciliacion-bancaria{background-position:-72px -96px} +.icon-payment-boleto-bancario{background-position:-96px -96px} +.icon-payment-paypal{background-position:-120px -96px} +.icon-payment-battlenet-balance{background-position:-144px -96px} +.icon-payment-chase-paymentech{background-position:-168px -96px} +.icon-payment-global-collect{background-position:0 -112px} +.icon-payment-netease{background-position:-24px -112px} +.icon-payment-credit-card,.icon-payment-neweb-credit-card{background-position:-48px -112px} +.icon-payment-lguplus-ars{background-position:-72px -112px} +.icon-payment-lguplus-wire-transfer{background-position:-96px -112px} +.icon-payment-danal-mobile{background-position:-120px -112px} +.icon-payment-inicis-credit-card{background-position:-144px -112px} +.icon-payment-kr-gift-card{background-position:-168px -112px} +.icon-payment-gift-card{background-position:0 -128px} +.icon-payment-tarjeta-naranja{background-position:-24px -128px} +.icon-payment-ripsa-pagos{background-position:-48px -128px} +.icon-payment-provincia-pagos{background-position:-72px -128px} +.icon-payment-elo{background-position:-96px -128px} +.icon-payment-banrisul{background-position:-120px -128px} +.icon-payment-bci{background-position:-144px -128px} +.icon-payment-sencillito{background-position:-168px -128px} +.icon-payment-ripley{background-position:0 -144px} +.icon-payment-banbajio{background-position:-24px -144px} +.icon-payment-visa-virtual{background-position:-48px -144px} +.icon-payment-money-online{background-position:-72px -144px} +.icon-payment-mycard{background-position:-96px -144px} +.icon-payment-neweb-alipay{background-position:-120px -144px} +.icon-payment-neweb-virtualatm{background-position:-144px -144px} +.icon-payment-neweb-atm{background-position:-168px -144px} +.icon-payment-kr-cvs{background-position:0 -160px} +.icon-payment-lguplus-gift-cert-b{background-position:-48px -160px} +.icon-payment-lguplus-gift-cert-c{background-position:-72px -160px} +.icon-payment-cencosud{background-position:-96px -160px} +.icon-payment-netease-wallet{background-position:-120px -160px} +.icon-payment-payu{background-position:-144px -160px} +.icon-payment-banco-de-bogota{background-position:-168px -160px} +.icon-payment-bancolombia{background-position:0 -176px} +.icon-payment-efecty{background-position:-24px -176px} +.icon-payment-pse{background-position:-48px -176px} +.icon-payment-via-baloto{background-position:-72px -176px} +.icon-payment-diestel{background-position:-96px -176px} +.icon-payment-bcp-agente-bcp{background-position:-120px -176px} +.icon-payment-internet-via-bcp{background-position:-144px -176px} +.icon-payment-bcp-ventanilla-agencias{background-position:-168px -176px} +.icon-payment-debito-automatico{background-position:-24px -192px} +.icon-payment-itau{background-position:-48px -192px} +.icon-payment-cash-on-delivery{background-position:-72px -192px} +.icon-24-payment-placeholder{background-position:0 0} +.icon-24-payment-visa{background-position:-36px 0} +.icon-24-payment-visa-electron{background-position:-72px 0} +.icon-24-payment-visa-debit{background-position:-108px 0} +.icon-24-payment-mastercard{background-position:-144px 0} +.icon-24-payment-maestro{background-position:-180px 0} +.icon-24-payment-american-express{background-position:-216px 0} +.icon-24-payment-discover{background-position:-252px 0} +.icon-24-payment-diners-club{background-position:0 -24px} +.icon-24-payment-jcb{background-position:-36px -24px} +.icon-24-payment-carte-bleue{background-position:-72px -24px} +.icon-24-payment-giropay{background-position:-108px -24px} +.icon-24-payment-webmoney{background-position:-144px -24px} +.icon-24-payment-ideal{background-position:-180px -24px} +.icon-24-payment-solo{background-position:-216px -24px} +.icon-24-payment-oxxo{background-position:-252px -24px} +.icon-24-payment-seven-eleven{background-position:0 -48px} +.icon-24-payment-santander{background-position:-36px -48px} +.icon-24-payment-bbva-bancomer{background-position:-72px -48px} +.icon-24-payment-ixe{background-position:-108px -48px} +.icon-24-payment-hsbc{background-position:-144px -48px} +.icon-24-payment-scotiabank{background-position:-180px -48px} +.icon-24-payment-t-online{background-position:-216px -48px} +.icon-24-payment-qiwi{background-position:-252px -48px} +.icon-24-payment-dineromail{background-position:0 -72px} +.icon-24-payment-dinheiromail{background-position:-36px -72px} +.icon-24-payment-pago-facil{background-position:-72px -72px} +.icon-24-payment-magna{background-position:-108px -72px} +.icon-24-payment-italcred{background-position:-144px -72px} +.icon-24-payment-hipercard{background-position:-180px -72px} +.icon-24-payment-cobro-express{background-position:-216px -72px} +.icon-24-payment-cabal{background-position:-252px -72px} +.icon-24-payment-bapro{background-position:0 -96px} +.icon-24-payment-banamex{background-position:-36px -96px} +.icon-24-payment-servipag{background-position:-72px -96px} +.icon-24-payment-rapipago{background-position:-108px -96px} +.icon-24-payment-presto{background-position:-144px -96px} +.icon-24-payment-payone{background-position:-180px -96px} +.icon-24-payment-tarjeta-shopping{background-position:-216px -96px} +.icon-24-payment-aura{background-position:-252px -96px} +.icon-24-payment-banco-de-chile{background-position:0 -120px} +.icon-24-payment-miscuentas{background-position:-36px -120px} +.icon-24-payment-argencard{background-position:-72px -120px} +.icon-24-payment-paggo{background-position:-108px -120px} +.icon-24-payment-banco-de-brasil{background-position:-144px -120px} +.icon-24-payment-bradesco{background-position:-180px -120px} +.icon-24-payment-todito-card{background-position:-216px -120px} +.icon-24-payment-todito-cash{background-position:-252px -120px} +.icon-24-payment-elv{background-position:0 -144px} +.icon-24-payment-automatische-incasso{background-position:-36px -144px} +.icon-24-payment-lastschriftverfahren{background-position:-72px -144px} +.icon-24-payment-domiciliacion-bancaria{background-position:-108px -144px} +.icon-24-payment-boleto-bancario{background-position:-144px -144px} +.icon-24-payment-paypal{background-position:-180px -144px} +.icon-24-payment-battlenet-balance{background-position:-216px -144px} +.icon-24-payment-chase-paymentech{background-position:-252px -144px} +.icon-24-payment-global-collect{background-position:0 -168px} +.icon-24-payment-netease{background-position:-36px -168px} +.icon-24-payment-credit-card,.icon-24-payment-neweb-credit-card{background-position:-72px -168px} +.icon-24-payment-lguplus-ars{background-position:-108px -168px} +.icon-24-payment-lguplus-wire-transfer{background-position:-144px -168px} +.icon-24-payment-danal-mobile{background-position:-180px -168px} +.icon-24-payment-inicis-credit-card{background-position:-216px -168px} +.icon-24-payment-kr-gift-card{background-position:-252px -168px} +.icon-24-payment-gift-card{background-position:0 -192px} +.icon-24-payment-tarjeta-naranja{background-position:-36px -192px} +.icon-24-payment-ripsa-pagos{background-position:-72px -192px} +.icon-24-payment-provincia-pagos{background-position:-108px -192px} +.icon-24-payment-elo{background-position:-144px -192px} +.icon-24-payment-banrisul{background-position:-180px -192px} +.icon-24-payment-bci{background-position:-216px -192px} +.icon-24-payment-sencillito{background-position:-252px -192px} +.icon-24-payment-ripley{background-position:0 -216px} +.icon-24-payment-banbajio{background-position:-36px -216px} +.icon-24-payment-visa-virtual{background-position:-72px -216px} +.icon-24-payment-money-online{background-position:-108px -216px} +.icon-24-payment-mycard{background-position:-144px -216px} +.icon-24-payment-neweb-alipay{background-position:-180px -216px} +.icon-24-payment-neweb-virtualatm{background-position:-216px -216px} +.icon-24-payment-neweb-atm{background-position:-252px -216px} +.icon-24-payment-kr-cvs{background-position:0 -240px} +.icon-24-payment-kr-posa{background-position:-144px -288px} +.icon-24-payment-sepa{background-position:-36px -240px} +.icon-24-payment-lguplus-gift-cert-b{background-position:-72px -240px} +.icon-24-payment-lguplus-gift-cert-c{background-position:-108px -240px} +.icon-24-payment-cencosud{background-position:-144px -240px} +.icon-24-payment-netease-wallet{background-position:-180px -240px} +.icon-24-payment-payu{background-position:-216px -240px} +.icon-24-payment-banco-de-bogota{background-position:-252px -240px} +.icon-24-payment-bancolombia{background-position:0 -264px} +.icon-24-payment-efecty{background-position:-36px -264px} +.icon-24-payment-pse{background-position:-72px -264px} +.icon-24-payment-via-baloto{background-position:-108px -264px} +.icon-24-payment-diestel{background-position:-144px -264px} +.icon-24-payment-bcp-agente-bcp{background-position:-180px -264px} +.icon-24-payment-internet-via-bcp{background-position:-216px -264px} +.icon-24-payment-bcp-ventanilla-agencias{background-position:-252px -264px} +.icon-24-payment-debito-automatico{background-position:-36px -288px} +.icon-24-payment-itau{background-position:-72px -288px} +.icon-24-payment-cash-on-delivery{background-position:-108px -288px} +table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0} +.table{width:100%} +.table th,.table td{text-align:left;vertical-align:top} +.table thead th{vertical-align:bottom;position:relative} +.table thead th a.table-sort.sort-disabled,.table thead th a.table-sort.sort-disabled:hover,.table thead th a.table-sort.sort-disabled:focus{cursor:default} +.tooltip{position:absolute;display:block;visibility:visible;opacity:0} +.tooltip.in{opacity:1} +.tooltip-fixed{position:fixed} +.tooltip-inner{text-decoration:none} +.tooltip.left .tooltip-inner{text-align:left} +.tooltip.right .tooltip-inner{text-align:left} +.tooltipster-base{padding:0;font-size:0;line-height:0;position:absolute;left:0;top:0;pointer-events:none;width:auto;overflow:visible} +.tooltipster-base .tooltipster-content{overflow:hidden} +.tooltipster-arrow{display:block;text-align:center;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1} +.tooltipster-arrow span,.tooltipster-arrow-border{display:block;width:0;height:0;position:absolute} +.tooltipster-fade{opacity:0;-webkit-transition-property:opacity;transition-property:opacity} +.tooltipster-fade-show{opacity:1} +.tooltipster-grow{-webkit-transform:scale(0,0);-ms-transform:scale(0,0);transform:scale(0,0);-webkit-transition-property:-webkit-transform;-webkit-transition-property:transform;transition-property:transform;-webkit-backface-visibility:hidden} +.tooltipster-grow-show{-webkit-transform:scale(1,1);-ms-transform:scale(1,1);transform:scale(1,1);-webkit-transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15);transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15)} +.tooltipster-swing{opacity:0;-webkit-transform:rotateZ(4deg);-ms-transform:rotateZ(4deg);transform:rotateZ(4deg);-webkit-transition-property:-webkit-transform;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-property:-webkit-transform,opacity} +.tooltipster-swing-show{opacity:1;-webkit-transform:rotateZ(0deg);-ms-transform:rotateZ(0deg);transform:rotateZ(0deg);-webkit-transition-timing-function:cubic-bezier(0.23,0.635,0.495,2.4);transition-timing-function:cubic-bezier(0.23,0.635,0.495,2.4)} +.tooltipster-fall{top:0;-webkit-transition-property:top;transition-property:top;-webkit-transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15);transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15)} +.tooltipster-fall.tooltipster-dying{-webkit-transition-property:all;transition-property:all;top:0!important;opacity:0} +.tooltipster-slide{left:-40px;-webkit-transition-property:left;transition-property:left;-webkit-transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15);transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15)} +.tooltipster-slide.tooltipster-dying{-webkit-transition-property:all;transition-property:all;left:0!important;opacity:0} +.tooltipster-content-changing{opacity:.5;-webkit-transform:scale(1.1,1.1);-ms-transform:scale(1.1,1.1);transform:scale(1.1,1.1)} +body{font-size-adjust:auto;-webkit-font-feature-settings:"kern" 1,"liga" 1;-ms-font-feature-settings:"kern" 1,"liga" 1;-moz-font-feature-settings:"kern" 1,"liga" 1;font-feature-settings:"kern" 1,"liga" 1} +h1,h2,h3,h4,h5,h6,.heading-1,.heading-2,.heading-3,.heading-4,.heading-5,.heading-6{display:block} +.title{-webkit-transition:color .2s;transition:color .2s} +.title .subtitle{text-transform:none;letter-spacing:normal;-webkit-transition:color .2s;transition:color .2s} +.fraction{-webkit-font-feature-settings:"frac" 1,"kern" 1,"liga" 1;-ms-font-feature-settings:"frac" 1,"kern" 1,"liga" 1;-moz-font-feature-settings:"frac" 1,"kern" 1,"liga" 1;font-feature-settings:"frac" 1,"kern" 1,"liga" 1} +i{font-style:italic} +em{font-style:italic} +s{text-decoration:line-through} +del{text-decoration:line-through} +abbr[title],abbr[data-original-title]{cursor:help} +.initialism{text-transform:uppercase} +cite{font-style:normal} +ul,ol{padding:0} +ul ul,ul ol,ol ol,ol ul{margin-bottom:0} +ul{list-style:disc} +ul ul{list-style:square} +ul ul ul{list-style:circle} +ol{list-style:decimal} +li:last-of-type{margin-bottom:0} +ul.unstyled,ol.unstyled{margin:0;list-style:none} +ul.unstyled li,ol.unstyled li{padding-left:0;margin-bottom:0} +ul.icons,ol.icons{margin-left:0;list-style:none} +ul.icons li,ol.icons li{position:relative} +ul.icons li [class^="icon-"],ol.icons li [class^="icon-"],ul.icons li [class*=" icon-"],ol.icons li [class*=" icon-"]{position:absolute} +ul.icons li a [class*="icon-external-link"],ol.icons li a [class*="icon-external-link"]{position:static;left:auto} +ul.inline,ol.inline{margin-left:0;list-style:none} +ul.inline>li,ol.inline>li{display:inline-block} +ul.inline>li:first-of-type,ol.inline>li:first-of-type{padding-left:0} +dl{overflow:auto} +dl dd:last-of-type{margin-bottom:0} +dl dd.inline,dl dd.enumerated{margin-left:0;margin-top:0;display:inline-block} +dl dd.inline:after{content:"";display:inline-block;width:1em} +dl dd.inline.omega:after{width:0} +dl dd.enumerated:after{content:"???"} +:lang(zh) dl dd.enumerated:after{content:"???"} +dl dd.enumerated.omega:after{content:""} +.dl-horizontal:before,.dl-horizontal:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.dl-horizontal:after{clear:both} +.dl-horizontal dt{float:left;width:20%;clear:left;text-align:right;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.dl-horizontal dd{margin-left:25%} +blockquote p:last-of-type{margin-bottom:0} +blockquote small{display:block} +blockquote small:before{content:"\002014\0000A0"} +blockquote.pull-right{float:right;padding-left:0;border-left:0} +blockquote.pull-right p,blockquote.pull-right small{text-align:right} +q:before,blockquote:before{content:""} +q:after,blockquote:after{content:""} +address{display:block;font-style:normal} +hr{-moz-box-sizing:border-box;box-sizing:border-box;border:0} +@media screen and (max-width:400px){@-ms-viewport{width:320px} +} +.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.grid-container:before,.grid-container:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.grid-container:after{clear:both} +body{min-width:960px} +.grid-container{-moz-box-sizing:border-box;box-sizing:border-box;margin-left:auto;margin-right:auto;max-width:1200px;padding-left:40px;padding-right:40px} +.grid-parent{padding-left:0;padding-right:0} +.grid-0{-moz-box-sizing:border-box;box-sizing:border-box;padding-left:0;padding-right:0} +.push-0,.pull-0{position:relative} +@media screen and (min-width:768px){.grid-100:before,.grid-100:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.hide-on-web{display:none!important} +.grid-0,.grid-95,.grid-90,.grid-85,.grid-80,.grid-75,.grid-70,.grid-65,.grid-60,.grid-55,.grid-50,.grid-45,.grid-40,.grid-35,.grid-30,.grid-25,.grid-20,.grid-15,.grid-10,.grid-5,.grid-100,.grid-66,.grid-33{-moz-box-sizing:border-box;box-sizing:border-box;padding-left:0;padding-right:0} +.push-0,.pull-0,.push-95,.pull-95,.push-90,.pull-90,.push-85,.pull-85,.push-80,.pull-80,.push-75,.pull-75,.push-70,.pull-70,.push-65,.pull-65,.push-60,.pull-60,.push-55,.pull-55,.push-50,.pull-50,.push-45,.pull-45,.push-40,.pull-40,.push-35,.pull-35,.push-30,.pull-30,.push-25,.pull-25,.push-20,.pull-20,.push-15,.pull-15,.push-10,.pull-10,.push-5,.pull-5,.push-66,.pull-66,.push-33,.pull-33{position:relative} +.grid-95{float:left;width:95%} +.prefix-95{margin-left:95%} +.suffix-95{margin-right:95%} +.push-95{left:95%} +.pull-95{left:-95%} +.grid-90{float:left;width:90%} +.prefix-90{margin-left:90%} +.suffix-90{margin-right:90%} +.push-90{left:90%} +.pull-90{left:-90%} +.grid-85{float:left;width:85%} +.prefix-85{margin-left:85%} +.suffix-85{margin-right:85%} +.push-85{left:85%} +.pull-85{left:-85%} +.grid-80{float:left;width:80%} +.prefix-80{margin-left:80%} +.suffix-80{margin-right:80%} +.push-80{left:80%} +.pull-80{left:-80%} +.grid-75{float:left;width:75%} +.prefix-75{margin-left:75%} +.suffix-75{margin-right:75%} +.push-75{left:75%} +.pull-75{left:-75%} +.grid-70{float:left;width:70%} +.prefix-70{margin-left:70%} +.suffix-70{margin-right:70%} +.push-70{left:70%} +.pull-70{left:-70%} +.grid-65{float:left;width:65%} +.prefix-65{margin-left:65%} +.suffix-65{margin-right:65%} +.push-65{left:65%} +.pull-65{left:-65%} +.grid-60{float:left;width:60%} +.prefix-60{margin-left:60%} +.suffix-60{margin-right:60%} +.push-60{left:60%} +.pull-60{left:-60%} +.grid-55{float:left;width:55%} +.prefix-55{margin-left:55%} +.suffix-55{margin-right:55%} +.push-55{left:55%} +.pull-55{left:-55%} +.grid-50{float:left;width:50%} +.prefix-50{margin-left:50%} +.suffix-50{margin-right:50%} +.push-50{left:50%} +.pull-50{left:-50%} +.grid-45{float:left;width:45%} +.prefix-45{margin-left:45%} +.suffix-45{margin-right:45%} +.push-45{left:45%} +.pull-45{left:-45%} +.grid-40{float:left;width:40%} +.prefix-40{margin-left:40%} +.suffix-40{margin-right:40%} +.push-40{left:40%} +.pull-40{left:-40%} +.grid-35{float:left;width:35%} +.prefix-35{margin-left:35%} +.suffix-35{margin-right:35%} +.push-35{left:35%} +.pull-35{left:-35%} +.grid-30{float:left;width:30%} +.prefix-30{margin-left:30%} +.suffix-30{margin-right:30%} +.push-30{left:30%} +.pull-30{left:-30%} +.grid-25{float:left;width:25%} +.prefix-25{margin-left:25%} +.suffix-25{margin-right:25%} +.push-25{left:25%} +.pull-25{left:-25%} +.grid-20{float:left;width:20%} +.prefix-20{margin-left:20%} +.suffix-20{margin-right:20%} +.push-20{left:20%} +.pull-20{left:-20%} +.grid-15{float:left;width:15%} +.prefix-15{margin-left:15%} +.suffix-15{margin-right:15%} +.push-15{left:15%} +.pull-15{left:-15%} +.grid-10{float:left;width:10%} +.prefix-10{margin-left:10%} +.suffix-10{margin-right:10%} +.push-10{left:10%} +.pull-10{left:-10%} +.grid-5{float:left;width:5%} +.prefix-5{margin-left:5%} +.suffix-5{margin-right:5%} +.push-5{left:5%} +.pull-5{left:-5%} +.grid-100{clear:both;width:100%} +.grid-100:before,.grid-100:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.grid-100:after{clear:both} +.grid-66{float:left;width:66.66666667%} +.prefix-66{margin-left:66.66666667%} +.suffix-66{margin-right:66.66666667%} +.push-66{left:66.66666667%} +.pull-66{left:-66.66666667%} +.grid-33{float:left;width:33.33333333%} +.prefix-33{margin-left:33.33333333%} +.suffix-33{margin-right:33.33333333%} +.push-33{left:33.33333333%} +.pull-33{left:-33.33333333%} +} +@media screen and (max-width:767px){body{min-width:0} +.grid-container{max-width:none;padding-left:10px;padding-right:10px} +.hide-on-mobile{display:none!important} +.grid-0,.mobile-grid-95,.mobile-grid-90,.mobile-grid-85,.mobile-grid-80,.mobile-grid-75,.mobile-grid-70,.mobile-grid-65,.mobile-grid-60,.mobile-grid-55,.mobile-grid-50,.mobile-grid-45,.mobile-grid-40,.mobile-grid-35,.mobile-grid-30,.mobile-grid-25,.mobile-grid-20,.mobile-grid-15,.mobile-grid-10,.mobile-grid-5,.mobile-grid-100,.mobile-grid-66,.mobile-grid-33{-moz-box-sizing:border-box;box-sizing:border-box;padding-left:0;padding-right:0} +.push-0,.pull-0,.mobile-push-95,.mobile-pull-95,.mobile-push-90,.mobile-pull-90,.mobile-push-85,.mobile-pull-85,.mobile-push-80,.mobile-pull-80,.mobile-push-75,.mobile-pull-75,.mobile-push-70,.mobile-pull-70,.mobile-push-65,.mobile-pull-65,.mobile-push-60,.mobile-pull-60,.mobile-push-55,.mobile-pull-55,.mobile-push-50,.mobile-pull-50,.mobile-push-45,.mobile-pull-45,.mobile-push-40,.mobile-pull-40,.mobile-push-35,.mobile-pull-35,.mobile-push-30,.mobile-pull-30,.mobile-push-25,.mobile-pull-25,.mobile-push-20,.mobile-pull-20,.mobile-push-15,.mobile-pull-15,.mobile-push-10,.mobile-pull-10,.mobile-push-5,.mobile-pull-5,.mobile-push-66,.mobile-pull-66,.mobile-push-33,.mobile-pull-33{position:relative} +.mobile-grid-95{float:left;width:95%} +.mobile-prefix-95{margin-left:95%} +.mobile-suffix-95{margin-right:95%} +.mobile-push-95{left:95%} +.mobile-pull-95{left:-95%} +.mobile-grid-90{float:left;width:90%} +.mobile-prefix-90{margin-left:90%} +.mobile-suffix-90{margin-right:90%} +.mobile-push-90{left:90%} +.mobile-pull-90{left:-90%} +.mobile-grid-85{float:left;width:85%} +.mobile-prefix-85{margin-left:85%} +.mobile-suffix-85{margin-right:85%} +.mobile-push-85{left:85%} +.mobile-pull-85{left:-85%} +.mobile-grid-80{float:left;width:80%} +.mobile-prefix-80{margin-left:80%} +.mobile-suffix-80{margin-right:80%} +.mobile-push-80{left:80%} +.mobile-pull-80{left:-80%} +.mobile-grid-75{float:left;width:75%} +.mobile-prefix-75{margin-left:75%} +.mobile-suffix-75{margin-right:75%} +.mobile-push-75{left:75%} +.mobile-pull-75{left:-75%} +.mobile-grid-70{float:left;width:70%} +.mobile-prefix-70{margin-left:70%} +.mobile-suffix-70{margin-right:70%} +.mobile-push-70{left:70%} +.mobile-pull-70{left:-70%} +.mobile-grid-65{float:left;width:65%} +.mobile-prefix-65{margin-left:65%} +.mobile-suffix-65{margin-right:65%} +.mobile-push-65{left:65%} +.mobile-pull-65{left:-65%} +.mobile-grid-60{float:left;width:60%} +.mobile-prefix-60{margin-left:60%} +.mobile-suffix-60{margin-right:60%} +.mobile-push-60{left:60%} +.mobile-pull-60{left:-60%} +.mobile-grid-55{float:left;width:55%} +.mobile-prefix-55{margin-left:55%} +.mobile-suffix-55{margin-right:55%} +.mobile-push-55{left:55%} +.mobile-pull-55{left:-55%} +.mobile-grid-50{float:left;width:50%} +.mobile-prefix-50{margin-left:50%} +.mobile-suffix-50{margin-right:50%} +.mobile-push-50{left:50%} +.mobile-pull-50{left:-50%} +.mobile-grid-45{float:left;width:45%} +.mobile-prefix-45{margin-left:45%} +.mobile-suffix-45{margin-right:45%} +.mobile-push-45{left:45%} +.mobile-pull-45{left:-45%} +.mobile-grid-40{float:left;width:40%} +.mobile-prefix-40{margin-left:40%} +.mobile-suffix-40{margin-right:40%} +.mobile-push-40{left:40%} +.mobile-pull-40{left:-40%} +.mobile-grid-35{float:left;width:35%} +.mobile-prefix-35{margin-left:35%} +.mobile-suffix-35{margin-right:35%} +.mobile-push-35{left:35%} +.mobile-pull-35{left:-35%} +.mobile-grid-30{float:left;width:30%} +.mobile-prefix-30{margin-left:30%} +.mobile-suffix-30{margin-right:30%} +.mobile-push-30{left:30%} +.mobile-pull-30{left:-30%} +.mobile-grid-25{float:left;width:25%} +.mobile-prefix-25{margin-left:25%} +.mobile-suffix-25{margin-right:25%} +.mobile-push-25{left:25%} +.mobile-pull-25{left:-25%} +.mobile-grid-20{float:left;width:20%} +.mobile-prefix-20{margin-left:20%} +.mobile-suffix-20{margin-right:20%} +.mobile-push-20{left:20%} +.mobile-pull-20{left:-20%} +.mobile-grid-15{float:left;width:15%} +.mobile-prefix-15{margin-left:15%} +.mobile-suffix-15{margin-right:15%} +.mobile-push-15{left:15%} +.mobile-pull-15{left:-15%} +.mobile-grid-10{float:left;width:10%} +.mobile-prefix-10{margin-left:10%} +.mobile-suffix-10{margin-right:10%} +.mobile-push-10{left:10%} +.mobile-pull-10{left:-10%} +.mobile-grid-5{float:left;width:5%} +.mobile-prefix-5{margin-left:5%} +.mobile-suffix-5{margin-right:5%} +.mobile-push-5{left:5%} +.mobile-pull-5{left:-5%} +.mobile-grid-100{clear:both;width:100%} +.mobile-grid-100:before,.mobile-grid-100:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.mobile-grid-100:after{clear:both} +.mobile-grid-66{float:left;width:66.66666667%} +.mobile-prefix-66{margin-left:66.66666667%} +.mobile-suffix-66{margin-right:66.66666667%} +.mobile-push-66{left:66.66666667%} +.mobile-pull-66{left:-66.66666667%} +.mobile-grid-33{float:left;width:33.33333333%} +.mobile-prefix-33{margin-left:33.33333333%} +.mobile-suffix-33{margin-right:33.33333333%} +.mobile-push-33{left:33.33333333%} +.mobile-pull-33{left:-33.33333333%} +.grid-100[class*="app-grid-"]{clear:none} +.grid-100[class*="app-grid-"]:after{clear:none} +.app-push-0,.app-pull-0{left:0} +.app-prefix-0{margin-left:0} +.app-suffix-0{margin-right:0} +} +html:lang(ja) i,html:lang(ko) i,html:lang(zh) i,html:lang(ja) em,html:lang(ko) em,html:lang(zh) em,html:lang(ja) dfn,html:lang(ko) dfn,html:lang(zh) dfn{font-style:normal;font-weight:700} +html:lang(de) q{quotes:"???" "???" "???" "???"} +html:lang(en-GB) q{quotes:"???" "???" "???" "???"} +html:lang(fr) q{quotes:"????" "????" "?????" "?????"} +html:lang(it) q{quotes:"??" "??" "???" "???"} +html:lang(pl) q{quotes:"???" "???" "??" "??"} +html:lang(ru) q{quotes:"??" "??" "???" "???"} +html:lang(zh-TW) q{quotes:"???" "???" "???" "???"} +html:lang(zh) html,html:lang(ja) html,html:lang(zh) body,html:lang(ja) body{word-break:normal} +html:lang(ko) html,html:lang(ko) body{word-break:keep-all} +html:lang(ko) .word-break-all{word-break:break-all} +html.ko-kr i,html.zh-cn i,html.zh-tw i,html.ko-kr em,html.zh-cn em,html.zh-tw em,html.ko-kr dfn,html.zh-cn dfn,html.zh-tw dfn{font-style:normal;font-weight:700} +html.de-de q{quotes:"???" "???" "???" "???"} +html.en-gb q{quotes:"???" "???" "???" "???"} +html.fr-fr q{quotes:"????" "????" "?????" "?????"} +html.it-it q{quotes:"??" "??" "???" "???"} +html.pl-pl q{quotes:"???" "???" "??" "??"} +html.ru-ru q{quotes:"??" "??" "???" "???"} +html.zh-tw q{quotes:"???" "???" "???" "???"} +html.zh-cn html,html.zh-tw html,html.zh-cn body,html.zh-tw body{word-break:normal} +html.ko-kr html,html.ko-kr body{word-break:keep-all} +html.ko-kr .word-break-all{word-break:break-all} +.modal-background-properties{background-repeat:no-repeat;background-size:contain;background-position:center bottom,center top,center -100px;background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-webkit-linear-gradient(top,#263145 0,#1d222c 70%),-webkit-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-moz-linear-gradient(top,#263145 0,#1d222c 70%),-moz-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),linear-gradient(top,#263145 0,#1d222c 70%),radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-clip:padding-box} +@font-face{font-family:"Blizzard";font-style:normal;font-weight:300;src:local("Blizzard Light"),local("Blizzard-Light"),url("fonts/blizzard-light.woff") format("woff")} +@font-face{font-family:"Blizzard";font-style:normal;font-weight:400;src:local("Blizzard"),local("Blizzard"),url("fonts/blizzard-regular.woff") format("woff")} +@font-face{font-family:"Blizzard";font-style:italic;font-weight:400;src:local("Blizzard Italic"),local("Blizzard-Italic"),url("fonts/blizzard-regular-italic.woff") format("woff")} +@font-face{font-family:"Blizzard";font-style:normal;font-weight:700;src:local("Blizzard Bold"),local("Blizzard-Bold"),url("fonts/blizzard-bold.woff") format("woff")} +.accordion{margin-bottom:20px} +.accordion-group{margin-bottom:2px;border:1px solid #272727;border-radius:2px} +.accordion-heading{border-bottom:0} +.accordion-heading .accordion-toggle{padding:5px 10px} +.accordion-toggle{background:0;cursor:pointer;color:#fff} +.accordion-toggle:focus,.accordion-toggle:hover{color:#fff} +.accordion-toggle:before{display:inline-block;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-16px -224px;content:"";margin-right:5px;margin-top:2px;width:16px;height:16px;line-height:16px;vertical-align:top} +.accordion-toggle.collapsed:before{background-position:-32px -112px} +.accordion-inner{padding:5px 10px;border-top:1px solid #272727} +.modal.agegate{width:358px;margin-left:-179px;height:216px;-webkit-transition:height,200ms;transition:height 200ms} +.modal.agegate.agegate-failed{height:125px} +.modal.agegate .modal-body .close{right:7px;top:-5px} +.modal.agegate .modal-body form{margin:0} +.modal.agegate .modal-body h1,.modal.agegate .modal-body .heading-1{color:#fff;font-size:15px;line-height:20px;margin:0 0 20px 0;padding:0;font-weight:400} +.modal.agegate .modal-body .notice{margin:20px 0 0 0;line-height:15px;font-size:13px} +.modal.agegate .modal-body .control-group{margin-bottom:12px;margin-top:-3px} +.modal.agegate .modal-body .btn{margin:0} +.modal.agegate .modal-body .btn-primary{min-width:110px} +.modal.agegate .modal-body .agegate-month{width:110px} +.modal.agegate .modal-body .agegate-day{width:88px} +.modal.agegate .modal-body .agegate-year{width:110px} +.modal.agegate .modal-body .agegate-field{padding-right:10px} +.modal.agegate .modal-body .agegate-field:last-of-type{padding-right:0} +.interceptor-agegate{text-align:center} +.interceptor-agegate .js-enabled .select-box,.interceptor-agegate select{text-align:left} +.interceptor-agegate .notice{margin-top:40px} +.alert{-moz-box-sizing:border-box;box-sizing:border-box;padding:4px 20px 4px 20px;font-size:13px;line-height:20px;margin-bottom:40px;text-shadow:none;position:relative;background-color:#272e3b;color:#fff;border:1px solid #000;box-shadow:0 0 0 1px #363d49 inset,0 5px 10px #000} +.alert p,.alert ul,.alert ol{font-size:13px;line-height:20px;margin:0} +.alert p:last-child,.alert ul:last-child,.alert ol:last-child{margin-bottom:0} +.alert .close{position:relative;top:0;right:-10px} +.alert-block{padding:20px 45px 20px 20px} +.alert-icon{padding:20px 45px 20px 59px} +.alert-icon:before{content:"";display:block;position:absolute;top:18px;left:20px;width:24px;height:24px;overflow:hidden;line-height:24px;vertical-align:top;text-indent:-9999px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-blue.png");background-repeat:no-repeat;background-position:-96px -360px} +.alert-block .close,.alert-icon .close{top:-10px;right:-34px} +.alert-block h2,.alert-icon h2,.alert-block h3,.alert-icon h3,.alert-block h4,.alert-icon h4,.alert-block h5,.alert-icon h5,.alert-block h6,.alert-icon h6,.alert-block .heading-2,.alert-icon .heading-2,.alert-block .heading-3,.alert-icon .heading-3,.alert-block .heading-4,.alert-icon .heading-4,.alert-block .heading-5,.alert-icon .heading-5,.alert-block .heading-6,.alert-icon .heading-6{font-size:17px;line-height:20px;margin-bottom:10px;color:#fff} +.alert-block p,.alert-icon p{margin-bottom:20px} +.alert-block p:last-child,.alert-icon p:last-child{margin-bottom:0} +.alert-block ul,.alert-icon ul,.alert-block ol,.alert-icon ol{margin:0 0 20px 30px} +.alert-block ul:last-child,.alert-icon ul:last-child,.alert-block ol:last-child,.alert-icon ol:last-child{margin-bottom:0} +.alert-block li,.alert-icon li{margin-bottom:10px} +.alert-block li:last-of-type,.alert-icon li:last-of-type{margin-bottom:0} +.alert-block li p,.alert-icon li p{margin-bottom:10px} +.alert+.heading-1,.alert-block+.heading-1,.alert-icon+.heading-1,.alert+.heading-2,.alert-block+.heading-2,.alert-icon+.heading-2,.alert+.heading-3,.alert-block+.heading-3,.alert-icon+.heading-3,.alert+.heading-4,.alert-block+.heading-4,.alert-icon+.heading-4,.alert+.heading-5+.heading-6,.alert-block+.heading-5+.heading-6,.alert-icon+.heading-5+.heading-6{margin-top:80px} +.alert-success{background-color:#132a14;box-shadow:0 0 0 1px #24392a inset,0 5px 10px #000} +.alert-icon.alert-success:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-green.png");background-position:-216px -120px} +.alert-warning{background-color:#5d3200;box-shadow:0 0 0 1px #834b00 inset,0 5px 10px #000} +.alert-icon.alert-warning:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-orange.png");background-position:-192px -120px} +.alert-error{background-color:#360e10;box-shadow:0 0 0 1px #551e21 inset,0 5px 10px #000} +.alert-icon.alert-error:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-red.png");background-position:-24px 0} +.alert-info{background-color:#272e3b;box-shadow:0 0 0 1px #363d49 inset,0 5px 10px #000} +.alert-icon.alert-info:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-blue.png");background-position:-96px -360px} +html,body{background:#202020 no-repeat center top} +body{background:#202020 no-repeat center top;color:#fff} +.body-content{background:#202020;padding-bottom:100px} +::-moz-selection{background:#19547c} +::selection{background:#19547c} +input::-moz-selection{background:#037db6} +input::selection{background:#037db6} +.breadcrumb{margin:0;padding:0;font-size:13px;line-height:20px;list-style:none} +.breadcrumb>li{margin:0;padding:0;display:inline-block} +.breadcrumb>li>a{color:#fff} +.breadcrumb>li>a:focus,.breadcrumb>li>a:hover{color:#fff} +.breadcrumb>li>.divider{padding:0 5px;opacity:.25} +.breadcrumb>li .icon-home{margin-right:10px} +.breadcrumb>.active{color:#fff} +.btn{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;margin:3px 0;padding:6px 20px;font-size:15px;line-height:20px;height:34px;background-color:#d9d9d9;color:#00aeff;border:1px solid #ccc;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn.active,.btn:active{padding:7px 19px 5px 21px} +.btn.disabled:active,.btn[disabled]:active,.btn.disabled.active,.btn[disabled].active{padding:6px 20px!important} +.btn:hover,.btn:focus{background-color:#bfbfbf;color:#fff;border-color:#ccc;box-shadow:0 0 #000} +.btn:active,.btn.active{background-color:#d9d9d9;color:#fff;border-color:#ccc;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn.disabled,.btn[disabled],.btn.disabled:hover,.btn.disabled:focus,.btn.disabled:active,.btn.disabled.active{background-color:#e6e6e6!important;color:#fff!important;border-color:#ccc!important;box-shadow:0 0 #000!important} +.btn.disabled.loading,.btn[disabled].loading,.btn.disabled:hover.loading,.btn.disabled:focus.loading,.btn.disabled:active.loading,.btn.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn.btn-wide{margin:3px 0;padding:6px 40px;font-size:15px;line-height:20px;height:34px} +.btn.btn-wide.active,.btn.btn-wide:active{padding:7px 39px 5px 41px} +.btn.btn-wide.disabled:active,.btn.btn-wide[disabled]:active,.btn.btn-wide.disabled.active,.btn.btn-wide[disabled].active{padding:6px 40px!important} +.btn-inverse{background-color:#d9d9d9;color:#fff;border:1px solid #ccc;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-inverse:hover,.btn-inverse:focus{background-color:#bfbfbf;color:#fff;border-color:#ccc;box-shadow:0 0 #000} +.btn-inverse:active,.btn-inverse.active{background-color:#d9d9d9;color:#fff;border-color:#ccc;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn-inverse.disabled,.btn-inverse[disabled],.btn-inverse.disabled:hover,.btn-inverse.disabled:focus,.btn-inverse.disabled:active,.btn-inverse.disabled.active{background-color:#e6e6e6!important;color:#fff!important;border-color:#ccc!important;box-shadow:0 0 #000!important} +.btn-inverse.disabled.loading,.btn-inverse[disabled].loading,.btn-inverse.disabled:hover.loading,.btn-inverse.disabled:focus.loading,.btn-inverse.disabled:active.loading,.btn-inverse.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-info{background-color:#d9d9d9;color:#fff;border:1px solid #09567b;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-info:hover,.btn-info:focus{background-color:#bfbfbf;color:#fff;border-color:#09567b;box-shadow:0 0 #000} +.btn-info:active,.btn-info.active{background-color:#d9d9d9;color:#fff;border-color:#09567b;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn-info.disabled,.btn-info[disabled],.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled:active,.btn-info.disabled.active{background-color:#e6e6e6!important;color:#fff!important;border-color:#ccc!important;box-shadow:0 0 #000!important} +.btn-info.disabled.loading,.btn-info[disabled].loading,.btn-info.disabled:hover.loading,.btn-info.disabled:focus.loading,.btn-info.disabled:active.loading,.btn-info.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-success{background-color:#d9d9d9;color:#fff;border:1px solid #0a5b28;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-success:hover,.btn-success:focus{background-color:#bfbfbf;color:#fff;border-color:#0a5b28;box-shadow:0 0 #000} +.btn-success:active,.btn-success.active{background-color:#d9d9d9;color:#fff;border-color:#0a5b28;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn-success.disabled,.btn-success[disabled],.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled:active,.btn-success.disabled.active{background-color:#e6e6e6!important;color:#fff!important;border-color:#ccc!important;box-shadow:0 0 #000!important} +.btn-success.disabled.loading,.btn-success[disabled].loading,.btn-success.disabled:hover.loading,.btn-success.disabled:focus.loading,.btn-success.disabled:active.loading,.btn-success.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-warning{background-color:#d9d9d9;color:#fff;border:1px solid #625604;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-warning:hover,.btn-warning:focus{background-color:#bfbfbf;color:#fff;border-color:#625604;box-shadow:0 0 #000} +.btn-warning:active,.btn-warning.active{background-color:#d9d9d9;color:#fff;border-color:#625604;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn-warning.disabled,.btn-warning[disabled],.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled:active,.btn-warning.disabled.active{background-color:#e6e6e6!important;color:#fff!important;border-color:#ccc!important;box-shadow:0 0 #000!important} +.btn-warning.disabled.loading,.btn-warning[disabled].loading,.btn-warning.disabled:hover.loading,.btn-warning.disabled:focus.loading,.btn-warning.disabled:active.loading,.btn-warning.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-danger,.btn-error{background-color:#d9d9d9;color:#fff;border:1px solid #ccc;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-danger:hover,.btn-error:hover,.btn-danger:focus,.btn-error:focus{background-color:#bfbfbf;color:#fff;border-color:#7b1315;box-shadow:0 0 #000} +.btn-danger:active,.btn-error:active,.btn-danger.active,.btn-error.active{background-color:#d9d9d9;color:#fff;border-color:#ccc;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn-danger.disabled,.btn-error.disabled,.btn-danger[disabled],.btn-error[disabled],.btn-danger.disabled:hover,.btn-error.disabled:hover,.btn-danger.disabled:focus,.btn-error.disabled:focus,.btn-danger.disabled:active,.btn-error.disabled:active,.btn-danger.disabled.active,.btn-error.disabled.active{background-color:#e6e6e6!important;color:#fff!important;border-color:#ccc!important;box-shadow:0 0 #000!important} +.btn-danger.disabled.loading,.btn-error.disabled.loading,.btn-danger[disabled].loading,.btn-error[disabled].loading,.btn-danger.disabled:hover.loading,.btn-error.disabled:hover.loading,.btn-danger.disabled:focus.loading,.btn-error.disabled:focus.loading,.btn-danger.disabled:active.loading,.btn-error.disabled:active.loading,.btn-danger.disabled.active.loading,.btn-error.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-link{background-color:transparent;color:#00aeff;border:1px solid transparent;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-link:hover,.btn-link:focus{background-color:transparent;color:#fff;border-color:transparent;box-shadow:0 0 #000} +.btn-link:active,.btn-link.active{background-color:transparent;color:#fff;border-color:transparent;box-shadow:0 0 #000} +.btn-link.disabled,.btn-link[disabled],.btn-link.disabled:hover,.btn-link.disabled:focus,.btn-link.disabled:active,.btn-link.disabled.active{background-color:transparent!important;color:#fff!important;border-color:transparent!important;box-shadow:0 0 #000!important} +.btn-link.disabled.loading,.btn-link[disabled].loading,.btn-link.disabled:hover.loading,.btn-link.disabled:focus.loading,.btn-link.disabled:active.loading,.btn-link.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-primary{background-color:#098cc8;color:#fff;border:1px solid #fff;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;background-image:-webkit-linear-gradient(top,#0f9ada,#0076ad);background-image:linear-gradient(to bottom,#0f9ada,#0076ad);border:0;box-shadow:0 1px 1px #b3b3b3,0 0 0 1px #ccc inset} +.btn-primary:hover,.btn-primary:focus{background-color:#21b0f1;color:#fff;border-color:#fff;box-shadow:0 0 #000} +.btn-primary:active,.btn-primary.active{background-color:#006899;color:#fff;border-color:#fff;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn-primary.disabled,.btn-primary[disabled],.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled:active,.btn-primary.disabled.active{background-color:#272727!important;color:#ccc!important;border-color:#fff!important;box-shadow:0 0 #000!important} +.btn-primary.disabled.loading,.btn-primary[disabled].loading,.btn-primary.disabled:hover.loading,.btn-primary.disabled:focus.loading,.btn-primary.disabled:active.loading,.btn-primary.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-primary:hover,.btn-primary:focus{background-image:-webkit-linear-gradient(top,#37c0ff,#0097dd);background-image:linear-gradient(to bottom,#37c0ff,#0097dd)} +.btn-primary:active,.btn-primary.active{background-image:-webkit-linear-gradient(top,#006ea1,#00608d);background-image:linear-gradient(to bottom,#006ea1,#00608d);box-shadow:1px 1px 2px #666 inset,0 0 0 1px #ccc inset} +.btn-primary.disabled,.btn-primary[disabled],.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled:active,.btn-primary.disabled.active{background-image:-webkit-linear-gradient(top,rgba(15,154,218,0.1),rgba(0,118,173,0.1));background-image:linear-gradient(to bottom,rgba(15,154,218,0.1),rgba(0,118,173,0.1));box-shadow:0 1px 1px rgba(0,0,0,0.03),0 0 0 1px rgba(255,255,255,0.016) inset} +.btn-large{margin:0;padding:9px 30px;font-size:17px;line-height:20px;height:40px} +.btn-large.active,.btn-large:active{padding:10px 29px 8px 31px} +.btn-large.disabled:active,.btn-large[disabled]:active,.btn-large.disabled.active,.btn-large[disabled].active{padding:9px 30px!important} +.btn-small{margin:2px 0;padding:2px 10px;font-size:13px;line-height:20px;height:26px} +.btn-small.active,.btn-small:active{padding:3px 9px 1px 11px} +.btn-small.disabled:active,.btn-small[disabled]:active,.btn-small.disabled.active,.btn-small[disabled].active{padding:2px 10px!important} +.btn-mini{margin:0;padding:1px 10px;font-size:12px;line-height:16px;height:20px} +.btn-mini.active,.btn-mini:active{padding:2px 9px 0 11px} +.btn-mini.disabled:active,.btn-mini[disabled]:active,.btn-mini.disabled.active,.btn-mini[disabled].active{padding:1px 10px!important} +.btn-block+.btn-block{margin-top:10px} +.btn [class^="icon-"],.btn [class*=" icon-"]{margin-top:2px;margin-left:-4px;margin-right:5px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");opacity:.8} +.btn:hover [class^="icon-"],.btn:focus [class^="icon-"],.btn:hover [class*=" icon-"],.btn:focus [class*=" icon-"]{opacity:1} +.btn:active [class^="icon-"],.btn.active [class^="icon-"],.btn:active [class*=" icon-"],.btn.active [class*=" icon-"]{opacity:.8} +.btn-inverse [class^="icon-"],.btn-inverse [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.btn-info [class^="icon-"],.btn-info [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.btn-success [class^="icon-"],.btn-success [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png")} +.btn-warning [class^="icon-"],.btn-warning [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png")} +.btn-danger [class^="icon-"],.btn-error [class^="icon-"],.btn-danger [class*=" icon-"],.btn-error [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-red.png")} +.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-left:-2px;margin-right:3px} +.btn-small.btn-icon [class^="icon-"],.btn-small.btn-icon [class*=" icon-"]{margin-left:0;margin-right:0} +.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:0} +.btn-icon [class^="icon-"],.btn-icon [class*=" icon-"]{margin-left:0;margin-right:0} +.btn.disabled [class^="icon-"],.btn[disabled] [class^="icon-"],.btn.disabled [class*=" icon-"],.btn[disabled] [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")!important;opacity:.15!important} +.btn.disabled:active [class^="icon-"],.btn[disabled]:active [class^="icon-"],.btn.disabled.active [class^="icon-"],.btn[disabled].active [class^="icon-"],.btn.disabled:active [class*=" icon-"],.btn[disabled]:active [class*=" icon-"],.btn.disabled.active [class*=" icon-"],.btn[disabled].active [class*=" icon-"]{opacity:.15!important} +.btn.disabled.loading [class^="icon-"],.btn[disabled].loading [class^="icon-"],.btn.disabled.loading [class*=" icon-"],.btn[disabled].loading [class*=" icon-"]{opacity:0!important} +.btn-primary [class^="icon-"],.btn-primary [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:1} +.btn-primary:active [class^="icon-"],.btn-primary.active [class*=" icon-"]{opacity:.7} +.btn-primary.disabled [class^="icon-"],.btn-primary[disabled] [class^="icon-"],.btn-primary.disabled [class*=" icon-"],.btn-primary[disabled] [class*=" icon-"]{opacity:.15} +.btn-primary.disabled:active [class^="icon-"],.btn-primary[disabled]:active [class^="icon-"],.btn-primary.disabled.active [class^="icon-"],.btn-primary[disabled].active [class^="icon-"],.btn-primary.disabled:active [class*=" icon-"],.btn-primary[disabled]:active [class*=" icon-"],.btn-primary.disabled.active [class*=" icon-"],.btn-primary[disabled].active [class*=" icon-"]{opacity:.15} +.btn.loading:before{content:"";width:20px;height:20px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png");background-position:-140px 0;display:inline-block;position:absolute;z-index:1060;left:50%;top:50%;margin-top:-10px;margin-left:-10px;-webkit-animation:keyframes-loading .8s steps(21) infinite;-moz-animation:keyframes-loading .8s steps(21) infinite;-ms-animation:keyframes-loading .8s steps(21) infinite;animation:keyframes-loading .8s steps(21) infinite} +.btn.btn-link.loading:before{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png")} +.btn.disabled-loading{height:34px} +.btn-large.disabled-loading{height:40px} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.btn.loading:before{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-size:420px 20px} +.btn.btn-primary.loading:before{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-size:420px 20px} +} +.carousel{margin-bottom:20px;line-height:1;border:1px solid #000;box-shadow:0 5px 10px rgba(0,0,0,0.4);-moz-box-sizing:border-box;box-sizing:border-box} +.carousel .carousel-inner{border:0;-moz-box-sizing:border-box;box-sizing:border-box} +.carousel .carousel-inner .cover{background-color:rgba(255,255,255,0);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.1);-webkit-transition:background-color,0.2s;transition:background-color .2s} +.carousel .carousel-inner .carousel-caption{background-color:transparent;-moz-box-sizing:border-box;box-sizing:border-box;padding:10px 14px 30px 15px;color:#fff;-webkit-transition:opacity 1.25s,-webkit-transform .2s;transition:opacity 1.25s,transform .2s} +.carousel .carousel-inner .carousel-caption .bg-layer{background-color:#666;-webkit-transition:-webkit-transform,0.2s;transition:transform .2s} +.carousel .carousel-inner .carousel-caption h4,.carousel .carousel-inner .carousel-caption .heading-4{margin-bottom:6px;font-size:23px;line-height:1.2;font-weight:300;white-space:nowrap;overflow:hidden;color:#fff;text-overflow:ellipsis} +.carousel .carousel-inner .carousel-caption .summary{color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} +.carousel .carousel-inner>.item{-webkit-transition:.6s,ease-in-out,left;transition:.6s ease-in-out left} +.carousel:hover .cover{background-color:rgba(255,255,255,0.05);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.2)} +.carousel:hover .carousel-controls{opacity:1} +.carousel:hover .more .carousel-caption{-webkit-transform:translate(0,-47px);-ms-transform:translate(0,-47px);transform:translate(0,-47px)} +.carousel:hover .more .bg-layer{-webkit-transform:translate(0,-63px);-ms-transform:translate(0,-63px);transform:translate(0,-63px)} +.carousel.crossfade .carousel-inner{background-color:#000;border:0;-moz-box-sizing:border-box;box-sizing:border-box} +.carousel.crossfade .carousel-inner>.item{-webkit-transition:.2s,ease-in-out,opacity;transition:.2s ease-in-out opacity} +.carousel .carousel-controls{background-color:#ccc;top:10px;right:10px;width:51px;height:26px;border:1px solid rgba(255,255,255,0.5);border-radius:3px;opacity:0;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.carousel .carousel-controls button{background-color:rgba(255,255,255,0.3);padding:0;width:26px;height:26px;top:0;border:0} +.carousel .carousel-controls button span{background-image:url("../../images/toolkit/defaults/carousels/sprite-carousel-control.png");background-repeat:no-repeat;margin:0 0 0 7px;padding:0;width:8px;height:14px;opacity:.6} +.carousel .carousel-controls button:hover{background-color:rgba(255,255,255,0.4)} +.carousel .carousel-controls button:hover span{opacity:1} +.carousel .carousel-controls button:active{background-color:rgba(255,255,255,0.4);border-color:rgba(255,255,255,0.6)} +.carousel .carousel-controls button:active span{opacity:.8} +.carousel .carousel-controls .left{border-right:1px solid rgba(255,255,255,0.1);left:0} +.carousel .carousel-controls .left span{background-position:-32px -80px} +.carousel .carousel-controls .left:active{border-right:rgba(255,255,255,0.1)} +.carousel .carousel-controls .left:active span{left:1px;top:1px} +.carousel .carousel-controls .right{border-left:1px solid rgba(255,255,255,0.1);left:25px} +.carousel .carousel-controls .right span{background-position:-40px -80px;margin-left:10px} +.carousel .carousel-controls .right:active{border-left:1px solid rgba(255,255,255,0.1)} +.carousel .carousel-controls .right:active span{left:1px;top:1px} +.close{float:right;display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");background-repeat:no-repeat;background-position:-112px -96px;text-indent:-9999px;margin:2px 2px 0 0;cursor:pointer;opacity:.2;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.close:focus,.close:hover{text-decoration:none;opacity:.4} +button.close{padding:0;border:0;background:transparent;-webkit-appearance:none} +code,pre{font-size:13px;line-height:20px;border-radius:2px} +code{padding:0 .25em;background-color:#f7f7f7;border:1px solid #272727} +pre{margin:0 0 40px;font-size:13px;line-height:20px;padding:10px;background:#f7f7f7;border:1px solid #272727} +.dropdown-toggle{padding-right:30px} +.caret{content:"";margin:2px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-repeat:no-repeat;text-indent:-9999px;-webkit-transition:opacity,0.2s;transition:opacity .2s;background-position:-64px -256px} +.navbar .caret{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")} +.dropdown-toggle>.caret{position:absolute;right:5px;top:0;opacity:.3;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.dropdown-toggle:focus>.caret,.dropdown-toggle:hover>.caret{opacity:.5} +.nav-tabs .dropdown-toggle>.caret,.nav-pills .dropdown-toggle>.caret{top:5px} +.dropdown-menu{left:-2px;z-index:1000;padding:4px 0;background-color:#272e3b;box-shadow:0 0 0 1px #3d434f inset,0 5px 10px rgba(0,0,0,0.75);border:solid #000;border-width:1px} +.dropdown-menu .divider{height:1px;margin:10px 1px 10px;overflow:hidden;border-bottom:1px solid #3d434f;background-color:transparent;margin:2px 0 3px 0} +.dropdown-menu li{margin:0 1px;padding:0} +.dropdown-menu li>a{padding:4px 30px;font-size:13px;font-weight:normal;line-height:20px;color:#fff;-webkit-transition:background-color .2s,border-color .2s,color .2s;transition:background-color .2s,border-color .2s,color .2s} +.dropdown-menu li>span{padding:4px 30px;font-size:13px;font-weight:normal;line-height:20px} +.dropdown-menu [class^="icon-"],.dropdown-menu [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.dropdown-menu [class^="icon-"]:not(.icon-external-link),.dropdown-menu [class*=" icon-"]:not(.icon-external-link){position:absolute;left:5px} +.dropdown-menu .icon-external-link{position:absolute;right:5px} +.navbar .dropdown-menu{margin-top:9px} +.navbar .pull-right .dropdown-menu li:first-child:before{content:"";border-bottom:6px solid #3d434f;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);display:inline-block;position:absolute;right:8px;top:-6px} +.navbar .pull-right .dropdown-menu li:first-child:after{content:"";border-top:1px solid #272e3b;display:inline-block;position:absolute;right:9px;top:0;width:10px} +.navbar .pull-right .dropdown-menu:before{content:"";border-bottom:7px solid #000;border-left:7px solid rgba(0,0,0,0);border-right:7px solid rgba(0,0,0,0);display:inline-block;position:absolute;right:7px;top:-7px} +.navbar .pull-right .dropdown-menu:after{content:"";border-bottom:4px solid #272e3b;border-left:4px solid rgba(0,0,0,0);border-right:4px solid rgba(0,0,0,0);display:inline-block;position:absolute;right:10px;top:-4px} +.navbar .pull-right .dropdown-menu li:first-child:before{right:8px} +.navbar .pull-right .dropdown-menu li:first-child:after{right:9px} +.navbar .pull-right .dropdown-menu:before{right:7px} +.navbar .pull-right .dropdown-menu:after{right:10px} +.nav-tabs .dropdown-menu{left:28px;margin-top:0} +.nav-pills .dropdown-menu{left:-1px;margin-top:-1px} +.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{color:#fff;background-color:#ccc} +.dropdown-menu .active>a,.dropdown-menu .active>a:hover,.dropdown-menu .active>a:focus{color:#fff} +.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover,.dropdown-menu .disabled>a:focus{color:#fff} +.dropdown-menu>.disabled>a>[class^="icon-"],.dropdown-menu>.disabled>a>[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.2} +.dropdown-submenu{position:relative} +.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:0} +.dropdown-submenu:hover>.dropdown-menu{display:block} +.dropdown-submenu>a:after{content:"";margin:2px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-repeat:no-repeat;text-indent:-9999px;background-position:0 -48px;position:absolute;right:5px;top:4px;opacity:.3;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.dropdown-submenu:focus>a:after,.dropdown-submenu:hover>a:after{opacity:.5} +.dropdown .dropdown-menu .nav-header{padding:4px 30px;margin:3px 0;border:solid #3d434f;border-width:1px 0;color:#fff} +.dropdown .dropdown-menu .nav-header:first-child{border-top:0;margin-top:0} +.error-template .error-heading{margin:100px 0 40px 0;text-align:center;font-size:40px;line-height:50px} +.error-template .error-message{margin:0 0 40px 0;text-align:center;font-size:20px;line-height:25px;font-weight:300;color:#ccc} +.error-template .error-home-button{text-align:center;margin:0 0 40px 0} +.error-template .error-support{background-color:#bfbfbf;margin:40px 0 0 0;padding:20px 0;text-align:center;border-top:1px solid #ccc;border-bottom:1px solid #ccc} +.error-template .error-support p{margin:0;color:#ccc} +.error-template .error-support:empty{background:0;border:0;height:0;overflow:hidden;margin:0;padding:0} +.footer{background:0} +.footer-content{border-top:1px solid #272727;padding:30px 0;font-size:13px;line-height:20px} +.footer-content:before,.footer-content:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.footer-content:after{clear:both} +.footer-content .legal{color:#fff} +.footer-content .copyright{color:#fff;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em} +.footer-content .supplemental{display:block} +.footer-content .links{display:block} +.footer-content .links a{display:inline-block;margin-right:20px} +.footer-content .links a:last-of-type{margin-right:0} +.footer-content .blizzard{display:block;width:102px;height:52px;overflow:hidden;float:right;background:transparent url("../../images/toolkit/defaults/logos/blizzard/footer.png") no-repeat 0 -104px;text-indent:-9999px} +form{margin:0} +fieldset{padding:0;margin:0 0 30px 0;border:0} +fieldset p:last-child,fieldset ul:last-child,fieldset ol:last-child{margin-bottom:0} +legend{display:block;width:100%;padding:0;margin-bottom:40px;color:#fff;font-size:23px;line-height:30px;font-weight:300} +legend small{font-size:12px;color:#fff} +label,input,button,select,textarea{font-size:15px;font-weight:400;line-height:20px} +input,button,select,select optgroup,select option,textarea{font-family:"Blizzard","Arial","Helvetica",sans-serif} +input:lang(zh-CN),button:lang(zh-CN),select:lang(zh-CN),select optgroup:lang(zh-CN),select option:lang(zh-CN),textarea:lang(zh-CN){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft YaHei","Hei SC",sans-serif} +input:lang(zh-TW),button:lang(zh-TW),select:lang(zh-TW),select optgroup:lang(zh-TW),select option:lang(zh-TW),textarea:lang(zh-TW){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft JhengHei","Tei TC",sans-serif} +input:lang(ko),button:lang(ko),select:lang(ko),select optgroup:lang(ko),select option:lang(ko),textarea:lang(ko){font-family:"Blizzard","Arial","Helvetica","?????? ??????","Malgun Gothic","????????????????????????","AppleSDGothicNeo","????????????","AppleGothic","??????","Dotum",sans-serif} +input:lang(ja),button:lang(ja),select:lang(ja),select optgroup:lang(ja),select option:lang(ja),textarea:lang(ja){font-family:"Blizzard","Arial","Helvetica","????????????","Meiryo","?????????????????? Pro","Hiragino Kaku Gothic Pro","???????????????","Yu Gothic",sans-serif} +input:lang(th),button:lang(th),select:lang(th),select optgroup:lang(th),select option:lang(th),textarea:lang(th){font-family:"Blizzard","Tahoma","Arial","Helvetica",sans-serif} +*::-ms-clear{width:0;height:0} +label{display:block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:0} +.uneditable-input,select,textarea,input[type="color"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="email"],input[type="month"],input[type="number"],input[type="password"],input[type="search"],input[type="tel"],input[type="text"],input[type="time"],input[type="url"],input[type="week"]{display:inline-block;vertical-align:middle;height:34px;padding:0 10px;margin-top:3px;margin-bottom:3px;font-size:15px;line-height:20px;border:1px solid #ccc;background-color:#808080;color:#fff;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:2px} +.uneditable-input.input-block,select.input-block,textarea.input-block,input[type="color"].input-block,input[type="date"].input-block,input[type="datetime"].input-block,input[type="datetime-local"].input-block,input[type="email"].input-block,input[type="month"].input-block,input[type="number"].input-block,input[type="password"].input-block,input[type="search"].input-block,input[type="tel"].input-block,input[type="text"].input-block,input[type="time"].input-block,input[type="url"].input-block,input[type="week"].input-block{width:100%} +.uneditable-input[class^="grid-"],select[class^="grid-"],textarea[class^="grid-"],input[type="color"][class^="grid-"],input[type="date"][class^="grid-"],input[type="datetime"][class^="grid-"],input[type="datetime-local"][class^="grid-"],input[type="email"][class^="grid-"],input[type="month"][class^="grid-"],input[type="number"][class^="grid-"],input[type="password"][class^="grid-"],input[type="search"][class^="grid-"],input[type="tel"][class^="grid-"],input[type="text"][class^="grid-"],input[type="time"][class^="grid-"],input[type="url"][class^="grid-"],input[type="week"][class^="grid-"],.uneditable-input[class*=" grid-"],select[class*=" grid-"],textarea[class*=" grid-"],input[type="color"][class*=" grid-"],input[type="date"][class*=" grid-"],input[type="datetime"][class*=" grid-"],input[type="datetime-local"][class*=" grid-"],input[type="email"][class*=" grid-"],input[type="month"][class*=" grid-"],input[type="number"][class*=" grid-"],input[type="password"][class*=" grid-"],input[type="search"][class*=" grid-"],input[type="tel"][class*=" grid-"],input[type="text"][class*=" grid-"],input[type="time"][class*=" grid-"],input[type="url"][class*=" grid-"],input[type="week"][class*=" grid-"]{padding-left:10px;padding-right:10px} +.uneditable-input{padding-top:6px;padding-bottom:6px;height:auto} +.uneditable-input,input[readonly]{border-color:#ccc!important;background-color:#272727!important;color:#fff!important} +select,textarea,input[type="color"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="email"],input[type="month"],input[type="number"],input[type="password"],input[type="search"],input[type="tel"],input[type="text"],input[type="time"],input[type="url"],input[type="week"]{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;-webkit-transition:background-position .2s,background-color .2s,border-color .2s,box-shadow .2s;transition:background-position .2s,background-color .2s,border-color .2s,box-shadow .2s} +select:hover,textarea:hover,input[type="color"]:hover,input[type="date"]:hover,input[type="datetime"]:hover,input[type="datetime-local"]:hover,input[type="email"]:hover,input[type="month"]:hover,input[type="number"]:hover,input[type="password"]:hover,input[type="search"]:hover,input[type="tel"]:hover,input[type="text"]:hover,input[type="time"]:hover,input[type="url"]:hover,input[type="week"]:hover{border-color:#ccc;background-color:#808080;color:#fff} +select:focus,textarea:focus,input[type="color"]:focus,input[type="date"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="email"]:focus,input[type="month"]:focus,input[type="number"]:focus,input[type="password"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="text"]:focus,input[type="time"]:focus,input[type="url"]:focus,input[type="week"]:focus{border-color:#1e5f99;background-color:#808080;color:#fff} +select[disabled],textarea[disabled],input[type="color"][disabled],input[type="date"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="email"][disabled],input[type="month"][disabled],input[type="number"][disabled],input[type="password"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="text"][disabled],input[type="time"][disabled],input[type="url"][disabled],input[type="week"][disabled],select.disabled,textarea.disabled,input[type="color"].disabled,input[type="date"].disabled,input[type="datetime"].disabled,input[type="datetime-local"].disabled,input[type="email"].disabled,input[type="month"].disabled,input[type="number"].disabled,input[type="password"].disabled,input[type="search"].disabled,input[type="tel"].disabled,input[type="text"].disabled,input[type="time"].disabled,input[type="url"].disabled,input[type="week"].disabled{border-color:#ccc!important;background-color:#272727!important;color:#3f3f3f!important;cursor:default!important} +select[disabled]:-moz-placeholder,textarea[disabled]:-moz-placeholder,input[type="color"][disabled]:-moz-placeholder,input[type="date"][disabled]:-moz-placeholder,input[type="datetime"][disabled]:-moz-placeholder,input[type="datetime-local"][disabled]:-moz-placeholder,input[type="email"][disabled]:-moz-placeholder,input[type="month"][disabled]:-moz-placeholder,input[type="number"][disabled]:-moz-placeholder,input[type="password"][disabled]:-moz-placeholder,input[type="search"][disabled]:-moz-placeholder,input[type="tel"][disabled]:-moz-placeholder,input[type="text"][disabled]:-moz-placeholder,input[type="time"][disabled]:-moz-placeholder,input[type="url"][disabled]:-moz-placeholder,input[type="week"][disabled]:-moz-placeholder,select.disabled:-moz-placeholder,textarea.disabled:-moz-placeholder,input[type="color"].disabled:-moz-placeholder,input[type="date"].disabled:-moz-placeholder,input[type="datetime"].disabled:-moz-placeholder,input[type="datetime-local"].disabled:-moz-placeholder,input[type="email"].disabled:-moz-placeholder,input[type="month"].disabled:-moz-placeholder,input[type="number"].disabled:-moz-placeholder,input[type="password"].disabled:-moz-placeholder,input[type="search"].disabled:-moz-placeholder,input[type="tel"].disabled:-moz-placeholder,input[type="text"].disabled:-moz-placeholder,input[type="time"].disabled:-moz-placeholder,input[type="url"].disabled:-moz-placeholder,input[type="week"].disabled:-moz-placeholder{color:#3f3f3f} +select[disabled]:-ms-input-placeholder,textarea[disabled]:-ms-input-placeholder,input[type="color"][disabled]:-ms-input-placeholder,input[type="date"][disabled]:-ms-input-placeholder,input[type="datetime"][disabled]:-ms-input-placeholder,input[type="datetime-local"][disabled]:-ms-input-placeholder,input[type="email"][disabled]:-ms-input-placeholder,input[type="month"][disabled]:-ms-input-placeholder,input[type="number"][disabled]:-ms-input-placeholder,input[type="password"][disabled]:-ms-input-placeholder,input[type="search"][disabled]:-ms-input-placeholder,input[type="tel"][disabled]:-ms-input-placeholder,input[type="text"][disabled]:-ms-input-placeholder,input[type="time"][disabled]:-ms-input-placeholder,input[type="url"][disabled]:-ms-input-placeholder,input[type="week"][disabled]:-ms-input-placeholder,select.disabled:-ms-input-placeholder,textarea.disabled:-ms-input-placeholder,input[type="color"].disabled:-ms-input-placeholder,input[type="date"].disabled:-ms-input-placeholder,input[type="datetime"].disabled:-ms-input-placeholder,input[type="datetime-local"].disabled:-ms-input-placeholder,input[type="email"].disabled:-ms-input-placeholder,input[type="month"].disabled:-ms-input-placeholder,input[type="number"].disabled:-ms-input-placeholder,input[type="password"].disabled:-ms-input-placeholder,input[type="search"].disabled:-ms-input-placeholder,input[type="tel"].disabled:-ms-input-placeholder,input[type="text"].disabled:-ms-input-placeholder,input[type="time"].disabled:-ms-input-placeholder,input[type="url"].disabled:-ms-input-placeholder,input[type="week"].disabled:-ms-input-placeholder{color:#3f3f3f} +select[disabled]::-webkit-input-placeholder,textarea[disabled]::-webkit-input-placeholder,input[type="color"][disabled]::-webkit-input-placeholder,input[type="date"][disabled]::-webkit-input-placeholder,input[type="datetime"][disabled]::-webkit-input-placeholder,input[type="datetime-local"][disabled]::-webkit-input-placeholder,input[type="email"][disabled]::-webkit-input-placeholder,input[type="month"][disabled]::-webkit-input-placeholder,input[type="number"][disabled]::-webkit-input-placeholder,input[type="password"][disabled]::-webkit-input-placeholder,input[type="search"][disabled]::-webkit-input-placeholder,input[type="tel"][disabled]::-webkit-input-placeholder,input[type="text"][disabled]::-webkit-input-placeholder,input[type="time"][disabled]::-webkit-input-placeholder,input[type="url"][disabled]::-webkit-input-placeholder,input[type="week"][disabled]::-webkit-input-placeholder,select.disabled::-webkit-input-placeholder,textarea.disabled::-webkit-input-placeholder,input[type="color"].disabled::-webkit-input-placeholder,input[type="date"].disabled::-webkit-input-placeholder,input[type="datetime"].disabled::-webkit-input-placeholder,input[type="datetime-local"].disabled::-webkit-input-placeholder,input[type="email"].disabled::-webkit-input-placeholder,input[type="month"].disabled::-webkit-input-placeholder,input[type="number"].disabled::-webkit-input-placeholder,input[type="password"].disabled::-webkit-input-placeholder,input[type="search"].disabled::-webkit-input-placeholder,input[type="tel"].disabled::-webkit-input-placeholder,input[type="text"].disabled::-webkit-input-placeholder,input[type="time"].disabled::-webkit-input-placeholder,input[type="url"].disabled::-webkit-input-placeholder,input[type="week"].disabled::-webkit-input-placeholder{color:#3f3f3f} +select[disabled]::-moz-placeholder,textarea[disabled]::-moz-placeholder,input[type="color"][disabled]::-moz-placeholder,input[type="date"][disabled]::-moz-placeholder,input[type="datetime"][disabled]::-moz-placeholder,input[type="datetime-local"][disabled]::-moz-placeholder,input[type="email"][disabled]::-moz-placeholder,input[type="month"][disabled]::-moz-placeholder,input[type="number"][disabled]::-moz-placeholder,input[type="password"][disabled]::-moz-placeholder,input[type="search"][disabled]::-moz-placeholder,input[type="tel"][disabled]::-moz-placeholder,input[type="text"][disabled]::-moz-placeholder,input[type="time"][disabled]::-moz-placeholder,input[type="url"][disabled]::-moz-placeholder,input[type="week"][disabled]::-moz-placeholder,select.disabled::-moz-placeholder,textarea.disabled::-moz-placeholder,input[type="color"].disabled::-moz-placeholder,input[type="date"].disabled::-moz-placeholder,input[type="datetime"].disabled::-moz-placeholder,input[type="datetime-local"].disabled::-moz-placeholder,input[type="email"].disabled::-moz-placeholder,input[type="month"].disabled::-moz-placeholder,input[type="number"].disabled::-moz-placeholder,input[type="password"].disabled::-moz-placeholder,input[type="search"].disabled::-moz-placeholder,input[type="tel"].disabled::-moz-placeholder,input[type="text"].disabled::-moz-placeholder,input[type="time"].disabled::-moz-placeholder,input[type="url"].disabled::-moz-placeholder,input[type="week"].disabled::-moz-placeholder{color:#3f3f3f!important;opacity:1} +select:-moz-placeholder,textarea:-moz-placeholder,input[type="color"]:-moz-placeholder,input[type="date"]:-moz-placeholder,input[type="datetime"]:-moz-placeholder,input[type="datetime-local"]:-moz-placeholder,input[type="email"]:-moz-placeholder,input[type="month"]:-moz-placeholder,input[type="number"]:-moz-placeholder,input[type="password"]:-moz-placeholder,input[type="search"]:-moz-placeholder,input[type="tel"]:-moz-placeholder,input[type="text"]:-moz-placeholder,input[type="time"]:-moz-placeholder,input[type="url"]:-moz-placeholder,input[type="week"]:-moz-placeholder{color:#fff} +select:-ms-input-placeholder,textarea:-ms-input-placeholder,input[type="color"]:-ms-input-placeholder,input[type="date"]:-ms-input-placeholder,input[type="datetime"]:-ms-input-placeholder,input[type="datetime-local"]:-ms-input-placeholder,input[type="email"]:-ms-input-placeholder,input[type="month"]:-ms-input-placeholder,input[type="number"]:-ms-input-placeholder,input[type="password"]:-ms-input-placeholder,input[type="search"]:-ms-input-placeholder,input[type="tel"]:-ms-input-placeholder,input[type="text"]:-ms-input-placeholder,input[type="time"]:-ms-input-placeholder,input[type="url"]:-ms-input-placeholder,input[type="week"]:-ms-input-placeholder{color:#fff} +select::-webkit-input-placeholder,textarea::-webkit-input-placeholder,input[type="color"]::-webkit-input-placeholder,input[type="date"]::-webkit-input-placeholder,input[type="datetime"]::-webkit-input-placeholder,input[type="datetime-local"]::-webkit-input-placeholder,input[type="email"]::-webkit-input-placeholder,input[type="month"]::-webkit-input-placeholder,input[type="number"]::-webkit-input-placeholder,input[type="password"]::-webkit-input-placeholder,input[type="search"]::-webkit-input-placeholder,input[type="tel"]::-webkit-input-placeholder,input[type="text"]::-webkit-input-placeholder,input[type="time"]::-webkit-input-placeholder,input[type="url"]::-webkit-input-placeholder,input[type="week"]::-webkit-input-placeholder{color:#fff} +select:focus:-moz-placeholder,textarea:focus:-moz-placeholder,input[type="color"]:focus:-moz-placeholder,input[type="date"]:focus:-moz-placeholder,input[type="datetime"]:focus:-moz-placeholder,input[type="datetime-local"]:focus:-moz-placeholder,input[type="email"]:focus:-moz-placeholder,input[type="month"]:focus:-moz-placeholder,input[type="number"]:focus:-moz-placeholder,input[type="password"]:focus:-moz-placeholder,input[type="search"]:focus:-moz-placeholder,input[type="tel"]:focus:-moz-placeholder,input[type="text"]:focus:-moz-placeholder,input[type="time"]:focus:-moz-placeholder,input[type="url"]:focus:-moz-placeholder,input[type="week"]:focus:-moz-placeholder{color:#fff} +select:focus:-ms-input-placeholder,textarea:focus:-ms-input-placeholder,input[type="color"]:focus:-ms-input-placeholder,input[type="date"]:focus:-ms-input-placeholder,input[type="datetime"]:focus:-ms-input-placeholder,input[type="datetime-local"]:focus:-ms-input-placeholder,input[type="email"]:focus:-ms-input-placeholder,input[type="month"]:focus:-ms-input-placeholder,input[type="number"]:focus:-ms-input-placeholder,input[type="password"]:focus:-ms-input-placeholder,input[type="search"]:focus:-ms-input-placeholder,input[type="tel"]:focus:-ms-input-placeholder,input[type="text"]:focus:-ms-input-placeholder,input[type="time"]:focus:-ms-input-placeholder,input[type="url"]:focus:-ms-input-placeholder,input[type="week"]:focus:-ms-input-placeholder{color:#fff} +select:focus::-webkit-input-placeholder,textarea:focus::-webkit-input-placeholder,input[type="color"]:focus::-webkit-input-placeholder,input[type="date"]:focus::-webkit-input-placeholder,input[type="datetime"]:focus::-webkit-input-placeholder,input[type="datetime-local"]:focus::-webkit-input-placeholder,input[type="email"]:focus::-webkit-input-placeholder,input[type="month"]:focus::-webkit-input-placeholder,input[type="number"]:focus::-webkit-input-placeholder,input[type="password"]:focus::-webkit-input-placeholder,input[type="search"]:focus::-webkit-input-placeholder,input[type="tel"]:focus::-webkit-input-placeholder,input[type="text"]:focus::-webkit-input-placeholder,input[type="time"]:focus::-webkit-input-placeholder,input[type="url"]:focus::-webkit-input-placeholder,input[type="week"]:focus::-webkit-input-placeholder{color:#fff} +input[type="number"]{-moz-appearance:textfield} +select{background-image:url("../../images/toolkit/themes/bnet/forms/sprite-22-select.png");background-repeat:no-repeat;background-position:right 0} +select::-ms-expand{display:none} +textarea,input,.uneditable-input{outline:0} +textarea{overflow:auto;height:auto;resize:vertical;min-height:34px;padding:6px 4px 4px 10px} +select{padding:6px 18px 6px 5px} +select:focus{outline:0} +select optgroup{border:solid #3d434f;border-width:1px 0;margin:0;background:#272e3b;color:#fff;font-style:normal;font-weight:400;font-size:12px;line-height:13px;letter-spacing:.075em;text-transform:uppercase;text-indent:10px;padding-top:5px} +select option{background:#272e3b;color:#fff;font-size:15px;line-height:20px;padding:4px 10px;letter-spacing:normal;text-transform:none} +select optgroup{font-size:15px;text-transform:none} +label.radio-label,label.checkbox-label{min-height:20px;padding-left:30px;position:relative;margin-bottom:20px} +label.radio-label[disabled],label.checkbox-label[disabled],label.radio-label.disabled,label.checkbox-label.disabled{opacity:.3} +label.radio-label input[type="radio"],label.checkbox-label input[type="checkbox"]{position:absolute;left:0;top:0;width:20px;height:20px;opacity:.3} +input.input-large{margin:5px 0;padding:0 10px;font-size:17px;line-height:20px;height:40px} +input.input-large.active,input.input-large:active{padding:1 9px -1 11px} +input.input-large.disabled:active,input.input-large[disabled]:active,input.input-large.disabled.active,input.input-large[disabled].active{padding:0 10px!important} +.form-actions{margin-top:40px;margin-bottom:40px} +.form-actions:before,.form-actions:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.form-actions:after{clear:both} +.form-actions .btn{float:left} +.form-actions .btn+.btn{margin-left:10px} +.control-group{margin-bottom:10px} +.control-group:before,.control-group:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.control-group:after{clear:both} +.control-group.control-info .control-label{color:#00aeff} +.control-group.control-info select,.control-group.control-info textarea,.control-group.control-info input[type="color"],.control-group.control-info input[type="date"],.control-group.control-info input[type="datetime"],.control-group.control-info input[type="datetime-local"],.control-group.control-info input[type="email"],.control-group.control-info input[type="month"],.control-group.control-info input[type="number"],.control-group.control-info input[type="password"],.control-group.control-info input[type="search"],.control-group.control-info input[type="tel"],.control-group.control-info input[type="text"],.control-group.control-info input[type="time"],.control-group.control-info input[type="url"],.control-group.control-info input[type="week"]{border-color:#00aeff} +.control-group.control-info select:hover:not(:disabled),.control-group.control-info textarea:hover:not(:disabled),.control-group.control-info input[type="color"]:hover:not(:disabled),.control-group.control-info input[type="date"]:hover:not(:disabled),.control-group.control-info input[type="datetime"]:hover:not(:disabled),.control-group.control-info input[type="datetime-local"]:hover:not(:disabled),.control-group.control-info input[type="email"]:hover:not(:disabled),.control-group.control-info input[type="month"]:hover:not(:disabled),.control-group.control-info input[type="number"]:hover:not(:disabled),.control-group.control-info input[type="password"]:hover:not(:disabled),.control-group.control-info input[type="search"]:hover:not(:disabled),.control-group.control-info input[type="tel"]:hover:not(:disabled),.control-group.control-info input[type="text"]:hover:not(:disabled),.control-group.control-info input[type="time"]:hover:not(:disabled),.control-group.control-info input[type="url"]:hover:not(:disabled),.control-group.control-info input[type="week"]:hover:not(:disabled){border-color:#00aeff} +.control-group.control-info select:focus,.control-group.control-info textarea:focus,.control-group.control-info input[type="color"]:focus,.control-group.control-info input[type="date"]:focus,.control-group.control-info input[type="datetime"]:focus,.control-group.control-info input[type="datetime-local"]:focus,.control-group.control-info input[type="email"]:focus,.control-group.control-info input[type="month"]:focus,.control-group.control-info input[type="number"]:focus,.control-group.control-info input[type="password"]:focus,.control-group.control-info input[type="search"]:focus,.control-group.control-info input[type="tel"]:focus,.control-group.control-info input[type="text"]:focus,.control-group.control-info input[type="time"]:focus,.control-group.control-info input[type="url"]:focus,.control-group.control-info input[type="week"]:focus{border-color:#00aeff} +.control-group.control-success .control-label{color:#00a83c} +.control-group.control-success select,.control-group.control-success textarea,.control-group.control-success input[type="color"],.control-group.control-success input[type="date"],.control-group.control-success input[type="datetime"],.control-group.control-success input[type="datetime-local"],.control-group.control-success input[type="email"],.control-group.control-success input[type="month"],.control-group.control-success input[type="number"],.control-group.control-success input[type="password"],.control-group.control-success input[type="search"],.control-group.control-success input[type="tel"],.control-group.control-success input[type="text"],.control-group.control-success input[type="time"],.control-group.control-success input[type="url"],.control-group.control-success input[type="week"]{border-color:#00a83c} +.control-group.control-success select:hover:not(:disabled),.control-group.control-success textarea:hover:not(:disabled),.control-group.control-success input[type="color"]:hover:not(:disabled),.control-group.control-success input[type="date"]:hover:not(:disabled),.control-group.control-success input[type="datetime"]:hover:not(:disabled),.control-group.control-success input[type="datetime-local"]:hover:not(:disabled),.control-group.control-success input[type="email"]:hover:not(:disabled),.control-group.control-success input[type="month"]:hover:not(:disabled),.control-group.control-success input[type="number"]:hover:not(:disabled),.control-group.control-success input[type="password"]:hover:not(:disabled),.control-group.control-success input[type="search"]:hover:not(:disabled),.control-group.control-success input[type="tel"]:hover:not(:disabled),.control-group.control-success input[type="text"]:hover:not(:disabled),.control-group.control-success input[type="time"]:hover:not(:disabled),.control-group.control-success input[type="url"]:hover:not(:disabled),.control-group.control-success input[type="week"]:hover:not(:disabled){border-color:#00a83c} +.control-group.control-success select:focus,.control-group.control-success textarea:focus,.control-group.control-success input[type="color"]:focus,.control-group.control-success input[type="date"]:focus,.control-group.control-success input[type="datetime"]:focus,.control-group.control-success input[type="datetime-local"]:focus,.control-group.control-success input[type="email"]:focus,.control-group.control-success input[type="month"]:focus,.control-group.control-success input[type="number"]:focus,.control-group.control-success input[type="password"]:focus,.control-group.control-success input[type="search"]:focus,.control-group.control-success input[type="tel"]:focus,.control-group.control-success input[type="text"]:focus,.control-group.control-success input[type="time"]:focus,.control-group.control-success input[type="url"]:focus,.control-group.control-success input[type="week"]:focus{border-color:#00a83c} +.control-group.control-warning .control-label{color:#d8ac15} +.control-group.control-warning select,.control-group.control-warning textarea,.control-group.control-warning input[type="color"],.control-group.control-warning input[type="date"],.control-group.control-warning input[type="datetime"],.control-group.control-warning input[type="datetime-local"],.control-group.control-warning input[type="email"],.control-group.control-warning input[type="month"],.control-group.control-warning input[type="number"],.control-group.control-warning input[type="password"],.control-group.control-warning input[type="search"],.control-group.control-warning input[type="tel"],.control-group.control-warning input[type="text"],.control-group.control-warning input[type="time"],.control-group.control-warning input[type="url"],.control-group.control-warning input[type="week"]{border-color:#d8ac15} +.control-group.control-warning select:hover:not(:disabled),.control-group.control-warning textarea:hover:not(:disabled),.control-group.control-warning input[type="color"]:hover:not(:disabled),.control-group.control-warning input[type="date"]:hover:not(:disabled),.control-group.control-warning input[type="datetime"]:hover:not(:disabled),.control-group.control-warning input[type="datetime-local"]:hover:not(:disabled),.control-group.control-warning input[type="email"]:hover:not(:disabled),.control-group.control-warning input[type="month"]:hover:not(:disabled),.control-group.control-warning input[type="number"]:hover:not(:disabled),.control-group.control-warning input[type="password"]:hover:not(:disabled),.control-group.control-warning input[type="search"]:hover:not(:disabled),.control-group.control-warning input[type="tel"]:hover:not(:disabled),.control-group.control-warning input[type="text"]:hover:not(:disabled),.control-group.control-warning input[type="time"]:hover:not(:disabled),.control-group.control-warning input[type="url"]:hover:not(:disabled),.control-group.control-warning input[type="week"]:hover:not(:disabled){border-color:#d8ac15} +.control-group.control-warning select:focus,.control-group.control-warning textarea:focus,.control-group.control-warning input[type="color"]:focus,.control-group.control-warning input[type="date"]:focus,.control-group.control-warning input[type="datetime"]:focus,.control-group.control-warning input[type="datetime-local"]:focus,.control-group.control-warning input[type="email"]:focus,.control-group.control-warning input[type="month"]:focus,.control-group.control-warning input[type="number"]:focus,.control-group.control-warning input[type="password"]:focus,.control-group.control-warning input[type="search"]:focus,.control-group.control-warning input[type="tel"]:focus,.control-group.control-warning input[type="text"]:focus,.control-group.control-warning input[type="time"]:focus,.control-group.control-warning input[type="url"]:focus,.control-group.control-warning input[type="week"]:focus{border-color:#d8ac15} +.control-group.control-error .control-label,.control-group.control-danger .control-label,.control-group.control-important .control-label{color:#cd0606} +.control-group.control-error select,.control-group.control-danger select,.control-group.control-important select,.control-group.control-error textarea,.control-group.control-danger textarea,.control-group.control-important textarea,.control-group.control-error input[type="color"],.control-group.control-danger input[type="color"],.control-group.control-important input[type="color"],.control-group.control-error input[type="date"],.control-group.control-danger input[type="date"],.control-group.control-important input[type="date"],.control-group.control-error input[type="datetime"],.control-group.control-danger input[type="datetime"],.control-group.control-important input[type="datetime"],.control-group.control-error input[type="datetime-local"],.control-group.control-danger input[type="datetime-local"],.control-group.control-important input[type="datetime-local"],.control-group.control-error input[type="email"],.control-group.control-danger input[type="email"],.control-group.control-important input[type="email"],.control-group.control-error input[type="month"],.control-group.control-danger input[type="month"],.control-group.control-important input[type="month"],.control-group.control-error input[type="number"],.control-group.control-danger input[type="number"],.control-group.control-important input[type="number"],.control-group.control-error input[type="password"],.control-group.control-danger input[type="password"],.control-group.control-important input[type="password"],.control-group.control-error input[type="search"],.control-group.control-danger input[type="search"],.control-group.control-important input[type="search"],.control-group.control-error input[type="tel"],.control-group.control-danger input[type="tel"],.control-group.control-important input[type="tel"],.control-group.control-error input[type="text"],.control-group.control-danger input[type="text"],.control-group.control-important input[type="text"],.control-group.control-error input[type="time"],.control-group.control-danger input[type="time"],.control-group.control-important input[type="time"],.control-group.control-error input[type="url"],.control-group.control-danger input[type="url"],.control-group.control-important input[type="url"],.control-group.control-error input[type="week"],.control-group.control-danger input[type="week"],.control-group.control-important input[type="week"]{border-color:#cd0606} +.control-group.control-error select:hover:not(:disabled),.control-group.control-danger select:hover:not(:disabled),.control-group.control-important select:hover:not(:disabled),.control-group.control-error textarea:hover:not(:disabled),.control-group.control-danger textarea:hover:not(:disabled),.control-group.control-important textarea:hover:not(:disabled),.control-group.control-error input[type="color"]:hover:not(:disabled),.control-group.control-danger input[type="color"]:hover:not(:disabled),.control-group.control-important input[type="color"]:hover:not(:disabled),.control-group.control-error input[type="date"]:hover:not(:disabled),.control-group.control-danger input[type="date"]:hover:not(:disabled),.control-group.control-important input[type="date"]:hover:not(:disabled),.control-group.control-error input[type="datetime"]:hover:not(:disabled),.control-group.control-danger input[type="datetime"]:hover:not(:disabled),.control-group.control-important input[type="datetime"]:hover:not(:disabled),.control-group.control-error input[type="datetime-local"]:hover:not(:disabled),.control-group.control-danger input[type="datetime-local"]:hover:not(:disabled),.control-group.control-important input[type="datetime-local"]:hover:not(:disabled),.control-group.control-error input[type="email"]:hover:not(:disabled),.control-group.control-danger input[type="email"]:hover:not(:disabled),.control-group.control-important input[type="email"]:hover:not(:disabled),.control-group.control-error input[type="month"]:hover:not(:disabled),.control-group.control-danger input[type="month"]:hover:not(:disabled),.control-group.control-important input[type="month"]:hover:not(:disabled),.control-group.control-error input[type="number"]:hover:not(:disabled),.control-group.control-danger input[type="number"]:hover:not(:disabled),.control-group.control-important input[type="number"]:hover:not(:disabled),.control-group.control-error input[type="password"]:hover:not(:disabled),.control-group.control-danger input[type="password"]:hover:not(:disabled),.control-group.control-important input[type="password"]:hover:not(:disabled),.control-group.control-error input[type="search"]:hover:not(:disabled),.control-group.control-danger input[type="search"]:hover:not(:disabled),.control-group.control-important input[type="search"]:hover:not(:disabled),.control-group.control-error input[type="tel"]:hover:not(:disabled),.control-group.control-danger input[type="tel"]:hover:not(:disabled),.control-group.control-important input[type="tel"]:hover:not(:disabled),.control-group.control-error input[type="text"]:hover:not(:disabled),.control-group.control-danger input[type="text"]:hover:not(:disabled),.control-group.control-important input[type="text"]:hover:not(:disabled),.control-group.control-error input[type="time"]:hover:not(:disabled),.control-group.control-danger input[type="time"]:hover:not(:disabled),.control-group.control-important input[type="time"]:hover:not(:disabled),.control-group.control-error input[type="url"]:hover:not(:disabled),.control-group.control-danger input[type="url"]:hover:not(:disabled),.control-group.control-important input[type="url"]:hover:not(:disabled),.control-group.control-error input[type="week"]:hover:not(:disabled),.control-group.control-danger input[type="week"]:hover:not(:disabled),.control-group.control-important input[type="week"]:hover:not(:disabled){border-color:#cd0606} +.control-group.control-error select:focus,.control-group.control-danger select:focus,.control-group.control-important select:focus,.control-group.control-error textarea:focus,.control-group.control-danger textarea:focus,.control-group.control-important textarea:focus,.control-group.control-error input[type="color"]:focus,.control-group.control-danger input[type="color"]:focus,.control-group.control-important input[type="color"]:focus,.control-group.control-error input[type="date"]:focus,.control-group.control-danger input[type="date"]:focus,.control-group.control-important input[type="date"]:focus,.control-group.control-error input[type="datetime"]:focus,.control-group.control-danger input[type="datetime"]:focus,.control-group.control-important input[type="datetime"]:focus,.control-group.control-error input[type="datetime-local"]:focus,.control-group.control-danger input[type="datetime-local"]:focus,.control-group.control-important input[type="datetime-local"]:focus,.control-group.control-error input[type="email"]:focus,.control-group.control-danger input[type="email"]:focus,.control-group.control-important input[type="email"]:focus,.control-group.control-error input[type="month"]:focus,.control-group.control-danger input[type="month"]:focus,.control-group.control-important input[type="month"]:focus,.control-group.control-error input[type="number"]:focus,.control-group.control-danger input[type="number"]:focus,.control-group.control-important input[type="number"]:focus,.control-group.control-error input[type="password"]:focus,.control-group.control-danger input[type="password"]:focus,.control-group.control-important input[type="password"]:focus,.control-group.control-error input[type="search"]:focus,.control-group.control-danger input[type="search"]:focus,.control-group.control-important input[type="search"]:focus,.control-group.control-error input[type="tel"]:focus,.control-group.control-danger input[type="tel"]:focus,.control-group.control-important input[type="tel"]:focus,.control-group.control-error input[type="text"]:focus,.control-group.control-danger input[type="text"]:focus,.control-group.control-important input[type="text"]:focus,.control-group.control-error input[type="time"]:focus,.control-group.control-danger input[type="time"]:focus,.control-group.control-important input[type="time"]:focus,.control-group.control-error input[type="url"]:focus,.control-group.control-danger input[type="url"]:focus,.control-group.control-important input[type="url"]:focus,.control-group.control-error input[type="week"]:focus,.control-group.control-danger input[type="week"]:focus,.control-group.control-important input[type="week"]:focus{border-color:#cd0606} +.control-group .checkbox-label:last-of-type,.control-group .radio-label:last-of-type{margin-bottom:0} +.control-label{font-size:12px;font-weight:400;line-height:20px;letter-spacing:.075em;display:block;text-transform:uppercase;color:#fff} +.help-inline,.help-block,.help-icon{color:#fff;line-height:20px;font-size:13px;min-height:20px} +.help-inline:empty,.help-block:empty,.help-icon:empty{display:none} +.help-inline.help-info,.help-block.help-info,.help-icon.help-info{color:#fff} +.help-inline.help-info [class^="icon-"],.help-block.help-info [class^="icon-"],.help-icon.help-info [class^="icon-"],.help-inline.help-info [class*=" icon-"],.help-block.help-info [class*=" icon-"],.help-icon.help-info [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.help-inline.help-success,.help-block.help-success,.help-icon.help-success{color:#fff} +.help-inline.help-success [class^="icon-"],.help-block.help-success [class^="icon-"],.help-icon.help-success [class^="icon-"],.help-inline.help-success [class*=" icon-"],.help-block.help-success [class*=" icon-"],.help-icon.help-success [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png")} +.help-inline.help-warning,.help-block.help-warning,.help-icon.help-warning{color:#fff} +.help-inline.help-warning [class^="icon-"],.help-block.help-warning [class^="icon-"],.help-icon.help-warning [class^="icon-"],.help-inline.help-warning [class*=" icon-"],.help-block.help-warning [class*=" icon-"],.help-icon.help-warning [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png")} +.help-inline.help-error,.help-block.help-error,.help-icon.help-error,.help-inline.help-danger,.help-block.help-danger,.help-icon.help-danger,.help-inline.help-important,.help-block.help-important,.help-icon.help-important{color:#cd0606} +.help-inline{display:inline-block;margin-left:10px;padding-top:10px;vertical-align:top} +.help-block,.help-icon{clear:both;display:block;margin-bottom:10px} +.help-icon:after{content:"";display:block;position:absolute;top:2px;left:0;width:16px;height:16px;overflow:hidden;line-height:20px;vertical-align:top;text-indent:-9999px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-repeat:no-repeat;background-position:-32px -224px} +.help-icon{position:relative;padding-left:20px} +.help-icon.help-info:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-32px -224px} +.help-icon.help-success:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png");background-position:-144px -80px} +.help-icon.help-warning:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png");background-position:-128px -80px} +.help-icon.help-error:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-red.png");background-position:-112px -96px} +.input-append,.input-prepend{margin:3px 0;font-size:0;white-space:nowrap} +.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{font-size:15px} +.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;vertical-align:top;border-radius:0 2px 2px 0} +.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2} +.input-append .add-on,.input-prepend .add-on{display:inline-block;height:34px;min-width:10px;padding:7px;font-size:15px;font-weight:400;line-height:20px;text-align:center;vertical-align:middle;background-color:#808080;border:1px solid #ccc;margin:3px 0;-moz-box-sizing:border-box;box-sizing:border-box} +.input-append .add-on [class^="icon-"],.input-prepend .add-on [class^="icon-"],.input-append .add-on [class*=" icon-"],.input-prepend .add-on [class*=" icon-"]{margin-left:0;margin-right:0} +.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggl,.input-prepend .btn-group>.dropdown-toggl{vertical-align:top;border-radius:0} +.input-append .active,.input-prepend .active{background-color:#5cf847;border-color:#18a006} +.input-prepend .add-on,.input-prepend .btn{margin-right:-1px} +.input-prepend .add-on:first-child,.input-prepend .btn:first-child{border-radius:2px 0 0 2px} +.input-append input,.input-append select,.input-append .uneditable-input{border-radius:2px 0 0 2px} +.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{border-radius:0 2px 2px 0} +.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px} +.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggl{border-radius:0 2px 2px 0} +.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{border-radius:0} +.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{border-radius:0 2px 2px 0} +.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;margin-left:0;border-radius:2px 0 0 2px} +.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;border-radius:0 2px 2px 0} +.input-prepend.input-append .btn-group:first-child{margin-left:0} +input:invalid,input:valid,input:required{box-shadow:inherit} +input:-webkit-autofill{background:#808080;color:#fff} +input::-webkit-color-swatch-wrapper{border:0;padding:5px 0} +input::-webkit-color-swatch{border:1px solid #ccc;padding:0} +input::-webkit-inner-spin-button{-webkit-appearance:none;width:0;overflow:hidden} +input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;width:0;overflow:hidden} +input::-webkit-calendar-picker-indicator{background:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");background-position:-16px -256px;opacity:.3;width:16px;height:16px;padding:0;color:rgba(255,255,255,0);-webkit-transition:opacity,200ms;transition:opacity 200ms} +input:hover::-webkit-calendar-picker-indicator{opacity:.5} +input:focus::-webkit-calendar-picker-indicator{opacity:.5} +input::-webkit-clear-button{-webkit-appearance:none;background:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");background-position:-112px -96px;opacity:.3;width:16px;height:16px} +input:hover::-webkit-clear-button{opacity:.5} +input:focus::-webkit-clear-button{opacity:.5} +input::-webkit-datetime-edit{padding:0} +input::-webkit-datetime-edit-fields-wrapper{background:0} +input::-webkit-datetime-edit-text{color:#fff} +input::-webkit-datetime-edit-year-field,input::-webkit-datetime-edit-month-field,input::-webkit-datetime-edit-week-field,input::-webkit-datetime-edit-day-field,input::-webkit-datetime-edit-hour-field,input::-webkit-datetime-edit-minute-field,input::-webkit-datetime-edit-second-field,input::-webkit-datetime-edit-millisecond-field,input::-webkit-datetime-edit-ampm-field{color:#fff} +input::-webkit-datetime-edit-year-field:focus,input::-webkit-datetime-edit-month-field:focus,input::-webkit-datetime-edit-week-field:focus,input::-webkit-datetime-edit-day-field:focus,input::-webkit-datetime-edit-hour-field:focus,input::-webkit-datetime-edit-minute-field:focus,input::-webkit-datetime-edit-second-field:focus,input::-webkit-datetime-edit-millisecond-field:focus,input::-webkit-datetime-edit-ampm-field:focus{background:#19547c;color:#fff} +input[disabled]::-webkit-datetime-edit-text,input.disabled::-webkit-datetime-edit-text,input[disabled]::-webkit-datetime-edit-year-field,input.disabled::-webkit-datetime-edit-year-field,input[disabled]::-webkit-datetime-edit-month-field,input.disabled::-webkit-datetime-edit-month-field,input[disabled]::-webkit-datetime-edit-week-field,input.disabled::-webkit-datetime-edit-week-field,input[disabled]::-webkit-datetime-edit-day-field,input.disabled::-webkit-datetime-edit-day-field,input[disabled]::-webkit-datetime-edit-hour-field,input.disabled::-webkit-datetime-edit-hour-field,input[disabled]::-webkit-datetime-edit-minute-field,input.disabled::-webkit-datetime-edit-minute-field,input[disabled]::-webkit-datetime-edit-second-field,input.disabled::-webkit-datetime-edit-second-field,input[disabled]::-webkit-datetime-edit-millisecond-field,input.disabled::-webkit-datetime-edit-millisecond-field,input[disabled]::-webkit-datetime-edit-ampm-field,input.disabled::-webkit-datetime-edit-ampm-field{color:#3f3f3f!important} +.js-enabled input[type="checkbox"]:not(.css-input),.js-enabled input[type="radio"]:not(.css-input){width:0;height:0;overflow:hidden;opacity:0!important} +.js-enabled label.checkbox-label:not(.css-label),.js-enabled label.radio-label:not(.css-label){cursor:pointer} +.js-enabled label.checkbox-label:not(.css-label):after,.js-enabled label.radio-label:not(.css-label):after{content:"";display:block;width:20px;height:20px;overflow:hidden;position:absolute;left:0;top:0;cursor:pointer;background:#808080 url("../../images/toolkit/themes/bnet/forms/sprite-18-inputs.png") no-repeat -64px -96px;border:1px solid #ccc;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +.js-enabled label.checkbox-label:not(.css-label).focus:after,.js-enabled label.radio-label:not(.css-label).focus:after{background-color:#808080;border-color:#1e5f99} +.js-enabled label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled label.radio-label:not(.css-label):hover:not(.disabled):after{background-color:#808080;border-color:#ccc} +.js-enabled label.checkbox-label:not(.css-label).disabled:after,.js-enabled label.radio-label:not(.css-label).disabled:after{background-color:#272727!important;border-color:#ccc!important;cursor:default!important} +.js-enabled label.checkbox-label:not(.css-label):after{border-radius:2px} +.js-enabled label.checkbox-label:not(.css-label).checked:after{background-position:0 0} +.js-enabled label.checkbox-label:not(.css-label).checked.disabled:after{background-position:0 -18px!important} +.js-enabled label.radio-label:not(.css-label):after{border-radius:10px} +.js-enabled label.radio-label:not(.css-label).checked:after{background-position:-18px 0} +.js-enabled label.radio-label:not(.css-label).checked.disabled:after{background-position:-18px -18px!important} +.js-enabled label.checkbox-label:not(.css-label):after{border-radius:2px} +.js-enabled label.checkbox-label:not(.css-label).partial:after{background-position:-36px 0} +.js-enabled label.checkbox-label:not(.css-label).partial.disabled:after{background-position:-36px -18px!important} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-info label.radio-label:not(.css-label):after{border-color:#00aeff} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-info label.radio-label:not(.css-label).focus:after{border-color:#00aeff} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-info label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:#00aeff} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label).checked:after{background-position:0 0} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label).partial:after{background-position:-36px 0} +.js-enabled .control-group.control-info label.radio-label:not(.css-label).checked:after{background-position:-18px 0} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-success label.radio-label:not(.css-label):after{border-color:#00a83c} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-success label.radio-label:not(.css-label).focus:after{border-color:#00a83c} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-success label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:#00a83c} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label).checked:after{background-position:0 -72px} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label).partial:after{background-position:-36px -72px} +.js-enabled .control-group.control-success label.radio-label:not(.css-label).checked:after{background-position:-18px -72px} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-warning label.radio-label:not(.css-label):after{border-color:#d8ac15} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-warning label.radio-label:not(.css-label).focus:after{border-color:#d8ac15} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-warning label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:#d8ac15} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label).checked:after{background-position:0 -36px} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label).partial:after{background-position:-36px -36px} +.js-enabled .control-group.control-warning label.radio-label:not(.css-label).checked:after{background-position:-18px -36px} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-error label.radio-label:not(.css-label):after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label):after,.js-enabled .control-group.control-important label.radio-label:not(.css-label):after{border-color:#cd0606} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-error label.radio-label:not(.css-label).focus:after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label).focus:after,.js-enabled .control-group.control-important label.radio-label:not(.css-label).focus:after{border-color:#cd0606} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-error label.radio-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-important label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:#cd0606} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label).checked:after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label).checked:after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label).checked:after{background-position:0 -54px} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label).partial:after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label).partial:after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label).partial:after{background-position:-36px -54px} +.js-enabled .control-group.control-error label.radio-label:not(.css-label).checked:after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label).checked:after,.js-enabled .control-group.control-important label.radio-label:not(.css-label).checked:after{background-position:-18px -54px} +label.checkbox-label.css-label,label.radio-label.css-label{cursor:pointer} +label.checkbox-label.css-label>input[type="checkbox"]:not(.css-input),label.radio-label.css-label>input[type="checkbox"]:not(.css-input),label.checkbox-label.css-label>input[type="radio"]:not(.css-input),label.radio-label.css-label>input[type="radio"]:not(.css-input){width:0;height:0;overflow:hidden;opacity:0} +label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]+.input-checkbox{border-radius:2px} +label.checkbox-label.css-label>input[type="radio"]+.input-radio,label.radio-label.css-label>input[type="radio"]+.input-radio{border-radius:10px} +label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]+.input-checkbox,label.checkbox-label.css-label>input[type="radio"]+.input-radio,label.radio-label.css-label>input[type="radio"]+.input-radio{display:block;width:20px;height:20px;overflow:hidden;position:absolute;left:0;top:0;cursor:pointer;background:#808080 url("../../images/toolkit/themes/bnet/forms/sprite-18-inputs.png") no-repeat -64px -96px;border:1px solid #ccc;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:focus+.input-checkbox,label.checkbox-label.css-label>input[type="radio"]:focus+.input-radio,label.radio-label.css-label>input[type="radio"]:focus+.input-radio{background-color:#808080;border-color:#1e5f99} +label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,label.radio-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,label.checkbox-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio,label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{background-color:#808080;border-color:#ccc} +label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 0} +label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox.partial,label.radio-label.css-label>input[type="checkbox"]:checked+.input-checkbox.partial{background-position:-36px 0!important} +label.checkbox-label.css-label>input[type="radio"]:checked+.input-radio,label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px 0} +label.checkbox-label.css-label>input[type="checkbox"]:disabled+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:disabled+.input-checkbox,label.checkbox-label.css-label>input[type="radio"]:disabled+.input-radio,label.radio-label.css-label>input[type="radio"]:disabled+.input-radio{background-color:#272727!important;border-color:#ccc!important;cursor:default!important} +label.checkbox-label.css-label>input[type="checkbox"]:checked:disabled+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:checked:disabled+.input-checkbox{background-position:0 -18px!important} +label.checkbox-label.css-label>input[type="checkbox"]:disabled.partial+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:disabled.partial+.input-checkbox{background-position:-36px -18px!important} +label.checkbox-label.css-label>input[type="radio"]:checked:disabled+.input-radio,label.radio-label.css-label>input[type="radio"]:checked:disabled+.input-radio{background-position:-18px -18px!important} +.js-enabled .control-group.info label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.info label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:#00aeff} +.js-enabled .control-group.info label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.info label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#00aeff} +.js-enabled .control-group.info label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.info label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:#00aeff} +.js-enabled .control-group.info label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 0} +.js-enabled .control-group.info label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px 0} +.js-enabled .control-group.success label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.success label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:#00a83c} +.js-enabled .control-group.success label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.success label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#00a83c} +.js-enabled .control-group.success label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.success label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:#00a83c} +.js-enabled .control-group.success label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 -72px} +.js-enabled .control-group.success label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px -72px} +.js-enabled .control-group.warning label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.warning label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:#d8ac15} +.js-enabled .control-group.warning label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.warning label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#d8ac15} +.js-enabled .control-group.warning label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.warning label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:#d8ac15} +.js-enabled .control-group.warning label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 -36px} +.js-enabled .control-group.warning label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px -36px} +.js-enabled .control-group.error label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.error label.radio-label.css-label>input[type="radio"]+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label>input[type="radio"]+.input-radio,.js-enabled .control-group.important label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:#cd0606} +.js-enabled .control-group.error label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.error label.radio-label.css-label>input[type="radio"]:focus+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label>input[type="radio"]:focus+.input-radio,.js-enabled .control-group.important label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#cd0606} +.js-enabled .control-group.error label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.error label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio,.js-enabled .control-group.important label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:#cd0606} +.js-enabled .control-group.error label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 -54px} +.js-enabled .control-group.error label.radio-label.css-label>input[type="radio"]:checked+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label>input[type="radio"]:checked+.input-radio,.js-enabled .control-group.important label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px -54px} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.js-enabled label.checkbox-label:not(.css-label):after,.js-enabled label.radio-label:not(.css-label):after{background:#808080 url("../../images/toolkit/themes/bnet/forms/sprite-36-inputs.png") no-repeat -64px -96px;background-size:54px 108px} +} +.js-enabled .select-box{cursor:default;position:relative;display:inline-block;height:34px;padding:0 22px 0 0;text-indent:10px;margin-top:3px;margin-bottom:3px;font-size:15px;line-height:20px;color:#fff;border:1px solid #ccc;border-radius:2px;background:#808080;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:background-color .2s,border-color .2s,box-shadow .2s;transition:background-color .2s,border-color .2s,box-shadow .2s} +.js-enabled .select-box .arrow{width:22px;height:100%;overflow:hidden;border-top-right-radius:2px;border-bottom-right-radius:2px;position:absolute;top:0;right:0;background:url("../../images/toolkit/themes/bnet/forms/sprite-22-select.png") no-repeat 0 0} +.js-enabled .select-box.input-block{width:100%} +.js-enabled .select-box:hover{border-color:#ccc;background:#808080} +.js-enabled .select-box:hover>.current{color:#fff} +.js-enabled .select-box:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.js-enabled .select-box:focus>.current{color:#fff} +.js-enabled .select-box.expanded{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#1e5f99;background:#808080} +.js-enabled .select-box.expanded .options{z-index:1000;display:block} +.js-enabled .select-box>.current{height:32px;width:100%;line-height:32px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.js-enabled .select-box>.current.placeholder{color:#fff} +.js-enabled .text-indent [class^="icon-"],.js-enabled .select-box>.current [class*=" icon-"]{margin-top:8px;margin-right:7px;margin-left:-3px} +.js-enabled .select-box>.current [class^="icon-payment-"],.js-enabled .select-box>.current [class*=" icon-payment-"]{margin-right:8px;margin-left:-2px} +.js-enabled .select-box .options{font-size:13px;line-height:20px;border:solid #3d434f;border-width:0 1px 1px 1px;position:absolute;display:none;top:33px;left:-1px;right:-1px;max-height:200px;background-color:#272e3b;overflow:hidden;border-bottom-left-radius:2px;border-bottom-right-radius:2px;z-index:0} +.js-enabled .select-box .options .option{text-shadow:none;line-height:26px;height:26px;text-indent:10px;color:#fff;width:100%;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.js-enabled .select-box .options .option:hover{color:#fff;background-color:#ccc} +.js-enabled .select-box .options .option.selected,.js-enabled .select-box .options .option.selected:hover{color:#fff;background-color:#0069e1} +.js-enabled .select-box .options .option.placeholder,.js-enabled .select-box .options .option.placeholder:hover{color:#fff} +.js-enabled .select-box .options .option-group{border:solid #3d434f;border-width:1px 0;margin:-1px 0} +.js-enabled .select-box .options .option-group .option-group-label{text-shadow:none;font-size:12px;line-height:20px;height:20px;text-indent:10px;text-transform:uppercase;color:#fff;width:100%;display:block;padding-top:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.js-enabled .select-box .options .option-group:first-of-type{border-top-color:transparent} +.js-enabled .select-box .options .option-group:last-of-type{border-bottom-color:transparent} +.js-enabled .select-box .options [class^="icon-"],.js-enabled .select-box .options [class*=" icon-"]{margin-top:4px;margin-right:7px;margin-left:-3px} +.js-enabled .select-box .options [class^="icon-payment-"],.js-enabled .select-box .options [class*=" icon-payment-"]{margin-right:8px;margin-left:-2px} +.js-enabled .select-box .options>.option:last-of-type{border-bottom-left-radius:2px;border-bottom-right-radius:2px} +.js-enabled .select-box.disabled,.js-enabled .select-box.disabled:focus,.js-enabled .select-box.disabled:hover{background-color:#272727!important;border-color:#ccc!important;cursor:default!important} +.js-enabled .select-box.disabled .current{color:#3f3f3f!important} +.js-enabled .select-box.disabled .current [class^="icon-"]:not([class*="icon-payment-"]),.js-enabled .select-box.disabled .current [class*=" icon-"]:not([class*="icon-payment-"]){background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.15!important} +.js-enabled .select-box.disabled .current [class^="icon-payment-"],.js-enabled .select-box.disabled .current [class*=" icon-payment-"]{opacity:.15!important} +.js-enabled .select-box.disabled .arrow{opacity:.15!important;background-position:0 -32px!important} +.js-enabled .control-group.control-info .select-box{border-color:#00aeff} +.js-enabled .control-group.control-info .select-box:focus{border-color:#00aeff} +.js-enabled .control-group.control-info .select-box:hover{border-color:#00aeff} +.js-enabled .control-group.control-success .select-box{border-color:#00a83c} +.js-enabled .control-group.control-success .select-box:focus{border-color:#00a83c} +.js-enabled .control-group.control-success .select-box:hover{border-color:#00a83c} +.js-enabled .control-group.control-warning .select-box{border-color:#d8ac15} +.js-enabled .control-group.control-warning .select-box:focus{border-color:#d8ac15} +.js-enabled .control-group.control-warning .select-box:hover{border-color:#d8ac15} +.js-enabled .control-group.control-error .select-box,.js-enabled .control-group.control-danger .select-box,.js-enabled .control-group.control-important .select-box{border-color:#cd0606} +.js-enabled .control-group.control-error .select-box:focus,.js-enabled .control-group.control-danger .select-box:focus,.js-enabled .control-group.control-important .select-box:focus{border-color:#cd0606} +.js-enabled .control-group.control-error .select-box:hover,.js-enabled .control-group.control-danger .select-box:hover,.js-enabled .control-group.control-important .select-box:hover{border-color:#cd0606} +.js-enabled .select-box .scrollbar-content{overflow:hidden} +.js-enabled .select-box .scrollbar-content .overview{position:relative} +.js-enabled .form-search .select-box,.js-enabled .form-inline .select-box{display:inline-block;vertical-align:middle} +.js-enabled .input-append,.js-enabled .input-prepend{margin:3px 0;font-size:0;white-space:nowrap} +.js-enabled .input-append .select-box,.js-enabled .input-prepend .select-box{font-size:15px} +.js-enabled .input-append .select-box,.js-enabled .input-prepend .select-box{position:relative;margin-bottom:0;vertical-align:top;font-size:15px;border-radius:0 2px 2px 0} +.js-enabled .input-append .select-box:focus,.js-enabled .input-prepend .select-box:focus{z-index:2} +.js-enabled .input-append .select-box{border-radius:2px 0 0 2px} +.js-enabled .input-append .select-box+.btn-group .btn:last-child{border-radius:0 2px 2px 0} +.js-enabled .input-prepend.input-append .select-box{border-radius:0} +.js-enabled .input-prepend.input-append .select-box+.btn-group .btn{border-radius:0 2px 2px 0} +.js-enabled .form-horizontal .select-box+.help-block{margin-top:10px} +.js-enabled .select-box.input-large{margin:5px 0;padding:0;font-size:17px;line-height:20px;height:40px} +.js-enabled .select-box.input-large.active,.js-enabled .select-box.input-large:active{padding:1 -1 -1 1} +.js-enabled .select-box.input-large.disabled:active,.js-enabled .select-box.input-large[disabled]:active,.js-enabled .select-box.input-large.disabled.active,.js-enabled .select-box.input-large[disabled].active{padding:0 0!important} +.js-enabled .select-box.input-large .options{top:38px} +.js-enabled .select-box.input-large .options .option{height:30px;line-height:30px} +.js-enabled .select-box.input-large>.current{height:40px;line-height:40px} +.js-enabled .select-box.input-large>.arrow{background-position:0 2px} +.control-group .select2-container{width:100%!important} +.select2-container{-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle} +.select2-container .select2-selection{-webkit-transition:background-color .2s,border-color .2s;transition:background-color .2s,border-color .2s} +.select2-container .select2-selection--single{-moz-box-sizing:border-box;box-sizing:border-box;cursor:default;display:block;height:34px;user-select:none;-webkit-user-select:none} +.select2-container .select2-selection--single .select2-selection__rendered{display:block;text-indent:10px;margin-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px} +.select2-container .select2-selection--multiple{-moz-box-sizing:border-box;box-sizing:border-box;cursor:default;display:block;min-height:34px;user-select:none;-webkit-user-select:none} +.select2-container .select2-selection--multiple .select2-selection__rendered{overflow:hidden;margin-right:20px;text-overflow:ellipsis;white-space:nowrap} +.select2-container .select2-search--inline{float:left;height:34px;padding-left:0} +.select2-container .select2-search--inline .select2-search__field{margin:0;float:left;-moz-box-sizing:border-box;box-sizing:border-box;text-indent:10px;border:0;font-size:13px;padding:0} +.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none} +.select2-dropdown{background-color:#272e3b;border:1px solid #ccc;border-radius:2px;-moz-box-sizing:border-box;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051} +.select2-results{display:block} +.select2-results__options{list-style:none;margin:0;padding:0} +.select2-results__options[aria-multiselectable] .select2-results__option .option-checkbox-label{display:block;float:left;width:18px;height:18px;border:1px solid #ccc;border-radius:2px;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 4px 0 0;background:#808080 url("../../images/toolkit/themes/bnet/forms/sprite-18-inputs.png") no-repeat -64px -96px;background-size:54px 108px} +.select2-results__options[aria-multiselectable] .select2-results__option[aria-selected=true] .option-checkbox-label{background-position:-1px -1px} +.select2-results__option{user-select:none;-webkit-user-select:none;margin:0;padding:0 0 0 10px;-webkit-transition:background-color .2s;transition:background-color .2s;word-break:break-all} +.select2-results__option[aria-selected]{cursor:default} +.select2-container--open .select2-dropdown{left:0} +.select2-container--open .select2-dropdown--above{border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0} +.select2-container--open .select2-dropdown--below{border-top:0;border-top-left-radius:0;border-top-right-radius:0} +.select2-search--dropdown{display:block;padding:7px 10px} +.select2-search--dropdown .select2-search__field{width:100%;position:relative;-moz-box-sizing:border-box;box-sizing:border-box} +.select2-search--dropdown .select2-search__field:after{content:" ";position:absolute;top:19px;right:16px;width:16px;height:16px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-80px -16px} +.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none} +.select2-search--dropdown.select2-search--hide{display:none} +.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;z-index:99;background-color:#272e3b;opacity:0} +.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important} +.select2-container--default.select2-container--focus .select2-selection{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-selection--single{background-color:#808080;border:1px solid #ccc;border-radius:2px} +.select2-container--default .select2-selection--single:hover{border-color:#ccc;background:#808080} +.select2-container--default .select2-selection--single:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-selection--single .select2-selection__rendered{color:#fff;line-height:34px} +.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold} +.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#fff} +.select2-container--default .select2-selection--single .select2-selection__arrow{height:32px;position:absolute;top:1px;right:1px;width:20px} +.select2-container--default .select2-selection--single .select2-selection__arrow b{position:absolute;top:0;left:-2px;width:20px;height:100%;overflow:hidden;background:url("../../images/toolkit/themes/bnet/forms/sprite-22-select.png") no-repeat 0 0} +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left} +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto} +.select2-container--default.select2-container--disabled .select2-selection--single{border-color:#ccc!important;background-color:#272727!important;cursor:default} +.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__rendered{color:#3f3f3f!important} +.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none} +.select2-container--default .select2-selection--multiple{background-color:#808080;border:1px solid #ccc;border-radius:2px} +.select2-container--default .select2-selection--multiple:hover{border-color:#ccc;background:#808080} +.select2-container--default .select2-selection--multiple:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-selection--multiple .select2-selection__rendered{-moz-box-sizing:border-box;box-sizing:border-box;list-style:none;margin:0;padding:0;width:100%} +.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#fff;float:left} +.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;text-indent:10px} +.select2-container--default .select2-selection--multiple .select2-selection__choice{float:left;text-indent:5px;line-height:30px;margin:0;padding:0} +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#fff;cursor:pointer;display:inline-block;padding-right:4px;font-size:13px} +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right} +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto} +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto} +.select2-container--default.select2-container--focus .select2-selection--multiple{border:1px solid #1e5f99;outline:0} +.select2-container--default.select2-container--disabled .select2-selection--multiple{border-color:#ccc!important;background-color:#272727!important;cursor:default} +.select2-container--default.select2-container--disabled .select2-selection--multiple .select2-selection__rendered{color:#3f3f3f!important} +.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__choice__remove{display:none} +.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0} +.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0} +.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #ccc} +.select2-container--default .select2-search--dropdown .select2-search__field:hover{border-color:#ccc} +.select2-container--default .select2-search--dropdown .select2-search__field:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:0;outline:0;box-shadow:none} +.select2-container--default .select2-results>.select2-results__options{font-size:13px;overflow-y:auto;max-height:200px} +.select2-container--default .select2-results__option{line-height:15px;padding:4px 0 7px 10px} +.select2-container--default .select2-results__option[role=group]{padding:0} +.select2-container--default .select2-results__option[aria-disabled=true]{color:#3f3f3f} +.select2-container--default .select2-results__option[aria-selected=true]{color:#fff;background-color:#0069e1} +.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#ccc} +.select2-container--default .select2-results__option--highlighted[aria-selected][aria-selected=false]{color:#fff} +.select2-container--default .select2-results__group{text-shadow:none;font-size:12px;line-height:25px;height:25px;text-indent:10px;text-transform:uppercase;color:#fff;width:100%;display:block;padding-top:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.multiselect.select-box{margin:0!important;width:100%;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.multiselect.select-box:focus{outline:0} +.multiselect-container{position:absolute;left:0;border-color:#3d434f;border-radius:0 0 2px 2px;border-top:0;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:none;list-style-type:none;margin:0;padding:0;width:100%} +.multiselect-container>li{padding:0;margin:0;line-height:20px} +.multiselect-container>li.active,.multiselect-container>li.active:hover{color:#fff;background-color:#0069e1} +.multiselect-container>li.active,.multiselect-container>li.active:hover{color:#fff} +.multiselect-container>li.multiselect-all{border-bottom:1px solid #3d434f} +.multiselect-container>li.multiselect-all.active{background-color:transparent!important} +.multiselect-container>li.filter{padding:7px 10px 3px} +.multiselect-container>li.filter .input-group .multiselect-search{font-size:13px;width:100%} +.multiselect-container>li.filter .input-group:not(.filtered):after{content:"";display:inline-block;position:absolute;top:19px;right:16px;width:16px;height:16px;line-height:16px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-80px -16px} +.multiselect-container>li.filter .input-group .multiselect-clear-filter{display:none;cursor:pointer;position:absolute;top:11px;right:11px;width:32px;height:32px;border:0;background-color:transparent} +.multiselect-container>li.filter .input-group .multiselect-clear-filter .icon-remove{top:5px;left:10px} +.multiselect-container>li.filter .input-group.filtered .multiselect-clear-filter{display:inline-block} +.multiselect-container>li>a.multiselect-all label{-webkit-transition:background-color .2s,border-color .2s,box-shadow .2s;transition:background-color .2s,border-color .2s,box-shadow .2s} +.multiselect-container>li>label.multiselect-group{text-shadow:none;font-size:12px;line-height:20px;height:20px;text-indent:10px;text-transform:uppercase;color:#fff;width:100%;display:block;padding-top:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.multiselect-container>li>a{padding:3px 0;cursor:default} +.multiselect-container>li>a>label{margin:0;height:100%;cursor:pointer;font-weight:400;padding:0 20px 3px 30px;font-size:13px;left:10px;top:2px} +.multiselect-container>li>a>label.radio,.multiselect-container>li>a>label.checkbox{margin:0} +.multiselect-container>li>a>label>input[type="checkbox"]{margin-bottom:5px;width:20px!important} +.multiselect-container>li>a>label.checkbox-label:not(.css-label),.multiselect-container>li>a>label.radio-label:not(.css-label){cursor:default!important} +.btn-group-multiselect{position:relative} +.hero-unit{padding:40px;margin-bottom:40px;color:inherit;background-color:#0e0e0e;border-radius:2px} +.hero-unit:before,.hero-unit:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.hero-unit:after{clear:both} +.hero-unit p{font-size:17px;font-weight:300;line-height:25px} +.hero-unit li{font-size:17px;font-weight:300;line-height:20px;margin-bottom:25px} +.hero-unit p,.hero-unit ul,.hero-unit ol{margin-bottom:40px} +.hero-unit p:last-child,.hero-unit ul:last-child,.hero-unit ol:last-child{margin-bottom:0} +.hero-unit .btn{float:left} +.hero-unit .btn+.btn{margin-left:10px} +.label,.badge{height:20px;color:#fff;background:#272e3b;margin:-2px 0;border:1px solid #363d49;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color 200ms,background-color 200ms;transition:border-color 200ms,background-color 200ms} +.label{font-size:15px;line-height:18px;padding:0 10px;border-radius:2px} +.badge{font-size:13px;line-height:18px;min-width:20px;min-height:20px;padding:0 4px;border-radius:10px} +.label[href]:focus,.badge[href]:focus,.label[href]:hover,.badge[href]:hover{color:#fff;background-color:#3b465a} +.label-important,.badge-important,.label-danger,.badge-danger,.label-error,.badge-error{background-color:#360e10;border-color:#551e21} +.label-important[href]:focus,.badge-important[href]:focus,.label-important[href]:hover,.badge-important[href]:hover{background-color:#5f181c} +.label-warning,.badge-warning{background-color:#5d3200;border-color:#834b00} +.label-warning[href]:focus,.badge-warning[href]:focus,.label-warning[href]:hover,.badge-warning[href]:hover{background-color:#904d00} +.label-success,.badge-success{background-color:#132a14;border-color:#24392a} +.label-success[href]:focus,.badge-success[href]:focus,.label-success[href]:hover,.badge-success[href]:hover{background-color:#234d25} +.label-info,.badge-info{background-color:#272e3b;border-color:#363d49} +.label-info[href]:focus,.badge-info[href]:focus,.label-info[href]:hover,.badge-info[href]:hover{background-color:#3b465a} +.label-inverse,.badge-inverse{color:#fff;background-color:#ccc;border-color:#ccc} +.label-inverse[href]:focus,.badge-inverse[href]:focus,.label-inverse[href]:hover,.badge-inverse[href]:hover{background-color:#e6e6e6} +.btn .label,.btn .badge{position:relative;top:-1px} +.btn-mini .label,.btn-mini .badge{top:0} +.acb-rating{font-size:12px;line-height:15px;color:#fff} +.acb-rating a{color:#fff} +.acb-logo{display:block;float:left} +.acb-descriptor,.acb-disclaimer{display:block;margin-left:75px} +.bbfc-rating{font-size:12px;line-height:15px;color:#fff;float:left} +.bbfc-rating a{float:left;color:#fff} +.bbfc-logo{display:block} +.csrr-rating{font-size:12px;line-height:15px;color:#fff} +.csrr-rating a{display:inline-block;color:#fff} +.csrr-logo{display:block} +.dejus-rating{font-size:12px;line-height:15px;color:#fff} +.dejus-rating a{color:#fff} +.dejus-logo{display:block;float:left} +.dejus-descriptor{display:block;margin-left:75px} +.dejus-provisional{text-transform:uppercase} +.esrb-rating{font-size:12px;line-height:15px;color:#fff} +.esrb-rating a{color:#fff} +.esrb-logo{display:block;float:left} +.esrb-descriptor,.esrb-disclaimer{display:block;margin-left:80px;-moz-transition:color .2s;-webkit-transition:color .2s;transition:color .2s} +.esrb-disclaimer{display:block;margin-left:80px} +.esrb-descriptor-label{-webkit-transition:color .2s;transition:color .2s} +.esrb-descriptor-label:hover{color:#fff;cursor:default} +.fpb-rating{font-size:12px;line-height:15px;color:#fff} +.fpb-rating a{color:#fff} +.fpb-logo{display:block;float:left} +.fpb-descriptor{display:block;margin-left:75px} +.grb-rating{font-size:12px;line-height:15px;color:#fff} +.grb-rating a{color:#fff} +.grb-rating+.grb-rating{clear:right} +.grb-logo,.grb-descriptor-image{display:block;float:left;margin-right:5px} +.grb-descriptor{display:block;margin-left:75px} +.nzoflc-rating{font-size:12px;line-height:15px;color:#fff} +.nzoflc-rating a{color:#fff} +.nzoflc-logo{display:block;float:left} +.nzoflc-descriptor{display:block;margin-left:75px} +.pegi-rating{font-size:12px;line-height:15px;color:#fff} +.pegi-rating a{color:#fff} +.pegi-logo,.pegi-descriptor-image{display:block;float:left;margin-right:5px} +.pegi-descriptor{display:block;margin-left:70px} +.pegi-descriptor-label{-webkit-transition:color .2s;transition:color .2s} +.pegi-descriptor-label:hover{color:#fff;cursor:default} +.pegi-provisional{padding:5px 5px 5px 0;font-size:10px;text-align:left;text-transform:uppercase;width:100%;clear:left} +.usk-rating{font-size:12px;line-height:15px;color:#fff} +.usk-rating a{display:inline-block;color:#fff} +.usk-logo{display:block} +a{color:#00aeff;-webkit-transition:color,0.2s;transition:color .2s} +a:focus,a:hover{color:#fff} +a.inverse{color:#fff} +a.inverse:focus,a.inverse:hover{color:#fff} +.logo{width:300px;height:70px;text-indent:-9999px;background:url("../../images/toolkit/defaults/logos/bnet/default.png") -5px 0;margin:0 auto} +:lang(zh-CN) .logo{background:url("../../images/toolkit/defaults/logos/bnet/china-default.png")} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.logo{background:url("../../images/toolkit/defaults/logos/bnet/default-2x.png");background-size:300px 70px} +:lang(zh-CN) .logo{background:url("../../images/toolkit/defaults/logos/bnet/china-default-2x.png");background-size:300px 70px} +} +.media{padding:20px 0;border:solid #272727;border-width:1px 0} +.media.blizzard{background-color:#004288} +.media+.media{border-top-width:0} +.media .img{margin-right:20px;width:82px;height:82px;padding:6px;overflow:hidden;position:relative;background-image:url("../../images/toolkit/themes/bnet/media/media-org.png")} +.media .img:after{content:"";position:absolute;top:6px;left:6px;z-index:10;display:block;width:82px;height:82px;box-shadow:inset 0 0 0 1px rgba(0,0,0,0.7),inset 0 0 0 2px rgba(255,255,255,0.1)} +.media.blizzard .img{background-position:-94px 0;padding-bottom:84px} +.media .img img{width:82px;height:82px;background-color:#000} +.media .p-author{margin-bottom:5px} +.media .p-name{font-size:17px;line-height:20px;color:#82c5ff} +.media .p-role{font-weight:400;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;margin-left:.5em} +.media.blizzard .p-role{color:#fff} +.media.vip .p-role{color:#18a006} +.media .bd p,.media .bd ul,.media .bd ol{margin-bottom:20px} +.media.blizzard .bd{color:#00aeff} +.media.vip .bd{color:#18a006} +.media .dt-published{font-size:13px;line-height:20px} +.modal-backdrop{z-index:1040} +.modal-backdrop,.modal-backdrop.fade.in{opacity:.8} +.modal{padding-top:10px;position:fixed;top:10%;left:50%;z-index:1050;overflow:visible;width:560px;margin-left:-280px;border-style:solid;border-width:1px;border-color:#000;box-shadow:0 5px 10px rgba(0,0,0,.75),inset 0 0 0 1px rgba(255,255,255,.07);background:#1d222c;background-repeat:no-repeat;background-size:contain;background-position:center bottom,center top,center -100px;background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-webkit-linear-gradient(top,#263145 0,#1d222c 70%),-webkit-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-moz-linear-gradient(top,#263145 0,#1d222c 70%),-moz-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),linear-gradient(top,#263145 0,#1d222c 70%),radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-clip:padding-box;outline:0} +.modal .close{z-index:1051;position:absolute;margin:0;top:5px;right:7px} +.modal .close [class^="icon-"],.modal .close [class*=" icon-"]{display:block;margin:0} +.modal:before{content:"";position:absolute;top:1px;left:75px;right:75px;display:block;height:0;border-top:10px solid rgba(255,255,255,0.14);border-left:10px solid transparent;border-right:10px solid transparent} +.modal:after{content:"";position:absolute;top:1px;left:76px;right:76px;display:block;height:0;border-top:9px solid rgba(32,39,52,0.5);border-left:9px solid transparent;border-right:9px solid transparent} +.modal-header{padding:19px 20px 0 20px} +.modal-header h1,.modal-header h2,.modal-header h3,.modal-header h4,.modal-header h5,.modal-header h6,.modal-header .heading-1{margin-bottom:0;font-size:23px;line-height:30px} +.modal-error{border:1px solid #313845;padding:10px 20px;background:#270a0c;color:#fe0000;font-size:13px;line-height:20px;position:relative;-moz-box-sizing:border-box;box-sizing:border-box} +.modal-error:before{content:"";border-top:7px solid #313845;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);display:block;position:absolute;left:273px;bottom:-7px} +.modal-error:after{content:"";border-top:6px solid #270a0c;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);display:block;position:absolute;left:274px;bottom:-6px} +.modal-error p{margin-bottom:15px} +.modal-error p:last-child{margin-bottom:0} +.modal-body{position:relative;overflow:visible;max-height:400px;padding:20px;font-size:13px;line-height:20px} +.modal-body h1,.modal-body h2,.modal-body h3,.modal-body h4,.modal-body h5,.modal-body h6,.modal-body .heading-1,.modal-body .heading-2{margin-bottom:20px;font-size:17px;line-height:20px} +.modal-body p,.modal-body ul,.modal-body ol,.modal-body dl{font-size:13px;line-height:20px;margin-bottom:20px} +.modal-body p:last-child,.modal-body ul:last-child,.modal-body ol:last-child,.modal-body dl:last-child{margin:0} +.modal-body .modal-actions:before,.modal-body .modal-actions:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.modal-body .modal-actions:after{clear:both} +.modal-body .modal-actions .btn{margin-bottom:0} +.modal-body .modal-actions .btn+.btn{margin-left:10px} +.modal-body .modal-actions .btn-group .btn+.btn{margin-left:-1px} +.modal-body .modal-actions .btn-block+.btn-block{margin-left:0} +.modal-body .modal-actions{margin-top:30px} +.modal-body .modal-actions:only-child{margin-top:0} +.modal-body p+.modal-actions,.modal-body ul+.modal-actions,.modal-body ol+.modal-actions,.modal-body dl+.modal-actions{margin-top:20px} +.modal-scrollable{height:400px;overflow:hidden} +.modal-scrollable .scrollbar{top:20px} +.modal-scrollable .scrollbar .thumb{padding-top:0;padding-bottom:0} +.modal-form{margin-bottom:0} +.modal-footer{color:#fff;background:#171b23;padding:19px 20px 20px;margin:1px;border-top:1px solid #2d323b;font-size:13px;line-height:20px} +.modal-footer h1,.modal-footer h2,.modal-footer h3,.modal-footer h4,.modal-footer h5,.modal-footer h6,.modal-footer .heading-1,.modal-footer .heading-2,.modal-footer .heading-3{margin-bottom:0;font-size:15px;line-height:20px} +.modal-footer p,.modal-footer ul,.modal-footer ol,.modal-footer dl{font-size:13px;line-height:20px;margin-bottom:20px} +.modal-footer p:last-child,.modal-footer ul:last-child,.modal-footer ol:last-child,.modal-footer dl:last-child{margin-bottom:0} +.nav>li{font-size:13px;line-height:20px} +.navbar:not(.header) .nav>li{font-size:13px;line-height:20px;margin:0 20px 0 0} +.navbar:not(.header) .nav>li.pull-right{margin:0 0 0 20px} +.navbar:not(.header) .nav>li>a{color:#fff} +.navbar:not(.header) .nav>li>a:hover,.navbar:not(.header) .nav>li>a:focus{color:#fff} +.navbar:not(.header) .nav>li.disabled>a{color:#fff} +.navbar:not(.header) .nav>li.active>a{color:#fff} +.navbar.header .nav{height:30px;padding:25px 0} +.navbar.header .nav>li{font-weight:300;font-size:23px;line-height:30px;margin:0 40px 0 0} +.navbar.header .nav>li>a{color:#fff} +.navbar.header .nav>li>a:hover,.navbar.header .nav>li>a:focus{color:#fff} +.navbar.header .nav>li.disabled>a{color:#fff} +.navbar.header .nav>li.active>a{color:#fff;text-shadow:0 0 10px #ccc,0 0 10px #ccc} +.nav-list>li{margin:0 0 10px 0} +.nav-list>li>a{color:#fff} +.nav-list>li>a:hover,.nav-list>li>a:focus{color:#fff} +.nav-list>li.disabled>a{color:#fff} +.nav-list>li.active>a{color:#fff} +.nav-list>li:last-child{margin-bottom:40px} +.nav-list.icons>li:not(.nav-header){padding-left:30px} +.nav-list.icons>li:not(.nav-header) [class^="icon-"]:not(.icon-external-link),.nav-list.icons>li:not(.nav-header) [class*="icon-"]:not(.icon-external-link){left:5px} +.nav-list.icons>li:not(.nav-header).disabled [class^="icon-"]:not(.icon-external-link),.nav-list.icons>li:not(.nav-header).disabled [class*="icon-"]:not(.icon-external-link){background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.15} +.nav .nav-header{margin:0 0 10px 0;padding:0;font-size:12px;font-weight:400;line-height:20px;color:#fff;text-transform:uppercase;letter-spacing:.075em} +.nav.nav-tabs:after{border-bottom:3px solid #272727;height:30px} +.nav-tabs>li{border-bottom:3px solid #272727;padding:0} +.nav-tabs>li>a{padding-right:30px;padding-left:30px;color:#fff;background:0;padding-top:5px;padding-bottom:5px;margin-bottom:-2px;border:1px solid transparent} +.nav-tabs>li>a:focus,.nav-tabs>li>a:hover{color:#fff;background:0} +.nav-tabs>li.active>a{color:#fff;background:0;border:1px solid #272727;border-bottom:0;padding-bottom:7px} +.nav-tabs>li.disabled>a{color:#fff;background:0} +.nav-pills>li>a{padding:5px 30px;margin:0 10px 0 0;background-color:#d9d9d9;border:1px solid #272727;border-radius:2px;color:#fff} +.nav-pills>li>a:focus,.nav-pills>li>a:hover{background:#bfbfbf;color:#fff;border-color:#303030} +.nav-pills>li>a:active{color:#fff;background-color:#d9d9d9;border-color:#272727;padding:6px 29px 4px 31px;box-shadow:inset 1.5px 1.5px 3px #b3b3b3} +.nav-pills>li.active>a{color:#fff;background:#ccc;border-color:#272727} +.nav-pills>li.active>a:active{padding:5px 30px;box-shadow:none} +.nav-pills>li.disabled>a{color:#fff;background:#e6e6e6;border-color:#272727} +.nav-pills>li.disabled>a:active{padding:5px 30px;box-shadow:none} +.tab-content,.pill-content{border:1px solid #272727;margin-bottom:40px;padding:20px} +.pill-content{margin-top:10px} +.tab-content{border-width:0 1px 1px} +.tab-content>.active p,.pill-content>.active p,.tab-content>.active ul,.pill-content>.active ul,.tab-content>.active ol,.pill-content>.active ol,.tab-content>.active dl,.pill-content>.active dl{margin-bottom:20px} +.tab-content>.active p:last-child,.pill-content>.active p:last-child,.tab-content>.active ul:last-child,.pill-content>.active ul:last-child,.tab-content>.active ol:last-child,.pill-content>.active ol:last-child,.tab-content>.active dl:last-child,.pill-content>.active dl:last-child{margin-bottom:0} +.navbar-static,.navbar-fixed{background:0;border-bottom:1px solid #ccc;line-height:40px;white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box} +.navbar-static .navbar,.navbar-fixed .navbar{height:40px;padding:10px 0;background:transparent;-moz-box-sizing:border-box;box-sizing:border-box} +.navbar-static .navbar.header,.navbar-fixed .navbar.header{height:80px;padding:0;background:transparent} +.navbar-static .navbar.header+.navbar,.navbar-fixed .navbar.header+.navbar{border-top:1px solid #ccc} +.navbar-fixed{width:100%;position:fixed;z-index:1030} +.navbar.header .brand{float:left;display:block;text-transform:uppercase;font-weight:300;font-size:23px;line-height:30px;height:30px;padding:25px 0;color:#fff} +.navbar.header .brand.mark{background:transparent url("../../images/toolkit/defaults/logos/bnet/mark.png") no-repeat left 18px;display:inline-block;padding-left:60px} +.navbar.header a.brand{-webkit-transition:text-shadow .2s,color .2s;transition:text-shadow .2s,color .2s} +.navbar.header a.brand:hover,.navbar.header a.brand:focus{color:#fff;text-shadow:0 0 10px #ccc,0 0 10px #ccc} +.navbar.header .brand .tag{color:#fff;display:inline-block;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;padding:1px 0 0 3px;vertical-align:text-top} +.navbar.header .user{float:right;display:block;font-size:15px;font-weight:400;line-height:20px;color:#fff;padding:20px 0} +.navbar.header .status{display:block;float:left;width:32px;height:32px;padding:2px;margin:1px 10px 1px 0;border:1px solid #000;background-image:-webkit-linear-gradient(top,#00a4dc,#0f72c5);background-image:linear-gradient(to bottom,#00a4dc,#0f72c5)} +.navbar.header .status.offline{background-image:-webkit-linear-gradient(top,rgba(120,120,120,0.3),rgba(101,101,101,0.3));background-image:linear-gradient(to bottom,rgba(120,120,120,0.3),rgba(101,101,101,0.3))} +.navbar.header .status.online{background-image:-webkit-linear-gradient(top,#6ddc00,#4e9d00);background-image:linear-gradient(to bottom,#6ddc00,#4e9d00)} +.navbar.header .status.away{background-image:-webkit-linear-gradient(top,#f8d90a,#e9af12);background-image:linear-gradient(to bottom,#f8d90a,#e9af12)} +.navbar.header .status.busy{background-image:-webkit-linear-gradient(top,#ec1919,#cf0d0d);background-image:linear-gradient(to bottom,#ec1919,#cf0d0d)} +.navbar.header .avatar{float:right;display:block;width:32px;height:32px;overflow:hidden;background-color:#222;background-size:cover} +.navbar.header .avatar img{display:block;width:100%;height:100%} +.navbar.header .name{float:left;display:block;margin:10px 0} +.navbar.header .battletag{display:block;color:#fff} +.navbar.header .battletag .code{color:#fff} +.navbar.header a.battletag{color:#fff} +.navbar.header a.battletag:hover,.navbar.header a.battletag:focus{color:#fff} +.navbar.header a.battletag .code{color:#fff} +.navbar.header a.battletag .code:hover,.navbar.header a.battletag .code:focus{color:#fff} +.navbar.header .ldap{float:left;display:block} +.navbar.header .ldap .email{display:block;color:#fff} +.navbar.header .ldap .role{display:block;color:#fff} +.pager{height:30px;margin:0} +.pager>li{margin-top:2px;margin-bottom:2px;margin-right:10px} +.pager>li:last-child{margin-right:0} +.pager>li>a,.pager>li>span{font-size:13px} +.pager>li>a{padding:1px 8px;line-height:22px;height:26px;text-decoration:none;background-color:#d9d9d9;border-radius:2px;border:1px solid #ccc;min-width:26px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +.pager>li>span{line-height:26px;height:26px;min-width:18px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box} +.pager>li>a:focus,.pager>li>a:hover{background:#bfbfbf;color:#fff} +.pager>li>a:active{padding:2px 7px 0 9px;color:#fff;background-color:#d9d9d9;box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.3)} +.pager>.active>a{color:#fff!important;background:#ccc!important;cursor:default!important;padding:1px!important;box-shadow:none!important} +.pager>.disabled>a,.pager>.disabled>a:focus,.pager>.disabled>a:hover,.pager>.disabled>a:active{color:#fff!important;background:#e6e6e6!important;cursor:default!important;padding:1px 8px!important;box-shadow:none!important} +.pager>.disabled>span{color:#fff!important} +.pager>li>a [class^="icon-"],.pager>li>span [class^="icon-"],.pager>li>a [class*=" icon-"],.pager>li>span [class*=" icon-"]{margin-top:3px;margin-right:-6px;margin-left:-6px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pager>li>a:active [class^="icon-"],.pager>li>a:active [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pager>.disabled>span [class^="icon-"],.pager>.disabled>a [class^="icon-"],.pager>.disabled>span [class*=" icon-"],.pager>.disabled>a [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")!important;opacity:.15!important} +.pagination{height:30px;margin:0} +.pagination ul>li{margin-top:2px;margin-bottom:2px;margin-right:4px} +.pagination ul>li:last-child{margin-right:0} +.pagination ul>li>a,.pagination ul>li>span{font-size:13px} +.pagination ul>li>a{padding:1px 8px;line-height:22px;height:26px;text-decoration:none;background-color:#d9d9d9;border-radius:2px;border:1px solid #ccc;min-width:26px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +.pagination ul>li>span{line-height:26px;height:26px;min-width:18px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box} +.pagination ul>li>a:focus,.pagination ul>li>a:hover{background:#bfbfbf;color:#fff} +.pagination ul>li>a:active{padding:2px 7px 0 9px;color:#fff;background-color:#d9d9d9;box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.3)} +.pagination ul>.active>a{color:#fff!important;background:#ccc!important;cursor:default!important;padding:1px!important;box-shadow:none!important} +.pagination ul>.disabled>a,.pagination ul>.disabled>a:focus,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:active{color:#fff!important;background:#e6e6e6!important;cursor:default!important;padding:1px 8px!important;box-shadow:none!important} +.pagination ul>.disabled>span{color:#fff!important} +.pagination ul>li>a [class^="icon-"],.pagination ul>li>span [class^="icon-"],.pagination ul>li>a [class*=" icon-"],.pagination ul>li>span [class*=" icon-"]{margin-top:3px;margin-right:-6px;margin-left:-6px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pagination ul>li>a:active [class^="icon-"],.pagination ul>li>a:active [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pagination ul>.disabled>span [class^="icon-"],.pagination ul>.disabled>a [class^="icon-"],.pagination ul>.disabled>span [class*=" icon-"],.pagination ul>.disabled>a [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")!important;opacity:.15!important} +.results-counter{font-size:13px;line-height:26px;height:26px;margin:2px 0} +.pagination-group:before,.pagination-group:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.pagination-group:after{clear:both} +.pagination-inline.results-counter{margin-right:1em} +.pagination select.view-per-page{height:26px;font-size:13px;padding:0 16px 0 2px;margin:2px 6px 0 0;background-position:right -4px} +.popover{z-index:1060;width:236px;padding:1px;background-color:#272e3b;border:1px solid #3d434f;background-clip:padding-box;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:0 0 10px 1px rgba(0,0,0,0.75)} +.popover.top{margin-top:-10px} +.popover.right{margin-left:10px} +.popover.bottom{margin-top:10px} +.popover.left{margin-left:-10px} +.popover-title{margin:0;padding:19px 19px 10px 19px} +.popover-content{padding:19px} +.popover-title+.popover-content{padding-top:0} +.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;z-index:0} +.popover .arrow{border-width:8px} +.popover .arrow:after{content:"";border-width:7px;display:block;z-index:1} +.popover.top .arrow{left:50%;margin-left:-8px;border-bottom-width:0;border-top-color:#3d434f;bottom:-8px} +.popover.top .arrow:after{bottom:1px;margin-left:-7px;border-bottom-width:0;border-top-color:#272e3b} +.popover.right .arrow{top:50%;left:-8px;margin-top:-8px;border-left-width:0;border-right-color:#3d434f} +.popover.right .arrow:after{left:1px;bottom:-7px;border-left-width:0;border-right-color:#272e3b} +.popover.bottom .arrow{left:50%;margin-left:-8px;border-top-width:0;border-bottom-color:#3d434f;top:-8px} +.popover.bottom .arrow:after{top:1px;margin-left:-7px;border-top-width:0;border-bottom-color:#272e3b} +.popover.left .arrow{top:50%;right:-8px;margin-top:-8px;border-right-width:0;border-left-color:#3d434f} +.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#272e3b;bottom:-7px} +.progress{height:22px;padding:14px 0} +.progress:after{height:22px;top:14px;background:rgba(117,117,117,0.1);box-shadow:inset 0 0 0 1px #ccc;border-radius:2px} +.progress .bar{height:22px;font-size:13px;line-height:22px;background-image:-webkit-linear-gradient(top,#474a4e,#414447 50%,#474a4e);background-image:linear-gradient(to bottom,#474a4e,#414447 50%,#474a4e);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.01),inset 0 0 14px rgba(255,255,255,0.1);-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width,0.6s,ease;transition:width .6s ease;-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px} +.progress .bar+.bar{-webkit-border-top-left-radius:0;-moz-border-radius-topleft:0;border-top-left-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0} +.progress .bar[style*="100%"]{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px} +.progress.active .bar:after{height:50px;overflow:hidden;background:url("../../images/toolkit/themes/bnet/progress-bars/progress-pulse.png") repeat-y;top:-14px;width:92px;right:-8px} +.progress-striped .bar:before{height:50px;background:url("../../images/toolkit/themes/bnet/progress-bars/progress-stripes.png") no-repeat 0 0;top:-14px;-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px} +@-webkit-keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +@-moz-keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +@-ms-keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +@keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +.progress.active .bar:before{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite} +@-webkit-keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +@-moz-keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +@-ms-keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +@keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +.progress.active .bar:after{-webkit-animation:progress-bar-pulse 1s linear infinite;-moz-animation:progress-bar-pulse 1s linear infinite;-ms-animation:progress-bar-pulse 1s linear infinite;animation:progress-bar-pulse 1s linear infinite} +.progress .description{left:9px;top:14px;line-height:22px;font-size:13px;color:#fff} +.progress-danger .bar,.progress .bar-danger{background-image:-webkit-linear-gradient(top,#e01212,#b70707 50%,#e01212);background-image:linear-gradient(to bottom,#e01212,#b70707 50%,#e01212);opacity:.8} +.progress-success .bar,.progress .bar-success{background-image:-webkit-linear-gradient(top,#17b326,#108328 50%,#17b326);background-image:linear-gradient(to bottom,#17b326,#108328 50%,#17b326);opacity:.8} +.progress-info .bar,.progress .bar-info{background-image:-webkit-linear-gradient(top,#0072d2,#005e9b 50%,#0072d2);background-image:linear-gradient(to bottom,#0072d2,#005e9b 50%,#0072d2);opacity:.8} +.progress-warning .bar,.progress .bar-warning{background-image:-webkit-linear-gradient(top,#ffa800,#f08a19 50%,#ffa800);background-image:linear-gradient(to bottom,#ffa800,#f08a19 50%,#ffa800);opacity:.8} +.progress-tracker{height:20px} +.progress-tracker li{padding:0 20px;font-size:13px;line-height:20px;color:#fff} +.progress-tracker li [class^="icon-"],.progress-tracker li [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.15} +.progress-tracker li.active{color:#fff} +.progress-tracker li.active [class^="icon-"],.progress-tracker li.active [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.5} +.scrollbar-content .scrollbar{width:22px} +.scrollbar-content .track{width:22px} +.scrollbar-content .thumb{cursor:pointer;height:22px;width:22px;padding:5px 7px} +.scrollbar-content .thumb .end{background-color:rgba(255,255,255,0.1);width:8px;border-radius:4px;-webkit-transition:background-color .2s;transition:background-color .2s} +.scrollbar-content:hover .thumb .end{background-color:rgba(255,255,255,0.1)} +.spinner-loading{width:20px;height:20px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png");background-position:-140px 0;display:inline-block} +.spinner-loading.spinner-loading-white{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet-white.png")} +.spinner-40-loading{width:40px;height:40px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-position:-280px 0;display:inline-block} +.spinner-40-loading.spinner-40-loading-white{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet-white.png")} +.spinner-patching{width:20px;height:20px;background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-white.png");display:inline-block} +.spinner-patching.spinner-danger{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-red.png")} +.spinner-patching.spinner-warning{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-orange.png")} +.spinner-patching.spinner-success{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-green.png")} +.spinner-patching.spinner-info{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-blue.png")} +.spinner-patching.spinner-inverse{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-gray.png")} +@-webkit-keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +@-moz-keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +@-ms-keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +@keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +.spinner-loading{-webkit-animation:keyframes-loading .8s steps(21) infinite;-moz-animation:keyframes-loading .8s steps(21) infinite;-ms-animation:keyframes-loading .8s steps(21) infinite;animation:keyframes-loading .8s steps(21) infinite} +@-webkit-keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +@-moz-keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +@-ms-keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +@keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +.spinner-patching{-webkit-animation:keyframes-patching .4s steps(8) infinite;-moz-animation:keyframes-patching .4s steps(8) infinite;-ms-animation:keyframes-patching .4s steps(8) infinite;animation:keyframes-patching .4s steps(8) infinite} +@-webkit-keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +@-moz-keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +@-ms-keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +@keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +.spinner-40-loading{-webkit-animation:keyframes-40-loading .8s steps(21) infinite;-moz-animation:keyframes-40-loading .8s steps(21) infinite;-ms-animation:keyframes-40-loading .8s steps(21) infinite;animation:keyframes-40-loading .8s steps(21) infinite} +.spinner-battlenet{width:20px;height:20px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png");background-position:-140px 0;display:inline-block;-webkit-animation:keyframes-loading .8s steps(21) infinite;-moz-animation:keyframes-loading .8s steps(21) infinite;-ms-animation:keyframes-loading .8s steps(21) infinite;animation:keyframes-loading .8s steps(21) infinite} +.spinner-40-battlenet{width:40px;height:40px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-position:-280px 0;display:inline-block;-webkit-animation:keyframes-40-loading .8s steps(21) infinite;-moz-animation:keyframes-40-loading .8s steps(21) infinite;-ms-animation:keyframes-40-loading .8s steps(21) infinite;animation:keyframes-40-loading .8s steps(21) infinite} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.spinner-battlenet{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-size:420px 20px} +.spinner-40-battlenet{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-80-battlenet.png");background-size:840px 40px} +} +[class^="icon-"],[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");margin:2px} +[class^="icon-24-"],[class*=" icon-24-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-blue.png")} +[class^="icon-payment-"],[class*=" icon-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-16-payment.png")} +[class^="icon-24-payment-"],[class*=" icon-24-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-24-payment.png")} +[class^="icon-48-"],[class*=" icon-48-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-blue.png")} +[class^="icon-128-"],[class*=" icon-128-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-128-blue.png")} +.icon-white{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")} +.icon-24-white{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-white.png")} +.icon-gray{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-gray.png")} +.icon-24-gray{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-gray.png")} +.icon-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png")} +.icon-24-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-orange.png")} +.icon-128-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-128-orange.png")} +.icon-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-red.png")} +.icon-24-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-red.png")} +.icon-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png")} +.icon-24-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-green.png")} +.icon-128-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-128-green.png")} +.icon-purple{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-purple.png")} +.icon-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-fullcolor.png")} +.icon-24-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-fullcolor.png")} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){[class^="icon-"],[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-blue.png");background-size:160px 480px} +[class^="icon-payment-"],[class*=" icon-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-32-payment.png");background-size:192px 208px} +.icon-gray,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-gray.png")} +.icon-white,.dropdown-menu>.disabled>a>[class^="icon-"],.dropdown-menu>.disabled>a>[class*=" icon-"],.btn-primary [class^="icon-"],.btn-primary [class*=" icon-"],.btn.disabled [class^="icon-"],.btn.disabled [class*=" icon-"],.btn[disabled] [class^="icon-"],.btn[disabled] [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-white.png");background-size:160px 480px} +.icon-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-orange.png")} +.icon-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-red.png")} +.icon-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-green.png")} +.icon-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-fullcolor.png")} +[class^="icon-24-"],[class*=" icon-24-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-blue.png");background-size:240px 720px} +.icon-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-orange.png")} +.icon-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-red.png")} +.icon-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-green.png")} +.icon-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-fullcolor.png")} +[class^="icon-24-payment-"],[class*=" icon-24-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-48-payment.png");background-size:288px 312px} +} +.table{margin-bottom:40px} +.table th,.table td{font-weight:400;padding:10px;line-height:20px;border-top:1px solid #ccc} +.table thead th{background:transparent;color:#fff} +.table thead th a.table-sort,.table thead th a.table-sorting{color:#fff} +.table thead th a.table-sort .icon-sort,.table thead th a.table-sorting .icon-sort{opacity:.3} +.table thead th a.table-sort:hover,.table thead th a.table-sorting:hover,.table thead th a.table-sort:focus,.table thead th a.table-sorting:focus{color:#fff} +.table thead th a.table-sort:hover .icon-sort,.table thead th a.table-sorting:hover .icon-sort,.table thead th a.table-sort:focus .icon-sort,.table thead th a.table-sorting:focus .icon-sort{opacity:1} +.table thead th a.table-sort.sort-disabled,.table thead th a.table-sorting.sort-disabled,.table thead th a.table-sort.sort-disabled:hover,.table thead th a.table-sorting.sort-disabled:hover,.table thead th a.table-sort.sort-disabled:focus,.table thead th a.table-sorting.sort-disabled:focus{color:#fff} +.table thead th a.table-sort.sort-disabled .icon-sort-disabled,.table thead th a.table-sorting.sort-disabled .icon-sort-disabled,.table thead th a.table-sort.sort-disabled:hover .icon-sort-disabled,.table thead th a.table-sorting.sort-disabled:hover .icon-sort-disabled,.table thead th a.table-sort.sort-disabled:focus .icon-sort-disabled,.table thead th a.table-sorting.sort-disabled:focus .icon-sort-disabled{opacity:.3} +.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0} +.table tbody+tbody{border-top:2px solid #ccc} +.table .table{background-color:#202020} +.table-bordered{border:1px solid #ccc;border-collapse:separate;border-left:0;border-radius:2px} +.table-bordered th,.table-bordered td{padding:10px;border-left:1px solid #ccc} +.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0} +.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px} +.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px} +.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child{-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px} +.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child{-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px} +.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0} +.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0} +.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px} +.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px} +.table-condensed th,.table-condensed td{padding:5px 10px;font-size:13px;line-height:20px} +.table-striped thead tr>th,.table-striped tbody tr:nth-child(even)>td,.table-striped tbody tr:nth-child(even)>th{background-color:#ccc} +.table-hover tbody tr td,.table-hover tbody tr th{-webkit-transition:background-color,0.2s;transition:background-color .2s} +.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:rgba(255,255,255,0.025)} +.table tbody tr.success td{background-color:#132a14;color:#fff} +.table tbody tr.error td{background-color:#360e10;color:#fff} +.table tbody tr.warning td{background-color:#5d3200;color:#fff} +.table tbody tr.info td{background-color:#272e3b;color:#fff} +.table-hover tbody tr.success:hover td{background-color:#1b3c1c} +.table-hover tbody tr.error:hover td{background-color:#4a1316} +.table-hover tbody tr.warning:hover td{background-color:#774000} +.table-hover tbody tr.info:hover td{background-color:#313a4a} +ul.thumbnails{margin:0;padding:0;list-style:none} +ul.thumbnails:before,ul.thumbnails:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +ul.thumbnails:after{clear:both} +ul.thumbnails>li{float:left;padding-left:0;margin-bottom:40px} +a.thumbnail,div.thumbnail{position:relative;display:block;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:0 0 12px #303030;-webkit-transition:box-shadow,0.2s,ease-in-out;transition:box-shadow .2s ease-in-out} +a.thumbnail:after,div.thumbnail:after{content:"";position:absolute;top:0;left:0;z-index:10;display:block;width:100%;height:100%;box-shadow:inset 0 0 0 1px rgba(0,0,0,0.7),inset 0 0 0 2px rgba(255,255,255,0.1);-webkit-transition:box-shadow,0.2s,ease-in-out;transition:box-shadow .2s ease-in-out} +a.thumbnail:hover:after{box-shadow:inset 0 0 0 1px rgba(0,0,0,0.7),inset 0 0 0 2px rgba(255,255,255,0.25)} +a.thumbnail>img,div.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;position:relative;z-index:10} +a.thumbnail .caption,div.thumbnail .caption{padding:10px;position:relative;z-index:13} +a.thumbnail>img+.caption,div.thumbnail>img+.caption{border-top:1px solid #272727;padding-top:9px} +a.thumbnail .caption p:last-child,div.thumbnail .caption p:last-child,a.thumbnail .caption ul:last-child,div.thumbnail .caption ul:last-child,a.thumbnail .caption ol:last-child,div.thumbnail .caption ol:last-child,a.thumbnail .caption dl:last-child,div.thumbnail .caption dl:last-child{margin-bottom:0} +.tooltip{z-index:1070;padding:5px;font-size:11px} +.tooltip.top{margin-top:-3px} +.tooltip.right{margin-left:3px} +.tooltip.bottom{margin-top:3px} +.tooltip.left{margin-left:-3px} +.tooltip-inner{max-width:250px;padding:3px 8px;color:#bfc1c5;text-align:left;text-decoration:none;background-color:#272e3b;border:1px solid #3d434f;border-radius:1px;box-shadow:0 0 10px 1px rgba(0,0,0,0.75)} +.tooltip-inner p,.tooltip-inner ul,.tooltip-inner ol{margin-bottom:20px;line-height:20px} +.tooltip-inner p:last-child,.tooltip-inner ul:last-child,.tooltip-inner ol:last-child{margin-bottom:0} +.tooltip-arrow,.tooltip-arrow:after{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;z-index:0} +.tooltip-arrow:after{content:"";display:block;z-index:1} +.tooltip.top .tooltip-arrow{bottom:-1px;left:50%;margin-left:-5px;border-width:6px 6px 0;border-top-color:#3d434f} +.tooltip.top .tooltip-arrow:after{bottom:2px;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#272e3b} +.tooltip.right .tooltip-arrow{top:50%;left:-1px;margin-top:-5px;border-width:6px 6px 6px 0;border-right-color:#3d434f} +.tooltip.right .tooltip-arrow:after{top:50%;left:2px;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#272e3b} +.tooltip.left .tooltip-arrow{top:50%;right:-1px;margin-top:-5px;border-width:6px 0 6px 6px;border-left-color:#3d434f} +.tooltip.left .tooltip-arrow:after{top:50%;right:2px;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#272e3b} +.tooltip.bottom .tooltip-arrow{top:-1px;left:50%;margin-left:-5px;border-width:0 6px 6px;border-bottom-color:#3d434f} +.tooltip.bottom .tooltip-arrow:after{top:2px;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#272e3b} +.tooltipster-base{padding:5px;font-size:15px;line-height:20px;position:absolute;left:0;top:0;pointer-events:none;width:auto;overflow:visible} +.tooltipster-default{border-radius:1px;border:1px solid #3d434f;background:#272e3b;color:#bfc1c5;max-width:250px;z-index:1070} +.tooltipster-default .tooltipster-content{font-family:"Blizzard","Arial","Helvetica",sans-serif;font-size:11px;line-height:13px;padding:8px 10px;overflow:hidden} +.tooltipster-arrow-top span,.tooltipster-arrow-top-right span,.tooltipster-arrow-top-left span{border-left:5px solid transparent!important;border-right:5px solid transparent!important;border-top:5px solid;bottom:-4px} +.tooltipster-arrow-top .tooltipster-arrow-border,.tooltipster-arrow-top-right .tooltipster-arrow-border,.tooltipster-arrow-top-left .tooltipster-arrow-border{border-left:6px solid transparent!important;border-right:6px solid transparent!important;border-top:6px solid;bottom:-5px} +.tooltipster-arrow-bottom span,.tooltipster-arrow-bottom-right span,.tooltipster-arrow-bottom-left span{border-left:5px solid transparent!important;border-right:5px solid transparent!important;border-bottom:5px solid;top:-4px} +.tooltipster-arrow-bottom .tooltipster-arrow-border,.tooltipster-arrow-bottom-right .tooltipster-arrow-border,.tooltipster-arrow-bottom-left .tooltipster-arrow-border{border-left:6px solid transparent!important;border-right:6px solid transparent!important;border-bottom:6px solid;top:-5px} +.tooltipster-arrow-top span,.tooltipster-arrow-top .tooltipster-arrow-border,.tooltipster-arrow-bottom span,.tooltipster-arrow-bottom .tooltipster-arrow-border{left:0;right:0;margin:0 auto} +.tooltipster-arrow-top-left span,.tooltipster-arrow-bottom-left span{left:3px} +.tooltipster-arrow-top-left .tooltipster-arrow-border,.tooltipster-arrow-bottom-left .tooltipster-arrow-border{left:2px} +.tooltipster-arrow-top-right span,.tooltipster-arrow-bottom-right span{right:3px} +.tooltipster-arrow-top-right .tooltipster-arrow-border,.tooltipster-arrow-bottom-right .tooltipster-arrow-border{right:2px} +.tooltipster-arrow-left span,.tooltipster-arrow-left .tooltipster-arrow-border{border-top:5px solid transparent!important;border-bottom:5px solid transparent!important;border-left:5px solid;top:50%;margin-top:-4px;right:-5px} +.tooltipster-arrow-left .tooltipster-arrow-border{border-top:6px solid transparent!important;border-bottom:6px solid transparent!important;border-left:6px solid;margin-top:-5px} +.tooltipster-arrow-right span,.tooltipster-arrow-right .tooltipster-arrow-border{border-top:5px solid transparent!important;border-bottom:5px solid transparent!important;border-right:5px solid;top:50%;margin-top:-5px;left:-5px} +.tooltipster-arrow-right .tooltipster-arrow-border{border-top:6px solid transparent!important;border-bottom:6px solid transparent!important;border-right:6px solid;margin-top:-6px} +.tooltipster-icon{cursor:help;margin-left:4px} +body{font-family:"Blizzard","Arial","Helvetica",sans-serif;font-size:15px;line-height:20px} +body:lang(zh-CN){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft YaHei","Hei SC",sans-serif} +body:lang(zh-TW){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft JhengHei","Tei TC",sans-serif} +body:lang(ko){font-family:"Blizzard","Arial","Helvetica","?????? ??????","Malgun Gothic","????????????????????????","AppleSDGothicNeo","????????????","AppleGothic","??????","Dotum",sans-serif} +body:lang(ja){font-family:"Blizzard","Arial","Helvetica","????????????","Meiryo","?????????????????? Pro","Hiragino Kaku Gothic Pro","???????????????","Yu Gothic",sans-serif} +body:lang(th){font-family:"Blizzard","Tahoma","Arial","Helvetica",sans-serif} +h1,h2,h3,h4,h5,h6,.heading-1,.heading-2,.heading-3,.heading-4,.heading-5,.heading-6{margin:0 0 33px 0} +h1 strong,h2 strong,h3 strong,h4 strong,h5 strong,h6 strong,.heading-1 strong,.heading-2 strong,.heading-3 strong,.heading-4 strong,.heading-5 strong,.heading-6 strong{font-weight:400} +h1,.heading-1{font-weight:300;font-size:35px;line-height:40px;color:#fff} +h1 strong,.heading-1 strong,h1 b,.heading-1 b{font-weight:300} +h2,.heading-2{font-weight:300;font-size:23px;line-height:30px;color:#fff} +h3,.heading-3{font-weight:400;font-size:17px;line-height:20px;color:#fff} +h4,.heading-4{font-weight:400;font-size:15px;line-height:20px;color:#fff} +h5,.heading-5{font-weight:400;font-size:13px;line-height:20px;margin:0 0 8.25px 0;color:#fff} +h6,.heading-6{font-weight:400;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;color:#fff;margin:0 0 8.25px 0} +.heading-6+.heading-1,.heading-6+.heading-2,.heading-6+.heading-3{margin-top:-8.25px} +.heading-1+.heading-6,.heading-2+.heading-6,.heading-3+.heading-6{margin-top:-33px;margin-bottom:33px} +p+.heading-1,ul+.heading-1,ol+.heading-1,dl+.heading-1,pre+.heading-1,blockquote+.heading-1,p+.heading-2,ul+.heading-2,ol+.heading-2,dl+.heading-2,pre+.heading-2,blockquote+.heading-2,p+.heading-3,ul+.heading-3,ol+.heading-3,dl+.heading-3,pre+.heading-3,blockquote+.heading-3,p+.heading-4,ul+.heading-4,ol+.heading-4,dl+.heading-4,pre+.heading-4,blockquote+.heading-4,p+.heading-5+.heading-6,ul+.heading-5+.heading-6,ol+.heading-5+.heading-6,dl+.heading-5+.heading-6,pre+.heading-5+.heading-6,blockquote+.heading-5+.heading-6{margin-top:66px} +h1 small,h2 small,h3 small,h4 small,.heading-1 .subheading,.heading-2 .subheading,.heading-3 .subheading,.heading-4 .subheading{color:#fff} +h1 small,.heading-1 .subheading{font-size:17px;line-height:20px} +h2 small,.heading-2 .subheading{font-size:15px;line-height:20px} +.title{font-size:15px;line-height:20px;font-weight:400;text-transform:uppercase;letter-spacing:.075em;color:#fff} +.title .subtitle{color:#fff} +.title a{color:#fff} +.title a:focus,.title a:hover{color:#fff} +.title [class^="icon-24-"],.title [class*=" icon-24-"]{margin-top:-2px} +.muted{color:#fff} +.muted a{color:rgba(0,174,255,0.7)} +.muted a:hover{color:#fff} +a.muted:hover{color:#fff} +.text-warning{color:#d8ac15} +a.text-warning:hover{color:#fff} +.text-error{color:#cd0606} +a.text-error:hover{color:#fff} +.text-info{color:#00aeff} +a.text-info:hover{color:#fff} +.text-success{color:#00a83c} +a.text-success:hover{color:#fff} +b{color:#fff;font-weight:400} +strong{color:#fff;font-weight:400} +s{color:#fff} +del{color:#fff} +ins{color:#fff} +code{color:#fff} +samp{color:#fff} +kbd{color:#fff;font-weight:700} +var{color:#fff} +code,kbd,pre,samp{font-family:"Consolas","Monaco","Menlo","Courier New",monospace} +abbr[title],abbr[data-original-title]{border-color:#272727} +.initialism{font-size:14px} +small{font-size:86.66666667%;color:#fff} +p{margin:0 0 33px 0;line-height:25px} +ul,ol{padding:0;margin:0 0 33px 30px;line-height:25px} +ul ul,ol ul,ul ol,ol ol{margin-top:20.625px} +li{line-height:20px;margin:0 0 20.625px 0;padding-left:10px} +li:last-of-type{margin-bottom:0} +li p{margin-bottom:20.625px} +ul.icons li,ol.icons li{padding-left:40px} +ul.icons li [class^="icon-"],ol.icons li [class^="icon-"],ul.icons li [class*=" icon-"],ol.icons li [class*=" icon-"]{left:12px} +ul.inline>li,ol.inline>li{padding-left:10px} +dl{margin:0 0 33px 0} +dl dt{font-weight:400;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;color:#fff} +dl dd{margin:0 0 20.625px 40px} +.dl-horizontal{margin-bottom:20px} +blockquote{padding:0 0 0 20px;margin:0 0 33px 0;border-left:5px solid #272727} +blockquote p{color:#fff} +blockquote .attribution{font-size:13px;line-height:20px;margin-top:20px;color:#fff} +blockquote.pull-right{padding-right:20px;border-right:5px solid #272727} +address{margin-bottom:20px;line-height:20px} +hr{margin:66px 0 20.625px;border-bottom:1px solid #272727} +.documentation-section h1,.documentation-section h2,.documentation-section h3,.documentation-section h4,.documentation-section h5,.documentation-section h6,.documentation-section .heading-1,.documentation-section .heading-2,.documentation-section .heading-3,.documentation-section .heading-4,.documentation-section .heading-5,.documentation-section .heading-6{max-width:800px} +.documentation-section>p,.documentation-section>ul.unstyled,.documentation-section>ol.unstyled{max-width:800px} +.documentation-section>p:last-child,.documentation-section>ul.unstyled:last-child,.documentation-section>ol.unstyled:last-child{margin-bottom:0} +.documentation-section>ul:not(.nav):not(.pager):not(.thumbnails),.documentation-section>ol{max-width:760px} +.documentation-section>blockquote>p{max-width:775px} +.news-article .article-content *:not(a){color:#fff} +.news-article>p,.news-article>ul:not(.nav),.news-article>ol{margin-bottom:25px} +.news-article>p:last-child,.news-article>ul:not(.nav):last-child,.news-article>ol:last-child{margin-bottom:0} +.news-article>.heading-2,.news-article>.heading-3,.news-article>.heading-4,.news-article>.heading-5{margin-bottom:25px} +.news-article p{margin-bottom:25px} +.news-article p+.heading-1,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-1,.news-article ol+.heading-1,.news-article dl+.heading-1,.news-article p+.heading-2,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-2,.news-article ol+.heading-2,.news-article dl+.heading-2,.news-article p+.heading-3,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-3,.news-article ol+.heading-3,.news-article dl+.heading-3,.news-article p+.heading-4,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-4,.news-article ol+.heading-4,.news-article dl+.heading-4,.news-article p+.heading-5+.heading-6,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-5+.heading-6,.news-article ol+.heading-5+.heading-6,.news-article dl+.heading-5+.heading-6{margin-top:40px} +.news-article hr{margin-top:25px} +.well{font-size:13px;min-height:20px;border:1px solid #000;padding:20px;margin-bottom:40px;background-color:#272727;box-shadow:0 0 0 1px #ccc inset,0 5px 10px rgba(0,0,0,0.75);-moz-box-sizing:border-box;box-sizing:border-box} +.well blockquote{border-color:#ccc} +.well p,.well ul,.well ol,.well dl{font-size:13px;line-height:20px;margin-bottom:20px} +.well p:last-child,.well ul:last-child,.well ol:last-child,.well dl:last-child{margin-bottom:0} +.well-large{padding:40px 20px} +.well-small{padding:5px 20px} +@media screen and (max-width:767px){.btn,.btn.btn-wide{font-size:17px;width:100%} +.form-actions .btn{float:inherit} +.form-actions .btn+.btn{margin-left:0;margin-top:20px} +select optgroup{font-size:15px} +select option{font-size:15px} +.modal{width:90%;margin-left:-45%} +} \ No newline at end of file diff --git a/current/toolkit/css/toolkit/bnet-responsive.min.css b/current/toolkit/css/toolkit/bnet-responsive.min.css new file mode 100644 index 00000000..4fb0d748 --- /dev/null +++ b/current/toolkit/css/toolkit/bnet-responsive.min.css @@ -0,0 +1,2807 @@ +/** + * Battle.net Front end Toolkit + * + * @copyright ©2013 Blizzard Entertainment, Inc. All rights reserved. + * + * Twitter Bootstrap + * + * @see http://twitter.github.com/bootstrap/ + * @copyright ©2011 Twitter, Inc. All rights reserved. + * @license http://www.apache.org/licenses/LICENSE-2.0 + * + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Twitter typeahead.js + * + * @see https://github.com/twitter/typeahead.js + * @copyright ©2013 Twitter, Inc. All rights reserved. + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) 2013 Twitter, Inc + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Normalize.css + * + * @see http://git.io/normalize + * @copyright Nicolas Gallagher and Jonathan Neal + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) Nicolas Gallagher and Jonathan Neal + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Normalize.css + * + * @see http://scobo.github.io/lodestone/ + * @copyright D Scott Boyce + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) D Scott Boyce + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Unsemantic + * + * @see http://unsemantic.com + * @copyright Nathan Smith + * @license http://opensource.org/licenses/mit-license.php + * @license http://www.gnu.org/licenses/gpl.html + */ +/*! Lodestone v2.0.1 | MIT License | http://scobo.github.io/lodestone/ */.affix{position:fixed} +.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.clearfix:before,.clearfix:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.clearfix:after{clear:both} +.pull-right{float:right} +.pull-left{float:left} +.icon-spacer{background-image:none!important} +body .body-content{-webkit-transition:opacity,0.4s;transition:opacity .4s} +body.preload .body-content{opacity:0} +.fade{opacity:0;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.fade.in{opacity:1} +.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height,0.4s;transition:height .4s} +.collapse.in{height:auto} +.invisible{visibility:hidden!important} +.hide{display:none!important} +.show{display:block!important} +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} +audio,canvas,video{display:inline-block} +audio:not([controls]){display:none;height:0} +[hidden],template{display:none} +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;height:auto} +body{margin:0;height:auto} +a{text-decoration:none;background:transparent} +a:focus{outline:0} +a:active,a:hover{outline:0} +h1{font-size:2em;margin:.67em 0} +abbr[title]{border-bottom:1px dotted} +b,strong{font-weight:700} +dfn{font-style:italic} +hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} +mark{background:#ff0;color:#000} +code,kbd,pre,samp{font-family:monospace,serif;font-size:1em} +pre{white-space:pre-wrap} +q{quotes:"???" "???" "???" "???"} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-0.5em} +sub{bottom:-0.25em} +img{border:0} +svg:not(:root){overflow:hidden} +figure{margin:0} +fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em} +legend{border:0;padding:0} +button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +button,input{line-height:normal} +button,select{text-transform:none} +button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} +input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box} +input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +textarea{overflow:auto;vertical-align:top} +table{border-collapse:collapse;border-spacing:0} +.accordion-heading .accordion-toggle{display:block} +.modal.agegate{overflow:visible} +.modal.agegate .modal-body{overflow:visible} +.btn{display:inline-block;text-align:center;vertical-align:middle;cursor:pointer;-moz-box-sizing:border-box;box-sizing:border-box} +.btn:focus{outline:0} +.btn.active,.btn:active{outline:0} +.btn.loading{position:relative;overflow:hidden} +.btn.disabled,.btn[disabled]{cursor:default!important} +.btn.disabled-loading{overflow:hidden;position:relative} +.btn-block{display:block;width:100%;padding-left:0;padding-right:0} +input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%} +.carousel{position:relative} +.carousel .carousel-inner{overflow:hidden;width:100%;height:100%;position:relative} +.carousel .carousel-inner .cover{width:100%;height:100%;position:absolute;z-index:1} +.carousel .carousel-inner .carousel-caption{width:100%;height:100px;position:absolute;bottom:-55px;z-index:0} +.carousel .carousel-inner .carousel-caption .bg-layer{width:100%;height:100%;position:absolute;top:60px;left:0;z-index:-1} +.carousel .carousel-inner .carousel-caption .summary{height:32px} +.carousel .carousel-inner>.item{display:none;position:relative} +.carousel .carousel-inner>.item img{display:block;line-height:1;width:100%;height:auto} +.carousel .carousel-inner>.active,.carousel .carousel-inner>.next,.carousel .carousel-inner>.prev{display:block} +.carousel .carousel-inner>.active{left:0} +.carousel .carousel-inner>.next,.carousel .carousel-inner>.prev{position:absolute;top:0;width:100%} +.carousel .carousel-inner>.next{left:100%} +.carousel .carousel-inner>.prev{left:-100%} +.carousel .carousel-inner>.next.left,.carousel .carousel-inner>.prev.right{left:0} +.carousel .carousel-inner>.active.left{left:-100%} +.carousel .carousel-inner>.active.right{left:100%} +.carousel.crossfade .carousel-inner{overflow:hidden;width:100%;height:100%;position:relative} +.carousel.crossfade .carousel-inner>.item{display:none;position:relative;opacity:0} +.carousel.crossfade .carousel-inner>.item img{display:block;line-height:1;width:100%;height:auto} +.carousel.crossfade .carousel-inner>.active,.carousel.crossfade .carousel-inner>.next,.carousel.crossfade .carousel-inner>.prev{display:block} +.carousel.crossfade .carousel-inner>.active{opacity:1} +.carousel.crossfade .carousel-inner>.next,.carousel.crossfade .carousel-inner>.prev{position:absolute;top:0;left:0;opacity:0} +.carousel.crossfade .carousel-inner>.active.left,.carousel.crossfade .carousel-inner>.active.right{left:0;opacity:0} +.carousel .carousel-controls{position:absolute;z-index:100} +.carousel .carousel-controls button{position:absolute} +.carousel .carousel-controls button span{display:block;position:relative;z-index:-1} +code{white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box} +pre{display:block;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;-moz-box-sizing:border-box;box-sizing:border-box} +pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0} +.pre-scrollable{max-height:340px;overflow-y:scroll} +.dropdown{position:relative} +.dropdown-toggle{display:inline-block;position:relative} +.dropdown-toggle:active,.open .dropdown-toggle{outline:0} +.dropdown-menu{position:absolute;top:100%;display:none;float:left;min-width:160px;margin:0;list-style:none} +.dropdown-menu.pull-right{right:0;left:auto} +.dropdown-menu li>a{display:block;clear:both;white-space:nowrap} +.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{text-decoration:none} +.dropdown-menu .active>a,.dropdown-menu .active>a:hover,.dropdown-menu .active>a:focus{text-decoration:none} +.dropdown-menu .disabled>a:hover,.dropdown-menu .disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;cursor:default} +.open>.dropdown-menu{display:block} +.pull-right>.dropdown-menu{right:0;left:auto} +.dropdown-submenu{position:relative} +.dropdown .dropdown-menu .nav-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.label,.badge{display:inline-block;vertical-align:baseline;white-space:nowrap} +.badge{text-align:center} +.label:empty,.badge:empty{display:none} +a.label:focus,a.label:hover,a.badge:focus,a.badge:hover{cursor:pointer} +.media{overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box} +.media .img{float:left} +.media .img img{display:block} +.media .bd{overflow:hidden} +.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000} +.modal-backdrop.fade{opacity:0} +.modal-backdrop,.modal-backdrop.fade.in{opacity:.8} +.nav{margin:0;list-style:none} +.nav>li{padding:0;margin:0;float:left} +.nav>li>a{display:block} +.nav>li:last-child{margin-right:0} +.nav>li.pull-right{float:right} +.navbar .nav:before,.navbar .nav:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.navbar .nav:after{clear:both} +.navbar .nav>li:last-child{margin-right:0} +.navbar:not(.header) .nav>li:last-child,.navbar:not(.header) .nav>li.pull-right{margin-right:0} +.nav-list>li{float:none} +.nav-list>li>a{display:inline-block} +.nav-list>li.disabled>a{cursor:default} +.nav-list.icons>li{position:relative} +.nav-list.icons>li [class^="icon-"]:not(.icon-external-link),.nav-list.icons>li [class*="icon-"]:not(.icon-external-link){position:absolute} +.nav-tabs:before{content:"";display:table;line-height:0;visibility:hidden} +.nav.nav-tabs:after{content:"\00A0\00A0\00A0";display:table-cell;clear:both;width:1%;overflow:hidden;visibility:visible} +.nav-tabs>li{float:left} +.nav-tabs>li:first-child{padding-left:0} +.nav-tabs>li>a{-webkit-transition:background-color .2s,color .2s;transition:background-color .2s,color .2s} +.nav-tabs>li.active{border-bottom:0} +.nav-tabs>li.active>a{border-bottom-color:transparent;cursor:default} +.nav-tabs>li.disabled>a{cursor:default} +.nav-pills:before,.nav-pills:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.nav-pills:after{clear:both} +.nav-pills>li{float:left} +.nav-pills>li>a{text-decoration:none;-webkit-transition:box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.nav-pills>li>a:active{outline:0} +.nav-pills>li:last-child>a{margin:0} +.nav-pills>li.disabled>a{cursor:default} +.nav-header{display:block} +.tabbable:before,.tabbable:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.tabbable:after{clear:both} +.tab-content{overflow:auto} +.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;overflow:hidden} +.tab-content>.active,.pill-content>.active{display:block} +.pager{display:inline-block;margin-left:0;margin-bottom:0} +.pager:before,.pager:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.pager:after{clear:both} +.pager>li{padding-left:0;display:block;float:left} +.pager>li>a,.pager>li>span{display:block;text-align:center} +.pager>li>a:focus{outline:0} +.pager.aligned{display:block} +.pager.aligned>.next{float:right} +.pagination ul{display:inline-block;margin-left:0;margin-bottom:0} +.pagination ul>li{padding-left:0;display:block;float:left} +.pagination ul>li>a,.pagination ul>li>span{display:block;text-align:center} +.pagination ul>li>a:active{outline:0} +.pagination-group{overflow:hidden} +.pagination-group .pagination-left{float:left} +.pagination-group .pagination-right{float:right} +.pagination-group .pagination-right-absolute{position:absolute;right:0} +.pagination-left{text-align:right} +.pagination-centered{text-align:center} +.pagination-right{text-align:right} +.pagination-inline{display:inline-block;vertical-align:middle} +.pagination select.view-per-page{float:left;margin:0 6px 0 0} +.popover{position:absolute;top:0;left:0;display:none;text-align:left;white-space:normal} +.popover-content p:last-child,.popover-content ul:last-child,.popover-content ol:last-child{margin-bottom:0} +.progress{overflow:hidden;position:relative} +.progress:after{content:"";display:block;position:absolute;width:100%} +.progress .bar{position:relative;float:left;top:0;width:0;text-align:left;padding:0;z-index:1} +.progress.active .bar:after{content:"";display:block;overflow:hidden;position:absolute} +.progress-striped .bar:before{content:"";display:block;width:100%;overflow:hidden;position:absolute;left:0} +.progress .description{position:absolute;display:block;z-index:2} +.progress-tracker{overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.progress-tracker:before,.progress-tracker:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.progress-tracker:after{clear:both} +.progress-tracker li{display:block;float:left} +.progress-tracker li:first-of-type{padding-left:0} +.progress-tracker li:last-of-type{padding-right:0} +.scrollbar-content{position:relative} +.scrollbar-content .viewport{overflow:hidden;position:relative} +.scrollbar-content .overview{list-style:none;position:absolute;left:0;top:0;padding:0;margin:0} +.scrollbar-content .scrollbar{position:absolute;right:0;top:0} +.scrollbar-content .track{position:relative;height:100%} +.scrollbar-content .thumb{overflow:hidden;position:absolute;top:0;left:0;-moz-box-sizing:border-box;box-sizing:border-box} +.scrollbar-content .thumb .end{overflow:hidden;display:block;height:100%} +.scrollbar-content .disable{display:none} +.no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +[class^="icon-"],[class*=" icon-"]{display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-repeat:no-repeat;text-indent:-9999px;-webkit-transition:opacity,0.2s;transition:opacity .2s} +[class^="icon-24-"],[class*=" icon-24-"]{width:24px;height:24px} +[class^="icon-32-"],[class*=" icon-32-"]{width:32px;height:32px} +[class^="icon-48-"],[class*=" icon-48-"]{width:48px;height:48px} +[class^="icon-64-"],[class*=" icon-64-"]{width:64px;height:64px} +[class^="icon-128-"],[class*=" icon-128-"]{width:128px;height:128px} +[class^="icon-payment-"],[class*=" icon-payment-"]{width:24px} +[class^="icon-24-payment-"],[class*=" icon-24-payment-"]{width:36px} +.icon-placeholder{background-position:0 0} +.icon-ban-circle{background-position:-16px 0} +.icon-time{background-position:-32px 0} +.icon-add-time{background-position:-48px 0} +.icon-question-circle{background-position:-64px 0} +.icon-balance{background-position:-80px 0} +.icon-remove-circle{background-position:-96px 0} +.icon-mouse{background-position:-112px 0} +.icon-mouse-delete{background-position:-128px 0} +.icon-envelope{background-position:-144px 0} +.icon-open-envelope{background-position:0 -16px} +.icon-home{background-position:-16px -16px} +.icon-play{background-position:-32px -16px} +.icon-pause{background-position:-48px -16px} +.icon-file{background-position:-64px -16px} +.icon-search{background-position:-80px -16px} +.icon-edit{background-position:-96px -16px} +.icon-shopping-cart{background-position:-112px -16px} +.icon-download-alt{background-position:-128px -16px} +.icon-achievement{background-position:-144px -16px} +.icon-heart{background-position:0 -32px} +.icon-heart-broken{background-position:-16px -32px} +.icon-comment{background-position:-32px -32px} +.icon-gavel{background-position:-48px -32px} +.icon-broadcast{background-position:-64px -32px} +.icon-service{background-position:-80px -32px} +.icon-headphones-alt{background-position:-96px -32px} +.icon-user{background-position:-112px -32px} +.icon-flask{background-position:-128px -32px} +.icon-chevron-left{background-position:-144px -32px} +.icon-chevron-right{background-position:0 -48px} +.icon-share{background-position:-16px -48px} +.icon-bookmarks{background-position:-32px -48px} +.icon-cog{background-position:-48px -48px} +.icon-mobile{background-position:-64px -48px} +.icon-download-square{background-position:-80px -48px} +.icon-upload{background-position:-96px -48px} +.icon-group{background-position:-112px -48px} +.icon-crown{background-position:-128px -48px} +.icon-globe-alt{background-position:-144px -48px} +.icon-series{background-position:0 -64px} +.icon-paw{background-position:-16px -64px} +.icon-trash{background-position:-32px -64px} +.icon-windows{background-position:-48px -64px} +.icon-apple{background-position:-64px -64px} +.icon-gift{background-position:-80px -64px} +.icon-refresh{background-position:-96px -64px} +.icon-reset{background-position:-112px -64px} +.icon-check{background-position:-128px -64px} +.icon-external-link{background-position:-144px -64px} +.icon-character{background-position:0 -80px} +.icon-character-add{background-position:-16px -80px} +.icon-character-search{background-position:-32px -80px} +.icon-character-remove{background-position:-48px -80px} +.icon-character-cog{background-position:-64px -80px} +.icon-download-alt-cog{background-position:-80px -80px} +.icon-download-alt-search{background-position:-96px -80px} +.icon-lock{background-position:-112px -80px} +.icon-warning-sign{background-position:-128px -80px} +.icon-ok{background-position:-144px -80px} +.icon-speaker{background-position:0 -96px} +.icon-wow{background-position:-16px -96px} +.icon-warcraft{background-position:-32px -96px} +.icon-starcraft{background-position:-48px -96px} +.icon-starcraft-2{background-position:-64px -96px} +.icon-diablo-3{background-position:-80px -96px} +.icon-battlenet{background-position:-96px -96px} +.icon-remove{background-position:-112px -96px} +.icon-repeat{background-position:-128px -96px} +.icon-dropdown{background-position:-144px -96px} +.icon-shortcut{background-position:0 -112px} +.icon-wrench{background-position:-16px -112px} +.icon-plus{background-position:-32px -112px} +.icon-fullscreen{background-position:-48px -112px} +.icon-glass{background-position:-64px -112px} +.icon-music-alt{background-position:-80px -112px} +.icon-music{background-position:-96px -112px} +.icon-star-empty{background-position:-112px -112px} +.icon-star{background-position:-128px -112px} +.icon-film{background-position:-144px -112px} +.icon-th-large{background-position:0 -128px} +.icon-th{background-position:-16px -128px} +.icon-th-list{background-position:-32px -128px} +.icon-zoom-in{background-position:-48px -128px} +.icon-zoom-out{background-position:-64px -128px} +.icon-off{background-position:-80px -128px} +.icon-signal{background-position:-96px -128px} +.icon-road{background-position:-112px -128px} +.icon-upload-square{background-position:-128px -128px} +.icon-download{background-position:-144px -128px} +.icon-inbox{background-position:0 -144px} +.icon-play-circle{background-position:-16px -144px} +.icon-list-alt{background-position:-32px -144px} +.icon-flag{background-position:-48px -144px} +.icon-headphones{background-position:-64px -144px} +.icon-volume{background-position:-80px -144px} +.icon-volume-off{background-position:-96px -144px} +.icon-volume-down{background-position:-112px -144px} +.icon-volume-up{background-position:-128px -144px} +.icon-qrcode{background-position:-144px -144px} +.icon-barcode{background-position:0 -160px} +.icon-tag{background-position:-16px -160px} +.icon-tags{background-position:-32px -160px} +.icon-book{background-position:-48px -160px} +.icon-bookmark{background-position:-64px -160px} +.icon-print{background-position:-80px -160px} +.icon-camera{background-position:-96px -160px} +.icon-font{background-position:-112px -160px} +.icon-bold{background-position:-128px -160px} +.icon-italic{background-position:-144px -160px} +.icon-text-height{background-position:0 -176px} +.icon-text-width{background-position:-16px -176px} +.icon-align-left{background-position:-32px -176px} +.icon-align-center{background-position:-48px -176px} +.icon-align-right{background-position:-64px -176px} +.icon-align-justify{background-position:-80px -176px} +.icon-list{background-position:-96px -176px} +.icon-indent-left{background-position:-112px -176px} +.icon-indent-right{background-position:-128px -176px} +.icon-facetime-video{background-position:-144px -176px} +.icon-picture{background-position:0 -192px} +.icon-pencil{background-position:-16px -192px} +.icon-map-marker{background-position:-32px -192px} +.icon-adjust{background-position:-48px -192px} +.icon-tint{background-position:-64px -192px} +.icon-move{background-position:-80px -192px} +.icon-step-backward{background-position:-96px -192px} +.icon-fast-backward{background-position:-112px -192px} +.icon-backward{background-position:-128px -192px} +.icon-step-forward{background-position:-144px -192px} +.icon-fast-forward{background-position:0 -208px} +.icon-forward{background-position:-16px -208px} +.icon-eject{background-position:-32px -208px} +.icon-square{background-position:-48px -208px} +.icon-plus-circle{background-position:-64px -208px} +.icon-minus-circle{background-position:-80px -208px} +.icon-plus-sign{background-position:-96px -208px} +.icon-minus-sign{background-position:-112px -208px} +.icon-remove-sign{background-position:-128px -208px} +.icon-ok-circle{background-position:-144px -208px} +.icon-ok-sign{background-position:0 -224px} +.icon-minus{background-position:-16px -224px} +.icon-info-circle{background-position:-32px -224px} +.icon-info-sign{background-position:-48px -224px} +.icon-question-sign{background-position:-64px -224px} +.icon-screenshot{background-position:-80px -224px} +.icon-arrow-right{background-position:-96px -224px} +.icon-arrow-left{background-position:-112px -224px} +.icon-arrow-up{background-position:-128px -224px} +.icon-arrow-down{background-position:-144px -224px} +.icon-share-alt{background-position:0 -240px} +.icon-resize-full{background-position:-16px -240px} +.icon-resize-small{background-position:-32px -240px} +.icon-asterisk{background-position:-48px -240px} +.icon-exclamation-circle{background-position:-64px -240px} +.icon-exclamation-sign{background-position:-80px -240px} +.icon-leaf{background-position:-96px -240px} +.icon-fire{background-position:-112px -240px} +.icon-eye-open{background-position:-128px -240px} +.icon-eye-close{background-position:-144px -240px} +.icon-plane{background-position:0 -256px} +.icon-calendar{background-position:-16px -256px} +.icon-random{background-position:-32px -256px} +.icon-magnet{background-position:-48px -256px} +.icon-chevron-down{background-position:-64px -256px} +.icon-chevron-up{background-position:-80px -256px} +.icon-folder-close{background-position:-96px -256px} +.icon-folder-open{background-position:-112px -256px} +.icon-resize-vertical{background-position:-128px -256px} +.icon-resize-horizontal{background-position:-144px -256px} +.icon-hdd{background-position:0 -272px} +.icon-bullhorn{background-position:-16px -272px} +.icon-bell{background-position:-32px -272px} +.icon-certificate-empty{background-position:-48px -272px} +.icon-certificate{background-position:-64px -272px} +.icon-thumbs-up{background-position:-80px -272px} +.icon-thumbs-down{background-position:-96px -272px} +.icon-hand-right{background-position:-112px -272px} +.icon-hand-left{background-position:-128px -272px} +.icon-hand-up{background-position:-144px -272px} +.icon-hand-down{background-position:0 -288px} +.icon-arrow-right-square{background-position:-16px -288px} +.icon-arrow-left-square{background-position:-32px -288px} +.icon-arrow-right-circle{background-position:-48px -288px} +.icon-arrow-left-circle{background-position:-64px -288px} +.icon-globe{background-position:-80px -288px} +.icon-tasks{background-position:-96px -288px} +.icon-filter{background-position:-112px -288px} +.icon-briefcase{background-position:-128px -288px} +.icon-underline{background-position:-144px -288px} +.icon-sort{background-position:0 -304px} +.icon-sort-descending{background-position:-16px -304px} +.icon-sort-ascending{background-position:-32px -304px} +.icon-sort-disabled{background-position:-48px -304px} +.icon-arrow-down-solid{background-position:-64px -304px} +.icon-arrow-up-solid{background-position:-80px -304px} +.icon-arrow-left-solid{background-position:-96px -304px} +.icon-arrow-right-solid{background-position:-112px -304px} +.icon-0-sign{background-position:-128px -304px} +.icon-1-sign{background-position:-144px -304px} +.icon-2-sign{background-position:0 -320px} +.icon-3-sign{background-position:-16px -320px} +.icon-4-sign{background-position:-32px -320px} +.icon-5-sign{background-position:-48px -320px} +.icon-6-sign{background-position:-64px -320px} +.icon-7-sign{background-position:-80px -320px} +.icon-8-sign{background-position:-96px -320px} +.icon-9-sign{background-position:-112px -320px} +.icon-secure{background-position:-128px -320px} +.icon-not-secure{background-position:-144px -320px} +.icon-add-wow{background-position:0 -336px} +.icon-add-warcraft{background-position:-16px -336px} +.icon-add-starcraft{background-position:-32px -336px} +.icon-add-starcraft-2{background-position:-48px -336px} +.icon-add-diablo-3{background-position:-64px -336px} +.icon-add-battlenet{background-position:-80px -336px} +.icon-free-game-services{background-position:-96px -336px} +.icon-character-services{background-position:-112px -336px} +.icon-facebook{background-position:-128px -336px} +.icon-twitter{background-position:-144px -336px} +.icon-hearthstone{background-position:0 -352px} +.icon-add-hearthstone{background-position:-16px -352px} +.icon-heroes{background-position:-32px -352px} +.icon-add-heroes{background-position:-48px -352px} +.icon-friends-wow{background-position:-64px -352px} +.icon-friends-warcraft{background-position:-80px -352px} +.icon-friends-starcraft{background-position:-96px -352px} +.icon-friends-starcraft-2{background-position:-112px -352px} +.icon-friends-diablo-3{background-position:-128px -352px} +.icon-friends-battlenet{background-position:-144px -352px} +.icon-friends-hearthstone{background-position:0 -368px} +.icon-friends-heroes{background-position:-16px -368px} +.icon-news-wow{background-position:-32px -368px} +.icon-news-warcraft{background-position:-48px -368px} +.icon-news-starcraft{background-position:-64px -368px} +.icon-news-starcraft-2{background-position:-80px -368px} +.icon-news-diablo-3{background-position:-96px -368px} +.icon-news-battlenet{background-position:-112px -368px} +.icon-news-hearthstone{background-position:-128px -368px} +.icon-news-heroes{background-position:-144px -368px} +.icon-git{background-position:0 -384px} +.icon-bootstrap{background-position:-16px -384px} +.icon-maven{background-position:-32px -384px} +.icon-twitch{background-position:-48px -384px} +.icon-youtube{background-position:-64px -384px} +.icon-popout{background-position:-80px -384px} +.icon-share-opts{background-position:-96px -384px} +.icon-logout{background-position:-112px -384px} +.icon-signup{background-position:-128px -384px} +.icon-queue{background-position:-144px -384px} +.icon-maintenance{background-position:0 -400px} +.icon-security{background-position:-16px -400px} +.icon-authenticator-unknown{background-position:-32px -400px} +.icon-authenticator-present{background-position:-48px -400px} +.icon-account-forgot{background-position:-64px -400px} +.icon-account-locked{background-position:-80px -400px} +.icon-email-forgot{background-position:-96px -400px} +.icon-remove-authenticator{background-position:-112px -400px} +.icon-authenticator-mobile{background-position:-128px -400px} +.icon-ipin{background-position:-144px -400px} +.icon-overwatch{background-position:0 -416px} +.icon-add-overwatch{background-position:-16px -416px} +.icon-friends-overwatch{background-position:-32px -416px} +.icon-news-overwatch{background-position:-48px -416px} +.icon-disk{background-position:-64px -416px} +.icon-confirm{background-position:-80px -416px} +.icon-decline{background-position:-96px -416px} +.icon-android{background-position:-112px -416px} +.icon-xbone{background-position:-128px -416px} +.icon-x360{background-position:-144px -416px} +.icon-ps3{background-position:0 -432px} +.icon-ps4{background-position:-16px -432px} +.icon-48-placeholder{background-position:0 0} +.icon-48-ban-circle{background-position:-48px 0} +.icon-48-time{background-position:-96px 0} +.icon-48-add-time{background-position:-144px 0} +.icon-48-question-circle{background-position:-192px 0} +.icon-48-balance{background-position:-240px 0} +.icon-48-remove-circle{background-position:-288px 0} +.icon-48-mouse{background-position:-336px 0} +.icon-48-mouse-delete{background-position:-384px 0} +.icon-48-envelope{background-position:-432px 0} +.icon-48-open-envelope{background-position:0 -48px} +.icon-48-home{background-position:-48px -48px} +.icon-48-play{background-position:-96px -48px} +.icon-48-pause{background-position:-144px -48px} +.icon-48-file{background-position:-192px -48px} +.icon-48-search{background-position:-240px -48px} +.icon-48-edit{background-position:-288px -48px} +.icon-48-shopping-cart{background-position:-336px -48px} +.icon-48-download-alt{background-position:-384px -48px} +.icon-48-achievement{background-position:-432px -48px} +.icon-48-heart{background-position:0 -96px} +.icon-48-heart-broken{background-position:-48px -96px} +.icon-48-comment{background-position:-96px -96px} +.icon-48-gavel{background-position:-144px -96px} +.icon-48-broadcast{background-position:-192px -96px} +.icon-48-service{background-position:-240px -96px} +.icon-48-headphones-alt{background-position:-288px -96px} +.icon-48-user{background-position:-336px -96px} +.icon-48-flask{background-position:-384px -96px} +.icon-48-chevron-left{background-position:-432px -96px} +.icon-48-chevron-right{background-position:0 -144px} +.icon-48-share{background-position:-48px -144px} +.icon-48-bookmarks{background-position:-96px -144px} +.icon-48-cog{background-position:-144px -144px} +.icon-48-mobile{background-position:-192px -144px} +.icon-48-download-square{background-position:-240px -144px} +.icon-48-upload{background-position:-288px -144px} +.icon-48-group{background-position:-336px -144px} +.icon-48-crown{background-position:-384px -144px} +.icon-48-globe-alt{background-position:-432px -144px} +.icon-48-series{background-position:0 -192px} +.icon-48-paw{background-position:-48px -192px} +.icon-48-trash{background-position:-96px -192px} +.icon-48-windows{background-position:-144px -192px} +.icon-48-apple{background-position:-192px -192px} +.icon-48-gift{background-position:-240px -192px} +.icon-48-refresh{background-position:-288px -192px} +.icon-48-reset{background-position:-336px -192px} +.icon-48-check{background-position:-384px -192px} +.icon-48-external-link{background-position:-432px -192px} +.icon-48-character{background-position:0 -240px} +.icon-48-character-add{background-position:-48px -240px} +.icon-48-character-search{background-position:-96px -240px} +.icon-48-character-remove{background-position:-144px -240px} +.icon-48-character-cog{background-position:-192px -240px} +.icon-48-download-alt-cog{background-position:-240px -240px} +.icon-48-download-alt-search{background-position:-288px -240px} +.icon-48-lock{background-position:-336px -240px} +.icon-48-warning-sign{background-position:-384px -240px} +.icon-48-ok{background-position:-432px -240px} +.icon-48-speaker{background-position:0 -288px} +.icon-48-wow{background-position:-48px -288px} +.icon-48-warcraft{background-position:-96px -288px} +.icon-48-starcraft{background-position:-144px -288px} +.icon-48-starcraft-2{background-position:-192px -288px} +.icon-48-diablo-3{background-position:-240px -288px} +.icon-48-battlenet{background-position:-288px -288px} +.icon-48-remove{background-position:-336px -288px} +.icon-48-repeat{background-position:-384px -288px} +.icon-48-dropdown{background-position:-432px -288px} +.icon-48-shortcut{background-position:0 -336px} +.icon-48-wrench{background-position:-48px -336px} +.icon-48-plus{background-position:-96px -336px} +.icon-48-fullscreen{background-position:-144px -336px} +.icon-48-glass{background-position:-192px -336px} +.icon-48-music-alt{background-position:-240px -336px} +.icon-48-music{background-position:-288px -336px} +.icon-48-star-empty{background-position:-336px -336px} +.icon-48-star{background-position:-384px -336px} +.icon-48-film{background-position:-432px -336px} +.icon-48-th-large{background-position:0 -384px} +.icon-48-th{background-position:-48px -384px} +.icon-48-th-list{background-position:-96px -384px} +.icon-48-zoom-in{background-position:-144px -384px} +.icon-48-zoom-out{background-position:-192px -384px} +.icon-48-off{background-position:-240px -384px} +.icon-48-signal{background-position:-288px -384px} +.icon-48-road{background-position:-336px -384px} +.icon-48-upload-square{background-position:-384px -384px} +.icon-48-download{background-position:-432px -384px} +.icon-48-inbox{background-position:0 -432px} +.icon-48-play-circle{background-position:-48px -432px} +.icon-48-list-alt{background-position:-96px -432px} +.icon-48-flag{background-position:-144px -432px} +.icon-48-headphones{background-position:-192px -432px} +.icon-48-volume{background-position:-240px -432px} +.icon-48-volume-off{background-position:-288px -432px} +.icon-48-volume-down{background-position:-336px -432px} +.icon-48-volume-up{background-position:-384px -432px} +.icon-48-qrcode{background-position:-432px -432px} +.icon-48-barcode{background-position:0 -480px} +.icon-48-tag{background-position:-48px -480px} +.icon-48-tags{background-position:-96px -480px} +.icon-48-book{background-position:-144px -480px} +.icon-48-bookmark{background-position:-192px -480px} +.icon-48-print{background-position:-240px -480px} +.icon-48-camera{background-position:-288px -480px} +.icon-48-font{background-position:-336px -480px} +.icon-48-bold{background-position:-384px -480px} +.icon-48-italic{background-position:-432px -480px} +.icon-48-text-height{background-position:0 -528px} +.icon-48-text-width{background-position:-48px -528px} +.icon-48-align-left{background-position:-96px -528px} +.icon-48-align-right{background-position:-192px -528px} +.icon-48-align-justify{background-position:-240px -528px} +.icon-48-list{background-position:-288px -528px} +.icon-48-indent-left{background-position:-336px -528px} +.icon-48-indent-right{background-position:-384px -528px} +.icon-48-facetime-video{background-position:-432px -528px} +.icon-48-picture{background-position:0 -576px} +.icon-48-pencil{background-position:-48px -576px} +.icon-48-map-marker{background-position:-96px -576px} +.icon-48-adjust{background-position:-144px -576px} +.icon-48-tint{background-position:-192px -576px} +.icon-48-move{background-position:-240px -576px} +.icon-48-step-backward{background-position:-288px -576px} +.icon-48-fast-backward{background-position:-336px -576px} +.icon-48-backward{background-position:-384px -576px} +.icon-48-step-forward{background-position:-432px -576px} +.icon-48-fast-forward{background-position:0 -624px} +.icon-48-forward{background-position:-48px -624px} +.icon-48-eject{background-position:-96px -624px} +.icon-48-square{background-position:-144px -624px} +.icon-48-plus-circle{background-position:-192px -624px} +.icon-48-minus-circle{background-position:-240px -624px} +.icon-48-plus-sign{background-position:-288px -624px} +.icon-48-minus-sign{background-position:-336px -624px} +.icon-48-remove-sign{background-position:-384px -624px} +.icon-48-ok-circle{background-position:-432px -624px} +.icon-48-ok-sign{background-position:0 -672px} +.icon-48-minus{background-position:-48px -672px} +.icon-48-info-circle{background-position:-96px -672px} +.icon-48-info-sign{background-position:-144px -672px} +.icon-48-question-sign{background-position:-192px -672px} +.icon-48-screenshot{background-position:-240px -672px} +.icon-48-arrow-right{background-position:-288px -672px} +.icon-48-arrow-left{background-position:-336px -672px} +.icon-48-arrow-up{background-position:-384px -672px} +.icon-48-arrow-down{background-position:-432px -672px} +.icon-48-share-alt{background-position:0 -720px} +.icon-48-resize-full{background-position:-48px -720px} +.icon-48-resize-small{background-position:-96px -720px} +.icon-48-asterisk{background-position:-144px -720px} +.icon-48-exclamation-circle{background-position:-192px -720px} +.icon-48-exclamation-sign{background-position:-240px -720px} +.icon-48-leaf{background-position:-288px -720px} +.icon-48-fire{background-position:-336px -720px} +.icon-48-eye-open{background-position:-384px -720px} +.icon-48-eye-close{background-position:-432px -720px} +.icon-48-plane{background-position:0 -768px} +.icon-48-calendar{background-position:-48px -768px} +.icon-48-random{background-position:-96px -768px} +.icon-48-magnet{background-position:-144px -768px} +.icon-48-chevron-down{background-position:-192px -768px} +.icon-48-folder-close{background-position:-288px -768px} +.icon-48-folder-open{background-position:-336px -768px} +.icon-48-resize-vertical{background-position:-384px -768px} +.icon-48-resize-horizontal{background-position:-432px -768px} +.icon-48-hdd{background-position:0 -816px} +.icon-48-bullhorn{background-position:-48px -816px} +.icon-48-bell{background-position:-96px -816px} +.icon-48-certificate-empty{background-position:-144px -816px} +.icon-48-certificate{background-position:-192px -816px} +.icon-48-thumbs-up{background-position:-240px -816px} +.icon-48-thumbs-down{background-position:-288px -816px} +.icon-48-hand-right{background-position:-336px -816px} +.icon-48-hand-left{background-position:-384px -816px} +.icon-48-hand-up{background-position:-432px -816px} +.icon-48-hand-down{background-position:0 -864px} +.icon-48-arrow-right-square{background-position:-48px -864px} +.icon-48-arrow-left-square{background-position:-96px -864px} +.icon-48-arrow-right-circle{background-position:-144px -864px} +.icon-48-arrow-left-circle{background-position:-192px -864px} +.icon-48-globe{background-position:-240px -864px} +.icon-48-tasks{background-position:-288px -864px} +.icon-48-filter{background-position:-336px -864px} +.icon-48-briefcase{background-position:-384px -864px} +.icon-48-underline{background-position:-432px -864px} +.icon-48-sort{background-position:0 -912px} +.icon-48-sort-descending{background-position:-48px -912px} +.icon-48-sort-ascending{background-position:-96px -912px} +.icon-48-sort-disabled{background-position:-144px -912px} +.icon-48-arrow-down-solid{background-position:-192px -912px} +.icon-48-arrow-up-solid{background-position:-240px -912px} +.icon-48-arrow-left-solid{background-position:-288px -912px} +.icon-48-arrow-right-solid{background-position:-336px -912px} +.icon-48-0-sign{background-position:-384px -912px} +.icon-48-1-sign{background-position:-432px -912px} +.icon-48-2-sign{background-position:0 -960px} +.icon-48-3-sign{background-position:-48px -960px} +.icon-48-4-sign{background-position:-96px -960px} +.icon-48-5-sign{background-position:-144px -960px} +.icon-48-6-sign{background-position:-192px -960px} +.icon-48-7-sign{background-position:-240px -960px} +.icon-48-8-sign{background-position:-288px -960px} +.icon-48-9-sign{background-position:-336px -960px} +.icon-48-secure{background-position:-384px -960px} +.icon-48-not-secure{background-position:-432px -960px} +.icon-48-add-wow{background-position:0 -1008px} +.icon-48-add-warcraft{background-position:-48px -1008px} +.icon-48-add-starcraft{background-position:-96px -1008px} +.icon-48-add-starcraft-2{background-position:-144px -1008px} +.icon-48-add-diablo-3{background-position:-192px -1008px} +.icon-48-add-battlenet{background-position:-240px -1008px} +.icon-48-free-game-services{background-position:-288px -1008px} +.icon-48-character-services{background-position:-336px -1008px} +.icon-48-facebook{background-position:-384px -1008px} +.icon-48-twitter{background-position:-432px -1008px} +.icon-48-hearthstone{background-position:0 -1056px} +.icon-48-add-hearthstone{background-position:-48px -1056px} +.icon-48-heroes{background-position:-96px -1056px} +.icon-48-add-heroes{background-position:-144px -1056px} +.icon-48-friends-wow{background-position:-192px -1056px} +.icon-48-friends-warcraft{background-position:-240px -1056px} +.icon-48-friends-starcraft{background-position:-288px -1056px} +.icon-48-friends-starcraft-2{background-position:-336px -1056px} +.icon-48-friends-diablo-3{background-position:-384px -1056px} +.icon-48-friends-battlenet{background-position:-432px -1056px} +.icon-48-friends-hearthstone{background-position:0 -1104px} +.icon-48-friends-heroes{background-position:-48px -1104px} +.icon-48-news-wow{background-position:-96px -1104px} +.icon-48-news-warcraft{background-position:-144px -1104px} +.icon-48-news-starcraft{background-position:-192px -1104px} +.icon-48-news-starcraft-2{background-position:-240px -1104px} +.icon-48-news-diablo-3{background-position:-288px -1104px} +.icon-48-news-battlenet{background-position:-336px -1104px} +.icon-48-news-hearthstone{background-position:-384px -1104px} +.icon-48-news-heroes{background-position:-432px -1104px} +.icon-48-git{background-position:0 -1152px} +.icon-48-bootstrap{background-position:-48px -1152px} +.icon-48-maven{background-position:-96px -1152px} +.icon-48-twitch{background-position:-144px -1152px} +.icon-48-youtube{background-position:-192px -1152px} +.icon-48-popout{background-position:-240px -1152px} +.icon-48-share-opts{background-position:-288px -1152px} +.icon-48-logout{background-position:-336px -1152px} +.icon-48-signup{background-position:-384px -1152px} +.icon-48-queue{background-position:-432px -1152px} +.icon-48-maintenance{background-position:0 -1200px} +.icon-48-security{background-position:-48px -1200px} +.icon-48-authenticator-unknown{background-position:-96px -1200px} +.icon-48-authenticator-present{background-position:-144px -1200px} +.icon-48-account-forgot{background-position:-192px -1200px} +.icon-48-account-locked{background-position:-240px -1200px} +.icon-48-email-forgot{background-position:-288px -1200px} +.icon-48-remove-authenticator{background-position:-336px -1200px} +.icon-48-authenticator-mobile{background-position:-384px -1200px} +.icon-48-ipin{background-position:-432px -1200px} +.icon-48-overwatch{background-position:0 -1248px} +.icon-48-add-overwatch{background-position:-48px -1248px} +.icon-48-friends-overwatch{background-position:-96px -1248px} +.icon-48-news-overwatch{background-position:-144px -1248px} +.icon-128-placeholder{background-position:0 0} +.icon-128-ban-circle{background-position:-128px 0} +.icon-128-time{background-position:-256px 0} +.icon-128-add-time{background-position:-384px 0} +.icon-128-question-circle{background-position:-512px 0} +.icon-128-balance{background-position:-640px 0} +.icon-128-remove-circle{background-position:-768px 0} +.icon-128-mouse{background-position:-896px 0} +.icon-128-mouse-delete{background-position:-1024px 0} +.icon-128-envelope{background-position:-1152px 0} +.icon-128-open-envelope{background-position:0 -128px} +.icon-128-home{background-position:-128px -128px} +.icon-128-play{background-position:-256px -128px} +.icon-128-pause{background-position:-384px -128px} +.icon-128-file{background-position:-512px -128px} +.icon-128-search{background-position:-640px -128px} +.icon-128-edit{background-position:-768px -128px} +.icon-128-shopping-cart{background-position:-896px -128px} +.icon-128-download-alt{background-position:-1024px -128px} +.icon-128-achievement{background-position:-1152px -128px} +.icon-128-heart{background-position:0 -256px} +.icon-128-heart-broken{background-position:-128px -256px} +.icon-128-comment{background-position:-256px -256px} +.icon-128-gavel{background-position:-384px -256px} +.icon-128-broadcast{background-position:-512px -256px} +.icon-128-service{background-position:-640px -256px} +.icon-128-headphones-alt{background-position:-768px -256px} +.icon-128-user{background-position:-896px -256px} +.icon-128-flask{background-position:-1024px -256px} +.icon-128-chevron-left{background-position:-1152px -256px} +.icon-128-chevron-right{background-position:0 -384px} +.icon-128-share{background-position:-128px -384px} +.icon-128-bookmarks{background-position:-256px -384px} +.icon-128-cog{background-position:-384px -384px} +.icon-128-mobile{background-position:-512px -384px} +.icon-128-download-square{background-position:-640px -384px} +.icon-128-upload{background-position:-768px -384px} +.icon-128-group{background-position:-896px -384px} +.icon-128-crown{background-position:-1024px -384px} +.icon-128-globe-alt{background-position:-1152px -384px} +.icon-128-series{background-position:0 -512px} +.icon-128-paw{background-position:-128px -512px} +.icon-128-trash{background-position:-256px -512px} +.icon-128-windows{background-position:-384px -512px} +.icon-128-apple{background-position:-512px -512px} +.icon-128-gift{background-position:-640px -512px} +.icon-128-refresh{background-position:-768px -512px} +.icon-128-reset{background-position:-896px -512px} +.icon-128-check{background-position:-1024px -512px} +.icon-128-external-link{background-position:-1152px -512px} +.icon-128-character{background-position:0 -640px} +.icon-128-character-add{background-position:-128px -640px} +.icon-128-character-search{background-position:-256px -640px} +.icon-128-character-remove{background-position:-384px -640px} +.icon-128-character-cog{background-position:-512px -640px} +.icon-128-download-alt-cog{background-position:-640px -640px} +.icon-128-download-alt-search{background-position:-768px -640px} +.icon-128-lock{background-position:-896px -640px} +.icon-128-warning-sign{background-position:-1024px -640px} +.icon-128-ok{background-position:-1152px -640px} +.icon-128-speaker{background-position:0 -768px} +.icon-128-wow{background-position:-128px -768px} +.icon-128-warcraft{background-position:-256px -768px} +.icon-128-starcraft{background-position:-384px -768px} +.icon-128-starcraft-2{background-position:-512px -768px} +.icon-128-diablo-3{background-position:-640px -768px} +.icon-128-battlenet{background-position:-768px -768px} +.icon-128-remove{background-position:-896px -768px} +.icon-128-repeat{background-position:-1024px -768px} +.icon-128-dropdown{background-position:-1152px -768px} +.icon-128-shortcut{background-position:0 -896px} +.icon-128-wrench{background-position:-128px -896px} +.icon-128-plus{background-position:-256px -896px} +.icon-128-fullscreen{background-position:-384px -896px} +.icon-128-glass{background-position:-512px -896px} +.icon-128-music-alt{background-position:-640px -896px} +.icon-128-music{background-position:-768px -896px} +.icon-128-star-empty{background-position:-896px -896px} +.icon-128-star{background-position:-1024px -896px} +.icon-128-film{background-position:-1152px -896px} +.icon-128-th-large{background-position:0 -1024px} +.icon-128-th{background-position:-128px -1024px} +.icon-128-th-list{background-position:-256px -1024px} +.icon-128-zoom-in{background-position:-384px -1024px} +.icon-128-zoom-out{background-position:-512px -1024px} +.icon-128-off{background-position:-640px -1024px} +.icon-128-signal{background-position:-768px -1024px} +.icon-128-road{background-position:-896px -1024px} +.icon-128-upload-square{background-position:-1024px -1024px} +.icon-128-download{background-position:-1152px -1024px} +.icon-128-inbox{background-position:0 -1152px} +.icon-128-play-circle{background-position:-128px -1152px} +.icon-128-list-alt{background-position:-256px -1152px} +.icon-128-flag{background-position:-384px -1152px} +.icon-128-headphones{background-position:-512px -1152px} +.icon-128-volume{background-position:-640px -1152px} +.icon-128-volume-off{background-position:-768px -1152px} +.icon-128-volume-down{background-position:-896px -1152px} +.icon-128-volume-up{background-position:-1024px -1152px} +.icon-128-qrcode{background-position:-1152px -1152px} +.icon-128-barcode{background-position:0 -1280px} +.icon-128-tag{background-position:-128px -1280px} +.icon-128-tags{background-position:-256px -1280px} +.icon-128-book{background-position:-384px -1280px} +.icon-128-bookmark{background-position:-512px -1280px} +.icon-128-print{background-position:-640px -1280px} +.icon-128-camera{background-position:-768px -1280px} +.icon-128-font{background-position:-896px -1280px} +.icon-128-bold{background-position:-1024px -1280px} +.icon-128-italic{background-position:-1152px -1280px} +.icon-128-text-height{background-position:0 -1408px} +.icon-128-text-width{background-position:-128px -1408px} +.icon-128-align-left{background-position:-256px -1408px} +.icon-128-align-right{background-position:-512px -1408px} +.icon-128-align-justify{background-position:-640px -1408px} +.icon-128-list{background-position:-768px -1408px} +.icon-128-indent-left{background-position:-896px -1408px} +.icon-128-indent-right{background-position:-1024px -1408px} +.icon-128-facetime-video{background-position:-1152px -1408px} +.icon-128-picture{background-position:0 -1536px} +.icon-128-pencil{background-position:-128px -1536px} +.icon-128-map-marker{background-position:-256px -1536px} +.icon-128-adjust{background-position:-384px -1536px} +.icon-128-tint{background-position:-512px -1536px} +.icon-128-move{background-position:-640px -1536px} +.icon-128-step-backward{background-position:-768px -1536px} +.icon-128-fast-backward{background-position:-896px -1536px} +.icon-128-backward{background-position:-1024px -1536px} +.icon-128-step-forward{background-position:-1152px -1536px} +.icon-128-fast-forward{background-position:0 -1664px} +.icon-128-forward{background-position:-128px -1664px} +.icon-128-eject{background-position:-256px -1664px} +.icon-128-square{background-position:-384px -1664px} +.icon-128-plus-circle{background-position:-512px -1664px} +.icon-128-minus-circle{background-position:-640px -1664px} +.icon-128-plus-sign{background-position:-768px -1664px} +.icon-128-minus-sign{background-position:-896px -1664px} +.icon-128-remove-sign{background-position:-1024px -1664px} +.icon-128-ok-circle{background-position:-1152px -1664px} +.icon-128-ok-sign{background-position:0 -1792px} +.icon-128-minus{background-position:-128px -1792px} +.icon-128-info-circle{background-position:-256px -1792px} +.icon-128-info-sign{background-position:-384px -1792px} +.icon-128-question-sign{background-position:-512px -1792px} +.icon-128-screenshot{background-position:-640px -1792px} +.icon-128-arrow-right{background-position:-768px -1792px} +.icon-128-arrow-left{background-position:-896px -1792px} +.icon-128-arrow-up{background-position:-1024px -1792px} +.icon-128-arrow-down{background-position:-1152px -1792px} +.icon-128-share-alt{background-position:0 -1920px} +.icon-128-resize-full{background-position:-128px -1920px} +.icon-128-resize-small{background-position:-256px -1920px} +.icon-128-asterisk{background-position:-384px -1920px} +.icon-128-exclamation-circle{background-position:-512px -1920px} +.icon-128-exclamation-sign{background-position:-640px -1920px} +.icon-128-leaf{background-position:-768px -1920px} +.icon-128-fire{background-position:-896px -1920px} +.icon-128-eye-open{background-position:-1024px -1920px} +.icon-128-eye-close{background-position:-1152px -1920px} +.icon-128-plane{background-position:0 -2048px} +.icon-128-calendar{background-position:-128px -2048px} +.icon-128-random{background-position:-256px -2048px} +.icon-128-magnet{background-position:-384px -2048px} +.icon-128-chevron-down{background-position:-512px -2048px} +.icon-128-folder-close{background-position:-768px -2048px} +.icon-128-folder-open{background-position:-896px -2048px} +.icon-128-resize-vertical{background-position:-1024px -2048px} +.icon-128-resize-horizontal{background-position:-1152px -2048px} +.icon-128-hdd{background-position:0 -2176px} +.icon-128-bullhorn{background-position:-128px -2176px} +.icon-128-bell{background-position:-256px -2176px} +.icon-128-certificate-empty{background-position:-384px -2176px} +.icon-128-certificate{background-position:-512px -2176px} +.icon-128-thumbs-up{background-position:-640px -2176px} +.icon-128-thumbs-down{background-position:-768px -2176px} +.icon-128-hand-right{background-position:-896px -2176px} +.icon-128-hand-left{background-position:-1024px -2176px} +.icon-128-hand-up{background-position:-1152px -2176px} +.icon-128-hand-down{background-position:0 -2304px} +.icon-128-arrow-right-square{background-position:-128px -2304px} +.icon-128-arrow-left-square{background-position:-256px -2304px} +.icon-128-arrow-right-circle{background-position:-384px -2304px} +.icon-128-arrow-left-circle{background-position:-512px -2304px} +.icon-128-globe{background-position:-640px -2304px} +.icon-128-tasks{background-position:-768px -2304px} +.icon-128-filter{background-position:-896px -2304px} +.icon-128-briefcase{background-position:-1024px -2304px} +.icon-128-underline{background-position:-1152px -2304px} +.icon-128-sort{background-position:0 -2432px} +.icon-128-sort-descending{background-position:-128px -2432px} +.icon-128-sort-ascending{background-position:-256px -2432px} +.icon-128-sort-disabled{background-position:-384px -2432px} +.icon-128-arrow-down-solid{background-position:-512px -2432px} +.icon-128-arrow-up-solid{background-position:-640px -2432px} +.icon-128-arrow-left-solid{background-position:-768px -2432px} +.icon-128-arrow-right-solid{background-position:-896px -2432px} +.icon-128-0-sign{background-position:-1024px -2432px} +.icon-128-1-sign{background-position:-1152px -2432px} +.icon-128-2-sign{background-position:0 -2560px} +.icon-128-3-sign{background-position:-128px -2560px} +.icon-128-4-sign{background-position:-256px -2560px} +.icon-128-5-sign{background-position:-384px -2560px} +.icon-128-6-sign{background-position:-512px -2560px} +.icon-128-7-sign{background-position:-640px -2560px} +.icon-128-8-sign{background-position:-768px -2560px} +.icon-128-9-sign{background-position:-896px -2560px} +.icon-128-secure{background-position:-1024px -2560px} +.icon-128-not-secure{background-position:-1152px -2560px} +.icon-128-add-wow{background-position:0 -2688px} +.icon-128-add-warcraft{background-position:-128px -2688px} +.icon-128-add-starcraft{background-position:-256px -2688px} +.icon-128-add-starcraft-2{background-position:-384px -2688px} +.icon-128-add-diablo-3{background-position:-512px -2688px} +.icon-128-add-battlenet{background-position:-640px -2688px} +.icon-128-free-game-services{background-position:-768px -2688px} +.icon-128-character-services{background-position:-896px -2688px} +.icon-128-facebook{background-position:-1024px -2688px} +.icon-128-twitter{background-position:-1152px -2688px} +.icon-128-hearthstone{background-position:0 -2816px} +.icon-128-add-hearthstone{background-position:-128px -2816px} +.icon-128-heroes{background-position:-256px -2816px} +.icon-128-add-heroes{background-position:-384px -2816px} +.icon-128-friends-wow{background-position:-512px -2816px} +.icon-128-friends-warcraft{background-position:-640px -2816px} +.icon-128-friends-starcraft{background-position:-768px -2816px} +.icon-128-friends-starcraft-2{background-position:-896px -2816px} +.icon-128-friends-diablo-3{background-position:-1024px -2816px} +.icon-128-friends-battlenet{background-position:-1152px -2816px} +.icon-128-friends-hearthstone{background-position:0 -2944px} +.icon-128-friends-heroes{background-position:-128px -2944px} +.icon-128-news-wow{background-position:-256px -2944px} +.icon-128-news-warcraft{background-position:-384px -2944px} +.icon-128-news-starcraft{background-position:-512px -2944px} +.icon-128-news-starcraft-2{background-position:-640px -2944px} +.icon-128-news-diablo-3{background-position:-768px -2944px} +.icon-128-news-battlenet{background-position:-896px -2944px} +.icon-128-news-hearthstone{background-position:-1024px -2944px} +.icon-128-news-heroes{background-position:-1152px -2944px} +.icon-128-git{background-position:0 -3072px} +.icon-128-bootstrap{background-position:-128px -3072px} +.icon-128-maven{background-position:-256px -3072px} +.icon-128-twitch{background-position:-384px -3072px} +.icon-128-youtube{background-position:-512px -3072px} +.icon-128-popout{background-position:-640px -3072px} +.icon-128-share-opts{background-position:-768px -3072px} +.icon-128-logout{background-position:-896px -3072px} +.icon-128-signup{background-position:-1024px -3072px} +.icon-128-queue{background-position:-1152px -3072px} +.icon-128-maintenance{background-position:0 -3200px} +.icon-128-security{background-position:-128px -3200px} +.icon-128-authenticator-unknown{background-position:-256px -3200px} +.icon-128-authenticator-present{background-position:-384px -3200px} +.icon-128-account-forgot{background-position:-512px -3200px} +.icon-128-account-locked{background-position:-640px -3200px} +.icon-128-email-forgot{background-position:-768px -3200px} +.icon-128-remove-authenticator{background-position:-896px -3200px} +.icon-128-authenticator-mobile{background-position:-1024px -3200px} +.icon-128-ipin{background-position:-1152px -3200px} +.icon-128-overwatch{background-position:0 -3328px} +.icon-128-add-overwatch{background-position:-128px -3328px} +.icon-128-friends-overwatch{background-position:-256px -3328px} +.icon-128-news-overwatch{background-position:-384px -3328px} +.icon-payment-placeholder{background-position:0 0} +.icon-payment-visa{background-position:-24px 0} +.icon-payment-visa-electron{background-position:-48px 0} +.icon-payment-visa-debit{background-position:-72px 0} +.icon-payment-mastercard{background-position:-96px 0} +.icon-payment-maestro{background-position:-120px 0} +.icon-payment-american-express{background-position:-144px 0} +.icon-payment-discover{background-position:-168px 0} +.icon-payment-diners-club{background-position:0 -16px} +.icon-payment-jcb{background-position:-24px -16px} +.icon-payment-carte-bleue{background-position:-48px -16px} +.icon-payment-giropay{background-position:-72px -16px} +.icon-payment-webmoney{background-position:-96px -16px} +.icon-payment-ideal{background-position:-120px -16px} +.icon-payment-solo{background-position:-144px -16px} +.icon-payment-oxxo{background-position:-168px -16px} +.icon-payment-seven-eleven{background-position:0 -32px} +.icon-payment-santander{background-position:-24px -32px} +.icon-payment-bbva-bancomer{background-position:-48px -32px} +.icon-payment-ixe{background-position:-72px -32px} +.icon-payment-hsbc{background-position:-96px -32px} +.icon-payment-scotiabank{background-position:-120px -32px} +.icon-payment-t-online{background-position:-144px -32px} +.icon-payment-qiwi{background-position:-168px -32px} +.icon-payment-dineromail{background-position:0 -48px} +.icon-payment-dinheiromail{background-position:-24px -48px} +.icon-payment-pago-facil{background-position:-48px -48px} +.icon-payment-magna{background-position:-72px -48px} +.icon-payment-italcred{background-position:-96px -48px} +.icon-payment-hipercard{background-position:-120px -48px} +.icon-payment-cobro-express{background-position:-144px -48px} +.icon-payment-cabal{background-position:-168px -48px} +.icon-payment-bapro{background-position:0 -64px} +.icon-payment-banamex{background-position:-24px -64px} +.icon-payment-servipag{background-position:-48px -64px} +.icon-payment-rapipago{background-position:-72px -64px} +.icon-payment-presto{background-position:-96px -64px} +.icon-payment-payone{background-position:-120px -64px} +.icon-payment-tarjeta-shopping{background-position:-144px -64px} +.icon-payment-aura{background-position:-168px -64px} +.icon-payment-banco-de-chile{background-position:0 -80px} +.icon-payment-miscuentas{background-position:-24px -80px} +.icon-payment-argencard{background-position:-48px -80px} +.icon-payment-paggo{background-position:-72px -80px} +.icon-payment-banco-de-brasil{background-position:-96px -80px} +.icon-payment-bradesco{background-position:-120px -80px} +.icon-payment-todito-card{background-position:-144px -80px} +.icon-payment-todito-cash{background-position:-168px -80px} +.icon-payment-elv{background-position:0 -96px} +.icon-payment-automatische-incasso{background-position:-24px -96px} +.icon-payment-lastschriftverfahren{background-position:-48px -96px} +.icon-payment-domiciliacion-bancaria{background-position:-72px -96px} +.icon-payment-boleto-bancario{background-position:-96px -96px} +.icon-payment-paypal{background-position:-120px -96px} +.icon-payment-battlenet-balance{background-position:-144px -96px} +.icon-payment-chase-paymentech{background-position:-168px -96px} +.icon-payment-global-collect{background-position:0 -112px} +.icon-payment-netease{background-position:-24px -112px} +.icon-payment-credit-card,.icon-payment-neweb-credit-card{background-position:-48px -112px} +.icon-payment-lguplus-ars{background-position:-72px -112px} +.icon-payment-lguplus-wire-transfer{background-position:-96px -112px} +.icon-payment-danal-mobile{background-position:-120px -112px} +.icon-payment-inicis-credit-card{background-position:-144px -112px} +.icon-payment-kr-gift-card{background-position:-168px -112px} +.icon-payment-gift-card{background-position:0 -128px} +.icon-payment-tarjeta-naranja{background-position:-24px -128px} +.icon-payment-ripsa-pagos{background-position:-48px -128px} +.icon-payment-provincia-pagos{background-position:-72px -128px} +.icon-payment-elo{background-position:-96px -128px} +.icon-payment-banrisul{background-position:-120px -128px} +.icon-payment-bci{background-position:-144px -128px} +.icon-payment-sencillito{background-position:-168px -128px} +.icon-payment-ripley{background-position:0 -144px} +.icon-payment-banbajio{background-position:-24px -144px} +.icon-payment-visa-virtual{background-position:-48px -144px} +.icon-payment-money-online{background-position:-72px -144px} +.icon-payment-mycard{background-position:-96px -144px} +.icon-payment-neweb-alipay{background-position:-120px -144px} +.icon-payment-neweb-virtualatm{background-position:-144px -144px} +.icon-payment-neweb-atm{background-position:-168px -144px} +.icon-payment-kr-cvs{background-position:0 -160px} +.icon-payment-lguplus-gift-cert-b{background-position:-48px -160px} +.icon-payment-lguplus-gift-cert-c{background-position:-72px -160px} +.icon-payment-cencosud{background-position:-96px -160px} +.icon-payment-netease-wallet{background-position:-120px -160px} +.icon-payment-payu{background-position:-144px -160px} +.icon-payment-banco-de-bogota{background-position:-168px -160px} +.icon-payment-bancolombia{background-position:0 -176px} +.icon-payment-efecty{background-position:-24px -176px} +.icon-payment-pse{background-position:-48px -176px} +.icon-payment-via-baloto{background-position:-72px -176px} +.icon-payment-diestel{background-position:-96px -176px} +.icon-payment-bcp-agente-bcp{background-position:-120px -176px} +.icon-payment-internet-via-bcp{background-position:-144px -176px} +.icon-payment-bcp-ventanilla-agencias{background-position:-168px -176px} +.icon-payment-debito-automatico{background-position:-24px -192px} +.icon-payment-itau{background-position:-48px -192px} +.icon-payment-cash-on-delivery{background-position:-72px -192px} +.icon-24-payment-placeholder{background-position:0 0} +.icon-24-payment-visa{background-position:-36px 0} +.icon-24-payment-visa-electron{background-position:-72px 0} +.icon-24-payment-visa-debit{background-position:-108px 0} +.icon-24-payment-mastercard{background-position:-144px 0} +.icon-24-payment-maestro{background-position:-180px 0} +.icon-24-payment-american-express{background-position:-216px 0} +.icon-24-payment-discover{background-position:-252px 0} +.icon-24-payment-diners-club{background-position:0 -24px} +.icon-24-payment-jcb{background-position:-36px -24px} +.icon-24-payment-carte-bleue{background-position:-72px -24px} +.icon-24-payment-giropay{background-position:-108px -24px} +.icon-24-payment-webmoney{background-position:-144px -24px} +.icon-24-payment-ideal{background-position:-180px -24px} +.icon-24-payment-solo{background-position:-216px -24px} +.icon-24-payment-oxxo{background-position:-252px -24px} +.icon-24-payment-seven-eleven{background-position:0 -48px} +.icon-24-payment-santander{background-position:-36px -48px} +.icon-24-payment-bbva-bancomer{background-position:-72px -48px} +.icon-24-payment-ixe{background-position:-108px -48px} +.icon-24-payment-hsbc{background-position:-144px -48px} +.icon-24-payment-scotiabank{background-position:-180px -48px} +.icon-24-payment-t-online{background-position:-216px -48px} +.icon-24-payment-qiwi{background-position:-252px -48px} +.icon-24-payment-dineromail{background-position:0 -72px} +.icon-24-payment-dinheiromail{background-position:-36px -72px} +.icon-24-payment-pago-facil{background-position:-72px -72px} +.icon-24-payment-magna{background-position:-108px -72px} +.icon-24-payment-italcred{background-position:-144px -72px} +.icon-24-payment-hipercard{background-position:-180px -72px} +.icon-24-payment-cobro-express{background-position:-216px -72px} +.icon-24-payment-cabal{background-position:-252px -72px} +.icon-24-payment-bapro{background-position:0 -96px} +.icon-24-payment-banamex{background-position:-36px -96px} +.icon-24-payment-servipag{background-position:-72px -96px} +.icon-24-payment-rapipago{background-position:-108px -96px} +.icon-24-payment-presto{background-position:-144px -96px} +.icon-24-payment-payone{background-position:-180px -96px} +.icon-24-payment-tarjeta-shopping{background-position:-216px -96px} +.icon-24-payment-aura{background-position:-252px -96px} +.icon-24-payment-banco-de-chile{background-position:0 -120px} +.icon-24-payment-miscuentas{background-position:-36px -120px} +.icon-24-payment-argencard{background-position:-72px -120px} +.icon-24-payment-paggo{background-position:-108px -120px} +.icon-24-payment-banco-de-brasil{background-position:-144px -120px} +.icon-24-payment-bradesco{background-position:-180px -120px} +.icon-24-payment-todito-card{background-position:-216px -120px} +.icon-24-payment-todito-cash{background-position:-252px -120px} +.icon-24-payment-elv{background-position:0 -144px} +.icon-24-payment-automatische-incasso{background-position:-36px -144px} +.icon-24-payment-lastschriftverfahren{background-position:-72px -144px} +.icon-24-payment-domiciliacion-bancaria{background-position:-108px -144px} +.icon-24-payment-boleto-bancario{background-position:-144px -144px} +.icon-24-payment-paypal{background-position:-180px -144px} +.icon-24-payment-battlenet-balance{background-position:-216px -144px} +.icon-24-payment-chase-paymentech{background-position:-252px -144px} +.icon-24-payment-global-collect{background-position:0 -168px} +.icon-24-payment-netease{background-position:-36px -168px} +.icon-24-payment-credit-card,.icon-24-payment-neweb-credit-card{background-position:-72px -168px} +.icon-24-payment-lguplus-ars{background-position:-108px -168px} +.icon-24-payment-lguplus-wire-transfer{background-position:-144px -168px} +.icon-24-payment-danal-mobile{background-position:-180px -168px} +.icon-24-payment-inicis-credit-card{background-position:-216px -168px} +.icon-24-payment-kr-gift-card{background-position:-252px -168px} +.icon-24-payment-gift-card{background-position:0 -192px} +.icon-24-payment-tarjeta-naranja{background-position:-36px -192px} +.icon-24-payment-ripsa-pagos{background-position:-72px -192px} +.icon-24-payment-provincia-pagos{background-position:-108px -192px} +.icon-24-payment-elo{background-position:-144px -192px} +.icon-24-payment-banrisul{background-position:-180px -192px} +.icon-24-payment-bci{background-position:-216px -192px} +.icon-24-payment-sencillito{background-position:-252px -192px} +.icon-24-payment-ripley{background-position:0 -216px} +.icon-24-payment-banbajio{background-position:-36px -216px} +.icon-24-payment-visa-virtual{background-position:-72px -216px} +.icon-24-payment-money-online{background-position:-108px -216px} +.icon-24-payment-mycard{background-position:-144px -216px} +.icon-24-payment-neweb-alipay{background-position:-180px -216px} +.icon-24-payment-neweb-virtualatm{background-position:-216px -216px} +.icon-24-payment-neweb-atm{background-position:-252px -216px} +.icon-24-payment-kr-cvs{background-position:0 -240px} +.icon-24-payment-kr-posa{background-position:-144px -288px} +.icon-24-payment-sepa{background-position:-36px -240px} +.icon-24-payment-lguplus-gift-cert-b{background-position:-72px -240px} +.icon-24-payment-lguplus-gift-cert-c{background-position:-108px -240px} +.icon-24-payment-cencosud{background-position:-144px -240px} +.icon-24-payment-netease-wallet{background-position:-180px -240px} +.icon-24-payment-payu{background-position:-216px -240px} +.icon-24-payment-banco-de-bogota{background-position:-252px -240px} +.icon-24-payment-bancolombia{background-position:0 -264px} +.icon-24-payment-efecty{background-position:-36px -264px} +.icon-24-payment-pse{background-position:-72px -264px} +.icon-24-payment-via-baloto{background-position:-108px -264px} +.icon-24-payment-diestel{background-position:-144px -264px} +.icon-24-payment-bcp-agente-bcp{background-position:-180px -264px} +.icon-24-payment-internet-via-bcp{background-position:-216px -264px} +.icon-24-payment-bcp-ventanilla-agencias{background-position:-252px -264px} +.icon-24-payment-debito-automatico{background-position:-36px -288px} +.icon-24-payment-itau{background-position:-72px -288px} +.icon-24-payment-cash-on-delivery{background-position:-108px -288px} +table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0} +.table{width:100%} +.table th,.table td{text-align:left;vertical-align:top} +.table thead th{vertical-align:bottom;position:relative} +.table thead th a.table-sort.sort-disabled,.table thead th a.table-sort.sort-disabled:hover,.table thead th a.table-sort.sort-disabled:focus{cursor:default} +.tooltip{position:absolute;display:block;visibility:visible;opacity:0} +.tooltip.in{opacity:1} +.tooltip-fixed{position:fixed} +.tooltip-inner{text-decoration:none} +.tooltip.left .tooltip-inner{text-align:left} +.tooltip.right .tooltip-inner{text-align:left} +.tooltipster-base{padding:0;font-size:0;line-height:0;position:absolute;left:0;top:0;pointer-events:none;width:auto;overflow:visible} +.tooltipster-base .tooltipster-content{overflow:hidden} +.tooltipster-arrow{display:block;text-align:center;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1} +.tooltipster-arrow span,.tooltipster-arrow-border{display:block;width:0;height:0;position:absolute} +.tooltipster-fade{opacity:0;-webkit-transition-property:opacity;transition-property:opacity} +.tooltipster-fade-show{opacity:1} +.tooltipster-grow{-webkit-transform:scale(0,0);-ms-transform:scale(0,0);transform:scale(0,0);-webkit-transition-property:-webkit-transform;-webkit-transition-property:transform;transition-property:transform;-webkit-backface-visibility:hidden} +.tooltipster-grow-show{-webkit-transform:scale(1,1);-ms-transform:scale(1,1);transform:scale(1,1);-webkit-transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15);transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15)} +.tooltipster-swing{opacity:0;-webkit-transform:rotateZ(4deg);-ms-transform:rotateZ(4deg);transform:rotateZ(4deg);-webkit-transition-property:-webkit-transform;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-property:-webkit-transform,opacity} +.tooltipster-swing-show{opacity:1;-webkit-transform:rotateZ(0deg);-ms-transform:rotateZ(0deg);transform:rotateZ(0deg);-webkit-transition-timing-function:cubic-bezier(0.23,0.635,0.495,2.4);transition-timing-function:cubic-bezier(0.23,0.635,0.495,2.4)} +.tooltipster-fall{top:0;-webkit-transition-property:top;transition-property:top;-webkit-transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15);transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15)} +.tooltipster-fall.tooltipster-dying{-webkit-transition-property:all;transition-property:all;top:0!important;opacity:0} +.tooltipster-slide{left:-40px;-webkit-transition-property:left;transition-property:left;-webkit-transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15);transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15)} +.tooltipster-slide.tooltipster-dying{-webkit-transition-property:all;transition-property:all;left:0!important;opacity:0} +.tooltipster-content-changing{opacity:.5;-webkit-transform:scale(1.1,1.1);-ms-transform:scale(1.1,1.1);transform:scale(1.1,1.1)} +body{font-size-adjust:auto;-webkit-font-feature-settings:"kern" 1,"liga" 1;-ms-font-feature-settings:"kern" 1,"liga" 1;-moz-font-feature-settings:"kern" 1,"liga" 1;font-feature-settings:"kern" 1,"liga" 1} +h1,h2,h3,h4,h5,h6,.heading-1,.heading-2,.heading-3,.heading-4,.heading-5,.heading-6{display:block} +.title{-webkit-transition:color .2s;transition:color .2s} +.title .subtitle{text-transform:none;letter-spacing:normal;-webkit-transition:color .2s;transition:color .2s} +.fraction{-webkit-font-feature-settings:"frac" 1,"kern" 1,"liga" 1;-ms-font-feature-settings:"frac" 1,"kern" 1,"liga" 1;-moz-font-feature-settings:"frac" 1,"kern" 1,"liga" 1;font-feature-settings:"frac" 1,"kern" 1,"liga" 1} +i{font-style:italic} +em{font-style:italic} +s{text-decoration:line-through} +del{text-decoration:line-through} +abbr[title],abbr[data-original-title]{cursor:help} +.initialism{text-transform:uppercase} +cite{font-style:normal} +ul,ol{padding:0} +ul ul,ul ol,ol ol,ol ul{margin-bottom:0} +ul{list-style:disc} +ul ul{list-style:square} +ul ul ul{list-style:circle} +ol{list-style:decimal} +li:last-of-type{margin-bottom:0} +ul.unstyled,ol.unstyled{margin:0;list-style:none} +ul.unstyled li,ol.unstyled li{padding-left:0;margin-bottom:0} +ul.icons,ol.icons{margin-left:0;list-style:none} +ul.icons li,ol.icons li{position:relative} +ul.icons li [class^="icon-"],ol.icons li [class^="icon-"],ul.icons li [class*=" icon-"],ol.icons li [class*=" icon-"]{position:absolute} +ul.icons li a [class*="icon-external-link"],ol.icons li a [class*="icon-external-link"]{position:static;left:auto} +ul.inline,ol.inline{margin-left:0;list-style:none} +ul.inline>li,ol.inline>li{display:inline-block} +ul.inline>li:first-of-type,ol.inline>li:first-of-type{padding-left:0} +dl{overflow:auto} +dl dd:last-of-type{margin-bottom:0} +dl dd.inline,dl dd.enumerated{margin-left:0;margin-top:0;display:inline-block} +dl dd.inline:after{content:"";display:inline-block;width:1em} +dl dd.inline.omega:after{width:0} +dl dd.enumerated:after{content:"???"} +:lang(zh) dl dd.enumerated:after{content:"???"} +dl dd.enumerated.omega:after{content:""} +.dl-horizontal:before,.dl-horizontal:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.dl-horizontal:after{clear:both} +.dl-horizontal dt{float:left;width:20%;clear:left;text-align:right;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.dl-horizontal dd{margin-left:25%} +blockquote p:last-of-type{margin-bottom:0} +blockquote small{display:block} +blockquote small:before{content:"\002014\0000A0"} +blockquote.pull-right{float:right;padding-left:0;border-left:0} +blockquote.pull-right p,blockquote.pull-right small{text-align:right} +q:before,blockquote:before{content:""} +q:after,blockquote:after{content:""} +address{display:block;font-style:normal} +hr{-moz-box-sizing:border-box;box-sizing:border-box;border:0} +@media screen and (max-width:400px){@-ms-viewport{width:320px} +} +.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.grid-container:before,.grid-container:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.grid-container:after{clear:both} +body{min-width:960px} +.grid-container{-moz-box-sizing:border-box;box-sizing:border-box;margin-left:auto;margin-right:auto;max-width:1200px;padding-left:40px;padding-right:40px} +.grid-parent{padding-left:0;padding-right:0} +.grid-0{-moz-box-sizing:border-box;box-sizing:border-box;padding-left:0;padding-right:0} +.push-0,.pull-0{position:relative} +@media screen and (min-width:768px){.grid-100:before,.grid-100:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.hide-on-web{display:none!important} +.grid-0,.grid-95,.grid-90,.grid-85,.grid-80,.grid-75,.grid-70,.grid-65,.grid-60,.grid-55,.grid-50,.grid-45,.grid-40,.grid-35,.grid-30,.grid-25,.grid-20,.grid-15,.grid-10,.grid-5,.grid-100,.grid-66,.grid-33{-moz-box-sizing:border-box;box-sizing:border-box;padding-left:0;padding-right:0} +.push-0,.pull-0,.push-95,.pull-95,.push-90,.pull-90,.push-85,.pull-85,.push-80,.pull-80,.push-75,.pull-75,.push-70,.pull-70,.push-65,.pull-65,.push-60,.pull-60,.push-55,.pull-55,.push-50,.pull-50,.push-45,.pull-45,.push-40,.pull-40,.push-35,.pull-35,.push-30,.pull-30,.push-25,.pull-25,.push-20,.pull-20,.push-15,.pull-15,.push-10,.pull-10,.push-5,.pull-5,.push-66,.pull-66,.push-33,.pull-33{position:relative} +.grid-95{float:left;width:95%} +.prefix-95{margin-left:95%} +.suffix-95{margin-right:95%} +.push-95{left:95%} +.pull-95{left:-95%} +.grid-90{float:left;width:90%} +.prefix-90{margin-left:90%} +.suffix-90{margin-right:90%} +.push-90{left:90%} +.pull-90{left:-90%} +.grid-85{float:left;width:85%} +.prefix-85{margin-left:85%} +.suffix-85{margin-right:85%} +.push-85{left:85%} +.pull-85{left:-85%} +.grid-80{float:left;width:80%} +.prefix-80{margin-left:80%} +.suffix-80{margin-right:80%} +.push-80{left:80%} +.pull-80{left:-80%} +.grid-75{float:left;width:75%} +.prefix-75{margin-left:75%} +.suffix-75{margin-right:75%} +.push-75{left:75%} +.pull-75{left:-75%} +.grid-70{float:left;width:70%} +.prefix-70{margin-left:70%} +.suffix-70{margin-right:70%} +.push-70{left:70%} +.pull-70{left:-70%} +.grid-65{float:left;width:65%} +.prefix-65{margin-left:65%} +.suffix-65{margin-right:65%} +.push-65{left:65%} +.pull-65{left:-65%} +.grid-60{float:left;width:60%} +.prefix-60{margin-left:60%} +.suffix-60{margin-right:60%} +.push-60{left:60%} +.pull-60{left:-60%} +.grid-55{float:left;width:55%} +.prefix-55{margin-left:55%} +.suffix-55{margin-right:55%} +.push-55{left:55%} +.pull-55{left:-55%} +.grid-50{float:left;width:50%} +.prefix-50{margin-left:50%} +.suffix-50{margin-right:50%} +.push-50{left:50%} +.pull-50{left:-50%} +.grid-45{float:left;width:45%} +.prefix-45{margin-left:45%} +.suffix-45{margin-right:45%} +.push-45{left:45%} +.pull-45{left:-45%} +.grid-40{float:left;width:40%} +.prefix-40{margin-left:40%} +.suffix-40{margin-right:40%} +.push-40{left:40%} +.pull-40{left:-40%} +.grid-35{float:left;width:35%} +.prefix-35{margin-left:35%} +.suffix-35{margin-right:35%} +.push-35{left:35%} +.pull-35{left:-35%} +.grid-30{float:left;width:30%} +.prefix-30{margin-left:30%} +.suffix-30{margin-right:30%} +.push-30{left:30%} +.pull-30{left:-30%} +.grid-25{float:left;width:25%} +.prefix-25{margin-left:25%} +.suffix-25{margin-right:25%} +.push-25{left:25%} +.pull-25{left:-25%} +.grid-20{float:left;width:20%} +.prefix-20{margin-left:20%} +.suffix-20{margin-right:20%} +.push-20{left:20%} +.pull-20{left:-20%} +.grid-15{float:left;width:15%} +.prefix-15{margin-left:15%} +.suffix-15{margin-right:15%} +.push-15{left:15%} +.pull-15{left:-15%} +.grid-10{float:left;width:10%} +.prefix-10{margin-left:10%} +.suffix-10{margin-right:10%} +.push-10{left:10%} +.pull-10{left:-10%} +.grid-5{float:left;width:5%} +.prefix-5{margin-left:5%} +.suffix-5{margin-right:5%} +.push-5{left:5%} +.pull-5{left:-5%} +.grid-100{clear:both;width:100%} +.grid-100:before,.grid-100:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.grid-100:after{clear:both} +.grid-66{float:left;width:66.66666667%} +.prefix-66{margin-left:66.66666667%} +.suffix-66{margin-right:66.66666667%} +.push-66{left:66.66666667%} +.pull-66{left:-66.66666667%} +.grid-33{float:left;width:33.33333333%} +.prefix-33{margin-left:33.33333333%} +.suffix-33{margin-right:33.33333333%} +.push-33{left:33.33333333%} +.pull-33{left:-33.33333333%} +} +@media screen and (max-width:767px){body{min-width:0} +.grid-container{max-width:none;padding-left:10px;padding-right:10px} +.hide-on-mobile{display:none!important} +.grid-0,.mobile-grid-95,.mobile-grid-90,.mobile-grid-85,.mobile-grid-80,.mobile-grid-75,.mobile-grid-70,.mobile-grid-65,.mobile-grid-60,.mobile-grid-55,.mobile-grid-50,.mobile-grid-45,.mobile-grid-40,.mobile-grid-35,.mobile-grid-30,.mobile-grid-25,.mobile-grid-20,.mobile-grid-15,.mobile-grid-10,.mobile-grid-5,.mobile-grid-100,.mobile-grid-66,.mobile-grid-33{-moz-box-sizing:border-box;box-sizing:border-box;padding-left:0;padding-right:0} +.push-0,.pull-0,.mobile-push-95,.mobile-pull-95,.mobile-push-90,.mobile-pull-90,.mobile-push-85,.mobile-pull-85,.mobile-push-80,.mobile-pull-80,.mobile-push-75,.mobile-pull-75,.mobile-push-70,.mobile-pull-70,.mobile-push-65,.mobile-pull-65,.mobile-push-60,.mobile-pull-60,.mobile-push-55,.mobile-pull-55,.mobile-push-50,.mobile-pull-50,.mobile-push-45,.mobile-pull-45,.mobile-push-40,.mobile-pull-40,.mobile-push-35,.mobile-pull-35,.mobile-push-30,.mobile-pull-30,.mobile-push-25,.mobile-pull-25,.mobile-push-20,.mobile-pull-20,.mobile-push-15,.mobile-pull-15,.mobile-push-10,.mobile-pull-10,.mobile-push-5,.mobile-pull-5,.mobile-push-66,.mobile-pull-66,.mobile-push-33,.mobile-pull-33{position:relative} +.mobile-grid-95{float:left;width:95%} +.mobile-prefix-95{margin-left:95%} +.mobile-suffix-95{margin-right:95%} +.mobile-push-95{left:95%} +.mobile-pull-95{left:-95%} +.mobile-grid-90{float:left;width:90%} +.mobile-prefix-90{margin-left:90%} +.mobile-suffix-90{margin-right:90%} +.mobile-push-90{left:90%} +.mobile-pull-90{left:-90%} +.mobile-grid-85{float:left;width:85%} +.mobile-prefix-85{margin-left:85%} +.mobile-suffix-85{margin-right:85%} +.mobile-push-85{left:85%} +.mobile-pull-85{left:-85%} +.mobile-grid-80{float:left;width:80%} +.mobile-prefix-80{margin-left:80%} +.mobile-suffix-80{margin-right:80%} +.mobile-push-80{left:80%} +.mobile-pull-80{left:-80%} +.mobile-grid-75{float:left;width:75%} +.mobile-prefix-75{margin-left:75%} +.mobile-suffix-75{margin-right:75%} +.mobile-push-75{left:75%} +.mobile-pull-75{left:-75%} +.mobile-grid-70{float:left;width:70%} +.mobile-prefix-70{margin-left:70%} +.mobile-suffix-70{margin-right:70%} +.mobile-push-70{left:70%} +.mobile-pull-70{left:-70%} +.mobile-grid-65{float:left;width:65%} +.mobile-prefix-65{margin-left:65%} +.mobile-suffix-65{margin-right:65%} +.mobile-push-65{left:65%} +.mobile-pull-65{left:-65%} +.mobile-grid-60{float:left;width:60%} +.mobile-prefix-60{margin-left:60%} +.mobile-suffix-60{margin-right:60%} +.mobile-push-60{left:60%} +.mobile-pull-60{left:-60%} +.mobile-grid-55{float:left;width:55%} +.mobile-prefix-55{margin-left:55%} +.mobile-suffix-55{margin-right:55%} +.mobile-push-55{left:55%} +.mobile-pull-55{left:-55%} +.mobile-grid-50{float:left;width:50%} +.mobile-prefix-50{margin-left:50%} +.mobile-suffix-50{margin-right:50%} +.mobile-push-50{left:50%} +.mobile-pull-50{left:-50%} +.mobile-grid-45{float:left;width:45%} +.mobile-prefix-45{margin-left:45%} +.mobile-suffix-45{margin-right:45%} +.mobile-push-45{left:45%} +.mobile-pull-45{left:-45%} +.mobile-grid-40{float:left;width:40%} +.mobile-prefix-40{margin-left:40%} +.mobile-suffix-40{margin-right:40%} +.mobile-push-40{left:40%} +.mobile-pull-40{left:-40%} +.mobile-grid-35{float:left;width:35%} +.mobile-prefix-35{margin-left:35%} +.mobile-suffix-35{margin-right:35%} +.mobile-push-35{left:35%} +.mobile-pull-35{left:-35%} +.mobile-grid-30{float:left;width:30%} +.mobile-prefix-30{margin-left:30%} +.mobile-suffix-30{margin-right:30%} +.mobile-push-30{left:30%} +.mobile-pull-30{left:-30%} +.mobile-grid-25{float:left;width:25%} +.mobile-prefix-25{margin-left:25%} +.mobile-suffix-25{margin-right:25%} +.mobile-push-25{left:25%} +.mobile-pull-25{left:-25%} +.mobile-grid-20{float:left;width:20%} +.mobile-prefix-20{margin-left:20%} +.mobile-suffix-20{margin-right:20%} +.mobile-push-20{left:20%} +.mobile-pull-20{left:-20%} +.mobile-grid-15{float:left;width:15%} +.mobile-prefix-15{margin-left:15%} +.mobile-suffix-15{margin-right:15%} +.mobile-push-15{left:15%} +.mobile-pull-15{left:-15%} +.mobile-grid-10{float:left;width:10%} +.mobile-prefix-10{margin-left:10%} +.mobile-suffix-10{margin-right:10%} +.mobile-push-10{left:10%} +.mobile-pull-10{left:-10%} +.mobile-grid-5{float:left;width:5%} +.mobile-prefix-5{margin-left:5%} +.mobile-suffix-5{margin-right:5%} +.mobile-push-5{left:5%} +.mobile-pull-5{left:-5%} +.mobile-grid-100{clear:both;width:100%} +.mobile-grid-100:before,.mobile-grid-100:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.mobile-grid-100:after{clear:both} +.mobile-grid-66{float:left;width:66.66666667%} +.mobile-prefix-66{margin-left:66.66666667%} +.mobile-suffix-66{margin-right:66.66666667%} +.mobile-push-66{left:66.66666667%} +.mobile-pull-66{left:-66.66666667%} +.mobile-grid-33{float:left;width:33.33333333%} +.mobile-prefix-33{margin-left:33.33333333%} +.mobile-suffix-33{margin-right:33.33333333%} +.mobile-push-33{left:33.33333333%} +.mobile-pull-33{left:-33.33333333%} +.grid-100[class*="app-grid-"]{clear:none} +.grid-100[class*="app-grid-"]:after{clear:none} +.app-push-0,.app-pull-0{left:0} +.app-prefix-0{margin-left:0} +.app-suffix-0{margin-right:0} +} +html:lang(ja) i,html:lang(ko) i,html:lang(zh) i,html:lang(ja) em,html:lang(ko) em,html:lang(zh) em,html:lang(ja) dfn,html:lang(ko) dfn,html:lang(zh) dfn{font-style:normal;font-weight:700} +html:lang(de) q{quotes:"???" "???" "???" "???"} +html:lang(en-GB) q{quotes:"???" "???" "???" "???"} +html:lang(fr) q{quotes:"????" "????" "?????" "?????"} +html:lang(it) q{quotes:"??" "??" "???" "???"} +html:lang(pl) q{quotes:"???" "???" "??" "??"} +html:lang(ru) q{quotes:"??" "??" "???" "???"} +html:lang(zh-TW) q{quotes:"???" "???" "???" "???"} +html:lang(zh) html,html:lang(ja) html,html:lang(zh) body,html:lang(ja) body{word-break:normal} +html:lang(ko) html,html:lang(ko) body{word-break:keep-all} +html:lang(ko) .word-break-all{word-break:break-all} +.modal-background-properties{background-repeat:no-repeat;background-size:contain;background-position:center bottom,center top,center -100px;background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-webkit-linear-gradient(top,#263145 0,#1d222c 70%),-webkit-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-moz-linear-gradient(top,#263145 0,#1d222c 70%),-moz-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),linear-gradient(top,#263145 0,#1d222c 70%),radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-clip:padding-box} +@font-face{font-family:"Blizzard";font-style:normal;font-weight:300;src:local("Blizzard Light"),local("Blizzard-Light"),url("fonts/blizzard-light.woff") format("woff")} +@font-face{font-family:"Blizzard";font-style:normal;font-weight:400;src:local("Blizzard"),local("Blizzard"),url("fonts/blizzard-regular.woff") format("woff")} +@font-face{font-family:"Blizzard";font-style:italic;font-weight:400;src:local("Blizzard Italic"),local("Blizzard-Italic"),url("fonts/blizzard-regular-italic.woff") format("woff")} +@font-face{font-family:"Blizzard";font-style:normal;font-weight:700;src:local("Blizzard Bold"),local("Blizzard-Bold"),url("fonts/blizzard-bold.woff") format("woff")} +.accordion{margin-bottom:20px} +.accordion-group{margin-bottom:2px;border:1px solid rgba(255,255,255,0.15);border-radius:2px} +.accordion-heading{border-bottom:0} +.accordion-heading .accordion-toggle{padding:5px 10px} +.accordion-toggle{background:0;cursor:pointer;color:rgba(255,255,255,0.7)} +.accordion-toggle:focus,.accordion-toggle:hover{color:#fff} +.accordion-toggle:before{display:inline-block;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-16px -224px;content:"";margin-right:5px;margin-top:2px;width:16px;height:16px;line-height:16px;vertical-align:top} +.accordion-toggle.collapsed:before{background-position:-32px -112px} +.accordion-inner{padding:5px 10px;border-top:1px solid rgba(255,255,255,0.15)} +.modal.agegate{width:358px;margin-left:-179px;height:216px;-webkit-transition:height,200ms;transition:height 200ms} +.modal.agegate.agegate-failed{height:125px} +.modal.agegate .modal-body .close{right:7px;top:-5px} +.modal.agegate .modal-body form{margin:0} +.modal.agegate .modal-body h1,.modal.agegate .modal-body .heading-1{color:rgba(255,255,255,0.7);font-size:15px;line-height:20px;margin:0 0 20px 0;padding:0;font-weight:400} +.modal.agegate .modal-body .notice{margin:20px 0 0 0;line-height:15px;font-size:13px} +.modal.agegate .modal-body .control-group{margin-bottom:12px;margin-top:-3px} +.modal.agegate .modal-body .btn{margin:0} +.modal.agegate .modal-body .btn-primary{min-width:110px} +.modal.agegate .modal-body .agegate-month{width:110px} +.modal.agegate .modal-body .agegate-day{width:88px} +.modal.agegate .modal-body .agegate-year{width:110px} +.modal.agegate .modal-body .agegate-field{padding-right:10px} +.modal.agegate .modal-body .agegate-field:last-of-type{padding-right:0} +.interceptor-agegate{text-align:center} +.interceptor-agegate .js-enabled .select-box,.interceptor-agegate select{text-align:left} +.interceptor-agegate .notice{margin-top:40px} +.alert{-moz-box-sizing:border-box;box-sizing:border-box;padding:4px 20px 4px 20px;font-size:13px;line-height:20px;margin-bottom:40px;text-shadow:none;position:relative;background-color:#272e3b;color:rgba(255,255,255,0.7);border:1px solid #000;box-shadow:0 0 0 1px #363d49 inset,0 5px 10px rgba(0,0,0,0.75)} +.alert p,.alert ul,.alert ol{font-size:13px;line-height:20px;margin:0} +.alert p:last-child,.alert ul:last-child,.alert ol:last-child{margin-bottom:0} +.alert .close{position:relative;top:0;right:-10px} +.alert-block{padding:20px 45px 20px 20px} +.alert-icon{padding:20px 45px 20px 59px} +.alert-icon:before{content:"";display:block;position:absolute;top:18px;left:20px;width:24px;height:24px;overflow:hidden;line-height:24px;vertical-align:top;text-indent:-9999px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-blue.png");background-repeat:no-repeat;background-position:-96px -360px} +.alert-block .close,.alert-icon .close{top:-10px;right:-34px} +.alert-block h2,.alert-icon h2,.alert-block h3,.alert-icon h3,.alert-block h4,.alert-icon h4,.alert-block h5,.alert-icon h5,.alert-block h6,.alert-icon h6,.alert-block .heading-2,.alert-icon .heading-2,.alert-block .heading-3,.alert-icon .heading-3,.alert-block .heading-4,.alert-icon .heading-4,.alert-block .heading-5,.alert-icon .heading-5,.alert-block .heading-6,.alert-icon .heading-6{font-size:17px;line-height:20px;margin-bottom:10px;color:#fff} +.alert-block p,.alert-icon p{margin-bottom:20px} +.alert-block p:last-child,.alert-icon p:last-child{margin-bottom:0} +.alert-block ul,.alert-icon ul,.alert-block ol,.alert-icon ol{margin:0 0 20px 30px} +.alert-block ul:last-child,.alert-icon ul:last-child,.alert-block ol:last-child,.alert-icon ol:last-child{margin-bottom:0} +.alert-block li,.alert-icon li{margin-bottom:10px} +.alert-block li:last-of-type,.alert-icon li:last-of-type{margin-bottom:0} +.alert-block li p,.alert-icon li p{margin-bottom:10px} +.alert+.heading-1,.alert-block+.heading-1,.alert-icon+.heading-1,.alert+.heading-2,.alert-block+.heading-2,.alert-icon+.heading-2,.alert+.heading-3,.alert-block+.heading-3,.alert-icon+.heading-3,.alert+.heading-4,.alert-block+.heading-4,.alert-icon+.heading-4,.alert+.heading-5+.heading-6,.alert-block+.heading-5+.heading-6,.alert-icon+.heading-5+.heading-6{margin-top:80px} +.alert-success{background-color:#132a14;box-shadow:0 0 0 1px #24392a inset,0 5px 10px rgba(0,0,0,0.75)} +.alert-icon.alert-success:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-green.png");background-position:-216px -120px} +.alert-warning{background-color:#5d3200;box-shadow:0 0 0 1px #834b00 inset,0 5px 10px rgba(0,0,0,0.75)} +.alert-icon.alert-warning:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-orange.png");background-position:-192px -120px} +.alert-error{background-color:#360e10;box-shadow:0 0 0 1px #551e21 inset,0 5px 10px rgba(0,0,0,0.75)} +.alert-icon.alert-error:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-red.png");background-position:-24px 0} +.alert-info{background-color:#272e3b;box-shadow:0 0 0 1px #363d49 inset,0 5px 10px rgba(0,0,0,0.75)} +.alert-icon.alert-info:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-blue.png");background-position:-96px -360px} +html,body{background:#202020 no-repeat center top} +body{background:#202020 no-repeat center top;color:rgba(255,255,255,0.7)} +.body-content{background:#202020;padding-bottom:100px} +::-moz-selection{background:#19547c} +::selection{background:#19547c} +input::-moz-selection{background:#037db6} +input::selection{background:#037db6} +.breadcrumb{margin:0;padding:0;font-size:13px;line-height:20px;list-style:none} +.breadcrumb>li{margin:0;padding:0;display:inline-block} +.breadcrumb>li>a{color:rgba(255,255,255,0.7)} +.breadcrumb>li>a:focus,.breadcrumb>li>a:hover{color:#fff} +.breadcrumb>li>.divider{padding:0 5px;opacity:.25} +.breadcrumb>li .icon-home{margin-right:10px} +.breadcrumb>.active{color:#fff} +.btn{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;margin:3px 0;padding:6px 20px;font-size:15px;line-height:20px;height:34px;background-color:rgba(0,0,0,0.15);color:#00aeff;border:1px solid rgba(255,255,255,0.15);box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn.active,.btn:active{padding:7px 19px 5px 21px} +.btn.disabled:active,.btn[disabled]:active,.btn.disabled.active,.btn[disabled].active{padding:6px 20px!important} +.btn:hover,.btn:focus{background-color:rgba(0,0,0,0.25);color:#fff;border-color:rgba(255,255,255,0.3);box-shadow:0 0 rgba(0,0,0,0)} +.btn:active,.btn.active{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.07);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn.disabled,.btn[disabled],.btn.disabled:hover,.btn.disabled:focus,.btn.disabled:active,.btn.disabled.active{background-color:rgba(0,0,0,0.1)!important;color:rgba(255,255,255,0.3)!important;border-color:rgba(255,255,255,0.08)!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn.disabled.loading,.btn[disabled].loading,.btn.disabled:hover.loading,.btn.disabled:focus.loading,.btn.disabled:active.loading,.btn.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn.btn-wide{margin:3px 0;padding:6px 40px;font-size:15px;line-height:20px;height:34px} +.btn.btn-wide.active,.btn.btn-wide:active{padding:7px 39px 5px 41px} +.btn.btn-wide.disabled:active,.btn.btn-wide[disabled]:active,.btn.btn-wide.disabled.active,.btn.btn-wide[disabled].active{padding:6px 40px!important} +.btn-inverse{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.7);border:1px solid rgba(255,255,255,0.15);box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-inverse:hover,.btn-inverse:focus{background-color:rgba(0,0,0,0.25);color:#fff;border-color:rgba(255,255,255,0.3);box-shadow:0 0 rgba(0,0,0,0)} +.btn-inverse:active,.btn-inverse.active{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.07);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn-inverse.disabled,.btn-inverse[disabled],.btn-inverse.disabled:hover,.btn-inverse.disabled:focus,.btn-inverse.disabled:active,.btn-inverse.disabled.active{background-color:rgba(0,0,0,0.1)!important;color:rgba(255,255,255,0.3)!important;border-color:rgba(255,255,255,0.08)!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-inverse.disabled.loading,.btn-inverse[disabled].loading,.btn-inverse.disabled:hover.loading,.btn-inverse.disabled:focus.loading,.btn-inverse.disabled:active.loading,.btn-inverse.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-info{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.7);border:1px solid rgba(9,86,123,0.7);box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-info:hover,.btn-info:focus{background-color:rgba(0,0,0,0.25);color:#fff;border-color:#09567b;box-shadow:0 0 rgba(0,0,0,0)} +.btn-info:active,.btn-info.active{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.8);border-color:rgba(9,86,123,0.7);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn-info.disabled,.btn-info[disabled],.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled:active,.btn-info.disabled.active{background-color:rgba(0,0,0,0.1)!important;color:rgba(255,255,255,0.3)!important;border-color:rgba(255,255,255,0.08)!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-info.disabled.loading,.btn-info[disabled].loading,.btn-info.disabled:hover.loading,.btn-info.disabled:focus.loading,.btn-info.disabled:active.loading,.btn-info.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-success{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.7);border:1px solid rgba(10,91,40,0.7);box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-success:hover,.btn-success:focus{background-color:rgba(0,0,0,0.25);color:#fff;border-color:#0a5b28;box-shadow:0 0 rgba(0,0,0,0)} +.btn-success:active,.btn-success.active{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.8);border-color:rgba(10,91,40,0.7);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn-success.disabled,.btn-success[disabled],.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled:active,.btn-success.disabled.active{background-color:rgba(0,0,0,0.1)!important;color:rgba(255,255,255,0.3)!important;border-color:rgba(255,255,255,0.08)!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-success.disabled.loading,.btn-success[disabled].loading,.btn-success.disabled:hover.loading,.btn-success.disabled:focus.loading,.btn-success.disabled:active.loading,.btn-success.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-warning{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.7);border:1px solid rgba(98,86,4,0.7);box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-warning:hover,.btn-warning:focus{background-color:rgba(0,0,0,0.25);color:#fff;border-color:#625604;box-shadow:0 0 rgba(0,0,0,0)} +.btn-warning:active,.btn-warning.active{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.8);border-color:rgba(98,86,4,0.7);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn-warning.disabled,.btn-warning[disabled],.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled:active,.btn-warning.disabled.active{background-color:rgba(0,0,0,0.1)!important;color:rgba(255,255,255,0.3)!important;border-color:rgba(255,255,255,0.08)!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-warning.disabled.loading,.btn-warning[disabled].loading,.btn-warning.disabled:hover.loading,.btn-warning.disabled:focus.loading,.btn-warning.disabled:active.loading,.btn-warning.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-danger,.btn-error{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.7);border:1px solid rgba(255,255,255,0.07);box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-danger:hover,.btn-error:hover,.btn-danger:focus,.btn-error:focus{background-color:rgba(0,0,0,0.25);color:#fff;border-color:#7b1315;box-shadow:0 0 rgba(0,0,0,0)} +.btn-danger:active,.btn-error:active,.btn-danger.active,.btn-error.active{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.07);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn-danger.disabled,.btn-error.disabled,.btn-danger[disabled],.btn-error[disabled],.btn-danger.disabled:hover,.btn-error.disabled:hover,.btn-danger.disabled:focus,.btn-error.disabled:focus,.btn-danger.disabled:active,.btn-error.disabled:active,.btn-danger.disabled.active,.btn-error.disabled.active{background-color:rgba(0,0,0,0.1)!important;color:rgba(255,255,255,0.3)!important;border-color:rgba(255,255,255,0.08)!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-danger.disabled.loading,.btn-error.disabled.loading,.btn-danger[disabled].loading,.btn-error[disabled].loading,.btn-danger.disabled:hover.loading,.btn-error.disabled:hover.loading,.btn-danger.disabled:focus.loading,.btn-error.disabled:focus.loading,.btn-danger.disabled:active.loading,.btn-error.disabled:active.loading,.btn-danger.disabled.active.loading,.btn-error.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-link{background-color:transparent;color:#00aeff;border:1px solid transparent;box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-link:hover,.btn-link:focus{background-color:transparent;color:#fff;border-color:transparent;box-shadow:0 0 rgba(0,0,0,0)} +.btn-link:active,.btn-link.active{background-color:transparent;color:#fff;border-color:transparent;box-shadow:0 0 rgba(0,0,0,0)} +.btn-link.disabled,.btn-link[disabled],.btn-link.disabled:hover,.btn-link.disabled:focus,.btn-link.disabled:active,.btn-link.disabled.active{background-color:transparent!important;color:rgba(255,255,255,0.3)!important;border-color:transparent!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-link.disabled.loading,.btn-link[disabled].loading,.btn-link.disabled:hover.loading,.btn-link.disabled:focus.loading,.btn-link.disabled:active.loading,.btn-link.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-primary{background-color:#098cc8;color:#fff;border:1px solid transparent;box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;background-image:-webkit-linear-gradient(top,#0f9ada,#0076ad);background-image:linear-gradient(to bottom,#0f9ada,#0076ad);border:0;box-shadow:0 1px 1px rgba(0,0,0,0.3),0 0 0 1px rgba(255,255,255,0.15) inset} +.btn-primary:hover,.btn-primary:focus{background-color:#21b0f1;color:#fff;border-color:transparent;box-shadow:0 0 rgba(0,0,0,0)} +.btn-primary:active,.btn-primary.active{background-color:#006899;color:rgba(255,255,255,0.7);border-color:transparent;box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn-primary.disabled,.btn-primary[disabled],.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled:active,.btn-primary.disabled.active{background-color:transparent!important;color:rgba(255,255,255,0.15)!important;border-color:transparent!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-primary.disabled.loading,.btn-primary[disabled].loading,.btn-primary.disabled:hover.loading,.btn-primary.disabled:focus.loading,.btn-primary.disabled:active.loading,.btn-primary.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-primary:hover,.btn-primary:focus{background-image:-webkit-linear-gradient(top,#37c0ff,#0097dd);background-image:linear-gradient(to bottom,#37c0ff,#0097dd)} +.btn-primary:active,.btn-primary.active{background-image:-webkit-linear-gradient(top,#006ea1,#00608d);background-image:linear-gradient(to bottom,#006ea1,#00608d);box-shadow:1px 1px 2px rgba(0,0,0,0.6) inset,0 0 0 1px rgba(255,255,255,0.07) inset} +.btn-primary.disabled,.btn-primary[disabled],.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled:active,.btn-primary.disabled.active{background-image:-webkit-linear-gradient(top,rgba(15,154,218,0.1),rgba(0,118,173,0.1));background-image:linear-gradient(to bottom,rgba(15,154,218,0.1),rgba(0,118,173,0.1));box-shadow:0 1px 1px rgba(0,0,0,0.03),0 0 0 1px rgba(255,255,255,0.016) inset} +.btn-large{margin:0;padding:9px 30px;font-size:17px;line-height:20px;height:40px} +.btn-large.active,.btn-large:active{padding:10px 29px 8px 31px} +.btn-large.disabled:active,.btn-large[disabled]:active,.btn-large.disabled.active,.btn-large[disabled].active{padding:9px 30px!important} +.btn-small{margin:2px 0;padding:2px 10px;font-size:13px;line-height:20px;height:26px} +.btn-small.active,.btn-small:active{padding:3px 9px 1px 11px} +.btn-small.disabled:active,.btn-small[disabled]:active,.btn-small.disabled.active,.btn-small[disabled].active{padding:2px 10px!important} +.btn-mini{margin:0;padding:1px 10px;font-size:12px;line-height:16px;height:20px} +.btn-mini.active,.btn-mini:active{padding:2px 9px 0 11px} +.btn-mini.disabled:active,.btn-mini[disabled]:active,.btn-mini.disabled.active,.btn-mini[disabled].active{padding:1px 10px!important} +.btn-block+.btn-block{margin-top:10px} +.btn [class^="icon-"],.btn [class*=" icon-"]{margin-top:2px;margin-left:-4px;margin-right:5px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");opacity:.8} +.btn:hover [class^="icon-"],.btn:focus [class^="icon-"],.btn:hover [class*=" icon-"],.btn:focus [class*=" icon-"]{opacity:1} +.btn:active [class^="icon-"],.btn.active [class^="icon-"],.btn:active [class*=" icon-"],.btn.active [class*=" icon-"]{opacity:.8} +.btn-inverse [class^="icon-"],.btn-inverse [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.btn-info [class^="icon-"],.btn-info [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.btn-success [class^="icon-"],.btn-success [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png")} +.btn-warning [class^="icon-"],.btn-warning [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png")} +.btn-danger [class^="icon-"],.btn-error [class^="icon-"],.btn-danger [class*=" icon-"],.btn-error [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-red.png")} +.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-left:-2px;margin-right:3px} +.btn-small.btn-icon [class^="icon-"],.btn-small.btn-icon [class*=" icon-"]{margin-left:0;margin-right:0} +.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:0} +.btn-icon [class^="icon-"],.btn-icon [class*=" icon-"]{margin-left:0;margin-right:0} +.btn.disabled [class^="icon-"],.btn[disabled] [class^="icon-"],.btn.disabled [class*=" icon-"],.btn[disabled] [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")!important;opacity:.15!important} +.btn.disabled:active [class^="icon-"],.btn[disabled]:active [class^="icon-"],.btn.disabled.active [class^="icon-"],.btn[disabled].active [class^="icon-"],.btn.disabled:active [class*=" icon-"],.btn[disabled]:active [class*=" icon-"],.btn.disabled.active [class*=" icon-"],.btn[disabled].active [class*=" icon-"]{opacity:.15!important} +.btn.disabled.loading [class^="icon-"],.btn[disabled].loading [class^="icon-"],.btn.disabled.loading [class*=" icon-"],.btn[disabled].loading [class*=" icon-"]{opacity:0!important} +.btn-primary [class^="icon-"],.btn-primary [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:1} +.btn-primary:active [class^="icon-"],.btn-primary.active [class*=" icon-"]{opacity:.7} +.btn-primary.disabled [class^="icon-"],.btn-primary[disabled] [class^="icon-"],.btn-primary.disabled [class*=" icon-"],.btn-primary[disabled] [class*=" icon-"]{opacity:.15} +.btn-primary.disabled:active [class^="icon-"],.btn-primary[disabled]:active [class^="icon-"],.btn-primary.disabled.active [class^="icon-"],.btn-primary[disabled].active [class^="icon-"],.btn-primary.disabled:active [class*=" icon-"],.btn-primary[disabled]:active [class*=" icon-"],.btn-primary.disabled.active [class*=" icon-"],.btn-primary[disabled].active [class*=" icon-"]{opacity:.15} +.btn.loading:before{content:"";width:20px;height:20px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png");background-position:-140px 0;display:inline-block;position:absolute;z-index:1060;left:50%;top:50%;margin-top:-10px;margin-left:-10px;-webkit-animation:keyframes-loading .8s steps(21) infinite;-moz-animation:keyframes-loading .8s steps(21) infinite;-ms-animation:keyframes-loading .8s steps(21) infinite;animation:keyframes-loading .8s steps(21) infinite} +.btn.btn-link.loading:before{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png")} +.btn.disabled-loading{height:34px} +.btn-large.disabled-loading{height:40px} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.btn.loading:before{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-size:420px 20px} +.btn.btn-primary.loading:before{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-size:420px 20px} +} +.carousel{margin-bottom:20px;line-height:1;border:1px solid #000;box-shadow:0 5px 10px rgba(0,0,0,0.4);-moz-box-sizing:border-box;box-sizing:border-box} +.carousel .carousel-inner{border:0;-moz-box-sizing:border-box;box-sizing:border-box} +.carousel .carousel-inner .cover{background-color:rgba(255,255,255,0);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.1);-webkit-transition:background-color,0.2s;transition:background-color .2s} +.carousel .carousel-inner .carousel-caption{background-color:transparent;-moz-box-sizing:border-box;box-sizing:border-box;padding:10px 14px 30px 15px;color:rgba(255,255,255,0.7);-webkit-transition:opacity 1.25s,-webkit-transform .2s;transition:opacity 1.25s,transform .2s} +.carousel .carousel-inner .carousel-caption .bg-layer{background-color:rgba(0,0,0,0.6);-webkit-transition:-webkit-transform,0.2s;transition:transform .2s} +.carousel .carousel-inner .carousel-caption h4,.carousel .carousel-inner .carousel-caption .heading-4{margin-bottom:6px;font-size:23px;line-height:1.2;font-weight:300;white-space:nowrap;overflow:hidden;color:rgba(255,255,255,0.7);text-overflow:ellipsis} +.carousel .carousel-inner .carousel-caption .summary{color:rgba(255,255,255,0.7);white-space:nowrap;overflow:hidden;text-overflow:ellipsis} +.carousel .carousel-inner>.item{-webkit-transition:.6s,ease-in-out,left;transition:.6s ease-in-out left} +.carousel:hover .cover{background-color:rgba(255,255,255,0.05);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.2)} +.carousel:hover .carousel-controls{opacity:1} +.carousel:hover .more .carousel-caption{-webkit-transform:translate(0,-47px);-ms-transform:translate(0,-47px);transform:translate(0,-47px)} +.carousel:hover .more .bg-layer{-webkit-transform:translate(0,-63px);-ms-transform:translate(0,-63px);transform:translate(0,-63px)} +.carousel.crossfade .carousel-inner{background-color:#000;border:0;-moz-box-sizing:border-box;box-sizing:border-box} +.carousel.crossfade .carousel-inner>.item{-webkit-transition:.2s,ease-in-out,opacity;transition:.2s ease-in-out opacity} +.carousel .carousel-controls{background-color:rgba(255,255,255,0.2);top:10px;right:10px;width:51px;height:26px;border:1px solid rgba(255,255,255,0.5);border-radius:3px;opacity:0;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.carousel .carousel-controls button{background-color:rgba(255,255,255,0.3);padding:0;width:26px;height:26px;top:0;border:0} +.carousel .carousel-controls button span{background-image:url("../../images/toolkit/defaults/carousels/sprite-carousel-control.png");background-repeat:no-repeat;margin:0 0 0 7px;padding:0;width:8px;height:14px;opacity:.6} +.carousel .carousel-controls button:hover{background-color:rgba(255,255,255,0.4)} +.carousel .carousel-controls button:hover span{opacity:1} +.carousel .carousel-controls button:active{background-color:rgba(255,255,255,0.4);border-color:rgba(255,255,255,0.6)} +.carousel .carousel-controls button:active span{opacity:.8} +.carousel .carousel-controls .left{border-right:1px solid rgba(255,255,255,0.1);left:0} +.carousel .carousel-controls .left span{background-position:-32px -80px} +.carousel .carousel-controls .left:active{border-right:rgba(255,255,255,0.1)} +.carousel .carousel-controls .left:active span{left:1px;top:1px} +.carousel .carousel-controls .right{border-left:1px solid rgba(255,255,255,0.1);left:25px} +.carousel .carousel-controls .right span{background-position:-40px -80px;margin-left:10px} +.carousel .carousel-controls .right:active{border-left:1px solid rgba(255,255,255,0.1)} +.carousel .carousel-controls .right:active span{left:1px;top:1px} +.close{float:right;display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");background-repeat:no-repeat;background-position:-112px -96px;text-indent:-9999px;margin:2px 2px 0 0;cursor:pointer;opacity:.2;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.close:focus,.close:hover{text-decoration:none;opacity:.4} +button.close{padding:0;border:0;background:transparent;-webkit-appearance:none} +code,pre{font-size:13px;line-height:20px;border-radius:2px} +code{padding:0 .25em;background-color:rgba(0,0,0,0.03);border:1px solid rgba(255,255,255,0.15)} +pre{margin:0 0 40px;font-size:13px;line-height:20px;padding:10px;background:rgba(0,0,0,0.03);border:1px solid rgba(255,255,255,0.15)} +.dropdown-toggle{padding-right:30px} +.caret{content:"";margin:2px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-repeat:no-repeat;text-indent:-9999px;-webkit-transition:opacity,0.2s;transition:opacity .2s;background-position:-64px -256px} +.navbar .caret{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")} +.dropdown-toggle>.caret{position:absolute;right:5px;top:0;opacity:.3;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.dropdown-toggle:focus>.caret,.dropdown-toggle:hover>.caret{opacity:.5} +.nav-tabs .dropdown-toggle>.caret,.nav-pills .dropdown-toggle>.caret{top:5px} +.dropdown-menu{left:-2px;z-index:1000;padding:4px 0;background-color:#272e3b;box-shadow:0 0 0 1px #3d434f inset,0 5px 10px rgba(0,0,0,0.75);border:solid #000;border-width:1px} +.dropdown-menu .divider{height:1px;margin:10px 1px 10px;overflow:hidden;border-bottom:1px solid #3d434f;background-color:transparent;margin:2px 0 3px 0} +.dropdown-menu li{margin:0 1px;padding:0} +.dropdown-menu li>a{padding:4px 30px;font-size:13px;font-weight:normal;line-height:20px;color:rgba(255,255,255,0.7);-webkit-transition:background-color .2s,border-color .2s,color .2s;transition:background-color .2s,border-color .2s,color .2s} +.dropdown-menu li>span{padding:4px 30px;font-size:13px;font-weight:normal;line-height:20px} +.dropdown-menu [class^="icon-"],.dropdown-menu [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.dropdown-menu [class^="icon-"]:not(.icon-external-link),.dropdown-menu [class*=" icon-"]:not(.icon-external-link){position:absolute;left:5px} +.dropdown-menu .icon-external-link{position:absolute;right:5px} +.navbar .dropdown-menu{margin-top:9px} +.navbar .pull-right .dropdown-menu li:first-child:before{content:"";border-bottom:6px solid #3d434f;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);display:inline-block;position:absolute;right:8px;top:-6px} +.navbar .pull-right .dropdown-menu li:first-child:after{content:"";border-top:1px solid #272e3b;display:inline-block;position:absolute;right:9px;top:0;width:10px} +.navbar .pull-right .dropdown-menu:before{content:"";border-bottom:7px solid #000;border-left:7px solid rgba(0,0,0,0);border-right:7px solid rgba(0,0,0,0);display:inline-block;position:absolute;right:7px;top:-7px} +.navbar .pull-right .dropdown-menu:after{content:"";border-bottom:4px solid #272e3b;border-left:4px solid rgba(0,0,0,0);border-right:4px solid rgba(0,0,0,0);display:inline-block;position:absolute;right:10px;top:-4px} +.navbar .pull-right .dropdown-menu li:first-child:before{right:8px} +.navbar .pull-right .dropdown-menu li:first-child:after{right:9px} +.navbar .pull-right .dropdown-menu:before{right:7px} +.navbar .pull-right .dropdown-menu:after{right:10px} +.nav-tabs .dropdown-menu{left:28px;margin-top:0} +.nav-pills .dropdown-menu{left:-1px;margin-top:-1px} +.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{color:#fff;background-color:rgba(255,255,255,0.07)} +.dropdown-menu .active>a,.dropdown-menu .active>a:hover,.dropdown-menu .active>a:focus{color:#fff} +.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover,.dropdown-menu .disabled>a:focus{color:rgba(255,255,255,0.3)} +.dropdown-menu>.disabled>a>[class^="icon-"],.dropdown-menu>.disabled>a>[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.2} +.dropdown-submenu{position:relative} +.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:0} +.dropdown-submenu:hover>.dropdown-menu{display:block} +.dropdown-submenu>a:after{content:"";margin:2px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-repeat:no-repeat;text-indent:-9999px;background-position:0 -48px;position:absolute;right:5px;top:4px;opacity:.3;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.dropdown-submenu:focus>a:after,.dropdown-submenu:hover>a:after{opacity:.5} +.dropdown .dropdown-menu .nav-header{padding:4px 30px;margin:3px 0;border:solid #3d434f;border-width:1px 0;color:rgba(255,255,255,0.3)} +.dropdown .dropdown-menu .nav-header:first-child{border-top:0;margin-top:0} +.error-template .error-heading{margin:100px 0 40px 0;text-align:center;font-size:40px;line-height:50px} +.error-template .error-message{margin:0 0 40px 0;text-align:center;font-size:20px;line-height:25px;font-weight:300;color:rgba(255,255,255,0.8)} +.error-template .error-home-button{text-align:center;margin:0 0 40px 0} +.error-template .error-support{background-color:rgba(0,0,0,0.25);margin:40px 0 0 0;padding:20px 0;text-align:center;border-top:1px solid rgba(255,255,255,0.07);border-bottom:1px solid rgba(255,255,255,0.07)} +.error-template .error-support p{margin:0;color:rgba(255,255,255,0.8)} +.error-template .error-support:empty{background:0;border:0;height:0;overflow:hidden;margin:0;padding:0} +.footer{background:0} +.footer-content{border-top:1px solid rgba(255,255,255,0.1);padding:30px 0;font-size:13px;line-height:20px} +.footer-content:before,.footer-content:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.footer-content:after{clear:both} +.footer-content .legal{color:rgba(255,255,255,0.3)} +.footer-content .copyright{color:rgba(255,255,255,0.5);font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em} +.footer-content .supplemental{display:block} +.footer-content .links{display:block} +.footer-content .links a{display:inline-block;margin-right:20px} +.footer-content .links a:last-of-type{margin-right:0} +.footer-content .blizzard{display:block;width:102px;height:52px;overflow:hidden;float:right;background:transparent url("../../images/toolkit/defaults/logos/blizzard/footer.png") no-repeat 0 -104px;text-indent:-9999px} +form{margin:0} +fieldset{padding:0;margin:0 0 30px 0;border:0} +fieldset p:last-child,fieldset ul:last-child,fieldset ol:last-child{margin-bottom:0} +legend{display:block;width:100%;padding:0;margin-bottom:40px;color:#fff;font-size:23px;line-height:30px;font-weight:300} +legend small{font-size:12px;color:rgba(255,255,255,0.3)} +label,input,button,select,textarea{font-size:15px;font-weight:400;line-height:20px} +input,button,select,select optgroup,select option,textarea{font-family:"Blizzard","Arial","Helvetica",sans-serif} +input:lang(zh-CN),button:lang(zh-CN),select:lang(zh-CN),select optgroup:lang(zh-CN),select option:lang(zh-CN),textarea:lang(zh-CN){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft YaHei","Hei SC",sans-serif} +input:lang(zh-TW),button:lang(zh-TW),select:lang(zh-TW),select optgroup:lang(zh-TW),select option:lang(zh-TW),textarea:lang(zh-TW){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft JhengHei","Tei TC",sans-serif} +input:lang(ko),button:lang(ko),select:lang(ko),select optgroup:lang(ko),select option:lang(ko),textarea:lang(ko){font-family:"Blizzard","Arial","Helvetica","?????? ??????","Malgun Gothic","????????????????????????","AppleSDGothicNeo","????????????","AppleGothic","??????","Dotum",sans-serif} +input:lang(ja),button:lang(ja),select:lang(ja),select optgroup:lang(ja),select option:lang(ja),textarea:lang(ja){font-family:"Blizzard","Arial","Helvetica","????????????","Meiryo","?????????????????? Pro","Hiragino Kaku Gothic Pro","???????????????","Yu Gothic",sans-serif} +input:lang(th),button:lang(th),select:lang(th),select optgroup:lang(th),select option:lang(th),textarea:lang(th){font-family:"Blizzard","Tahoma","Arial","Helvetica",sans-serif} +*::-ms-clear{width:0;height:0} +label{display:block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:0} +.uneditable-input,select,textarea,input[type="color"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="email"],input[type="month"],input[type="number"],input[type="password"],input[type="search"],input[type="tel"],input[type="text"],input[type="time"],input[type="url"],input[type="week"]{display:inline-block;vertical-align:middle;height:34px;padding:0 10px;margin-top:3px;margin-bottom:3px;font-size:15px;line-height:20px;border:1px solid rgba(255,255,255,0.3);background-color:rgba(0,0,0,0.5);color:rgba(255,255,255,0.7);-moz-box-sizing:border-box;box-sizing:border-box;border-radius:2px} +.uneditable-input.input-block,select.input-block,textarea.input-block,input[type="color"].input-block,input[type="date"].input-block,input[type="datetime"].input-block,input[type="datetime-local"].input-block,input[type="email"].input-block,input[type="month"].input-block,input[type="number"].input-block,input[type="password"].input-block,input[type="search"].input-block,input[type="tel"].input-block,input[type="text"].input-block,input[type="time"].input-block,input[type="url"].input-block,input[type="week"].input-block{width:100%} +.uneditable-input[class^="grid-"],select[class^="grid-"],textarea[class^="grid-"],input[type="color"][class^="grid-"],input[type="date"][class^="grid-"],input[type="datetime"][class^="grid-"],input[type="datetime-local"][class^="grid-"],input[type="email"][class^="grid-"],input[type="month"][class^="grid-"],input[type="number"][class^="grid-"],input[type="password"][class^="grid-"],input[type="search"][class^="grid-"],input[type="tel"][class^="grid-"],input[type="text"][class^="grid-"],input[type="time"][class^="grid-"],input[type="url"][class^="grid-"],input[type="week"][class^="grid-"],.uneditable-input[class*=" grid-"],select[class*=" grid-"],textarea[class*=" grid-"],input[type="color"][class*=" grid-"],input[type="date"][class*=" grid-"],input[type="datetime"][class*=" grid-"],input[type="datetime-local"][class*=" grid-"],input[type="email"][class*=" grid-"],input[type="month"][class*=" grid-"],input[type="number"][class*=" grid-"],input[type="password"][class*=" grid-"],input[type="search"][class*=" grid-"],input[type="tel"][class*=" grid-"],input[type="text"][class*=" grid-"],input[type="time"][class*=" grid-"],input[type="url"][class*=" grid-"],input[type="week"][class*=" grid-"]{padding-left:10px;padding-right:10px} +.uneditable-input{padding-top:6px;padding-bottom:6px;height:auto} +.uneditable-input,input[readonly]{border-color:rgba(255,255,255,0.3)!important;background-color:rgba(20,20,23,0.5)!important;color:rgba(255,255,255,0.7)!important} +select,textarea,input[type="color"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="email"],input[type="month"],input[type="number"],input[type="password"],input[type="search"],input[type="tel"],input[type="text"],input[type="time"],input[type="url"],input[type="week"]{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;-webkit-transition:background-position .2s,background-color .2s,border-color .2s,box-shadow .2s;transition:background-position .2s,background-color .2s,border-color .2s,box-shadow .2s} +select:hover,textarea:hover,input[type="color"]:hover,input[type="date"]:hover,input[type="datetime"]:hover,input[type="datetime-local"]:hover,input[type="email"]:hover,input[type="month"]:hover,input[type="number"]:hover,input[type="password"]:hover,input[type="search"]:hover,input[type="tel"]:hover,input[type="text"]:hover,input[type="time"]:hover,input[type="url"]:hover,input[type="week"]:hover{border-color:rgba(255,255,255,0.5);background-color:rgba(0,0,0,0.5);color:rgba(255,255,255,0.7)} +select:focus,textarea:focus,input[type="color"]:focus,input[type="date"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="email"]:focus,input[type="month"]:focus,input[type="number"]:focus,input[type="password"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="text"]:focus,input[type="time"]:focus,input[type="url"]:focus,input[type="week"]:focus{border-color:#1e5f99;background-color:rgba(0,0,0,0.5);color:#fff} +select[disabled],textarea[disabled],input[type="color"][disabled],input[type="date"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="email"][disabled],input[type="month"][disabled],input[type="number"][disabled],input[type="password"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="text"][disabled],input[type="time"][disabled],input[type="url"][disabled],input[type="week"][disabled],select.disabled,textarea.disabled,input[type="color"].disabled,input[type="date"].disabled,input[type="datetime"].disabled,input[type="datetime-local"].disabled,input[type="email"].disabled,input[type="month"].disabled,input[type="number"].disabled,input[type="password"].disabled,input[type="search"].disabled,input[type="tel"].disabled,input[type="text"].disabled,input[type="time"].disabled,input[type="url"].disabled,input[type="week"].disabled{border-color:rgba(255,255,255,0.3)!important;background-color:rgba(20,20,23,0.5)!important;color:#3f3f3f!important;cursor:default!important} +select[disabled]:-moz-placeholder,textarea[disabled]:-moz-placeholder,input[type="color"][disabled]:-moz-placeholder,input[type="date"][disabled]:-moz-placeholder,input[type="datetime"][disabled]:-moz-placeholder,input[type="datetime-local"][disabled]:-moz-placeholder,input[type="email"][disabled]:-moz-placeholder,input[type="month"][disabled]:-moz-placeholder,input[type="number"][disabled]:-moz-placeholder,input[type="password"][disabled]:-moz-placeholder,input[type="search"][disabled]:-moz-placeholder,input[type="tel"][disabled]:-moz-placeholder,input[type="text"][disabled]:-moz-placeholder,input[type="time"][disabled]:-moz-placeholder,input[type="url"][disabled]:-moz-placeholder,input[type="week"][disabled]:-moz-placeholder,select.disabled:-moz-placeholder,textarea.disabled:-moz-placeholder,input[type="color"].disabled:-moz-placeholder,input[type="date"].disabled:-moz-placeholder,input[type="datetime"].disabled:-moz-placeholder,input[type="datetime-local"].disabled:-moz-placeholder,input[type="email"].disabled:-moz-placeholder,input[type="month"].disabled:-moz-placeholder,input[type="number"].disabled:-moz-placeholder,input[type="password"].disabled:-moz-placeholder,input[type="search"].disabled:-moz-placeholder,input[type="tel"].disabled:-moz-placeholder,input[type="text"].disabled:-moz-placeholder,input[type="time"].disabled:-moz-placeholder,input[type="url"].disabled:-moz-placeholder,input[type="week"].disabled:-moz-placeholder{color:#3f3f3f} +select[disabled]:-ms-input-placeholder,textarea[disabled]:-ms-input-placeholder,input[type="color"][disabled]:-ms-input-placeholder,input[type="date"][disabled]:-ms-input-placeholder,input[type="datetime"][disabled]:-ms-input-placeholder,input[type="datetime-local"][disabled]:-ms-input-placeholder,input[type="email"][disabled]:-ms-input-placeholder,input[type="month"][disabled]:-ms-input-placeholder,input[type="number"][disabled]:-ms-input-placeholder,input[type="password"][disabled]:-ms-input-placeholder,input[type="search"][disabled]:-ms-input-placeholder,input[type="tel"][disabled]:-ms-input-placeholder,input[type="text"][disabled]:-ms-input-placeholder,input[type="time"][disabled]:-ms-input-placeholder,input[type="url"][disabled]:-ms-input-placeholder,input[type="week"][disabled]:-ms-input-placeholder,select.disabled:-ms-input-placeholder,textarea.disabled:-ms-input-placeholder,input[type="color"].disabled:-ms-input-placeholder,input[type="date"].disabled:-ms-input-placeholder,input[type="datetime"].disabled:-ms-input-placeholder,input[type="datetime-local"].disabled:-ms-input-placeholder,input[type="email"].disabled:-ms-input-placeholder,input[type="month"].disabled:-ms-input-placeholder,input[type="number"].disabled:-ms-input-placeholder,input[type="password"].disabled:-ms-input-placeholder,input[type="search"].disabled:-ms-input-placeholder,input[type="tel"].disabled:-ms-input-placeholder,input[type="text"].disabled:-ms-input-placeholder,input[type="time"].disabled:-ms-input-placeholder,input[type="url"].disabled:-ms-input-placeholder,input[type="week"].disabled:-ms-input-placeholder{color:#3f3f3f} +select[disabled]::-webkit-input-placeholder,textarea[disabled]::-webkit-input-placeholder,input[type="color"][disabled]::-webkit-input-placeholder,input[type="date"][disabled]::-webkit-input-placeholder,input[type="datetime"][disabled]::-webkit-input-placeholder,input[type="datetime-local"][disabled]::-webkit-input-placeholder,input[type="email"][disabled]::-webkit-input-placeholder,input[type="month"][disabled]::-webkit-input-placeholder,input[type="number"][disabled]::-webkit-input-placeholder,input[type="password"][disabled]::-webkit-input-placeholder,input[type="search"][disabled]::-webkit-input-placeholder,input[type="tel"][disabled]::-webkit-input-placeholder,input[type="text"][disabled]::-webkit-input-placeholder,input[type="time"][disabled]::-webkit-input-placeholder,input[type="url"][disabled]::-webkit-input-placeholder,input[type="week"][disabled]::-webkit-input-placeholder,select.disabled::-webkit-input-placeholder,textarea.disabled::-webkit-input-placeholder,input[type="color"].disabled::-webkit-input-placeholder,input[type="date"].disabled::-webkit-input-placeholder,input[type="datetime"].disabled::-webkit-input-placeholder,input[type="datetime-local"].disabled::-webkit-input-placeholder,input[type="email"].disabled::-webkit-input-placeholder,input[type="month"].disabled::-webkit-input-placeholder,input[type="number"].disabled::-webkit-input-placeholder,input[type="password"].disabled::-webkit-input-placeholder,input[type="search"].disabled::-webkit-input-placeholder,input[type="tel"].disabled::-webkit-input-placeholder,input[type="text"].disabled::-webkit-input-placeholder,input[type="time"].disabled::-webkit-input-placeholder,input[type="url"].disabled::-webkit-input-placeholder,input[type="week"].disabled::-webkit-input-placeholder{color:#3f3f3f} +select[disabled]::-moz-placeholder,textarea[disabled]::-moz-placeholder,input[type="color"][disabled]::-moz-placeholder,input[type="date"][disabled]::-moz-placeholder,input[type="datetime"][disabled]::-moz-placeholder,input[type="datetime-local"][disabled]::-moz-placeholder,input[type="email"][disabled]::-moz-placeholder,input[type="month"][disabled]::-moz-placeholder,input[type="number"][disabled]::-moz-placeholder,input[type="password"][disabled]::-moz-placeholder,input[type="search"][disabled]::-moz-placeholder,input[type="tel"][disabled]::-moz-placeholder,input[type="text"][disabled]::-moz-placeholder,input[type="time"][disabled]::-moz-placeholder,input[type="url"][disabled]::-moz-placeholder,input[type="week"][disabled]::-moz-placeholder,select.disabled::-moz-placeholder,textarea.disabled::-moz-placeholder,input[type="color"].disabled::-moz-placeholder,input[type="date"].disabled::-moz-placeholder,input[type="datetime"].disabled::-moz-placeholder,input[type="datetime-local"].disabled::-moz-placeholder,input[type="email"].disabled::-moz-placeholder,input[type="month"].disabled::-moz-placeholder,input[type="number"].disabled::-moz-placeholder,input[type="password"].disabled::-moz-placeholder,input[type="search"].disabled::-moz-placeholder,input[type="tel"].disabled::-moz-placeholder,input[type="text"].disabled::-moz-placeholder,input[type="time"].disabled::-moz-placeholder,input[type="url"].disabled::-moz-placeholder,input[type="week"].disabled::-moz-placeholder{color:#3f3f3f!important;opacity:1} +select:-moz-placeholder,textarea:-moz-placeholder,input[type="color"]:-moz-placeholder,input[type="date"]:-moz-placeholder,input[type="datetime"]:-moz-placeholder,input[type="datetime-local"]:-moz-placeholder,input[type="email"]:-moz-placeholder,input[type="month"]:-moz-placeholder,input[type="number"]:-moz-placeholder,input[type="password"]:-moz-placeholder,input[type="search"]:-moz-placeholder,input[type="tel"]:-moz-placeholder,input[type="text"]:-moz-placeholder,input[type="time"]:-moz-placeholder,input[type="url"]:-moz-placeholder,input[type="week"]:-moz-placeholder{color:rgba(255,255,255,0.3)} +select:-ms-input-placeholder,textarea:-ms-input-placeholder,input[type="color"]:-ms-input-placeholder,input[type="date"]:-ms-input-placeholder,input[type="datetime"]:-ms-input-placeholder,input[type="datetime-local"]:-ms-input-placeholder,input[type="email"]:-ms-input-placeholder,input[type="month"]:-ms-input-placeholder,input[type="number"]:-ms-input-placeholder,input[type="password"]:-ms-input-placeholder,input[type="search"]:-ms-input-placeholder,input[type="tel"]:-ms-input-placeholder,input[type="text"]:-ms-input-placeholder,input[type="time"]:-ms-input-placeholder,input[type="url"]:-ms-input-placeholder,input[type="week"]:-ms-input-placeholder{color:rgba(255,255,255,0.3)} +select::-webkit-input-placeholder,textarea::-webkit-input-placeholder,input[type="color"]::-webkit-input-placeholder,input[type="date"]::-webkit-input-placeholder,input[type="datetime"]::-webkit-input-placeholder,input[type="datetime-local"]::-webkit-input-placeholder,input[type="email"]::-webkit-input-placeholder,input[type="month"]::-webkit-input-placeholder,input[type="number"]::-webkit-input-placeholder,input[type="password"]::-webkit-input-placeholder,input[type="search"]::-webkit-input-placeholder,input[type="tel"]::-webkit-input-placeholder,input[type="text"]::-webkit-input-placeholder,input[type="time"]::-webkit-input-placeholder,input[type="url"]::-webkit-input-placeholder,input[type="week"]::-webkit-input-placeholder{color:rgba(255,255,255,0.3)} +select:focus:-moz-placeholder,textarea:focus:-moz-placeholder,input[type="color"]:focus:-moz-placeholder,input[type="date"]:focus:-moz-placeholder,input[type="datetime"]:focus:-moz-placeholder,input[type="datetime-local"]:focus:-moz-placeholder,input[type="email"]:focus:-moz-placeholder,input[type="month"]:focus:-moz-placeholder,input[type="number"]:focus:-moz-placeholder,input[type="password"]:focus:-moz-placeholder,input[type="search"]:focus:-moz-placeholder,input[type="tel"]:focus:-moz-placeholder,input[type="text"]:focus:-moz-placeholder,input[type="time"]:focus:-moz-placeholder,input[type="url"]:focus:-moz-placeholder,input[type="week"]:focus:-moz-placeholder{color:rgba(255,255,255,0.3)} +select:focus:-ms-input-placeholder,textarea:focus:-ms-input-placeholder,input[type="color"]:focus:-ms-input-placeholder,input[type="date"]:focus:-ms-input-placeholder,input[type="datetime"]:focus:-ms-input-placeholder,input[type="datetime-local"]:focus:-ms-input-placeholder,input[type="email"]:focus:-ms-input-placeholder,input[type="month"]:focus:-ms-input-placeholder,input[type="number"]:focus:-ms-input-placeholder,input[type="password"]:focus:-ms-input-placeholder,input[type="search"]:focus:-ms-input-placeholder,input[type="tel"]:focus:-ms-input-placeholder,input[type="text"]:focus:-ms-input-placeholder,input[type="time"]:focus:-ms-input-placeholder,input[type="url"]:focus:-ms-input-placeholder,input[type="week"]:focus:-ms-input-placeholder{color:rgba(255,255,255,0.3)} +select:focus::-webkit-input-placeholder,textarea:focus::-webkit-input-placeholder,input[type="color"]:focus::-webkit-input-placeholder,input[type="date"]:focus::-webkit-input-placeholder,input[type="datetime"]:focus::-webkit-input-placeholder,input[type="datetime-local"]:focus::-webkit-input-placeholder,input[type="email"]:focus::-webkit-input-placeholder,input[type="month"]:focus::-webkit-input-placeholder,input[type="number"]:focus::-webkit-input-placeholder,input[type="password"]:focus::-webkit-input-placeholder,input[type="search"]:focus::-webkit-input-placeholder,input[type="tel"]:focus::-webkit-input-placeholder,input[type="text"]:focus::-webkit-input-placeholder,input[type="time"]:focus::-webkit-input-placeholder,input[type="url"]:focus::-webkit-input-placeholder,input[type="week"]:focus::-webkit-input-placeholder{color:rgba(255,255,255,0.3)} +input[type="number"]{-moz-appearance:textfield} +select{background-image:url("../../images/toolkit/themes/bnet/forms/sprite-22-select.png");background-repeat:no-repeat;background-position:right 0} +select::-ms-expand{display:none} +textarea,input,.uneditable-input{outline:0} +textarea{overflow:auto;height:auto;resize:vertical;min-height:34px;padding:6px 4px 4px 10px} +select{padding:6px 18px 6px 5px} +select:focus{outline:0} +select optgroup{border:solid #3d434f;border-width:1px 0;margin:0;background:#272e3b;color:rgba(255,255,255,0.3);font-style:normal;font-weight:400;font-size:12px;line-height:13px;letter-spacing:.075em;text-transform:uppercase;text-indent:10px;padding-top:5px} +select option{background:#272e3b;color:rgba(255,255,255,0.7);font-size:15px;line-height:20px;padding:4px 10px;letter-spacing:normal;text-transform:none} +select optgroup{font-size:15px;text-transform:none} +label.radio-label,label.checkbox-label{min-height:20px;padding-left:30px;position:relative;margin-bottom:20px} +label.radio-label[disabled],label.checkbox-label[disabled],label.radio-label.disabled,label.checkbox-label.disabled{opacity:.3} +label.radio-label input[type="radio"],label.checkbox-label input[type="checkbox"]{position:absolute;left:0;top:0;width:20px;height:20px;opacity:.3} +input.input-large{margin:5px 0;padding:0 10px;font-size:17px;line-height:20px;height:40px} +input.input-large.active,input.input-large:active{padding:1 9px -1 11px} +input.input-large.disabled:active,input.input-large[disabled]:active,input.input-large.disabled.active,input.input-large[disabled].active{padding:0 10px!important} +.form-actions{margin-top:40px;margin-bottom:40px} +.form-actions:before,.form-actions:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.form-actions:after{clear:both} +.form-actions .btn{float:left} +.form-actions .btn+.btn{margin-left:10px} +.control-group{margin-bottom:10px} +.control-group:before,.control-group:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.control-group:after{clear:both} +.control-group.control-info .control-label{color:#00aeff} +.control-group.control-info select,.control-group.control-info textarea,.control-group.control-info input[type="color"],.control-group.control-info input[type="date"],.control-group.control-info input[type="datetime"],.control-group.control-info input[type="datetime-local"],.control-group.control-info input[type="email"],.control-group.control-info input[type="month"],.control-group.control-info input[type="number"],.control-group.control-info input[type="password"],.control-group.control-info input[type="search"],.control-group.control-info input[type="tel"],.control-group.control-info input[type="text"],.control-group.control-info input[type="time"],.control-group.control-info input[type="url"],.control-group.control-info input[type="week"]{border-color:rgba(0,174,255,0.6)} +.control-group.control-info select:hover:not(:disabled),.control-group.control-info textarea:hover:not(:disabled),.control-group.control-info input[type="color"]:hover:not(:disabled),.control-group.control-info input[type="date"]:hover:not(:disabled),.control-group.control-info input[type="datetime"]:hover:not(:disabled),.control-group.control-info input[type="datetime-local"]:hover:not(:disabled),.control-group.control-info input[type="email"]:hover:not(:disabled),.control-group.control-info input[type="month"]:hover:not(:disabled),.control-group.control-info input[type="number"]:hover:not(:disabled),.control-group.control-info input[type="password"]:hover:not(:disabled),.control-group.control-info input[type="search"]:hover:not(:disabled),.control-group.control-info input[type="tel"]:hover:not(:disabled),.control-group.control-info input[type="text"]:hover:not(:disabled),.control-group.control-info input[type="time"]:hover:not(:disabled),.control-group.control-info input[type="url"]:hover:not(:disabled),.control-group.control-info input[type="week"]:hover:not(:disabled){border-color:rgba(0,174,255,0.8)} +.control-group.control-info select:focus,.control-group.control-info textarea:focus,.control-group.control-info input[type="color"]:focus,.control-group.control-info input[type="date"]:focus,.control-group.control-info input[type="datetime"]:focus,.control-group.control-info input[type="datetime-local"]:focus,.control-group.control-info input[type="email"]:focus,.control-group.control-info input[type="month"]:focus,.control-group.control-info input[type="number"]:focus,.control-group.control-info input[type="password"]:focus,.control-group.control-info input[type="search"]:focus,.control-group.control-info input[type="tel"]:focus,.control-group.control-info input[type="text"]:focus,.control-group.control-info input[type="time"]:focus,.control-group.control-info input[type="url"]:focus,.control-group.control-info input[type="week"]:focus{border-color:#00aeff} +.control-group.control-success .control-label{color:#00a83c} +.control-group.control-success select,.control-group.control-success textarea,.control-group.control-success input[type="color"],.control-group.control-success input[type="date"],.control-group.control-success input[type="datetime"],.control-group.control-success input[type="datetime-local"],.control-group.control-success input[type="email"],.control-group.control-success input[type="month"],.control-group.control-success input[type="number"],.control-group.control-success input[type="password"],.control-group.control-success input[type="search"],.control-group.control-success input[type="tel"],.control-group.control-success input[type="text"],.control-group.control-success input[type="time"],.control-group.control-success input[type="url"],.control-group.control-success input[type="week"]{border-color:rgba(0,168,60,0.6)} +.control-group.control-success select:hover:not(:disabled),.control-group.control-success textarea:hover:not(:disabled),.control-group.control-success input[type="color"]:hover:not(:disabled),.control-group.control-success input[type="date"]:hover:not(:disabled),.control-group.control-success input[type="datetime"]:hover:not(:disabled),.control-group.control-success input[type="datetime-local"]:hover:not(:disabled),.control-group.control-success input[type="email"]:hover:not(:disabled),.control-group.control-success input[type="month"]:hover:not(:disabled),.control-group.control-success input[type="number"]:hover:not(:disabled),.control-group.control-success input[type="password"]:hover:not(:disabled),.control-group.control-success input[type="search"]:hover:not(:disabled),.control-group.control-success input[type="tel"]:hover:not(:disabled),.control-group.control-success input[type="text"]:hover:not(:disabled),.control-group.control-success input[type="time"]:hover:not(:disabled),.control-group.control-success input[type="url"]:hover:not(:disabled),.control-group.control-success input[type="week"]:hover:not(:disabled){border-color:rgba(0,168,60,0.8)} +.control-group.control-success select:focus,.control-group.control-success textarea:focus,.control-group.control-success input[type="color"]:focus,.control-group.control-success input[type="date"]:focus,.control-group.control-success input[type="datetime"]:focus,.control-group.control-success input[type="datetime-local"]:focus,.control-group.control-success input[type="email"]:focus,.control-group.control-success input[type="month"]:focus,.control-group.control-success input[type="number"]:focus,.control-group.control-success input[type="password"]:focus,.control-group.control-success input[type="search"]:focus,.control-group.control-success input[type="tel"]:focus,.control-group.control-success input[type="text"]:focus,.control-group.control-success input[type="time"]:focus,.control-group.control-success input[type="url"]:focus,.control-group.control-success input[type="week"]:focus{border-color:#00a83c} +.control-group.control-warning .control-label{color:#d8ac15} +.control-group.control-warning select,.control-group.control-warning textarea,.control-group.control-warning input[type="color"],.control-group.control-warning input[type="date"],.control-group.control-warning input[type="datetime"],.control-group.control-warning input[type="datetime-local"],.control-group.control-warning input[type="email"],.control-group.control-warning input[type="month"],.control-group.control-warning input[type="number"],.control-group.control-warning input[type="password"],.control-group.control-warning input[type="search"],.control-group.control-warning input[type="tel"],.control-group.control-warning input[type="text"],.control-group.control-warning input[type="time"],.control-group.control-warning input[type="url"],.control-group.control-warning input[type="week"]{border-color:rgba(216,172,21,0.6)} +.control-group.control-warning select:hover:not(:disabled),.control-group.control-warning textarea:hover:not(:disabled),.control-group.control-warning input[type="color"]:hover:not(:disabled),.control-group.control-warning input[type="date"]:hover:not(:disabled),.control-group.control-warning input[type="datetime"]:hover:not(:disabled),.control-group.control-warning input[type="datetime-local"]:hover:not(:disabled),.control-group.control-warning input[type="email"]:hover:not(:disabled),.control-group.control-warning input[type="month"]:hover:not(:disabled),.control-group.control-warning input[type="number"]:hover:not(:disabled),.control-group.control-warning input[type="password"]:hover:not(:disabled),.control-group.control-warning input[type="search"]:hover:not(:disabled),.control-group.control-warning input[type="tel"]:hover:not(:disabled),.control-group.control-warning input[type="text"]:hover:not(:disabled),.control-group.control-warning input[type="time"]:hover:not(:disabled),.control-group.control-warning input[type="url"]:hover:not(:disabled),.control-group.control-warning input[type="week"]:hover:not(:disabled){border-color:rgba(216,172,21,0.8)} +.control-group.control-warning select:focus,.control-group.control-warning textarea:focus,.control-group.control-warning input[type="color"]:focus,.control-group.control-warning input[type="date"]:focus,.control-group.control-warning input[type="datetime"]:focus,.control-group.control-warning input[type="datetime-local"]:focus,.control-group.control-warning input[type="email"]:focus,.control-group.control-warning input[type="month"]:focus,.control-group.control-warning input[type="number"]:focus,.control-group.control-warning input[type="password"]:focus,.control-group.control-warning input[type="search"]:focus,.control-group.control-warning input[type="tel"]:focus,.control-group.control-warning input[type="text"]:focus,.control-group.control-warning input[type="time"]:focus,.control-group.control-warning input[type="url"]:focus,.control-group.control-warning input[type="week"]:focus{border-color:#d8ac15} +.control-group.control-error .control-label,.control-group.control-danger .control-label,.control-group.control-important .control-label{color:#cd0606} +.control-group.control-error select,.control-group.control-danger select,.control-group.control-important select,.control-group.control-error textarea,.control-group.control-danger textarea,.control-group.control-important textarea,.control-group.control-error input[type="color"],.control-group.control-danger input[type="color"],.control-group.control-important input[type="color"],.control-group.control-error input[type="date"],.control-group.control-danger input[type="date"],.control-group.control-important input[type="date"],.control-group.control-error input[type="datetime"],.control-group.control-danger input[type="datetime"],.control-group.control-important input[type="datetime"],.control-group.control-error input[type="datetime-local"],.control-group.control-danger input[type="datetime-local"],.control-group.control-important input[type="datetime-local"],.control-group.control-error input[type="email"],.control-group.control-danger input[type="email"],.control-group.control-important input[type="email"],.control-group.control-error input[type="month"],.control-group.control-danger input[type="month"],.control-group.control-important input[type="month"],.control-group.control-error input[type="number"],.control-group.control-danger input[type="number"],.control-group.control-important input[type="number"],.control-group.control-error input[type="password"],.control-group.control-danger input[type="password"],.control-group.control-important input[type="password"],.control-group.control-error input[type="search"],.control-group.control-danger input[type="search"],.control-group.control-important input[type="search"],.control-group.control-error input[type="tel"],.control-group.control-danger input[type="tel"],.control-group.control-important input[type="tel"],.control-group.control-error input[type="text"],.control-group.control-danger input[type="text"],.control-group.control-important input[type="text"],.control-group.control-error input[type="time"],.control-group.control-danger input[type="time"],.control-group.control-important input[type="time"],.control-group.control-error input[type="url"],.control-group.control-danger input[type="url"],.control-group.control-important input[type="url"],.control-group.control-error input[type="week"],.control-group.control-danger input[type="week"],.control-group.control-important input[type="week"]{border-color:rgba(205,6,6,0.6)} +.control-group.control-error select:hover:not(:disabled),.control-group.control-danger select:hover:not(:disabled),.control-group.control-important select:hover:not(:disabled),.control-group.control-error textarea:hover:not(:disabled),.control-group.control-danger textarea:hover:not(:disabled),.control-group.control-important textarea:hover:not(:disabled),.control-group.control-error input[type="color"]:hover:not(:disabled),.control-group.control-danger input[type="color"]:hover:not(:disabled),.control-group.control-important input[type="color"]:hover:not(:disabled),.control-group.control-error input[type="date"]:hover:not(:disabled),.control-group.control-danger input[type="date"]:hover:not(:disabled),.control-group.control-important input[type="date"]:hover:not(:disabled),.control-group.control-error input[type="datetime"]:hover:not(:disabled),.control-group.control-danger input[type="datetime"]:hover:not(:disabled),.control-group.control-important input[type="datetime"]:hover:not(:disabled),.control-group.control-error input[type="datetime-local"]:hover:not(:disabled),.control-group.control-danger input[type="datetime-local"]:hover:not(:disabled),.control-group.control-important input[type="datetime-local"]:hover:not(:disabled),.control-group.control-error input[type="email"]:hover:not(:disabled),.control-group.control-danger input[type="email"]:hover:not(:disabled),.control-group.control-important input[type="email"]:hover:not(:disabled),.control-group.control-error input[type="month"]:hover:not(:disabled),.control-group.control-danger input[type="month"]:hover:not(:disabled),.control-group.control-important input[type="month"]:hover:not(:disabled),.control-group.control-error input[type="number"]:hover:not(:disabled),.control-group.control-danger input[type="number"]:hover:not(:disabled),.control-group.control-important input[type="number"]:hover:not(:disabled),.control-group.control-error input[type="password"]:hover:not(:disabled),.control-group.control-danger input[type="password"]:hover:not(:disabled),.control-group.control-important input[type="password"]:hover:not(:disabled),.control-group.control-error input[type="search"]:hover:not(:disabled),.control-group.control-danger input[type="search"]:hover:not(:disabled),.control-group.control-important input[type="search"]:hover:not(:disabled),.control-group.control-error input[type="tel"]:hover:not(:disabled),.control-group.control-danger input[type="tel"]:hover:not(:disabled),.control-group.control-important input[type="tel"]:hover:not(:disabled),.control-group.control-error input[type="text"]:hover:not(:disabled),.control-group.control-danger input[type="text"]:hover:not(:disabled),.control-group.control-important input[type="text"]:hover:not(:disabled),.control-group.control-error input[type="time"]:hover:not(:disabled),.control-group.control-danger input[type="time"]:hover:not(:disabled),.control-group.control-important input[type="time"]:hover:not(:disabled),.control-group.control-error input[type="url"]:hover:not(:disabled),.control-group.control-danger input[type="url"]:hover:not(:disabled),.control-group.control-important input[type="url"]:hover:not(:disabled),.control-group.control-error input[type="week"]:hover:not(:disabled),.control-group.control-danger input[type="week"]:hover:not(:disabled),.control-group.control-important input[type="week"]:hover:not(:disabled){border-color:rgba(205,6,6,0.8)} +.control-group.control-error select:focus,.control-group.control-danger select:focus,.control-group.control-important select:focus,.control-group.control-error textarea:focus,.control-group.control-danger textarea:focus,.control-group.control-important textarea:focus,.control-group.control-error input[type="color"]:focus,.control-group.control-danger input[type="color"]:focus,.control-group.control-important input[type="color"]:focus,.control-group.control-error input[type="date"]:focus,.control-group.control-danger input[type="date"]:focus,.control-group.control-important input[type="date"]:focus,.control-group.control-error input[type="datetime"]:focus,.control-group.control-danger input[type="datetime"]:focus,.control-group.control-important input[type="datetime"]:focus,.control-group.control-error input[type="datetime-local"]:focus,.control-group.control-danger input[type="datetime-local"]:focus,.control-group.control-important input[type="datetime-local"]:focus,.control-group.control-error input[type="email"]:focus,.control-group.control-danger input[type="email"]:focus,.control-group.control-important input[type="email"]:focus,.control-group.control-error input[type="month"]:focus,.control-group.control-danger input[type="month"]:focus,.control-group.control-important input[type="month"]:focus,.control-group.control-error input[type="number"]:focus,.control-group.control-danger input[type="number"]:focus,.control-group.control-important input[type="number"]:focus,.control-group.control-error input[type="password"]:focus,.control-group.control-danger input[type="password"]:focus,.control-group.control-important input[type="password"]:focus,.control-group.control-error input[type="search"]:focus,.control-group.control-danger input[type="search"]:focus,.control-group.control-important input[type="search"]:focus,.control-group.control-error input[type="tel"]:focus,.control-group.control-danger input[type="tel"]:focus,.control-group.control-important input[type="tel"]:focus,.control-group.control-error input[type="text"]:focus,.control-group.control-danger input[type="text"]:focus,.control-group.control-important input[type="text"]:focus,.control-group.control-error input[type="time"]:focus,.control-group.control-danger input[type="time"]:focus,.control-group.control-important input[type="time"]:focus,.control-group.control-error input[type="url"]:focus,.control-group.control-danger input[type="url"]:focus,.control-group.control-important input[type="url"]:focus,.control-group.control-error input[type="week"]:focus,.control-group.control-danger input[type="week"]:focus,.control-group.control-important input[type="week"]:focus{border-color:#cd0606} +.control-group .checkbox-label:last-of-type,.control-group .radio-label:last-of-type{margin-bottom:0} +.control-label{font-size:12px;font-weight:400;line-height:20px;letter-spacing:.075em;display:block;text-transform:uppercase;color:rgba(255,255,255,0.3)} +.help-inline,.help-block,.help-icon{color:rgba(255,255,255,0.7);line-height:20px;font-size:13px;min-height:20px} +.help-inline:empty,.help-block:empty,.help-icon:empty{display:none} +.help-inline.help-info,.help-block.help-info,.help-icon.help-info{color:rgba(255,255,255,0.8)} +.help-inline.help-info [class^="icon-"],.help-block.help-info [class^="icon-"],.help-icon.help-info [class^="icon-"],.help-inline.help-info [class*=" icon-"],.help-block.help-info [class*=" icon-"],.help-icon.help-info [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.help-inline.help-success,.help-block.help-success,.help-icon.help-success{color:rgba(255,255,255,0.8)} +.help-inline.help-success [class^="icon-"],.help-block.help-success [class^="icon-"],.help-icon.help-success [class^="icon-"],.help-inline.help-success [class*=" icon-"],.help-block.help-success [class*=" icon-"],.help-icon.help-success [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png")} +.help-inline.help-warning,.help-block.help-warning,.help-icon.help-warning{color:rgba(255,255,255,0.8)} +.help-inline.help-warning [class^="icon-"],.help-block.help-warning [class^="icon-"],.help-icon.help-warning [class^="icon-"],.help-inline.help-warning [class*=" icon-"],.help-block.help-warning [class*=" icon-"],.help-icon.help-warning [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png")} +.help-inline.help-error,.help-block.help-error,.help-icon.help-error,.help-inline.help-danger,.help-block.help-danger,.help-icon.help-danger,.help-inline.help-important,.help-block.help-important,.help-icon.help-important{color:#cd0606} +.help-inline{display:inline-block;margin-left:10px;padding-top:10px;vertical-align:top} +.help-block,.help-icon{clear:both;display:block;margin-bottom:10px} +.help-icon:after{content:"";display:block;position:absolute;top:2px;left:0;width:16px;height:16px;overflow:hidden;line-height:20px;vertical-align:top;text-indent:-9999px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-repeat:no-repeat;background-position:-32px -224px} +.help-icon{position:relative;padding-left:20px} +.help-icon.help-info:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-32px -224px} +.help-icon.help-success:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png");background-position:-144px -80px} +.help-icon.help-warning:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png");background-position:-128px -80px} +.help-icon.help-error:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-red.png");background-position:-112px -96px} +.input-append,.input-prepend{margin:3px 0;font-size:0;white-space:nowrap} +.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{font-size:15px} +.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;vertical-align:top;border-radius:0 2px 2px 0} +.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2} +.input-append .add-on,.input-prepend .add-on{display:inline-block;height:34px;min-width:10px;padding:7px;font-size:15px;font-weight:400;line-height:20px;text-align:center;vertical-align:middle;background-color:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.3);margin:3px 0;-moz-box-sizing:border-box;box-sizing:border-box} +.input-append .add-on [class^="icon-"],.input-prepend .add-on [class^="icon-"],.input-append .add-on [class*=" icon-"],.input-prepend .add-on [class*=" icon-"]{margin-left:0;margin-right:0} +.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggl,.input-prepend .btn-group>.dropdown-toggl{vertical-align:top;border-radius:0} +.input-append .active,.input-prepend .active{background-color:#5cf847;border-color:#18a006} +.input-prepend .add-on,.input-prepend .btn{margin-right:-1px} +.input-prepend .add-on:first-child,.input-prepend .btn:first-child{border-radius:2px 0 0 2px} +.input-append input,.input-append select,.input-append .uneditable-input{border-radius:2px 0 0 2px} +.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{border-radius:0 2px 2px 0} +.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px} +.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggl{border-radius:0 2px 2px 0} +.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{border-radius:0} +.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{border-radius:0 2px 2px 0} +.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;margin-left:0;border-radius:2px 0 0 2px} +.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;border-radius:0 2px 2px 0} +.input-prepend.input-append .btn-group:first-child{margin-left:0} +input:invalid,input:valid,input:required{box-shadow:inherit} +input:-webkit-autofill{background:rgba(0,0,0,0.5);color:rgba(255,255,255,0.7)} +input::-webkit-color-swatch-wrapper{border:0;padding:5px 0} +input::-webkit-color-swatch{border:1px solid rgba(255,255,255,0.3);padding:0} +input::-webkit-inner-spin-button{-webkit-appearance:none;width:0;overflow:hidden} +input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;width:0;overflow:hidden} +input::-webkit-calendar-picker-indicator{background:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");background-position:-16px -256px;opacity:.3;width:16px;height:16px;padding:0;color:rgba(255,255,255,0);-webkit-transition:opacity,200ms;transition:opacity 200ms} +input:hover::-webkit-calendar-picker-indicator{opacity:.5} +input:focus::-webkit-calendar-picker-indicator{opacity:.5} +input::-webkit-clear-button{-webkit-appearance:none;background:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");background-position:-112px -96px;opacity:.3;width:16px;height:16px} +input:hover::-webkit-clear-button{opacity:.5} +input:focus::-webkit-clear-button{opacity:.5} +input::-webkit-datetime-edit{padding:0} +input::-webkit-datetime-edit-fields-wrapper{background:0} +input::-webkit-datetime-edit-text{color:rgba(255,255,255,0.3)} +input::-webkit-datetime-edit-year-field,input::-webkit-datetime-edit-month-field,input::-webkit-datetime-edit-week-field,input::-webkit-datetime-edit-day-field,input::-webkit-datetime-edit-hour-field,input::-webkit-datetime-edit-minute-field,input::-webkit-datetime-edit-second-field,input::-webkit-datetime-edit-millisecond-field,input::-webkit-datetime-edit-ampm-field{color:rgba(255,255,255,0.7)} +input::-webkit-datetime-edit-year-field:focus,input::-webkit-datetime-edit-month-field:focus,input::-webkit-datetime-edit-week-field:focus,input::-webkit-datetime-edit-day-field:focus,input::-webkit-datetime-edit-hour-field:focus,input::-webkit-datetime-edit-minute-field:focus,input::-webkit-datetime-edit-second-field:focus,input::-webkit-datetime-edit-millisecond-field:focus,input::-webkit-datetime-edit-ampm-field:focus{background:#19547c;color:#fff} +input[disabled]::-webkit-datetime-edit-text,input.disabled::-webkit-datetime-edit-text,input[disabled]::-webkit-datetime-edit-year-field,input.disabled::-webkit-datetime-edit-year-field,input[disabled]::-webkit-datetime-edit-month-field,input.disabled::-webkit-datetime-edit-month-field,input[disabled]::-webkit-datetime-edit-week-field,input.disabled::-webkit-datetime-edit-week-field,input[disabled]::-webkit-datetime-edit-day-field,input.disabled::-webkit-datetime-edit-day-field,input[disabled]::-webkit-datetime-edit-hour-field,input.disabled::-webkit-datetime-edit-hour-field,input[disabled]::-webkit-datetime-edit-minute-field,input.disabled::-webkit-datetime-edit-minute-field,input[disabled]::-webkit-datetime-edit-second-field,input.disabled::-webkit-datetime-edit-second-field,input[disabled]::-webkit-datetime-edit-millisecond-field,input.disabled::-webkit-datetime-edit-millisecond-field,input[disabled]::-webkit-datetime-edit-ampm-field,input.disabled::-webkit-datetime-edit-ampm-field{color:#3f3f3f!important} +.js-enabled input[type="checkbox"]:not(.css-input),.js-enabled input[type="radio"]:not(.css-input){width:0;height:0;overflow:hidden;opacity:0!important} +.js-enabled label.checkbox-label:not(.css-label),.js-enabled label.radio-label:not(.css-label){cursor:pointer} +.js-enabled label.checkbox-label:not(.css-label):after,.js-enabled label.radio-label:not(.css-label):after{content:"";display:block;width:20px;height:20px;overflow:hidden;position:absolute;left:0;top:0;cursor:pointer;background:rgba(0,0,0,0.5) url("../../images/toolkit/themes/bnet/forms/sprite-18-inputs.png") no-repeat -64px -96px;border:1px solid rgba(255,255,255,0.3);-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +.js-enabled label.checkbox-label:not(.css-label).focus:after,.js-enabled label.radio-label:not(.css-label).focus:after{background-color:rgba(0,0,0,0.5);border-color:#1e5f99} +.js-enabled label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled label.radio-label:not(.css-label):hover:not(.disabled):after{background-color:rgba(0,0,0,0.5);border-color:rgba(255,255,255,0.5)} +.js-enabled label.checkbox-label:not(.css-label).disabled:after,.js-enabled label.radio-label:not(.css-label).disabled:after{background-color:rgba(20,20,23,0.5)!important;border-color:rgba(255,255,255,0.3)!important;cursor:default!important} +.js-enabled label.checkbox-label:not(.css-label):after{border-radius:2px} +.js-enabled label.checkbox-label:not(.css-label).checked:after{background-position:0 0} +.js-enabled label.checkbox-label:not(.css-label).checked.disabled:after{background-position:0 -18px!important} +.js-enabled label.radio-label:not(.css-label):after{border-radius:10px} +.js-enabled label.radio-label:not(.css-label).checked:after{background-position:-18px 0} +.js-enabled label.radio-label:not(.css-label).checked.disabled:after{background-position:-18px -18px!important} +.js-enabled label.checkbox-label:not(.css-label):after{border-radius:2px} +.js-enabled label.checkbox-label:not(.css-label).partial:after{background-position:-36px 0} +.js-enabled label.checkbox-label:not(.css-label).partial.disabled:after{background-position:-36px -18px!important} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-info label.radio-label:not(.css-label):after{border-color:rgba(0,174,255,0.6)} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-info label.radio-label:not(.css-label).focus:after{border-color:#00aeff} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-info label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:rgba(0,174,255,0.8)} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label).checked:after{background-position:0 0} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label).partial:after{background-position:-36px 0} +.js-enabled .control-group.control-info label.radio-label:not(.css-label).checked:after{background-position:-18px 0} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-success label.radio-label:not(.css-label):after{border-color:rgba(0,168,60,0.6)} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-success label.radio-label:not(.css-label).focus:after{border-color:#00a83c} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-success label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:rgba(0,168,60,0.8)} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label).checked:after{background-position:0 -72px} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label).partial:after{background-position:-36px -72px} +.js-enabled .control-group.control-success label.radio-label:not(.css-label).checked:after{background-position:-18px -72px} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-warning label.radio-label:not(.css-label):after{border-color:rgba(216,172,21,0.6)} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-warning label.radio-label:not(.css-label).focus:after{border-color:#d8ac15} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-warning label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:rgba(216,172,21,0.8)} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label).checked:after{background-position:0 -36px} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label).partial:after{background-position:-36px -36px} +.js-enabled .control-group.control-warning label.radio-label:not(.css-label).checked:after{background-position:-18px -36px} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-error label.radio-label:not(.css-label):after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label):after,.js-enabled .control-group.control-important label.radio-label:not(.css-label):after{border-color:rgba(205,6,6,0.6)} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-error label.radio-label:not(.css-label).focus:after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label).focus:after,.js-enabled .control-group.control-important label.radio-label:not(.css-label).focus:after{border-color:#cd0606} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-error label.radio-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-important label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:rgba(205,6,6,0.8)} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label).checked:after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label).checked:after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label).checked:after{background-position:0 -54px} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label).partial:after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label).partial:after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label).partial:after{background-position:-36px -54px} +.js-enabled .control-group.control-error label.radio-label:not(.css-label).checked:after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label).checked:after,.js-enabled .control-group.control-important label.radio-label:not(.css-label).checked:after{background-position:-18px -54px} +label.checkbox-label.css-label,label.radio-label.css-label{cursor:pointer} +label.checkbox-label.css-label>input[type="checkbox"]:not(.css-input),label.radio-label.css-label>input[type="checkbox"]:not(.css-input),label.checkbox-label.css-label>input[type="radio"]:not(.css-input),label.radio-label.css-label>input[type="radio"]:not(.css-input){width:0;height:0;overflow:hidden;opacity:0} +label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]+.input-checkbox{border-radius:2px} +label.checkbox-label.css-label>input[type="radio"]+.input-radio,label.radio-label.css-label>input[type="radio"]+.input-radio{border-radius:10px} +label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]+.input-checkbox,label.checkbox-label.css-label>input[type="radio"]+.input-radio,label.radio-label.css-label>input[type="radio"]+.input-radio{display:block;width:20px;height:20px;overflow:hidden;position:absolute;left:0;top:0;cursor:pointer;background:rgba(0,0,0,0.5) url("../../images/toolkit/themes/bnet/forms/sprite-18-inputs.png") no-repeat -64px -96px;border:1px solid rgba(255,255,255,0.3);-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:focus+.input-checkbox,label.checkbox-label.css-label>input[type="radio"]:focus+.input-radio,label.radio-label.css-label>input[type="radio"]:focus+.input-radio{background-color:rgba(0,0,0,0.5);border-color:#1e5f99} +label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,label.radio-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,label.checkbox-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio,label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{background-color:rgba(0,0,0,0.5);border-color:rgba(255,255,255,0.5)} +label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 0} +label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox.partial,label.radio-label.css-label>input[type="checkbox"]:checked+.input-checkbox.partial{background-position:-36px 0!important} +label.checkbox-label.css-label>input[type="radio"]:checked+.input-radio,label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px 0} +label.checkbox-label.css-label>input[type="checkbox"]:disabled+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:disabled+.input-checkbox,label.checkbox-label.css-label>input[type="radio"]:disabled+.input-radio,label.radio-label.css-label>input[type="radio"]:disabled+.input-radio{background-color:rgba(20,20,23,0.5)!important;border-color:rgba(255,255,255,0.3)!important;cursor:default!important} +label.checkbox-label.css-label>input[type="checkbox"]:checked:disabled+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:checked:disabled+.input-checkbox{background-position:0 -18px!important} +label.checkbox-label.css-label>input[type="checkbox"]:disabled.partial+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:disabled.partial+.input-checkbox{background-position:-36px -18px!important} +label.checkbox-label.css-label>input[type="radio"]:checked:disabled+.input-radio,label.radio-label.css-label>input[type="radio"]:checked:disabled+.input-radio{background-position:-18px -18px!important} +.js-enabled .control-group.info label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.info label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:rgba(0,174,255,0.6)} +.js-enabled .control-group.info label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.info label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#00aeff} +.js-enabled .control-group.info label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.info label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:rgba(0,174,255,0.8)} +.js-enabled .control-group.info label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 0} +.js-enabled .control-group.info label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px 0} +.js-enabled .control-group.success label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.success label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:rgba(0,168,60,0.6)} +.js-enabled .control-group.success label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.success label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#00a83c} +.js-enabled .control-group.success label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.success label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:rgba(0,168,60,0.8)} +.js-enabled .control-group.success label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 -72px} +.js-enabled .control-group.success label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px -72px} +.js-enabled .control-group.warning label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.warning label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:rgba(216,172,21,0.6)} +.js-enabled .control-group.warning label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.warning label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#d8ac15} +.js-enabled .control-group.warning label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.warning label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:rgba(216,172,21,0.8)} +.js-enabled .control-group.warning label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 -36px} +.js-enabled .control-group.warning label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px -36px} +.js-enabled .control-group.error label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.error label.radio-label.css-label>input[type="radio"]+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label>input[type="radio"]+.input-radio,.js-enabled .control-group.important label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:rgba(205,6,6,0.6)} +.js-enabled .control-group.error label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.error label.radio-label.css-label>input[type="radio"]:focus+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label>input[type="radio"]:focus+.input-radio,.js-enabled .control-group.important label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#cd0606} +.js-enabled .control-group.error label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.error label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio,.js-enabled .control-group.important label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:rgba(205,6,6,0.8)} +.js-enabled .control-group.error label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 -54px} +.js-enabled .control-group.error label.radio-label.css-label>input[type="radio"]:checked+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label>input[type="radio"]:checked+.input-radio,.js-enabled .control-group.important label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px -54px} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.js-enabled label.checkbox-label:not(.css-label):after,.js-enabled label.radio-label:not(.css-label):after{background:rgba(0,0,0,0.5) url("../../images/toolkit/themes/bnet/forms/sprite-36-inputs.png") no-repeat -64px -96px;background-size:54px 108px} +} +.js-enabled .select-box{cursor:default;position:relative;display:inline-block;height:34px;padding:0 22px 0 0;text-indent:10px;margin-top:3px;margin-bottom:3px;font-size:15px;line-height:20px;color:rgba(255,255,255,0.7);border:1px solid rgba(255,255,255,0.3);border-radius:2px;background:rgba(0,0,0,0.5);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:background-color .2s,border-color .2s,box-shadow .2s;transition:background-color .2s,border-color .2s,box-shadow .2s} +.js-enabled .select-box .arrow{width:22px;height:100%;overflow:hidden;border-top-right-radius:2px;border-bottom-right-radius:2px;position:absolute;top:0;right:0;background:url("../../images/toolkit/themes/bnet/forms/sprite-22-select.png") no-repeat 0 0} +.js-enabled .select-box.input-block{width:100%} +.js-enabled .select-box:hover{border-color:rgba(255,255,255,0.5);background:rgba(0,0,0,0.5)} +.js-enabled .select-box:hover>.current{color:rgba(255,255,255,0.7)} +.js-enabled .select-box:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.js-enabled .select-box:focus>.current{color:#fff} +.js-enabled .select-box.expanded{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#1e5f99;background:rgba(0,0,0,0.5)} +.js-enabled .select-box.expanded .options{z-index:1000;display:block} +.js-enabled .select-box>.current{height:32px;width:100%;line-height:32px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.js-enabled .select-box>.current.placeholder{color:rgba(255,255,255,0.3)} +.js-enabled .text-indent [class^="icon-"],.js-enabled .select-box>.current [class*=" icon-"]{margin-top:8px;margin-right:7px;margin-left:-3px} +.js-enabled .select-box>.current [class^="icon-payment-"],.js-enabled .select-box>.current [class*=" icon-payment-"]{margin-right:8px;margin-left:-2px} +.js-enabled .select-box .options{font-size:13px;line-height:20px;border:solid #3d434f;border-width:0 1px 1px 1px;position:absolute;display:none;top:33px;left:-1px;right:-1px;max-height:200px;background-color:#272e3b;overflow:hidden;border-bottom-left-radius:2px;border-bottom-right-radius:2px;z-index:0} +.js-enabled .select-box .options .option{text-shadow:none;line-height:26px;height:26px;text-indent:10px;color:rgba(255,255,255,0.7);width:100%;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.js-enabled .select-box .options .option:hover{color:#fff;background-color:rgba(255,255,255,0.07)} +.js-enabled .select-box .options .option.selected,.js-enabled .select-box .options .option.selected:hover{color:#fff;background-color:rgba(0,105,225,0.15)} +.js-enabled .select-box .options .option.placeholder,.js-enabled .select-box .options .option.placeholder:hover{color:rgba(255,255,255,0.3)} +.js-enabled .select-box .options .option-group{border:solid #3d434f;border-width:1px 0;margin:-1px 0} +.js-enabled .select-box .options .option-group .option-group-label{text-shadow:none;font-size:12px;line-height:20px;height:20px;text-indent:10px;text-transform:uppercase;color:rgba(255,255,255,0.3);width:100%;display:block;padding-top:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.js-enabled .select-box .options .option-group:first-of-type{border-top-color:transparent} +.js-enabled .select-box .options .option-group:last-of-type{border-bottom-color:transparent} +.js-enabled .select-box .options [class^="icon-"],.js-enabled .select-box .options [class*=" icon-"]{margin-top:4px;margin-right:7px;margin-left:-3px} +.js-enabled .select-box .options [class^="icon-payment-"],.js-enabled .select-box .options [class*=" icon-payment-"]{margin-right:8px;margin-left:-2px} +.js-enabled .select-box .options>.option:last-of-type{border-bottom-left-radius:2px;border-bottom-right-radius:2px} +.js-enabled .select-box.disabled,.js-enabled .select-box.disabled:focus,.js-enabled .select-box.disabled:hover{background-color:rgba(20,20,23,0.5)!important;border-color:rgba(255,255,255,0.3)!important;cursor:default!important} +.js-enabled .select-box.disabled .current{color:#3f3f3f!important} +.js-enabled .select-box.disabled .current [class^="icon-"]:not([class*="icon-payment-"]),.js-enabled .select-box.disabled .current [class*=" icon-"]:not([class*="icon-payment-"]){background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.15!important} +.js-enabled .select-box.disabled .current [class^="icon-payment-"],.js-enabled .select-box.disabled .current [class*=" icon-payment-"]{opacity:.15!important} +.js-enabled .select-box.disabled .arrow{opacity:.15!important;background-position:0 -32px!important} +.js-enabled .control-group.control-info .select-box{border-color:rgba(0,174,255,0.6)} +.js-enabled .control-group.control-info .select-box:focus{border-color:#00aeff} +.js-enabled .control-group.control-info .select-box:hover{border-color:rgba(0,174,255,0.8)} +.js-enabled .control-group.control-success .select-box{border-color:rgba(0,168,60,0.6)} +.js-enabled .control-group.control-success .select-box:focus{border-color:#00a83c} +.js-enabled .control-group.control-success .select-box:hover{border-color:rgba(0,168,60,0.8)} +.js-enabled .control-group.control-warning .select-box{border-color:rgba(216,172,21,0.6)} +.js-enabled .control-group.control-warning .select-box:focus{border-color:#d8ac15} +.js-enabled .control-group.control-warning .select-box:hover{border-color:rgba(216,172,21,0.8)} +.js-enabled .control-group.control-error .select-box,.js-enabled .control-group.control-danger .select-box,.js-enabled .control-group.control-important .select-box{border-color:rgba(205,6,6,0.6)} +.js-enabled .control-group.control-error .select-box:focus,.js-enabled .control-group.control-danger .select-box:focus,.js-enabled .control-group.control-important .select-box:focus{border-color:#cd0606} +.js-enabled .control-group.control-error .select-box:hover,.js-enabled .control-group.control-danger .select-box:hover,.js-enabled .control-group.control-important .select-box:hover{border-color:rgba(205,6,6,0.8)} +.js-enabled .select-box .scrollbar-content{overflow:hidden} +.js-enabled .select-box .scrollbar-content .overview{position:relative} +.js-enabled .form-search .select-box,.js-enabled .form-inline .select-box{display:inline-block;vertical-align:middle} +.js-enabled .input-append,.js-enabled .input-prepend{margin:3px 0;font-size:0;white-space:nowrap} +.js-enabled .input-append .select-box,.js-enabled .input-prepend .select-box{font-size:15px} +.js-enabled .input-append .select-box,.js-enabled .input-prepend .select-box{position:relative;margin-bottom:0;vertical-align:top;font-size:15px;border-radius:0 2px 2px 0} +.js-enabled .input-append .select-box:focus,.js-enabled .input-prepend .select-box:focus{z-index:2} +.js-enabled .input-append .select-box{border-radius:2px 0 0 2px} +.js-enabled .input-append .select-box+.btn-group .btn:last-child{border-radius:0 2px 2px 0} +.js-enabled .input-prepend.input-append .select-box{border-radius:0} +.js-enabled .input-prepend.input-append .select-box+.btn-group .btn{border-radius:0 2px 2px 0} +.js-enabled .form-horizontal .select-box+.help-block{margin-top:10px} +.js-enabled .select-box.input-large{margin:5px 0;padding:0;font-size:17px;line-height:20px;height:40px} +.js-enabled .select-box.input-large.active,.js-enabled .select-box.input-large:active{padding:1 -1 -1 1} +.js-enabled .select-box.input-large.disabled:active,.js-enabled .select-box.input-large[disabled]:active,.js-enabled .select-box.input-large.disabled.active,.js-enabled .select-box.input-large[disabled].active{padding:0 0!important} +.js-enabled .select-box.input-large .options{top:38px} +.js-enabled .select-box.input-large .options .option{height:30px;line-height:30px} +.js-enabled .select-box.input-large>.current{height:40px;line-height:40px} +.js-enabled .select-box.input-large>.arrow{background-position:0 2px} +.control-group .select2-container{width:100%!important} +.select2-container{-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle} +.select2-container .select2-selection{-webkit-transition:background-color .2s,border-color .2s;transition:background-color .2s,border-color .2s} +.select2-container .select2-selection--single{-moz-box-sizing:border-box;box-sizing:border-box;cursor:default;display:block;height:34px;user-select:none;-webkit-user-select:none} +.select2-container .select2-selection--single .select2-selection__rendered{display:block;text-indent:10px;margin-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px} +.select2-container .select2-selection--multiple{-moz-box-sizing:border-box;box-sizing:border-box;cursor:default;display:block;min-height:34px;user-select:none;-webkit-user-select:none} +.select2-container .select2-selection--multiple .select2-selection__rendered{overflow:hidden;margin-right:20px;text-overflow:ellipsis;white-space:nowrap} +.select2-container .select2-search--inline{float:left;height:34px;padding-left:0} +.select2-container .select2-search--inline .select2-search__field{margin:0;float:left;-moz-box-sizing:border-box;box-sizing:border-box;text-indent:10px;border:0;font-size:13px;padding:0} +.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none} +.select2-dropdown{background-color:#272e3b;border:1px solid rgba(255,255,255,0.3);border-radius:2px;-moz-box-sizing:border-box;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051} +.select2-results{display:block} +.select2-results__options{list-style:none;margin:0;padding:0} +.select2-results__options[aria-multiselectable] .select2-results__option .option-checkbox-label{display:block;float:left;width:18px;height:18px;border:1px solid rgba(255,255,255,0.3);border-radius:2px;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 4px 0 0;background:rgba(0,0,0,0.5) url("../../images/toolkit/themes/bnet/forms/sprite-18-inputs.png") no-repeat -64px -96px;background-size:54px 108px} +.select2-results__options[aria-multiselectable] .select2-results__option[aria-selected=true] .option-checkbox-label{background-position:-1px -1px} +.select2-results__option{user-select:none;-webkit-user-select:none;margin:0;padding:0 0 0 10px;-webkit-transition:background-color .2s;transition:background-color .2s;word-break:break-all} +.select2-results__option[aria-selected]{cursor:default} +.select2-container--open .select2-dropdown{left:0} +.select2-container--open .select2-dropdown--above{border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0} +.select2-container--open .select2-dropdown--below{border-top:0;border-top-left-radius:0;border-top-right-radius:0} +.select2-search--dropdown{display:block;padding:7px 10px} +.select2-search--dropdown .select2-search__field{width:100%;position:relative;-moz-box-sizing:border-box;box-sizing:border-box} +.select2-search--dropdown .select2-search__field:after{content:" ";position:absolute;top:19px;right:16px;width:16px;height:16px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-80px -16px} +.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none} +.select2-search--dropdown.select2-search--hide{display:none} +.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;z-index:99;background-color:#272e3b;opacity:0} +.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important} +.select2-container--default.select2-container--focus .select2-selection{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-selection--single{background-color:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.3);border-radius:2px} +.select2-container--default .select2-selection--single:hover{border-color:rgba(255,255,255,0.5);background:rgba(0,0,0,0.5)} +.select2-container--default .select2-selection--single:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-selection--single .select2-selection__rendered{color:rgba(255,255,255,0.7);line-height:34px} +.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold} +.select2-container--default .select2-selection--single .select2-selection__placeholder{color:rgba(255,255,255,0.3)} +.select2-container--default .select2-selection--single .select2-selection__arrow{height:32px;position:absolute;top:1px;right:1px;width:20px} +.select2-container--default .select2-selection--single .select2-selection__arrow b{position:absolute;top:0;left:-2px;width:20px;height:100%;overflow:hidden;background:url("../../images/toolkit/themes/bnet/forms/sprite-22-select.png") no-repeat 0 0} +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left} +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto} +.select2-container--default.select2-container--disabled .select2-selection--single{border-color:rgba(255,255,255,0.3)!important;background-color:rgba(20,20,23,0.5)!important;cursor:default} +.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__rendered{color:#3f3f3f!important} +.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none} +.select2-container--default .select2-selection--multiple{background-color:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.3);border-radius:2px} +.select2-container--default .select2-selection--multiple:hover{border-color:rgba(255,255,255,0.5);background:rgba(0,0,0,0.5)} +.select2-container--default .select2-selection--multiple:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-selection--multiple .select2-selection__rendered{-moz-box-sizing:border-box;box-sizing:border-box;list-style:none;margin:0;padding:0;width:100%} +.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:rgba(255,255,255,0.3);float:left} +.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;text-indent:10px} +.select2-container--default .select2-selection--multiple .select2-selection__choice{float:left;text-indent:5px;line-height:30px;margin:0;padding:0} +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(255,255,255,0.3);cursor:pointer;display:inline-block;padding-right:4px;font-size:13px} +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right} +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto} +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto} +.select2-container--default.select2-container--focus .select2-selection--multiple{border:1px solid #1e5f99;outline:0} +.select2-container--default.select2-container--disabled .select2-selection--multiple{border-color:rgba(255,255,255,0.3)!important;background-color:rgba(20,20,23,0.5)!important;cursor:default} +.select2-container--default.select2-container--disabled .select2-selection--multiple .select2-selection__rendered{color:#3f3f3f!important} +.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__choice__remove{display:none} +.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0} +.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0} +.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid rgba(255,255,255,0.3)} +.select2-container--default .select2-search--dropdown .select2-search__field:hover{border-color:rgba(255,255,255,0.5)} +.select2-container--default .select2-search--dropdown .select2-search__field:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:0;outline:0;box-shadow:none} +.select2-container--default .select2-results>.select2-results__options{font-size:13px;overflow-y:auto;max-height:200px} +.select2-container--default .select2-results__option{line-height:15px;padding:4px 0 7px 10px} +.select2-container--default .select2-results__option[role=group]{padding:0} +.select2-container--default .select2-results__option[aria-disabled=true]{color:#3f3f3f} +.select2-container--default .select2-results__option[aria-selected=true]{color:#fff;background-color:rgba(0,105,225,0.15)} +.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:rgba(255,255,255,0.07)} +.select2-container--default .select2-results__option--highlighted[aria-selected][aria-selected=false]{color:#fff} +.select2-container--default .select2-results__group{text-shadow:none;font-size:12px;line-height:25px;height:25px;text-indent:10px;text-transform:uppercase;color:rgba(255,255,255,0.3);width:100%;display:block;padding-top:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.multiselect.select-box{margin:0!important;width:100%;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.multiselect.select-box:focus{outline:0} +.multiselect-container{position:absolute;left:0;border-color:#3d434f;border-radius:0 0 2px 2px;border-top:0;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:none;list-style-type:none;margin:0;padding:0;width:100%} +.multiselect-container>li{padding:0;margin:0;line-height:20px} +.multiselect-container>li.active,.multiselect-container>li.active:hover{color:#fff;background-color:rgba(0,105,225,0.15)} +.multiselect-container>li.active,.multiselect-container>li.active:hover{color:rgba(255,255,255,0.3)} +.multiselect-container>li.multiselect-all{border-bottom:1px solid #3d434f} +.multiselect-container>li.multiselect-all.active{background-color:transparent!important} +.multiselect-container>li.filter{padding:7px 10px 3px} +.multiselect-container>li.filter .input-group .multiselect-search{font-size:13px;width:100%} +.multiselect-container>li.filter .input-group:not(.filtered):after{content:"";display:inline-block;position:absolute;top:19px;right:16px;width:16px;height:16px;line-height:16px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-80px -16px} +.multiselect-container>li.filter .input-group .multiselect-clear-filter{display:none;cursor:pointer;position:absolute;top:11px;right:11px;width:32px;height:32px;border:0;background-color:transparent} +.multiselect-container>li.filter .input-group .multiselect-clear-filter .icon-remove{top:5px;left:10px} +.multiselect-container>li.filter .input-group.filtered .multiselect-clear-filter{display:inline-block} +.multiselect-container>li>a.multiselect-all label{-webkit-transition:background-color .2s,border-color .2s,box-shadow .2s;transition:background-color .2s,border-color .2s,box-shadow .2s} +.multiselect-container>li>label.multiselect-group{text-shadow:none;font-size:12px;line-height:20px;height:20px;text-indent:10px;text-transform:uppercase;color:rgba(255,255,255,0.3);width:100%;display:block;padding-top:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.multiselect-container>li>a{padding:3px 0;cursor:default} +.multiselect-container>li>a>label{margin:0;height:100%;cursor:pointer;font-weight:400;padding:0 20px 3px 30px;font-size:13px;left:10px;top:2px} +.multiselect-container>li>a>label.radio,.multiselect-container>li>a>label.checkbox{margin:0} +.multiselect-container>li>a>label>input[type="checkbox"]{margin-bottom:5px;width:20px!important} +.multiselect-container>li>a>label.checkbox-label:not(.css-label),.multiselect-container>li>a>label.radio-label:not(.css-label){cursor:default!important} +.btn-group-multiselect{position:relative} +.hero-unit{padding:40px;margin-bottom:40px;color:inherit;background-color:#0e0e0e;border-radius:2px} +.hero-unit:before,.hero-unit:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.hero-unit:after{clear:both} +.hero-unit p{font-size:17px;font-weight:300;line-height:25px} +.hero-unit li{font-size:17px;font-weight:300;line-height:20px;margin-bottom:25px} +.hero-unit p,.hero-unit ul,.hero-unit ol{margin-bottom:40px} +.hero-unit p:last-child,.hero-unit ul:last-child,.hero-unit ol:last-child{margin-bottom:0} +.hero-unit .btn{float:left} +.hero-unit .btn+.btn{margin-left:10px} +.label,.badge{height:20px;color:rgba(255,255,255,0.7);background:#272e3b;margin:-2px 0;border:1px solid #363d49;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color 200ms,background-color 200ms;transition:border-color 200ms,background-color 200ms} +.label{font-size:15px;line-height:18px;padding:0 10px;border-radius:2px} +.badge{font-size:13px;line-height:18px;min-width:20px;min-height:20px;padding:0 4px;border-radius:10px} +.label[href]:focus,.badge[href]:focus,.label[href]:hover,.badge[href]:hover{color:rgba(255,255,255,0.7);background-color:#3b465a} +.label-important,.badge-important,.label-danger,.badge-danger,.label-error,.badge-error{background-color:#360e10;border-color:#551e21} +.label-important[href]:focus,.badge-important[href]:focus,.label-important[href]:hover,.badge-important[href]:hover{background-color:#5f181c} +.label-warning,.badge-warning{background-color:#5d3200;border-color:#834b00} +.label-warning[href]:focus,.badge-warning[href]:focus,.label-warning[href]:hover,.badge-warning[href]:hover{background-color:#904d00} +.label-success,.badge-success{background-color:#132a14;border-color:#24392a} +.label-success[href]:focus,.badge-success[href]:focus,.label-success[href]:hover,.badge-success[href]:hover{background-color:#234d25} +.label-info,.badge-info{background-color:#272e3b;border-color:#363d49} +.label-info[href]:focus,.badge-info[href]:focus,.label-info[href]:hover,.badge-info[href]:hover{background-color:#3b465a} +.label-inverse,.badge-inverse{color:#fff;background-color:rgba(255,255,255,0.2);border-color:rgba(255,255,255,0.5)} +.label-inverse[href]:focus,.badge-inverse[href]:focus,.label-inverse[href]:hover,.badge-inverse[href]:hover{background-color:rgba(255,255,255,0.2)} +.btn .label,.btn .badge{position:relative;top:-1px} +.btn-mini .label,.btn-mini .badge{top:0} +.acb-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.acb-rating a{color:rgba(255,255,255,0.5)} +.acb-logo{display:block;float:left} +.acb-descriptor,.acb-disclaimer{display:block;margin-left:75px} +.bbfc-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5);float:left} +.bbfc-rating a{float:left;color:rgba(255,255,255,0.5)} +.bbfc-logo{display:block} +.csrr-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.csrr-rating a{display:inline-block;color:rgba(255,255,255,0.5)} +.csrr-logo{display:block} +.dejus-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.dejus-rating a{color:rgba(255,255,255,0.5)} +.dejus-logo{display:block;float:left} +.dejus-descriptor{display:block;margin-left:75px} +.dejus-provisional{text-transform:uppercase} +.esrb-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.esrb-rating a{color:rgba(255,255,255,0.5)} +.esrb-logo{display:block;float:left} +.esrb-descriptor,.esrb-disclaimer{display:block;margin-left:80px;-moz-transition:color .2s;-webkit-transition:color .2s;transition:color .2s} +.esrb-disclaimer{display:block;margin-left:80px} +.esrb-descriptor-label{-webkit-transition:color .2s;transition:color .2s} +.esrb-descriptor-label:hover{color:rgba(255,255,255,0.7);cursor:default} +.fpb-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.fpb-rating a{color:rgba(255,255,255,0.5)} +.fpb-logo{display:block;float:left} +.fpb-descriptor{display:block;margin-left:75px} +.grb-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.grb-rating a{color:rgba(255,255,255,0.5)} +.grb-rating+.grb-rating{clear:right} +.grb-logo,.grb-descriptor-image{display:block;float:left;margin-right:5px} +.grb-descriptor{display:block;margin-left:75px} +.nzoflc-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.nzoflc-rating a{color:rgba(255,255,255,0.5)} +.nzoflc-logo{display:block;float:left} +.nzoflc-descriptor{display:block;margin-left:75px} +.pegi-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.pegi-rating a{color:rgba(255,255,255,0.5)} +.pegi-logo,.pegi-descriptor-image{display:block;float:left;margin-right:5px} +.pegi-descriptor{display:block;margin-left:70px} +.pegi-descriptor-label{-webkit-transition:color .2s;transition:color .2s} +.pegi-descriptor-label:hover{color:rgba(255,255,255,0.7);cursor:default} +.pegi-provisional{padding:5px 5px 5px 0;font-size:10px;text-align:left;text-transform:uppercase;width:100%;clear:left} +.usk-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.usk-rating a{display:inline-block;color:rgba(255,255,255,0.5)} +.usk-logo{display:block} +a{color:#00aeff;-webkit-transition:color,0.2s;transition:color .2s} +a:focus,a:hover{color:#fff} +a.inverse{color:rgba(255,255,255,0.7)} +a.inverse:focus,a.inverse:hover{color:#fff} +.logo{width:300px;height:70px;text-indent:-9999px;background:url("../../images/toolkit/defaults/logos/bnet/default.png") -5px 0;margin:0 auto} +:lang(zh-CN) .logo{background:url("../../images/toolkit/defaults/logos/bnet/china-default.png")} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.logo{background:url("../../images/toolkit/defaults/logos/bnet/default-2x.png");background-size:300px 70px} +:lang(zh-CN) .logo{background:url("../../images/toolkit/defaults/logos/bnet/china-default-2x.png");background-size:300px 70px} +} +.media{padding:20px 0;border:solid rgba(255,255,255,0.1);border-width:1px 0} +.media.blizzard{background-color:rgba(0,66,136,0.3)} +.media+.media{border-top-width:0} +.media .img{margin-right:20px;width:82px;height:82px;padding:6px;overflow:hidden;position:relative;background-image:url("../../images/toolkit/themes/bnet/media/media-org.png")} +.media .img:after{content:"";position:absolute;top:6px;left:6px;z-index:10;display:block;width:82px;height:82px;box-shadow:inset 0 0 0 1px rgba(0,0,0,0.7),inset 0 0 0 2px rgba(255,255,255,0.1)} +.media.blizzard .img{background-position:-94px 0;padding-bottom:84px} +.media .img img{width:82px;height:82px;background-color:#000} +.media .p-author{margin-bottom:5px} +.media .p-name{font-size:17px;line-height:20px;color:#82c5ff} +.media .p-role{font-weight:400;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;margin-left:.5em} +.media.blizzard .p-role{color:rgba(255,255,255,0.7)} +.media.vip .p-role{color:#18a006} +.media .bd p,.media .bd ul,.media .bd ol{margin-bottom:20px} +.media.blizzard .bd{color:#00aeff} +.media.vip .bd{color:#18a006} +.media .dt-published{font-size:13px;line-height:20px} +.modal-backdrop{z-index:1040} +.modal-backdrop,.modal-backdrop.fade.in{opacity:.8} +.modal{padding-top:10px;position:fixed;top:10%;left:50%;z-index:1050;overflow:visible;width:560px;margin-left:-280px;border-style:solid;border-width:1px;border-color:#000;box-shadow:0 5px 10px rgba(0,0,0,.75),inset 0 0 0 1px rgba(255,255,255,.07);background:#1d222c;background-repeat:no-repeat;background-size:contain;background-position:center bottom,center top,center -100px;background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-webkit-linear-gradient(top,#263145 0,#1d222c 70%),-webkit-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-moz-linear-gradient(top,#263145 0,#1d222c 70%),-moz-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),linear-gradient(top,#263145 0,#1d222c 70%),radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-clip:padding-box;outline:0} +.modal .close{z-index:1051;position:absolute;margin:0;top:5px;right:7px} +.modal .close [class^="icon-"],.modal .close [class*=" icon-"]{display:block;margin:0} +.modal:before{content:"";position:absolute;top:1px;left:75px;right:75px;display:block;height:0;border-top:10px solid rgba(255,255,255,0.14);border-left:10px solid transparent;border-right:10px solid transparent} +.modal:after{content:"";position:absolute;top:1px;left:76px;right:76px;display:block;height:0;border-top:9px solid rgba(32,39,52,0.5);border-left:9px solid transparent;border-right:9px solid transparent} +.modal-header{padding:19px 20px 0 20px} +.modal-header h1,.modal-header h2,.modal-header h3,.modal-header h4,.modal-header h5,.modal-header h6,.modal-header .heading-1{margin-bottom:0;font-size:23px;line-height:30px} +.modal-error{border:1px solid #313845;padding:10px 20px;background:#270a0c;color:#fe0000;font-size:13px;line-height:20px;position:relative;-moz-box-sizing:border-box;box-sizing:border-box} +.modal-error:before{content:"";border-top:7px solid #313845;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);display:block;position:absolute;left:273px;bottom:-7px} +.modal-error:after{content:"";border-top:6px solid #270a0c;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);display:block;position:absolute;left:274px;bottom:-6px} +.modal-error p{margin-bottom:15px} +.modal-error p:last-child{margin-bottom:0} +.modal-body{position:relative;overflow:visible;max-height:400px;padding:20px;font-size:13px;line-height:20px} +.modal-body h1,.modal-body h2,.modal-body h3,.modal-body h4,.modal-body h5,.modal-body h6,.modal-body .heading-1,.modal-body .heading-2{margin-bottom:20px;font-size:17px;line-height:20px} +.modal-body p,.modal-body ul,.modal-body ol,.modal-body dl{font-size:13px;line-height:20px;margin-bottom:20px} +.modal-body p:last-child,.modal-body ul:last-child,.modal-body ol:last-child,.modal-body dl:last-child{margin:0} +.modal-body .modal-actions:before,.modal-body .modal-actions:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.modal-body .modal-actions:after{clear:both} +.modal-body .modal-actions .btn{margin-bottom:0} +.modal-body .modal-actions .btn+.btn{margin-left:10px} +.modal-body .modal-actions .btn-group .btn+.btn{margin-left:-1px} +.modal-body .modal-actions .btn-block+.btn-block{margin-left:0} +.modal-body .modal-actions{margin-top:30px} +.modal-body .modal-actions:only-child{margin-top:0} +.modal-body p+.modal-actions,.modal-body ul+.modal-actions,.modal-body ol+.modal-actions,.modal-body dl+.modal-actions{margin-top:20px} +.modal-scrollable{height:400px;overflow:hidden} +.modal-scrollable .scrollbar{top:20px} +.modal-scrollable .scrollbar .thumb{padding-top:0;padding-bottom:0} +.modal-form{margin-bottom:0} +.modal-footer{color:rgba(255,255,255,0.5);background:#171b23;padding:19px 20px 20px;margin:1px;border-top:1px solid #2d323b;font-size:13px;line-height:20px} +.modal-footer h1,.modal-footer h2,.modal-footer h3,.modal-footer h4,.modal-footer h5,.modal-footer h6,.modal-footer .heading-1,.modal-footer .heading-2,.modal-footer .heading-3{margin-bottom:0;font-size:15px;line-height:20px} +.modal-footer p,.modal-footer ul,.modal-footer ol,.modal-footer dl{font-size:13px;line-height:20px;margin-bottom:20px} +.modal-footer p:last-child,.modal-footer ul:last-child,.modal-footer ol:last-child,.modal-footer dl:last-child{margin-bottom:0} +.nav>li{font-size:13px;line-height:20px} +.navbar:not(.header) .nav>li{font-size:13px;line-height:20px;margin:0 20px 0 0} +.navbar:not(.header) .nav>li.pull-right{margin:0 0 0 20px} +.navbar:not(.header) .nav>li>a{color:rgba(255,255,255,0.7)} +.navbar:not(.header) .nav>li>a:hover,.navbar:not(.header) .nav>li>a:focus{color:#fff} +.navbar:not(.header) .nav>li.disabled>a{color:rgba(255,255,255,0.3)} +.navbar:not(.header) .nav>li.active>a{color:#fff} +.navbar.header .nav{height:30px;padding:25px 0} +.navbar.header .nav>li{font-weight:300;font-size:23px;line-height:30px;margin:0 40px 0 0} +.navbar.header .nav>li>a{color:rgba(255,255,255,0.5)} +.navbar.header .nav>li>a:hover,.navbar.header .nav>li>a:focus{color:#fff} +.navbar.header .nav>li.disabled>a{color:rgba(255,255,255,0.15)} +.navbar.header .nav>li.active>a{color:#fff;text-shadow:0 0 10px rgba(255,255,255,0.3),0 0 10px rgba(255,255,255,0.3)} +.nav-list>li{margin:0 0 10px 0} +.nav-list>li>a{color:rgba(255,255,255,0.7)} +.nav-list>li>a:hover,.nav-list>li>a:focus{color:#fff} +.nav-list>li.disabled>a{color:rgba(255,255,255,0.3)} +.nav-list>li.active>a{color:#fff} +.nav-list>li:last-child{margin-bottom:40px} +.nav-list.icons>li:not(.nav-header){padding-left:30px} +.nav-list.icons>li:not(.nav-header) [class^="icon-"]:not(.icon-external-link),.nav-list.icons>li:not(.nav-header) [class*="icon-"]:not(.icon-external-link){left:5px} +.nav-list.icons>li:not(.nav-header).disabled [class^="icon-"]:not(.icon-external-link),.nav-list.icons>li:not(.nav-header).disabled [class*="icon-"]:not(.icon-external-link){background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.15} +.nav .nav-header{margin:0 0 10px 0;padding:0;font-size:12px;font-weight:400;line-height:20px;color:rgba(255,255,255,0.3);text-transform:uppercase;letter-spacing:.075em} +.nav.nav-tabs:after{border-bottom:3px solid rgba(255,255,255,0.15);height:30px} +.nav-tabs>li{border-bottom:3px solid rgba(255,255,255,0.15);padding:0} +.nav-tabs>li>a{padding-right:30px;padding-left:30px;color:rgba(255,255,255,0.7);background:0;padding-top:5px;padding-bottom:5px;margin-bottom:-2px;border:1px solid transparent} +.nav-tabs>li>a:focus,.nav-tabs>li>a:hover{color:#fff;background:0} +.nav-tabs>li.active>a{color:#fff;background:0;border:1px solid rgba(255,255,255,0.15);border-bottom:0;padding-bottom:7px} +.nav-tabs>li.disabled>a{color:rgba(255,255,255,0.3);background:0} +.nav-pills>li>a{padding:5px 30px;margin:0 10px 0 0;background-color:rgba(0,0,0,0.15);border:1px solid rgba(255,255,255,0.15);border-radius:2px;color:rgba(255,255,255,0.7)} +.nav-pills>li>a:focus,.nav-pills>li>a:hover{background:rgba(0,0,0,0.25);color:#fff;border-color:rgba(255,255,255,0.25)} +.nav-pills>li>a:active{color:#fff;background-color:rgba(0,0,0,0.15);border-color:rgba(255,255,255,0.1);padding:6px 29px 4px 31px;box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.3)} +.nav-pills>li.active>a{color:#fff;background:rgba(255,255,255,0.07);border-color:rgba(255,255,255,0.15)} +.nav-pills>li.active>a:active{padding:5px 30px;box-shadow:none} +.nav-pills>li.disabled>a{color:rgba(255,255,255,0.3);background:rgba(0,0,0,0.1);border-color:rgba(255,255,255,0.08)} +.nav-pills>li.disabled>a:active{padding:5px 30px;box-shadow:none} +.tab-content,.pill-content{border:1px solid rgba(255,255,255,0.15);margin-bottom:40px;padding:20px} +.pill-content{margin-top:10px} +.tab-content{border-width:0 1px 1px} +.tab-content>.active p,.pill-content>.active p,.tab-content>.active ul,.pill-content>.active ul,.tab-content>.active ol,.pill-content>.active ol,.tab-content>.active dl,.pill-content>.active dl{margin-bottom:20px} +.tab-content>.active p:last-child,.pill-content>.active p:last-child,.tab-content>.active ul:last-child,.pill-content>.active ul:last-child,.tab-content>.active ol:last-child,.pill-content>.active ol:last-child,.tab-content>.active dl:last-child,.pill-content>.active dl:last-child{margin-bottom:0} +.navbar-static,.navbar-fixed{background:0;border-bottom:1px solid rgba(255,255,255,0.07);line-height:40px;white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box} +.navbar-static .navbar,.navbar-fixed .navbar{height:40px;padding:10px 0;background:rgba(255,255,255,0.05);-moz-box-sizing:border-box;box-sizing:border-box} +.navbar-static .navbar.header,.navbar-fixed .navbar.header{height:80px;padding:0;background:rgba(255,255,255,0.05)} +.navbar-static .navbar.header+.navbar,.navbar-fixed .navbar.header+.navbar{border-top:1px solid rgba(255,255,255,0.07)} +.navbar-fixed{width:100%;position:fixed;z-index:1030} +.navbar.header .brand{float:left;display:block;text-transform:uppercase;font-weight:300;font-size:23px;line-height:30px;height:30px;padding:25px 0;color:#fff} +.navbar.header .brand.mark{background:transparent url("../../images/toolkit/defaults/logos/bnet/mark.png") no-repeat left 18px;display:inline-block;padding-left:60px} +.navbar.header a.brand{-webkit-transition:text-shadow .2s,color .2s;transition:text-shadow .2s,color .2s} +.navbar.header a.brand:hover,.navbar.header a.brand:focus{color:#fff;text-shadow:0 0 10px rgba(255,255,255,0.3),0 0 10px rgba(255,255,255,0.3)} +.navbar.header .brand .tag{color:rgba(255,255,255,0.5);display:inline-block;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;padding:1px 0 0 3px;vertical-align:text-top} +.navbar.header .user{float:right;display:block;font-size:15px;font-weight:400;line-height:20px;color:rgba(255,255,255,0.7);padding:20px 0} +.navbar.header .status{display:block;float:left;width:32px;height:32px;padding:2px;margin:1px 10px 1px 0;border:1px solid #000;background-image:-webkit-linear-gradient(top,#00a4dc,#0f72c5);background-image:linear-gradient(to bottom,#00a4dc,#0f72c5)} +.navbar.header .status.offline{background-image:-webkit-linear-gradient(top,rgba(120,120,120,0.3),rgba(101,101,101,0.3));background-image:linear-gradient(to bottom,rgba(120,120,120,0.3),rgba(101,101,101,0.3))} +.navbar.header .status.online{background-image:-webkit-linear-gradient(top,#6ddc00,#4e9d00);background-image:linear-gradient(to bottom,#6ddc00,#4e9d00)} +.navbar.header .status.away{background-image:-webkit-linear-gradient(top,#f8d90a,#e9af12);background-image:linear-gradient(to bottom,#f8d90a,#e9af12)} +.navbar.header .status.busy{background-image:-webkit-linear-gradient(top,#ec1919,#cf0d0d);background-image:linear-gradient(to bottom,#ec1919,#cf0d0d)} +.navbar.header .avatar{float:right;display:block;width:32px;height:32px;overflow:hidden;background-color:#222;background-size:cover} +.navbar.header .avatar img{display:block;width:100%;height:100%} +.navbar.header .name{float:left;display:block;margin:10px 0} +.navbar.header .battletag{display:block;color:rgba(255,255,255,0.7)} +.navbar.header .battletag .code{color:rgba(255,255,255,0.3)} +.navbar.header a.battletag{color:rgba(255,255,255,0.7)} +.navbar.header a.battletag:hover,.navbar.header a.battletag:focus{color:#fff} +.navbar.header a.battletag .code{color:rgba(255,255,255,0.3)} +.navbar.header a.battletag .code:hover,.navbar.header a.battletag .code:focus{color:#fff} +.navbar.header .ldap{float:left;display:block} +.navbar.header .ldap .email{display:block;color:rgba(255,255,255,0.7)} +.navbar.header .ldap .role{display:block;color:rgba(255,255,255,0.3)} +.pager{height:30px;margin:0} +.pager>li{margin-top:2px;margin-bottom:2px;margin-right:10px} +.pager>li:last-child{margin-right:0} +.pager>li>a,.pager>li>span{font-size:13px} +.pager>li>a{padding:1px 8px;line-height:22px;height:26px;text-decoration:none;background-color:rgba(0,0,0,0.15);border-radius:2px;border:1px solid rgba(255,255,255,0.15);min-width:26px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +.pager>li>span{line-height:26px;height:26px;min-width:18px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box} +.pager>li>a:focus,.pager>li>a:hover{background:rgba(0,0,0,0.25);color:#fff} +.pager>li>a:active{padding:2px 7px 0 9px;color:#fff;background-color:rgba(0,0,0,0.15);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.3)} +.pager>.active>a{color:#fff!important;background:rgba(255,255,255,0.07)!important;cursor:default!important;padding:1px!important;box-shadow:none!important} +.pager>.disabled>a,.pager>.disabled>a:focus,.pager>.disabled>a:hover,.pager>.disabled>a:active{color:rgba(255,255,255,0.3)!important;background:rgba(0,0,0,0.1)!important;cursor:default!important;padding:1px 8px!important;box-shadow:none!important} +.pager>.disabled>span{color:rgba(255,255,255,0.3)!important} +.pager>li>a [class^="icon-"],.pager>li>span [class^="icon-"],.pager>li>a [class*=" icon-"],.pager>li>span [class*=" icon-"]{margin-top:3px;margin-right:-6px;margin-left:-6px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pager>li>a:active [class^="icon-"],.pager>li>a:active [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pager>.disabled>span [class^="icon-"],.pager>.disabled>a [class^="icon-"],.pager>.disabled>span [class*=" icon-"],.pager>.disabled>a [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")!important;opacity:.15!important} +.pagination{height:30px;margin:0} +.pagination ul>li{margin-top:2px;margin-bottom:2px;margin-right:4px} +.pagination ul>li:last-child{margin-right:0} +.pagination ul>li>a,.pagination ul>li>span{font-size:13px} +.pagination ul>li>a{padding:1px 8px;line-height:22px;height:26px;text-decoration:none;background-color:rgba(0,0,0,0.15);border-radius:2px;border:1px solid rgba(255,255,255,0.15);min-width:26px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +.pagination ul>li>span{line-height:26px;height:26px;min-width:18px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box} +.pagination ul>li>a:focus,.pagination ul>li>a:hover{background:rgba(0,0,0,0.25);color:#fff} +.pagination ul>li>a:active{padding:2px 7px 0 9px;color:#fff;background-color:rgba(0,0,0,0.15);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.3)} +.pagination ul>.active>a{color:#fff!important;background:rgba(255,255,255,0.07)!important;cursor:default!important;padding:1px!important;box-shadow:none!important} +.pagination ul>.disabled>a,.pagination ul>.disabled>a:focus,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:active{color:rgba(255,255,255,0.3)!important;background:rgba(0,0,0,0.1)!important;cursor:default!important;padding:1px 8px!important;box-shadow:none!important} +.pagination ul>.disabled>span{color:rgba(255,255,255,0.3)!important} +.pagination ul>li>a [class^="icon-"],.pagination ul>li>span [class^="icon-"],.pagination ul>li>a [class*=" icon-"],.pagination ul>li>span [class*=" icon-"]{margin-top:3px;margin-right:-6px;margin-left:-6px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pagination ul>li>a:active [class^="icon-"],.pagination ul>li>a:active [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pagination ul>.disabled>span [class^="icon-"],.pagination ul>.disabled>a [class^="icon-"],.pagination ul>.disabled>span [class*=" icon-"],.pagination ul>.disabled>a [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")!important;opacity:.15!important} +.results-counter{font-size:13px;line-height:26px;height:26px;margin:2px 0} +.pagination-group:before,.pagination-group:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.pagination-group:after{clear:both} +.pagination-inline.results-counter{margin-right:1em} +.pagination select.view-per-page{height:26px;font-size:13px;padding:0 16px 0 2px;margin:2px 6px 0 0;background-position:right -4px} +.popover{z-index:1060;width:236px;padding:1px;background-color:#272e3b;border:1px solid #3d434f;background-clip:padding-box;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:0 0 10px 1px rgba(0,0,0,0.75)} +.popover.top{margin-top:-10px} +.popover.right{margin-left:10px} +.popover.bottom{margin-top:10px} +.popover.left{margin-left:-10px} +.popover-title{margin:0;padding:19px 19px 10px 19px} +.popover-content{padding:19px} +.popover-title+.popover-content{padding-top:0} +.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;z-index:0} +.popover .arrow{border-width:8px} +.popover .arrow:after{content:"";border-width:7px;display:block;z-index:1} +.popover.top .arrow{left:50%;margin-left:-8px;border-bottom-width:0;border-top-color:#3d434f;bottom:-8px} +.popover.top .arrow:after{bottom:1px;margin-left:-7px;border-bottom-width:0;border-top-color:#272e3b} +.popover.right .arrow{top:50%;left:-8px;margin-top:-8px;border-left-width:0;border-right-color:#3d434f} +.popover.right .arrow:after{left:1px;bottom:-7px;border-left-width:0;border-right-color:#272e3b} +.popover.bottom .arrow{left:50%;margin-left:-8px;border-top-width:0;border-bottom-color:#3d434f;top:-8px} +.popover.bottom .arrow:after{top:1px;margin-left:-7px;border-top-width:0;border-bottom-color:#272e3b} +.popover.left .arrow{top:50%;right:-8px;margin-top:-8px;border-right-width:0;border-left-color:#3d434f} +.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#272e3b;bottom:-7px} +.progress{height:22px;padding:14px 0} +.progress:after{height:22px;top:14px;background:rgba(117,117,117,0.1);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.07);border-radius:2px} +.progress .bar{height:22px;font-size:13px;line-height:22px;background-image:-webkit-linear-gradient(top,#474a4e,#414447 50%,#474a4e);background-image:linear-gradient(to bottom,#474a4e,#414447 50%,#474a4e);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.01),inset 0 0 14px rgba(255,255,255,0.1);-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width,0.6s,ease;transition:width .6s ease;-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px} +.progress .bar+.bar{-webkit-border-top-left-radius:0;-moz-border-radius-topleft:0;border-top-left-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0} +.progress .bar[style*="100%"]{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px} +.progress.active .bar:after{height:50px;overflow:hidden;background:url("../../images/toolkit/themes/bnet/progress-bars/progress-pulse.png") repeat-y;top:-14px;width:92px;right:-8px} +.progress-striped .bar:before{height:50px;background:url("../../images/toolkit/themes/bnet/progress-bars/progress-stripes.png") no-repeat 0 0;top:-14px;-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px} +@-webkit-keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +@-moz-keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +@-ms-keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +@keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +.progress.active .bar:before{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite} +@-webkit-keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +@-moz-keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +@-ms-keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +@keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +.progress.active .bar:after{-webkit-animation:progress-bar-pulse 1s linear infinite;-moz-animation:progress-bar-pulse 1s linear infinite;-ms-animation:progress-bar-pulse 1s linear infinite;animation:progress-bar-pulse 1s linear infinite} +.progress .description{left:9px;top:14px;line-height:22px;font-size:13px;color:#fff} +.progress-danger .bar,.progress .bar-danger{background-image:-webkit-linear-gradient(top,#e01212,#b70707 50%,#e01212);background-image:linear-gradient(to bottom,#e01212,#b70707 50%,#e01212);opacity:.8} +.progress-success .bar,.progress .bar-success{background-image:-webkit-linear-gradient(top,#17b326,#108328 50%,#17b326);background-image:linear-gradient(to bottom,#17b326,#108328 50%,#17b326);opacity:.8} +.progress-info .bar,.progress .bar-info{background-image:-webkit-linear-gradient(top,#0072d2,#005e9b 50%,#0072d2);background-image:linear-gradient(to bottom,#0072d2,#005e9b 50%,#0072d2);opacity:.8} +.progress-warning .bar,.progress .bar-warning{background-image:-webkit-linear-gradient(top,#ffa800,#f08a19 50%,#ffa800);background-image:linear-gradient(to bottom,#ffa800,#f08a19 50%,#ffa800);opacity:.8} +.progress-tracker{height:20px} +.progress-tracker li{padding:0 20px;font-size:13px;line-height:20px;color:rgba(255,255,255,0.15)} +.progress-tracker li [class^="icon-"],.progress-tracker li [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.15} +.progress-tracker li.active{color:rgba(255,255,255,0.5)} +.progress-tracker li.active [class^="icon-"],.progress-tracker li.active [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.5} +.scrollbar-content .scrollbar{width:22px} +.scrollbar-content .track{width:22px} +.scrollbar-content .thumb{cursor:pointer;height:22px;width:22px;padding:5px 7px} +.scrollbar-content .thumb .end{background-color:rgba(255,255,255,0.1);width:8px;border-radius:4px;-webkit-transition:background-color .2s;transition:background-color .2s} +.scrollbar-content:hover .thumb .end{background-color:rgba(255,255,255,0.1)} +.spinner-loading{width:20px;height:20px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png");background-position:-140px 0;display:inline-block} +.spinner-loading.spinner-loading-white{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet-white.png")} +.spinner-40-loading{width:40px;height:40px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-position:-280px 0;display:inline-block} +.spinner-40-loading.spinner-40-loading-white{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet-white.png")} +.spinner-patching{width:20px;height:20px;background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-white.png");display:inline-block} +.spinner-patching.spinner-danger{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-red.png")} +.spinner-patching.spinner-warning{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-orange.png")} +.spinner-patching.spinner-success{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-green.png")} +.spinner-patching.spinner-info{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-blue.png")} +.spinner-patching.spinner-inverse{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-gray.png")} +@-webkit-keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +@-moz-keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +@-ms-keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +@keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +.spinner-loading{-webkit-animation:keyframes-loading .8s steps(21) infinite;-moz-animation:keyframes-loading .8s steps(21) infinite;-ms-animation:keyframes-loading .8s steps(21) infinite;animation:keyframes-loading .8s steps(21) infinite} +@-webkit-keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +@-moz-keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +@-ms-keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +@keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +.spinner-patching{-webkit-animation:keyframes-patching .4s steps(8) infinite;-moz-animation:keyframes-patching .4s steps(8) infinite;-ms-animation:keyframes-patching .4s steps(8) infinite;animation:keyframes-patching .4s steps(8) infinite} +@-webkit-keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +@-moz-keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +@-ms-keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +@keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +.spinner-40-loading{-webkit-animation:keyframes-40-loading .8s steps(21) infinite;-moz-animation:keyframes-40-loading .8s steps(21) infinite;-ms-animation:keyframes-40-loading .8s steps(21) infinite;animation:keyframes-40-loading .8s steps(21) infinite} +.spinner-battlenet{width:20px;height:20px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png");background-position:-140px 0;display:inline-block;-webkit-animation:keyframes-loading .8s steps(21) infinite;-moz-animation:keyframes-loading .8s steps(21) infinite;-ms-animation:keyframes-loading .8s steps(21) infinite;animation:keyframes-loading .8s steps(21) infinite} +.spinner-40-battlenet{width:40px;height:40px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-position:-280px 0;display:inline-block;-webkit-animation:keyframes-40-loading .8s steps(21) infinite;-moz-animation:keyframes-40-loading .8s steps(21) infinite;-ms-animation:keyframes-40-loading .8s steps(21) infinite;animation:keyframes-40-loading .8s steps(21) infinite} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.spinner-battlenet{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-size:420px 20px} +.spinner-40-battlenet{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-80-battlenet.png");background-size:840px 40px} +} +[class^="icon-"],[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");margin:2px} +[class^="icon-24-"],[class*=" icon-24-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-blue.png")} +[class^="icon-payment-"],[class*=" icon-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-16-payment.png")} +[class^="icon-24-payment-"],[class*=" icon-24-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-24-payment.png")} +[class^="icon-48-"],[class*=" icon-48-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-blue.png")} +[class^="icon-128-"],[class*=" icon-128-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-128-blue.png")} +.icon-white{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")} +.icon-24-white{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-white.png")} +.icon-gray{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-gray.png")} +.icon-24-gray{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-gray.png")} +.icon-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png")} +.icon-24-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-orange.png")} +.icon-128-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-128-orange.png")} +.icon-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-red.png")} +.icon-24-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-red.png")} +.icon-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png")} +.icon-24-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-green.png")} +.icon-128-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-128-green.png")} +.icon-purple{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-purple.png")} +.icon-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-fullcolor.png")} +.icon-24-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-fullcolor.png")} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){[class^="icon-"],[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-blue.png");background-size:160px 480px} +[class^="icon-payment-"],[class*=" icon-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-32-payment.png");background-size:192px 208px} +.icon-gray,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-gray.png")} +.icon-white,.dropdown-menu>.disabled>a>[class^="icon-"],.dropdown-menu>.disabled>a>[class*=" icon-"],.btn-primary [class^="icon-"],.btn-primary [class*=" icon-"],.btn.disabled [class^="icon-"],.btn.disabled [class*=" icon-"],.btn[disabled] [class^="icon-"],.btn[disabled] [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-white.png");background-size:160px 480px} +.icon-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-orange.png")} +.icon-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-red.png")} +.icon-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-green.png")} +.icon-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-fullcolor.png")} +[class^="icon-24-"],[class*=" icon-24-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-blue.png");background-size:240px 720px} +.icon-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-orange.png")} +.icon-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-red.png")} +.icon-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-green.png")} +.icon-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-fullcolor.png")} +[class^="icon-24-payment-"],[class*=" icon-24-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-48-payment.png");background-size:288px 312px} +} +.table{margin-bottom:40px} +.table th,.table td{font-weight:400;padding:10px;line-height:20px;border-top:1px solid rgba(255,255,255,0.07)} +.table thead th{background:transparent;color:rgba(255,255,255,0.3)} +.table thead th a.table-sort,.table thead th a.table-sorting{color:rgba(255,255,255,0.3)} +.table thead th a.table-sort .icon-sort,.table thead th a.table-sorting .icon-sort{opacity:.3} +.table thead th a.table-sort:hover,.table thead th a.table-sorting:hover,.table thead th a.table-sort:focus,.table thead th a.table-sorting:focus{color:#fff} +.table thead th a.table-sort:hover .icon-sort,.table thead th a.table-sorting:hover .icon-sort,.table thead th a.table-sort:focus .icon-sort,.table thead th a.table-sorting:focus .icon-sort{opacity:1} +.table thead th a.table-sort.sort-disabled,.table thead th a.table-sorting.sort-disabled,.table thead th a.table-sort.sort-disabled:hover,.table thead th a.table-sorting.sort-disabled:hover,.table thead th a.table-sort.sort-disabled:focus,.table thead th a.table-sorting.sort-disabled:focus{color:rgba(255,255,255,0.3)} +.table thead th a.table-sort.sort-disabled .icon-sort-disabled,.table thead th a.table-sorting.sort-disabled .icon-sort-disabled,.table thead th a.table-sort.sort-disabled:hover .icon-sort-disabled,.table thead th a.table-sorting.sort-disabled:hover .icon-sort-disabled,.table thead th a.table-sort.sort-disabled:focus .icon-sort-disabled,.table thead th a.table-sorting.sort-disabled:focus .icon-sort-disabled{opacity:.3} +.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0} +.table tbody+tbody{border-top:2px solid rgba(255,255,255,0.07)} +.table .table{background-color:#202020} +.table-bordered{border:1px solid rgba(255,255,255,0.07);border-collapse:separate;border-left:0;border-radius:2px} +.table-bordered th,.table-bordered td{padding:10px;border-left:1px solid rgba(255,255,255,0.07)} +.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0} +.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px} +.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px} +.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child{-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px} +.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child{-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px} +.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0} +.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0} +.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px} +.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px} +.table-condensed th,.table-condensed td{padding:5px 10px;font-size:13px;line-height:20px} +.table-striped thead tr>th,.table-striped tbody tr:nth-child(even)>td,.table-striped tbody tr:nth-child(even)>th{background-color:rgba(255,255,255,0.07)} +.table-hover tbody tr td,.table-hover tbody tr th{-webkit-transition:background-color,0.2s;transition:background-color .2s} +.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:rgba(255,255,255,0.025)} +.table tbody tr.success td{background-color:#132a14;color:rgba(255,255,255,0.7)} +.table tbody tr.error td{background-color:#360e10;color:rgba(255,255,255,0.7)} +.table tbody tr.warning td{background-color:#5d3200;color:rgba(255,255,255,0.7)} +.table tbody tr.info td{background-color:#272e3b;color:rgba(255,255,255,0.7)} +.table-hover tbody tr.success:hover td{background-color:#1b3c1c} +.table-hover tbody tr.error:hover td{background-color:#4a1316} +.table-hover tbody tr.warning:hover td{background-color:#774000} +.table-hover tbody tr.info:hover td{background-color:#313a4a} +ul.thumbnails{margin:0;padding:0;list-style:none} +ul.thumbnails:before,ul.thumbnails:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +ul.thumbnails:after{clear:both} +ul.thumbnails>li{float:left;padding-left:0;margin-bottom:40px} +a.thumbnail,div.thumbnail{position:relative;display:block;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:0 0 12px rgba(0,0,0,0.4);-webkit-transition:box-shadow,0.2s,ease-in-out;transition:box-shadow .2s ease-in-out} +a.thumbnail:after,div.thumbnail:after{content:"";position:absolute;top:0;left:0;z-index:10;display:block;width:100%;height:100%;box-shadow:inset 0 0 0 1px rgba(0,0,0,0.7),inset 0 0 0 2px rgba(255,255,255,0.1);-webkit-transition:box-shadow,0.2s,ease-in-out;transition:box-shadow .2s ease-in-out} +a.thumbnail:hover:after{box-shadow:inset 0 0 0 1px rgba(0,0,0,0.7),inset 0 0 0 2px rgba(255,255,255,0.25)} +a.thumbnail>img,div.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;position:relative;z-index:10} +a.thumbnail .caption,div.thumbnail .caption{padding:10px;position:relative;z-index:13} +a.thumbnail>img+.caption,div.thumbnail>img+.caption{border-top:1px solid rgba(255,255,255,0.15);padding-top:9px} +a.thumbnail .caption p:last-child,div.thumbnail .caption p:last-child,a.thumbnail .caption ul:last-child,div.thumbnail .caption ul:last-child,a.thumbnail .caption ol:last-child,div.thumbnail .caption ol:last-child,a.thumbnail .caption dl:last-child,div.thumbnail .caption dl:last-child{margin-bottom:0} +.tooltip{z-index:1070;padding:5px;font-size:11px} +.tooltip.top{margin-top:-3px} +.tooltip.right{margin-left:3px} +.tooltip.bottom{margin-top:3px} +.tooltip.left{margin-left:-3px} +.tooltip-inner{max-width:250px;padding:3px 8px;color:#bfc1c5;text-align:left;text-decoration:none;background-color:#272e3b;border:1px solid #3d434f;border-radius:1px;box-shadow:0 0 10px 1px rgba(0,0,0,0.75)} +.tooltip-inner p,.tooltip-inner ul,.tooltip-inner ol{margin-bottom:20px;line-height:20px} +.tooltip-inner p:last-child,.tooltip-inner ul:last-child,.tooltip-inner ol:last-child{margin-bottom:0} +.tooltip-arrow,.tooltip-arrow:after{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;z-index:0} +.tooltip-arrow:after{content:"";display:block;z-index:1} +.tooltip.top .tooltip-arrow{bottom:-1px;left:50%;margin-left:-5px;border-width:6px 6px 0;border-top-color:#3d434f} +.tooltip.top .tooltip-arrow:after{bottom:2px;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#272e3b} +.tooltip.right .tooltip-arrow{top:50%;left:-1px;margin-top:-5px;border-width:6px 6px 6px 0;border-right-color:#3d434f} +.tooltip.right .tooltip-arrow:after{top:50%;left:2px;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#272e3b} +.tooltip.left .tooltip-arrow{top:50%;right:-1px;margin-top:-5px;border-width:6px 0 6px 6px;border-left-color:#3d434f} +.tooltip.left .tooltip-arrow:after{top:50%;right:2px;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#272e3b} +.tooltip.bottom .tooltip-arrow{top:-1px;left:50%;margin-left:-5px;border-width:0 6px 6px;border-bottom-color:#3d434f} +.tooltip.bottom .tooltip-arrow:after{top:2px;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#272e3b} +.tooltipster-base{padding:5px;font-size:15px;line-height:20px;position:absolute;left:0;top:0;pointer-events:none;width:auto;overflow:visible} +.tooltipster-default{border-radius:1px;border:1px solid #3d434f;background:#272e3b;color:#bfc1c5;max-width:250px;z-index:1070} +.tooltipster-default .tooltipster-content{font-family:"Blizzard","Arial","Helvetica",sans-serif;font-size:11px;line-height:13px;padding:8px 10px;overflow:hidden} +.tooltipster-arrow-top span,.tooltipster-arrow-top-right span,.tooltipster-arrow-top-left span{border-left:5px solid transparent!important;border-right:5px solid transparent!important;border-top:5px solid;bottom:-4px} +.tooltipster-arrow-top .tooltipster-arrow-border,.tooltipster-arrow-top-right .tooltipster-arrow-border,.tooltipster-arrow-top-left .tooltipster-arrow-border{border-left:6px solid transparent!important;border-right:6px solid transparent!important;border-top:6px solid;bottom:-5px} +.tooltipster-arrow-bottom span,.tooltipster-arrow-bottom-right span,.tooltipster-arrow-bottom-left span{border-left:5px solid transparent!important;border-right:5px solid transparent!important;border-bottom:5px solid;top:-4px} +.tooltipster-arrow-bottom .tooltipster-arrow-border,.tooltipster-arrow-bottom-right .tooltipster-arrow-border,.tooltipster-arrow-bottom-left .tooltipster-arrow-border{border-left:6px solid transparent!important;border-right:6px solid transparent!important;border-bottom:6px solid;top:-5px} +.tooltipster-arrow-top span,.tooltipster-arrow-top .tooltipster-arrow-border,.tooltipster-arrow-bottom span,.tooltipster-arrow-bottom .tooltipster-arrow-border{left:0;right:0;margin:0 auto} +.tooltipster-arrow-top-left span,.tooltipster-arrow-bottom-left span{left:3px} +.tooltipster-arrow-top-left .tooltipster-arrow-border,.tooltipster-arrow-bottom-left .tooltipster-arrow-border{left:2px} +.tooltipster-arrow-top-right span,.tooltipster-arrow-bottom-right span{right:3px} +.tooltipster-arrow-top-right .tooltipster-arrow-border,.tooltipster-arrow-bottom-right .tooltipster-arrow-border{right:2px} +.tooltipster-arrow-left span,.tooltipster-arrow-left .tooltipster-arrow-border{border-top:5px solid transparent!important;border-bottom:5px solid transparent!important;border-left:5px solid;top:50%;margin-top:-4px;right:-5px} +.tooltipster-arrow-left .tooltipster-arrow-border{border-top:6px solid transparent!important;border-bottom:6px solid transparent!important;border-left:6px solid;margin-top:-5px} +.tooltipster-arrow-right span,.tooltipster-arrow-right .tooltipster-arrow-border{border-top:5px solid transparent!important;border-bottom:5px solid transparent!important;border-right:5px solid;top:50%;margin-top:-5px;left:-5px} +.tooltipster-arrow-right .tooltipster-arrow-border{border-top:6px solid transparent!important;border-bottom:6px solid transparent!important;border-right:6px solid;margin-top:-6px} +.tooltipster-icon{cursor:help;margin-left:4px} +body{font-family:"Blizzard","Arial","Helvetica",sans-serif;font-size:15px;line-height:20px} +body:lang(zh-CN){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft YaHei","Hei SC",sans-serif} +body:lang(zh-TW){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft JhengHei","Tei TC",sans-serif} +body:lang(ko){font-family:"Blizzard","Arial","Helvetica","?????? ??????","Malgun Gothic","????????????????????????","AppleSDGothicNeo","????????????","AppleGothic","??????","Dotum",sans-serif} +body:lang(ja){font-family:"Blizzard","Arial","Helvetica","????????????","Meiryo","?????????????????? Pro","Hiragino Kaku Gothic Pro","???????????????","Yu Gothic",sans-serif} +body:lang(th){font-family:"Blizzard","Tahoma","Arial","Helvetica",sans-serif} +h1,h2,h3,h4,h5,h6,.heading-1,.heading-2,.heading-3,.heading-4,.heading-5,.heading-6{margin:0 0 33px 0} +h1 strong,h2 strong,h3 strong,h4 strong,h5 strong,h6 strong,.heading-1 strong,.heading-2 strong,.heading-3 strong,.heading-4 strong,.heading-5 strong,.heading-6 strong{font-weight:400} +h1,.heading-1{font-weight:300;font-size:35px;line-height:40px;color:#fff} +h1 strong,.heading-1 strong,h1 b,.heading-1 b{font-weight:300} +h2,.heading-2{font-weight:300;font-size:23px;line-height:30px;color:#fff} +h3,.heading-3{font-weight:400;font-size:17px;line-height:20px;color:#fff} +h4,.heading-4{font-weight:400;font-size:15px;line-height:20px;color:#fff} +h5,.heading-5{font-weight:400;font-size:13px;line-height:20px;margin:0 0 8.25px 0;color:#fff} +h6,.heading-6{font-weight:400;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;color:rgba(255,255,255,0.3);margin:0 0 8.25px 0} +.heading-6+.heading-1,.heading-6+.heading-2,.heading-6+.heading-3{margin-top:-8.25px} +.heading-1+.heading-6,.heading-2+.heading-6,.heading-3+.heading-6{margin-top:-33px;margin-bottom:33px} +p+.heading-1,ul+.heading-1,ol+.heading-1,dl+.heading-1,pre+.heading-1,blockquote+.heading-1,p+.heading-2,ul+.heading-2,ol+.heading-2,dl+.heading-2,pre+.heading-2,blockquote+.heading-2,p+.heading-3,ul+.heading-3,ol+.heading-3,dl+.heading-3,pre+.heading-3,blockquote+.heading-3,p+.heading-4,ul+.heading-4,ol+.heading-4,dl+.heading-4,pre+.heading-4,blockquote+.heading-4,p+.heading-5+.heading-6,ul+.heading-5+.heading-6,ol+.heading-5+.heading-6,dl+.heading-5+.heading-6,pre+.heading-5+.heading-6,blockquote+.heading-5+.heading-6{margin-top:66px} +h1 small,h2 small,h3 small,h4 small,.heading-1 .subheading,.heading-2 .subheading,.heading-3 .subheading,.heading-4 .subheading{color:rgba(255,255,255,0.5)} +h1 small,.heading-1 .subheading{font-size:17px;line-height:20px} +h2 small,.heading-2 .subheading{font-size:15px;line-height:20px} +.title{font-size:15px;line-height:20px;font-weight:400;text-transform:uppercase;letter-spacing:.075em;color:rgba(255,255,255,0.8)} +.title .subtitle{color:rgba(255,255,255,0.5)} +.title a{color:rgba(255,255,255,0.8)} +.title a:focus,.title a:hover{color:#fff} +.title [class^="icon-24-"],.title [class*=" icon-24-"]{margin-top:-2px} +.muted{color:rgba(255,255,255,0.3)} +.muted a{color:rgba(0,174,255,0.7)} +.muted a:hover{color:rgba(255,255,255,0.5)} +a.muted:hover{color:rgba(255,255,255,0.5)} +.text-warning{color:#d8ac15} +a.text-warning:hover{color:#fff} +.text-error{color:#cd0606} +a.text-error:hover{color:#fff} +.text-info{color:#00aeff} +a.text-info:hover{color:#fff} +.text-success{color:#00a83c} +a.text-success:hover{color:#fff} +b{color:#fff;font-weight:400} +strong{color:#fff;font-weight:400} +s{color:rgba(255,255,255,0.3)} +del{color:rgba(255,255,255,0.3)} +ins{color:rgba(255,255,255,0.7)} +code{color:rgba(255,255,255,0.7)} +samp{color:rgba(255,255,255,0.7)} +kbd{color:rgba(255,255,255,0.7);font-weight:700} +var{color:rgba(255,255,255,0.7)} +code,kbd,pre,samp{font-family:"Consolas","Monaco","Menlo","Courier New",monospace} +abbr[title],abbr[data-original-title]{border-color:rgba(255,255,255,0.15)} +.initialism{font-size:14px} +small{font-size:86.66666667%;color:rgba(255,255,255,0.5)} +p{margin:0 0 33px 0;line-height:25px} +ul,ol{padding:0;margin:0 0 33px 30px;line-height:25px} +ul ul,ol ul,ul ol,ol ol{margin-top:20.625px} +li{line-height:20px;margin:0 0 20.625px 0;padding-left:10px} +li:last-of-type{margin-bottom:0} +li p{margin-bottom:20.625px} +ul.icons li,ol.icons li{padding-left:40px} +ul.icons li [class^="icon-"],ol.icons li [class^="icon-"],ul.icons li [class*=" icon-"],ol.icons li [class*=" icon-"]{left:12px} +ul.inline>li,ol.inline>li{padding-left:10px} +dl{margin:0 0 33px 0} +dl dt{font-weight:400;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;color:rgba(255,255,255,0.3)} +dl dd{margin:0 0 20.625px 40px} +.dl-horizontal{margin-bottom:20px} +blockquote{padding:0 0 0 20px;margin:0 0 33px 0;border-left:5px solid rgba(255,255,255,0.1)} +blockquote p{color:rgba(255,255,255,0.7)} +blockquote .attribution{font-size:13px;line-height:20px;margin-top:20px;color:rgba(255,255,255,0.3)} +blockquote.pull-right{padding-right:20px;border-right:5px solid rgba(255,255,255,0.1)} +address{margin-bottom:20px;line-height:20px} +hr{margin:66px 0 20.625px;border-bottom:1px solid rgba(255,255,255,0.1)} +.documentation-section h1,.documentation-section h2,.documentation-section h3,.documentation-section h4,.documentation-section h5,.documentation-section h6,.documentation-section .heading-1,.documentation-section .heading-2,.documentation-section .heading-3,.documentation-section .heading-4,.documentation-section .heading-5,.documentation-section .heading-6{max-width:800px} +.documentation-section>p,.documentation-section>ul.unstyled,.documentation-section>ol.unstyled{max-width:800px} +.documentation-section>p:last-child,.documentation-section>ul.unstyled:last-child,.documentation-section>ol.unstyled:last-child{margin-bottom:0} +.documentation-section>ul:not(.nav):not(.pager):not(.thumbnails),.documentation-section>ol{max-width:760px} +.documentation-section>blockquote>p{max-width:775px} +.news-article .article-content *:not(a){color:rgba(255,255,255,0.7)} +.news-article>p,.news-article>ul:not(.nav),.news-article>ol{margin-bottom:25px} +.news-article>p:last-child,.news-article>ul:not(.nav):last-child,.news-article>ol:last-child{margin-bottom:0} +.news-article>.heading-2,.news-article>.heading-3,.news-article>.heading-4,.news-article>.heading-5{margin-bottom:25px} +.news-article p{margin-bottom:25px} +.news-article p+.heading-1,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-1,.news-article ol+.heading-1,.news-article dl+.heading-1,.news-article p+.heading-2,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-2,.news-article ol+.heading-2,.news-article dl+.heading-2,.news-article p+.heading-3,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-3,.news-article ol+.heading-3,.news-article dl+.heading-3,.news-article p+.heading-4,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-4,.news-article ol+.heading-4,.news-article dl+.heading-4,.news-article p+.heading-5+.heading-6,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-5+.heading-6,.news-article ol+.heading-5+.heading-6,.news-article dl+.heading-5+.heading-6{margin-top:40px} +.news-article hr{margin-top:25px} +.well{font-size:13px;min-height:20px;border:1px solid #000;padding:20px;margin-bottom:40px;background-color:#272727;box-shadow:0 0 0 1px rgba(255,255,255,0.07) inset,0 5px 10px rgba(0,0,0,0.75);-moz-box-sizing:border-box;box-sizing:border-box} +.well blockquote{border-color:rgba(255,255,255,0.07)} +.well p,.well ul,.well ol,.well dl{font-size:13px;line-height:20px;margin-bottom:20px} +.well p:last-child,.well ul:last-child,.well ol:last-child,.well dl:last-child{margin-bottom:0} +.well-large{padding:40px 20px} +.well-small{padding:5px 20px} +@media screen and (max-width:767px){.btn,.btn.btn-wide{font-size:17px;width:100%} +.form-actions .btn{float:inherit} +.form-actions .btn+.btn{margin-left:0;margin-top:20px} +select optgroup{font-size:15px} +select option{font-size:15px} +.modal{width:90%;margin-left:-45%} +} \ No newline at end of file diff --git a/current/toolkit/css/toolkit/fonts/blizzard-bold-italic.woff b/current/toolkit/css/toolkit/fonts/blizzard-bold-italic.woff new file mode 100644 index 00000000..fa174b09 Binary files /dev/null and b/current/toolkit/css/toolkit/fonts/blizzard-bold-italic.woff differ diff --git a/current/toolkit/css/toolkit/fonts/blizzard-bold.woff b/current/toolkit/css/toolkit/fonts/blizzard-bold.woff new file mode 100644 index 00000000..291004b6 Binary files /dev/null and b/current/toolkit/css/toolkit/fonts/blizzard-bold.woff differ diff --git a/current/toolkit/css/toolkit/fonts/blizzard-light-italic.woff b/current/toolkit/css/toolkit/fonts/blizzard-light-italic.woff new file mode 100644 index 00000000..34d597a1 Binary files /dev/null and b/current/toolkit/css/toolkit/fonts/blizzard-light-italic.woff differ diff --git a/current/toolkit/css/toolkit/fonts/blizzard-light.woff b/current/toolkit/css/toolkit/fonts/blizzard-light.woff new file mode 100644 index 00000000..1a36ebea Binary files /dev/null and b/current/toolkit/css/toolkit/fonts/blizzard-light.woff differ diff --git a/current/toolkit/css/toolkit/fonts/blizzard-regular-italic.woff b/current/toolkit/css/toolkit/fonts/blizzard-regular-italic.woff new file mode 100644 index 00000000..7d1ca9bf Binary files /dev/null and b/current/toolkit/css/toolkit/fonts/blizzard-regular-italic.woff differ diff --git a/current/toolkit/css/toolkit/fonts/blizzard-regular.woff b/current/toolkit/css/toolkit/fonts/blizzard-regular.woff new file mode 100644 index 00000000..0425e15d Binary files /dev/null and b/current/toolkit/css/toolkit/fonts/blizzard-regular.woff differ diff --git a/current/toolkit/images/toolkit/defaults/avatars/sprite-default-32.png b/current/toolkit/images/toolkit/defaults/avatars/sprite-default-32.png new file mode 100644 index 00000000..7d36c326 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/avatars/sprite-default-32.png differ diff --git a/current/toolkit/images/toolkit/defaults/carousels/sprite-carousel-control.png b/current/toolkit/images/toolkit/defaults/carousels/sprite-carousel-control.png new file mode 100644 index 00000000..24c95c2e Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/carousels/sprite-carousel-control.png differ diff --git a/current/toolkit/images/toolkit/defaults/icons/sprite-16-payment-alt.png b/current/toolkit/images/toolkit/defaults/icons/sprite-16-payment-alt.png new file mode 100644 index 00000000..4bc0dcff Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/icons/sprite-16-payment-alt.png differ diff --git a/current/toolkit/images/toolkit/defaults/icons/sprite-16-payment.png b/current/toolkit/images/toolkit/defaults/icons/sprite-16-payment.png new file mode 100644 index 00000000..798a0ee8 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/icons/sprite-16-payment.png differ diff --git a/current/toolkit/images/toolkit/defaults/icons/sprite-24-payment-alt.png b/current/toolkit/images/toolkit/defaults/icons/sprite-24-payment-alt.png new file mode 100644 index 00000000..a87843c8 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/icons/sprite-24-payment-alt.png differ diff --git a/current/toolkit/images/toolkit/defaults/icons/sprite-24-payment.png b/current/toolkit/images/toolkit/defaults/icons/sprite-24-payment.png new file mode 100644 index 00000000..3b5fde14 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/icons/sprite-24-payment.png differ diff --git a/current/toolkit/images/toolkit/defaults/icons/sprite-32-payment-alt.png b/current/toolkit/images/toolkit/defaults/icons/sprite-32-payment-alt.png new file mode 100644 index 00000000..5def8087 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/icons/sprite-32-payment-alt.png differ diff --git a/current/toolkit/images/toolkit/defaults/icons/sprite-32-payment.png b/current/toolkit/images/toolkit/defaults/icons/sprite-32-payment.png new file mode 100644 index 00000000..cd4c1ccf Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/icons/sprite-32-payment.png differ diff --git a/current/toolkit/images/toolkit/defaults/icons/sprite-48-payment-alt.png b/current/toolkit/images/toolkit/defaults/icons/sprite-48-payment-alt.png new file mode 100644 index 00000000..ebb69e0a Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/icons/sprite-48-payment-alt.png differ diff --git a/current/toolkit/images/toolkit/defaults/icons/sprite-48-payment.png b/current/toolkit/images/toolkit/defaults/icons/sprite-48-payment.png new file mode 100644 index 00000000..d0393028 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/icons/sprite-48-payment.png differ diff --git a/current/toolkit/images/toolkit/defaults/icons/sprite-64-payment-alt.png b/current/toolkit/images/toolkit/defaults/icons/sprite-64-payment-alt.png new file mode 100644 index 00000000..89c7cc04 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/icons/sprite-64-payment-alt.png differ diff --git a/current/toolkit/images/toolkit/defaults/icons/sprite-64-payment.png b/current/toolkit/images/toolkit/defaults/icons/sprite-64-payment.png new file mode 100644 index 00000000..1bb8da0f Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/icons/sprite-64-payment.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/blizzard/footer.png b/current/toolkit/images/toolkit/defaults/logos/blizzard/footer.png new file mode 100644 index 00000000..2b0cc372 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/blizzard/footer.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/bnet/china-default-2x.png b/current/toolkit/images/toolkit/defaults/logos/bnet/china-default-2x.png new file mode 100644 index 00000000..c4c704d5 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/bnet/china-default-2x.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/bnet/china-default.png b/current/toolkit/images/toolkit/defaults/logos/bnet/china-default.png new file mode 100644 index 00000000..c51a49ff Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/bnet/china-default.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/bnet/default-2x.png b/current/toolkit/images/toolkit/defaults/logos/bnet/default-2x.png new file mode 100644 index 00000000..53313ae5 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/bnet/default-2x.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/bnet/default.png b/current/toolkit/images/toolkit/defaults/logos/bnet/default.png new file mode 100644 index 00000000..76adb754 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/bnet/default.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/bnet/mark-2x.png b/current/toolkit/images/toolkit/defaults/logos/bnet/mark-2x.png new file mode 100644 index 00000000..97ae8ef9 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/bnet/mark-2x.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/bnet/mark.png b/current/toolkit/images/toolkit/defaults/logos/bnet/mark.png new file mode 100644 index 00000000..ef28f792 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/bnet/mark.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/wow/china-default-2x.png b/current/toolkit/images/toolkit/defaults/logos/wow/china-default-2x.png new file mode 100644 index 00000000..2e6af8c9 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/wow/china-default-2x.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/wow/china-default.png b/current/toolkit/images/toolkit/defaults/logos/wow/china-default.png new file mode 100644 index 00000000..d59179a2 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/wow/china-default.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/wow/default-2x.png b/current/toolkit/images/toolkit/defaults/logos/wow/default-2x.png new file mode 100644 index 00000000..13a8e26b Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/wow/default-2x.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/wow/default.png b/current/toolkit/images/toolkit/defaults/logos/wow/default.png new file mode 100644 index 00000000..95747553 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/wow/default.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/wtcg/china-default-2x.png b/current/toolkit/images/toolkit/defaults/logos/wtcg/china-default-2x.png new file mode 100644 index 00000000..cac7a000 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/wtcg/china-default-2x.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/wtcg/china-default.png b/current/toolkit/images/toolkit/defaults/logos/wtcg/china-default.png new file mode 100644 index 00000000..caa9731d Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/wtcg/china-default.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/wtcg/default-2x.png b/current/toolkit/images/toolkit/defaults/logos/wtcg/default-2x.png new file mode 100644 index 00000000..4460d096 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/wtcg/default-2x.png differ diff --git a/current/toolkit/images/toolkit/defaults/logos/wtcg/default.png b/current/toolkit/images/toolkit/defaults/logos/wtcg/default.png new file mode 100644 index 00000000..cf3a8077 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/logos/wtcg/default.png differ diff --git a/current/toolkit/images/toolkit/defaults/meta/favicon.png b/current/toolkit/images/toolkit/defaults/meta/favicon.png new file mode 100644 index 00000000..3f0e5124 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/meta/favicon.png differ diff --git a/current/toolkit/images/toolkit/defaults/modals/modal-gradient.png b/current/toolkit/images/toolkit/defaults/modals/modal-gradient.png new file mode 100644 index 00000000..5207d3f9 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/modals/modal-gradient.png differ diff --git a/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-blue.png b/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-blue.png new file mode 100644 index 00000000..61d47c40 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-blue.png differ diff --git a/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-gray.png b/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-gray.png new file mode 100644 index 00000000..c1f1c78e Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-gray.png differ diff --git a/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-green.png b/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-green.png new file mode 100644 index 00000000..a71c99b6 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-green.png differ diff --git a/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-orange.png b/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-orange.png new file mode 100644 index 00000000..a1ee576d Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-orange.png differ diff --git a/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-red.png b/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-red.png new file mode 100644 index 00000000..1c46b648 Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-red.png differ diff --git a/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-white.png b/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-white.png new file mode 100644 index 00000000..de4d996d Binary files /dev/null and b/current/toolkit/images/toolkit/defaults/spinners/spinner-patching-white.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/backgrounds/navbar.jpg b/current/toolkit/images/toolkit/themes/admin/backgrounds/navbar.jpg new file mode 100644 index 00000000..77ea975b Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/backgrounds/navbar.jpg differ diff --git a/current/toolkit/images/toolkit/themes/admin/forms/sprite-18-inputs.png b/current/toolkit/images/toolkit/themes/admin/forms/sprite-18-inputs.png new file mode 100644 index 00000000..10467ec0 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/forms/sprite-18-inputs.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/forms/sprite-22-select.png b/current/toolkit/images/toolkit/themes/admin/forms/sprite-22-select.png new file mode 100644 index 00000000..ed6f8679 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/forms/sprite-22-select.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/forms/sprite-36-inputs.png b/current/toolkit/images/toolkit/themes/admin/forms/sprite-36-inputs.png new file mode 100644 index 00000000..3f1df304 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/forms/sprite-36-inputs.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-128-blue.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-128-blue.png new file mode 100644 index 00000000..18183161 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-128-blue.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-128-dark.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-128-dark.png new file mode 100644 index 00000000..4ed21995 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-128-dark.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-128-gray.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-128-gray.png new file mode 100644 index 00000000..a4799e07 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-128-gray.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-128-white.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-128-white.png new file mode 100644 index 00000000..92597d8c Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-128-white.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-16-blue.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-16-blue.png new file mode 100644 index 00000000..f5db0b04 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-16-blue.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-16-dark.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-16-dark.png new file mode 100644 index 00000000..b53ccb15 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-16-dark.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-16-gray.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-16-gray.png new file mode 100644 index 00000000..2f54fbe4 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-16-gray.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-16-white.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-16-white.png new file mode 100644 index 00000000..7c4297f8 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-16-white.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-24-blue.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-24-blue.png new file mode 100644 index 00000000..c5b8f0dc Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-24-blue.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-24-dark.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-24-dark.png new file mode 100644 index 00000000..214b973f Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-24-dark.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-24-gray.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-24-gray.png new file mode 100644 index 00000000..37bd8b59 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-24-gray.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-24-white.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-24-white.png new file mode 100644 index 00000000..a2d94132 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-24-white.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-32-blue.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-32-blue.png new file mode 100644 index 00000000..f249177b Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-32-blue.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-32-dark.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-32-dark.png new file mode 100644 index 00000000..ee920ccb Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-32-dark.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-32-gray.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-32-gray.png new file mode 100644 index 00000000..c85c7d4d Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-32-gray.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-32-white.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-32-white.png new file mode 100644 index 00000000..92e4189d Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-32-white.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-48-blue.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-48-blue.png new file mode 100644 index 00000000..04dafcb7 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-48-blue.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-48-dark.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-48-dark.png new file mode 100644 index 00000000..fd933288 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-48-dark.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-48-gray.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-48-gray.png new file mode 100644 index 00000000..b09a6f5c Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-48-gray.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-48-white.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-48-white.png new file mode 100644 index 00000000..8dc2efc7 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-48-white.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-64-blue.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-64-blue.png new file mode 100644 index 00000000..98c8864e Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-64-blue.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-64-dark.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-64-dark.png new file mode 100644 index 00000000..3c955c1f Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-64-dark.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-64-gray.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-64-gray.png new file mode 100644 index 00000000..a1e11390 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-64-gray.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/icons/sprite-64-white.png b/current/toolkit/images/toolkit/themes/admin/icons/sprite-64-white.png new file mode 100644 index 00000000..d7ad2f48 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/icons/sprite-64-white.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/progress-bars/progress-pulse.png b/current/toolkit/images/toolkit/themes/admin/progress-bars/progress-pulse.png new file mode 100644 index 00000000..1d43613a Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/progress-bars/progress-pulse.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/progress-bars/progress-stripes.png b/current/toolkit/images/toolkit/themes/admin/progress-bars/progress-stripes.png new file mode 100644 index 00000000..18bd2c19 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/progress-bars/progress-stripes.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/spinners/spinner-40-loading-white.png b/current/toolkit/images/toolkit/themes/admin/spinners/spinner-40-loading-white.png new file mode 100644 index 00000000..26635333 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/spinners/spinner-40-loading-white.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/spinners/spinner-40-loading.png b/current/toolkit/images/toolkit/themes/admin/spinners/spinner-40-loading.png new file mode 100644 index 00000000..4a055165 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/spinners/spinner-40-loading.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/spinners/spinner-80-loading-white.png b/current/toolkit/images/toolkit/themes/admin/spinners/spinner-80-loading-white.png new file mode 100644 index 00000000..630fc4a1 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/spinners/spinner-80-loading-white.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/spinners/spinner-80-loading.png b/current/toolkit/images/toolkit/themes/admin/spinners/spinner-80-loading.png new file mode 100644 index 00000000..7db4f98c Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/spinners/spinner-80-loading.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/spinners/spinner-loading-white.png b/current/toolkit/images/toolkit/themes/admin/spinners/spinner-loading-white.png new file mode 100644 index 00000000..67972dad Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/spinners/spinner-loading-white.png differ diff --git a/current/toolkit/images/toolkit/themes/admin/spinners/spinner-loading.png b/current/toolkit/images/toolkit/themes/admin/spinners/spinner-loading.png new file mode 100644 index 00000000..50a4f71b Binary files /dev/null and b/current/toolkit/images/toolkit/themes/admin/spinners/spinner-loading.png differ diff --git a/current/toolkit/images/toolkit/themes/armory/spinners/spinner-40-armory.png b/current/toolkit/images/toolkit/themes/armory/spinners/spinner-40-armory.png new file mode 100644 index 00000000..b3fc198b Binary files /dev/null and b/current/toolkit/images/toolkit/themes/armory/spinners/spinner-40-armory.png differ diff --git a/current/toolkit/images/toolkit/themes/armory/spinners/spinner-80-armory.png b/current/toolkit/images/toolkit/themes/armory/spinners/spinner-80-armory.png new file mode 100644 index 00000000..f98dd642 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/armory/spinners/spinner-80-armory.png differ diff --git a/current/toolkit/images/toolkit/themes/armory/spinners/spinner-armory.png b/current/toolkit/images/toolkit/themes/armory/spinners/spinner-armory.png new file mode 100644 index 00000000..bd197b69 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/armory/spinners/spinner-armory.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/forms/sprite-18-inputs.png b/current/toolkit/images/toolkit/themes/bnet/forms/sprite-18-inputs.png new file mode 100644 index 00000000..5abb9807 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/forms/sprite-18-inputs.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/forms/sprite-22-select.png b/current/toolkit/images/toolkit/themes/bnet/forms/sprite-22-select.png new file mode 100644 index 00000000..a013eefa Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/forms/sprite-22-select.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/forms/sprite-36-inputs.png b/current/toolkit/images/toolkit/themes/bnet/forms/sprite-36-inputs.png new file mode 100644 index 00000000..419940d3 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/forms/sprite-36-inputs.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-blue.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-blue.png new file mode 100644 index 00000000..d0f90952 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-blue.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-fullcolor.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-fullcolor.png new file mode 100644 index 00000000..b1a53861 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-fullcolor.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-gray.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-gray.png new file mode 100644 index 00000000..187494da Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-gray.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-green.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-green.png new file mode 100644 index 00000000..d63b434e Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-green.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-hsorange.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-hsorange.png new file mode 100644 index 00000000..9608d976 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-hsorange.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-orange.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-orange.png new file mode 100644 index 00000000..7fcb8562 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-orange.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-purple.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-purple.png new file mode 100644 index 00000000..d2f31292 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-purple.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-red.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-red.png new file mode 100644 index 00000000..e3c0bcae Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-red.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-sky.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-sky.png new file mode 100644 index 00000000..f92fb42b Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-sky.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-white.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-white.png new file mode 100644 index 00000000..92597d8c Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-128-white.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-blue.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-blue.png new file mode 100644 index 00000000..e85de8ef Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-blue.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-fullcolor.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-fullcolor.png new file mode 100644 index 00000000..593f908e Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-fullcolor.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-gray.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-gray.png new file mode 100644 index 00000000..a6c627cd Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-gray.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-green.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-green.png new file mode 100644 index 00000000..32234bd6 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-green.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-hsorange.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-hsorange.png new file mode 100644 index 00000000..b907ac3e Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-hsorange.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-orange.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-orange.png new file mode 100644 index 00000000..1757fd18 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-orange.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-purple.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-purple.png new file mode 100644 index 00000000..2ea90f4f Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-purple.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-red.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-red.png new file mode 100644 index 00000000..ae7d935e Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-red.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-sky.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-sky.png new file mode 100644 index 00000000..edd8942d Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-sky.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-white.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-white.png new file mode 100644 index 00000000..7c4297f8 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-16-white.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-blue.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-blue.png new file mode 100644 index 00000000..64386bdc Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-blue.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-fullcolor.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-fullcolor.png new file mode 100644 index 00000000..f2430942 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-fullcolor.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-gray.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-gray.png new file mode 100644 index 00000000..9f68864d Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-gray.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-green.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-green.png new file mode 100644 index 00000000..eed29459 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-green.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-hsorange.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-hsorange.png new file mode 100644 index 00000000..f935d11a Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-hsorange.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-orange.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-orange.png new file mode 100644 index 00000000..ef67085a Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-orange.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-purple.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-purple.png new file mode 100644 index 00000000..b005b88e Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-purple.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-red.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-red.png new file mode 100644 index 00000000..cba79d82 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-red.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-sky.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-sky.png new file mode 100644 index 00000000..39dbef08 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-sky.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-white.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-white.png new file mode 100644 index 00000000..a2d94132 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-24-white.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-blue.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-blue.png new file mode 100644 index 00000000..28106913 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-blue.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-fullcolor.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-fullcolor.png new file mode 100644 index 00000000..08428b82 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-fullcolor.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-gray.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-gray.png new file mode 100644 index 00000000..dec68846 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-gray.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-green.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-green.png new file mode 100644 index 00000000..ebaff53b Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-green.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-hsorange.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-hsorange.png new file mode 100644 index 00000000..343fc915 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-hsorange.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-orange.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-orange.png new file mode 100644 index 00000000..ae5bdbd7 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-orange.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-purple.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-purple.png new file mode 100644 index 00000000..511bbdaa Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-purple.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-red.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-red.png new file mode 100644 index 00000000..78f102c1 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-red.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-sky.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-sky.png new file mode 100644 index 00000000..4fc080d7 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-sky.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-white.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-white.png new file mode 100644 index 00000000..92e4189d Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-32-white.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-blue.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-blue.png new file mode 100644 index 00000000..e05551d1 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-blue.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-fullcolor.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-fullcolor.png new file mode 100644 index 00000000..b9837919 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-fullcolor.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-gray.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-gray.png new file mode 100644 index 00000000..919ee032 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-gray.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-green.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-green.png new file mode 100644 index 00000000..bbbb4404 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-green.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-hsorange.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-hsorange.png new file mode 100644 index 00000000..2a2ccd21 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-hsorange.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-orange.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-orange.png new file mode 100644 index 00000000..a89256c6 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-orange.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-purple.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-purple.png new file mode 100644 index 00000000..e6467a24 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-purple.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-red.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-red.png new file mode 100644 index 00000000..e09673eb Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-red.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-sky.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-sky.png new file mode 100644 index 00000000..b1f831fe Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-sky.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-white.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-white.png new file mode 100644 index 00000000..8dc2efc7 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-48-white.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-blue.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-blue.png new file mode 100644 index 00000000..1f97a479 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-blue.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-fullcolor.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-fullcolor.png new file mode 100644 index 00000000..b7ab2e93 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-fullcolor.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-gray.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-gray.png new file mode 100644 index 00000000..e99a122a Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-gray.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-green.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-green.png new file mode 100644 index 00000000..3f5366d0 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-green.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-hsorange.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-hsorange.png new file mode 100644 index 00000000..a445dbca Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-hsorange.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-orange.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-orange.png new file mode 100644 index 00000000..1fcf49e3 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-orange.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-purple.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-purple.png new file mode 100644 index 00000000..1e9cce2b Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-purple.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-red.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-red.png new file mode 100644 index 00000000..b9470e24 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-red.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-sky.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-sky.png new file mode 100644 index 00000000..7417defd Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-sky.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-white.png b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-white.png new file mode 100644 index 00000000..d7ad2f48 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/icons/sprite-64-white.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/media/media-org.png b/current/toolkit/images/toolkit/themes/bnet/media/media-org.png new file mode 100644 index 00000000..b5c283f9 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/media/media-org.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/progress-bars/progress-pulse.png b/current/toolkit/images/toolkit/themes/bnet/progress-bars/progress-pulse.png new file mode 100644 index 00000000..1d43613a Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/progress-bars/progress-pulse.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/progress-bars/progress-stripes.png b/current/toolkit/images/toolkit/themes/bnet/progress-bars/progress-stripes.png new file mode 100644 index 00000000..18bd2c19 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/progress-bars/progress-stripes.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/scrollbars/border-image-hover.png b/current/toolkit/images/toolkit/themes/bnet/scrollbars/border-image-hover.png new file mode 100644 index 00000000..c18e1353 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/scrollbars/border-image-hover.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/scrollbars/border-image.png b/current/toolkit/images/toolkit/themes/bnet/scrollbars/border-image.png new file mode 100644 index 00000000..f02d9bba Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/scrollbars/border-image.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-40-battlenet-white.png b/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-40-battlenet-white.png new file mode 100644 index 00000000..26635333 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-40-battlenet-white.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png b/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png new file mode 100644 index 00000000..4a055165 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-80-battlenet-white.png b/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-80-battlenet-white.png new file mode 100644 index 00000000..630fc4a1 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-80-battlenet-white.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-80-battlenet.png b/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-80-battlenet.png new file mode 100644 index 00000000..7db4f98c Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-80-battlenet.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-battlenet-white.png b/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-battlenet-white.png new file mode 100644 index 00000000..67972dad Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-battlenet-white.png differ diff --git a/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-battlenet.png b/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-battlenet.png new file mode 100644 index 00000000..50a4f71b Binary files /dev/null and b/current/toolkit/images/toolkit/themes/bnet/spinners/spinner-battlenet.png differ diff --git a/current/toolkit/images/toolkit/themes/wow/spinners/spinner-40-wow.png b/current/toolkit/images/toolkit/themes/wow/spinners/spinner-40-wow.png new file mode 100644 index 00000000..5a38fb48 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/wow/spinners/spinner-40-wow.png differ diff --git a/current/toolkit/images/toolkit/themes/wow/spinners/spinner-80-wow.png b/current/toolkit/images/toolkit/themes/wow/spinners/spinner-80-wow.png new file mode 100644 index 00000000..79e07f68 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/wow/spinners/spinner-80-wow.png differ diff --git a/current/toolkit/images/toolkit/themes/wow/spinners/spinner-wow.png b/current/toolkit/images/toolkit/themes/wow/spinners/spinner-wow.png new file mode 100644 index 00000000..eccb5492 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/wow/spinners/spinner-wow.png differ diff --git a/current/toolkit/images/toolkit/themes/wtcg/spinners/spinner-40-battlenet-hs.png b/current/toolkit/images/toolkit/themes/wtcg/spinners/spinner-40-battlenet-hs.png new file mode 100644 index 00000000..11fea6ae Binary files /dev/null and b/current/toolkit/images/toolkit/themes/wtcg/spinners/spinner-40-battlenet-hs.png differ diff --git a/current/toolkit/images/toolkit/themes/wtcg/spinners/spinner-80-battlenet-hs.png b/current/toolkit/images/toolkit/themes/wtcg/spinners/spinner-80-battlenet-hs.png new file mode 100644 index 00000000..bb5c3a98 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/wtcg/spinners/spinner-80-battlenet-hs.png differ diff --git a/current/toolkit/images/toolkit/themes/wtcg/spinners/spinner-battlenet-hs.png b/current/toolkit/images/toolkit/themes/wtcg/spinners/spinner-battlenet-hs.png new file mode 100644 index 00000000..86797dc1 Binary files /dev/null and b/current/toolkit/images/toolkit/themes/wtcg/spinners/spinner-battlenet-hs.png differ diff --git a/current/toolkit/js/toolkit/toolkit.min.js b/current/toolkit/js/toolkit/toolkit.min.js new file mode 100644 index 00000000..d9c68caa --- /dev/null +++ b/current/toolkit/js/toolkit/toolkit.min.js @@ -0,0 +1,2121 @@ +/*! + * Battle.net Front end Toolkit + * + * @copyright ©2012 Blizzard Entertainment, Inc. All rights reserved. + * + * Twitter Bootstrap + * + * @see http://twitter.github.com/bootstrap/ + * @copyright ©2011 Twitter, Inc. All rights reserved. + * @license http://www.apache.org/licenses/LICENSE-2.0 + * + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Twitter typeahead.js + * + * @see https://github.com/twitter/typeahead.js + * @copyright ©2013 Twitter, Inc. All rights reserved. + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) 2013 Twitter, Inc + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +"use strict"; +if(!Object.create){Object.create=function(b){if(arguments.length>1){throw new Error("Object.create implementation only accepts the first parameter."); +}function a(){}a.prototype=b; +return new a(); +}; +}if(!Object.getPrototypeOf){if(typeof"test".__proto__==="object"){Object.getPrototypeOf=function(a){return a.__proto__; +}; +}else{Object.getPrototypeOf=function(a){return a.constructor.prototype; +}; +}}if(!String.fromCodePoint){ +/*! + * ES6 Unicode Shims 0.1 + * (c) 2012 Steven Levithan + * MIT License + */ +String.fromCodePoint=function fromCodePoint(){var d=[],a,e,b,c; +for(c=0; +c65535?[55296+(e>>10),56320+(e&1023)]:[a]; +d.push(String.fromCharCode.apply(null,b)); +}return d.join(""); +}; +}if(!String.prototype.trim){String.prototype.trim=function(){return $.trim(this); +}; +}if(!String.prototype.capitalize){String.prototype.capitalize=function(){return this.charAt(0).toUpperCase()+this.slice(1); +}; +}if(typeof jQuery.expr.createPseudo==="function"){jQuery.expr[":"].caseInsensitiveContains=jQuery.expr.createPseudo(function(a){return function(b){return jQuery(b).text().toLocaleLowerCase().indexOf(a.toLocaleLowerCase())>=0; +}; +}); +jQuery.expr[":"].caseInsensitiveStartsWith=jQuery.expr.createPseudo(function(a){return function(b){return jQuery(b).text().toLocaleLowerCase().indexOf(a.toLocaleLowerCase())===0; +}; +}); +}else{jQuery.expr[":"].caseInsensitiveContains=function(c,b,a){return jQuery(c).text().toLocaleLowerCase().indexOf(a[3].toLocaleLowerCase())>=0; +}; +jQuery.expr[":"].caseInsensitiveStartsWith=function(c,b,a){return jQuery(c).text().toLocaleLowerCase().indexOf(a[3].toLocaleLowerCase())===0; +}; +}$(function(){$.support.transition=(function(){var a=(function(){var d=document.createElement("toolkit"),c={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},b; +for(b in c){if(d.style[b]!==undefined){return c[b]; +}}return""; +}()); +return a&&{end:a}; +})(); +}); +var Affix=function(b,a){this.options=$.extend({},$.fn.affix.defaults,a); +this.$window=$(window).on("scroll.affix.data-api",$.proxy(this.checkPosition,this)).on("click.affix.data-api",$.proxy(function(){setTimeout($.proxy(this.checkPosition,this),1); +},this)); +this.$element=$(b); +this.checkPosition(); +}; +Affix.prototype.checkPosition=function(){if(!this.$element.is(":visible")){return; +}var e=$(document).height(),g=this.$window.scrollTop(),a=this.$element.offset(),h=this.options.offset,c=h.bottom,d=h.top,f="affix affix-top affix-bottom",b; +if(typeof h!=="object"){c=d=h; +}if(typeof d==="function"){d=h.top(); +}if(typeof c==="function"){c=h.bottom(); +}if(this.unpin!==null&&(g+this.unpin<=a.top)){b=false; +}else{if(!isNaN(c)&&(a.top+this.$element.height()>=e-c)){b="bottom"; +}else{if(!isNaN(d)&&g<=d){b="top"; +}else{b=false; +}}}if(this.affixed===b){return; +}this.affixed=b; +this.unpin=b==="bottom"?(a.top-g):null; +this.$element.removeClass(f).addClass("affix"+(b?"-"+b:"")); +}; +$.fn.affix=function(a){return this.each(function(){var d=$(this),c=d.data("affix"),b=typeof a==="object"&&a; +if(!c){d.data("affix",(c=new Affix(this,b))); +}if(typeof a==="string"){c[a](); +}}); +}; +$.fn.affix.Constructor=Affix; +$.fn.affix.defaults={offset:0}; +$(window).on("load",function(){$("[data-spy='affix']").each(function(){var b=$(this),a=b.data(); +a.offset=a.offset||{}; +if(a.offsetBottom){a.offset.bottom=a.offsetBottom; +}if(a.offsetTop){a.offset.top=a.offsetTop; +}b.affix(a); +}); +}); +var dismiss="[data-dismiss='alert']",Alert=function(a){$(a).on("click",dismiss,this.close); +}; +Alert.prototype.close=function(f){var d=$(this),b=d.attr("data-target"),c; +if(!b){b=d.attr("href"); +b=b&&b.replace(/.*(?=#[^\s]*$)/,""); +}c=$(b); +if(f){f.preventDefault(); +}if(!c.length){c=d.hasClass("alert")?d:d.parent(); +}c.trigger(f=$.Event("close")); +if(f.isDefaultPrevented()){return; +}c.removeClass("in"); +function a(){c.trigger("closed").remove(); +}if($.support.transition&&c.hasClass("fade")){c.on($.support.transition.end,a); +}else{a(); +}}; +$.fn.alert=function(a){return this.each(function(){var c=$(this),b=c.data("alert"); +if(!b){c.data("alert",(b=new Alert(this))); +}if(typeof a==="string"){b[a].call(c); +}}); +}; +$.fn.alert.Constructor=Alert; +$(document).on("click.alert.data-api",dismiss,Alert.prototype.close); +var Button=function(b,a){this.$element=$(b); +this.options=$.extend({},$.fn.button.defaults,a); +}; +Button.prototype.setState=function(e){var g="disabled",a=this.$element,c=a.data(),f=a.is("input")?"val":"html",b; +e=e+"Text"; +b=c[e]||this.options[e]; +if(b===""&&e==="loadingText"){a.addClass("loading"); +}else{a.removeClass("loading"); +}if(!c.resetText){a.data("resetText",a[f]()); +}if(b!==""){a[f](b); +}setTimeout(function(){if(e==="loadingText"){a.addClass(g).attr(g,g).prop(g,true); +}else{a.removeClass(g).removeAttr(g).prop(g,false); +}},0); +}; +Button.prototype.toggle=function(){var a=this.$element.closest("[data-toggle='buttons-radio']"); +if(a){a.find(".active").removeClass("active"); +}this.$element.toggleClass("active"); +}; +$.fn.button=function(a){return this.each(function(){var d=$(this),c=d.data("button"),b=typeof a==="object"&&a; +if(!c){d.data("button",(c=new Button(this,b))); +}if(a==="toggle"){c.toggle(); +}else{if(a){c.setState(a); +}}}); +}; +$.fn.button.defaults={loadingText:""}; +$.fn.button.Constructor=Button; +$(document).on("click.button.data-api","[data-toggle^=button]",function(b){var a=$(b.target); +if(!a.hasClass("btn")){a=a.closest(".btn"); +}a.button("toggle"); +}); +var Carousel=function(b,a){this.$element=$(b); +this.options=a; +if(this.options.pause==="hover"){this.$element.on("mouseenter",$.proxy(this.pause,this)).on("mouseleave",$.proxy(this.cycle,this)); +}}; +Carousel.prototype={cycle:function(a){if(!a){this.paused=false; +}if(this.options.interval&&!this.paused){this.interval=setInterval($.proxy(this.next,this),this.options.interval); +}return this; +},to:function(e){var a=this.$element.find(".item.active"),b=a.parent().children(),c=b.index(a),d=this; +if(e>(b.length-1)||e<0){return; +}if(this.sliding){return this.$element.one("slid",function(){d.to(e); +}); +}if(c===e){return this.pause().cycle(); +}return this.slide(e>c?"next":"prev",$(b[e])); +},pause:function(a){if(!a){this.paused=true; +}if(this.$element.find(".next, .prev").length&&$.support.transition.end){this.$element.trigger($.support.transition.end); +this.cycle(); +}clearInterval(this.interval); +this.interval=null; +return this; +},next:function(){if(this.sliding){return; +}return this.slide("next"); +},prev:function(){if(this.sliding){return; +}return this.slide("prev"); +},slide:function(h,b){var j=this.$element.find(".item.active"),a=b||j[h](),g=this.interval,i=h==="next"?"left":"right",c=h==="next"?"first":"last",d=this,f; +this.sliding=true; +if(g){this.pause(); +}a=a.length?a:this.$element.find(".item")[c](); +f=$.Event("slide",{relatedTarget:a[0],direction:i}); +if(a.hasClass("active")){return; +}if($.support.transition){this.$element.trigger(f); +if(f.isDefaultPrevented()){return; +}a.addClass(h); +if(a[0].offsetWidth){void a[0].offsetWidth; +}j.addClass(i); +a.addClass(i); +this.$element.one($.support.transition.end,function(){a.removeClass([h,i].join(" ")).addClass("active"); +j.removeClass(["active",i].join(" ")); +d.sliding=false; +setTimeout(function(){d.$element.trigger("slid"); +},0); +}); +}else{this.$element.trigger(f); +if(f.isDefaultPrevented()){return; +}j.removeClass("active"); +a.addClass("active"); +this.sliding=false; +this.$element.trigger("slid"); +}if(g){this.cycle(); +}return this; +}}; +$.fn.carousel=function(a){return this.each(function(){var e=$(this),d=e.data("carousel"),b=$.extend({},$.fn.carousel.defaults,typeof a==="object"&&a),c=typeof a==="string"?a:b.slide; +if(!d){e.data("carousel",(d=new Carousel(this,b))); +}if(typeof a==="number"){d.to(a); +}else{if(c){d[c](); +}else{if(b.interval){d.cycle(); +}}}}); +}; +$.fn.carousel.defaults={interval:5000,pause:"hover"}; +$.fn.carousel.Constructor=Carousel; +$(document).on("click.carousel.data-api","[data-slide]",function(f){var d=$(this),b,a=$(d.attr("data-target")||(b=d.attr("href"))&&b.replace(/.*(?=#[^\s]+$)/,"")),c=$.extend({},a.data(),d.data()); +a.carousel(c); +f.preventDefault(); +}); +var Charmax=function(b,a){this.init(b,a); +}; +Charmax.prototype={constructor:Charmax,init:function(b,a){this.element=b; +this.$element=$(b); +this.options=this.getOptions(a); +this.maxlength=parseInt(this.$element.attr("maxlength"),10); +this.$element.on("input.charmax",$.proxy(this.countCharsInput,this)); +this.$element.on("keydown.charmax",$.proxy(this.countCharsKeydown,this)); +},getOptions:function(a){a=$.extend({},$.fn.charmax.defaults,a,this.$element.data()); +return a; +},getCount:function getCount(){return this.element.value.length; +},countCharsInput:function countCharsInput(){this.$element.off(".charmax"); +this.$element.on("input.charmax",$.proxy(this.countChars,this)); +this.countChars.call(this); +},countCharsKeydown:function countCharsKeydown(){this.countChars.call(this); +},countChars:function countChars(){var a=this.getCount()-this.maxlength; +this.$element.attr("data-charmax-counter",(a+this.maxlength)+"/"+this.maxlength); +if(a<0){this.$element.trigger("underMaxlength",[a]); +}else{if(a>0){this.$element.trigger("overMaxlength",[a]); +}else{this.$element.trigger("atMaxlength"); +}}this.$element.trigger("charcounter",[a]); +}}; +$.fn.charmax=function(a){return this.each(function(){var d=$(this),c=d.data("charmax"),b=typeof a==="object"&&a; +if(d.attr("maxlength")!=="undefined"){if(!c){d.data("charmax",(c=new Charmax(this,b))); +}if(typeof a==="string"){c[a](); +}}}); +}; +$.fn.charmax.Constructor=Charmax; +$.fn.charmax.defaults={}; +$(window).on("load",function(){$("textarea[maxlength], input[maxlength]").not("[data-charmax='false']").each(function(){$(this).charmax(); +}); +}); +var Checkbox=function(a){this.$element=$(a); +}; +Checkbox.prototype.setState=function(b){var a=this.$element; +if(a.attr(b)===b){a.removeAttr(b); +a.parent(".checkbox-label").removeClass(b); +}else{a.attr(b,b); +a.parent(".checkbox-label").addClass(b); +}}; +Checkbox.prototype.toggle=function(a){if(this.$element.hasClass("partial")&&a!==true){this.$element.removeClass("partial"); +this.$element.removeClass("checked"); +this.$element.children().prop("checked",false); +}if(this.$element.children().prop("checked")){this.$element.addClass("checked"); +}else{this.$element.removeClass("checked"); +}if(this.$element.children().prop("disabled")){this.$element.addClass("disabled"); +}else{this.$element.removeClass("disabled"); +}}; +Checkbox.prototype.focus=function(){this.$element.addClass("focus"); +}; +Checkbox.prototype.blur=function(){this.$element.removeClass("focus"); +}; +$.fn.checkbox=function(a,b){return this.each(function(){var d=$(this),c; +d.data("checkbox",(c=new Checkbox(this))); +if(a==="toggle"){c.toggle(b); +}else{if(a==="focus"){c.focus(); +}else{if(a==="blur"){c.blur(); +}else{if(a){c.setState(a); +}}}}}); +}; +$.fn.checkbox.Constructor=Checkbox; +$(function(){$("body").on("change.checkbox.data-api","input[type=checkbox]:not(.css-input)",function(a){$(a.currentTarget).parent(".checkbox-label").checkbox("toggle"); +}).on("focus.checkbox.data-api","input[type=checkbox]:not(.css-input)",function(a){$(a.currentTarget).parent(".checkbox-label").checkbox("focus"); +}).on("blur.checkbox.data-api","input[type=checkbox]:not(.css-input)",function(a){$(a.currentTarget).parent(".checkbox-label").checkbox("blur"); +}); +$("input[type=checkbox]:not(.css-input)").each(function(){$(this).parent(".checkbox-label").checkbox("toggle",true); +}); +}); +var Collapse=function(b,a){this.$element=$(b); +this.options=$.extend({},$.fn.collapse.defaults,a); +if(this.options.parent){this.$parent=$(this.options.parent); +}if(this.options.toggle){this.toggle(); +}}; +Collapse.prototype={constructor:Collapse,dimension:function(){var a=this.$element.hasClass("width"); +return a?"width":"height"; +},show:function(){var d,a,c,b; +if(this.transitioning){return; +}d=this.dimension(); +a=$.camelCase(["scroll",d].join("-")); +c=this.$parent&&this.$parent.find(".in"); +if(c&&c.length){b=c.data("collapse"); +if(b&&b.transitioning){return; +}c.siblings("a").addClass("collapsed"); +c.prev().find(".accordion-toggle").addClass("collapsed"); +c.collapse("hide"); +if(!b){c.data("collapse",null); +}}this.$element[d](0); +this.transition("addClass",$.Event("show"),"shown"); +if($.support.transition){this.$element[d](this.$element[0][a]); +}},hide:function(){var a; +if(this.transitioning){return; +}a=this.dimension(); +this.reset(this.$element[a]()); +this.transition("removeClass",$.Event("hide"),"hidden"); +this.$element[a](0); +},reset:function(a){var b=this.dimension(); +a=a||"auto"; +void this.$element.removeClass("collapse")[b](a)[0].offsetWidth; +this.$element[a!==null?"addClass":"removeClass"]("collapse"); +return this; +},transition:function(e,b,c){var d=this,a=function(){if(b.type==="show"){d.reset(); +}d.transitioning=0; +d.$element.trigger(c); +}; +this.$element.trigger(b); +if(b.isDefaultPrevented()){return; +}this.transitioning=1; +this.$element[e]("in"); +if($.support.transition&&this.$element.hasClass("collapse")){this.$element.one($.support.transition.end,a); +}else{a(); +}},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"](); +}}; +$.fn.collapse=function(a){return this.each(function(){var d=$(this),c=d.data("collapse"),b=typeof a==="object"&&a; +if(!c){d.data("collapse",(c=new Collapse(this,b))); +}if(typeof a==="string"){c[a](); +}}); +}; +$.fn.collapse.defaults={toggle:true}; +$.fn.collapse.Constructor=Collapse; +$(document).on("click.collapse.data-api","[data-toggle=collapse]",function(f){var d=$(this),a,c=d.attr("data-target")||f.preventDefault()||(a=d.attr("href"))&&a.replace(/.*(?=#[^\s]+$)/,""),b=$(c).data("collapse")?"toggle":d.data(); +d[$(c).hasClass("in")?"addClass":"removeClass"]("collapsed"); +$(c).collapse(b); +}); +var toggle="[data-toggle='dropdown']",Dropdown=function(b){var a=$(b).on("click.dropdown.data-api",this.toggle); +$("html").on("click.dropdown.data-api",function(){a.parent().removeClass("open"); +}); +}; +function getParent(c){var a=c.attr("data-target"),b; +if(!a){a=c.attr("href"); +a=a&&/#/.test(a)&&a.replace(/.*(?=#[^\s]*$)/,""); +}b=$(a); +if(!b.length){(b=c.parent()); +}return b; +}function clearMenus(){$(toggle).each(function(){getParent($(this)).removeClass("open"); +}); +}Dropdown.prototype={constructor:Dropdown,toggle:function(){var c=$(this),b,a; +if(c.is(".disabled, :disabled")){return; +}b=getParent(c); +a=b.hasClass("open"); +clearMenus(); +if(!a){b.toggleClass("open"); +}c.focus(); +b.trigger("toggle.dropdown.data-api",[!a]); +return false; +},keydown:function(f){var d,g,c,b,a; +if(!/(38|40|27)/.test(f.keyCode)){return; +}d=$(this); +f.preventDefault(); +f.stopPropagation(); +if(d.is(".disabled, :disabled")){return; +}c=getParent(d); +b=c.hasClass("open"); +if(!b||(b&&f.keyCode===27)){return d.click(); +}g=$("[role=menu] li:not(.divider):visible a",c); +if(!g.length){return; +}a=g.index(g.filter(":focus")); +if(f.keyCode===38&&a>0){a--; +}if(f.keyCode===40&&a").appendTo(document.body); +this.$backdrop.click(this.options.backdrop==="static"?$.proxy(this.$element[0].focus,this.$element[0]):$.proxy(this.hide,this)); +if(a){void this.$backdrop[0].offsetWidth; +}this.$backdrop.addClass("in"); +if(a){this.$backdrop.one($.support.transition.end,d); +}else{d(); +}}else{if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in"); +if($.support.transition&&this.$element.hasClass("fade")){this.$backdrop.one($.support.transition.end,$.proxy(this.removeBackdrop,this)); +}else{this.removeBackdrop(); +}}else{if(d){d(); +}}}}}; +$.fn.modal=function(a){return this.each(function(){var d=$(this),c=d.data("modal"),b=$.extend({},$.fn.modal.defaults,d.data(),typeof a==="object"&&a); +if(!c){d.data("modal",(c=new Modal(this,b))); +}if(typeof a==="string"){c[a](); +}else{if(b.show){c.show(); +}}}); +}; +$.fn.modal.defaults={backdrop:true,keyboard:true,show:true}; +$.fn.modal.Constructor=Modal; +$(document).on("click.modal.data-api","[data-toggle='modal']",function(f){var d=$(this),b=d.attr("href"),a=$(d.attr("data-target")||(b&&b.replace(/.*(?=#[^\s]+$)/,""))),c=a.data("modal")?"toggle":$.extend({remote:!/#/.test(b)&&b},a.data(),d.data()); +f.preventDefault(); +a.modal(c).one("hide",function(){d.focus(); +}); +}); +var Tooltip=function(b,a){this.init("tooltip",b,a); +}; +Tooltip.prototype={constructor:Tooltip,init:function(d,c,b){var e,a; +this.type=d; +this.$element=$(c); +this.options=this.getOptions(b); +this.enabled=true; +if(this.options.trigger==="click"){this.$element.on("click."+this.type,this.options.selector,$.proxy(this.toggle,this)); +}else{if(this.options.trigger!=="manual"){e=this.options.trigger==="hover"?"mouseenter":"focus"; +a=this.options.trigger==="hover"?"mouseleave":"blur"; +this.$element.on(e+"."+this.type,this.options.selector,$.proxy(this.enter,this)); +this.$element.on(a+"."+this.type,this.options.selector,$.proxy(this.leave,this)); +}}if(this.options.selector){this._options=$.extend({},this.options,{trigger:"manual",selector:""}); +}else{this.fixTitle(); +}},getOptions:function(a){a=$.extend({},$.fn[this.type].defaults,a,this.$element.data()); +if(a.delay&&typeof a.delay==="number"){a.delay={show:a.delay,hide:a.delay}; +}return a; +},enter:function(b){var a=$(b.currentTarget)[this.type](this._options).data(this.type); +if(!a.options.delay||!a.options.delay.show){return a.show(); +}clearTimeout(this.timeout); +a.hoverState="in"; +this.timeout=setTimeout(function(){if(a.hoverState==="in"){a.show(); +}},a.options.delay.show); +return true; +},leave:function(b){var a=$(b.currentTarget)[this.type](this._options).data(this.type); +if(this.timeout){clearTimeout(this.timeout); +}if(!a.options.delay||!a.options.delay.hide){return a.hide(); +}a.hoverState="out"; +this.timeout=setTimeout(function(){if(a.hoverState==="out"){a.hide(); +}},a.options.delay.hide); +return true; +},show:function(){var e,c,h,b,g,d,f,i,a; +if(this.hasContent()&&this.enabled){e=this.tip(); +this.setContent(); +if(this.options.animation){e.addClass("fade"); +}if(typeof this.options.placement==="function"){d=this.options.placement.call(this,e[0],this.$element[0]); +}else{d=this.options.placement; +}if(typeof this.options.position==="function"){f=this.options.position(); +}else{if(typeof this.options.position==="string"&&$.inArray(this.options.position,["static","relative","absolute","fixed","inherit"])>=0){f=this.options.position; +}else{f="static"; +}}c=/in/.test(d); +e.detach().css({top:0,left:0,display:"block"}).insertAfter(this.$element); +a=this.options.container===""?"":$(this.options.container); +if(a.length){e.appendTo(a); +}else{e.insertAfter(this.$element); +}h=this.getPosition(c); +if(f==="fixed"){e.addClass("tooltip-fixed"); +}b=e[0].offsetWidth; +g=e[0].offsetHeight; +switch(c?d.split(" ")[1]:d){case"bottom":i={top:h.top+h.height,left:h.left+h.width/2-b/2}; +break; +case"top":i={top:h.top-g,left:h.left+h.width/2-b/2}; +break; +case"left":i={top:h.top+h.height/2-g/2,left:h.left-b}; +break; +case"right":i={top:h.top+h.height/2-g/2,left:h.left+h.width}; +break; +}e.offset(i).addClass(d).addClass("in"); +}},setContent:function(){var b=this.tip(),a=this.getTitle(); +b.find(".tooltip-inner")[this.options.html?"html":"text"](a); +b.removeClass("fade in top bottom left right"); +},hide:function(){var a=this.tip(); +a.removeClass("in"); +function b(){var c=setTimeout(function(){a.off($.support.transition.end).detach(); +},500); +a.one($.support.transition.end,function(){clearTimeout(c); +a.detach(); +}); +}if($.support.transition&&this.$tip.hasClass("fade")){b(); +}else{a.detach(); +}return this; +},fixTitle:function(){var a=this.$element; +if(a.attr("title")||typeof(a.attr("data-original-title"))!=="string"){a.attr("data-original-title",a.attr("title")||"").attr("title",""); +}},hasContent:function(){return this.getTitle(); +},getPosition:function(a){return $.extend({},(a?{top:0,left:0}:this.$element.offset()),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight}); +},getTitle:function(){var c,a=this.$element,b=this.options; +c=a.attr("data-original-title")||(typeof b.title==="function"?b.title.call(a[0]):b.title); +return c; +},tip:function(){var a; +if(this.$tip){a=this.$tip; +}else{a=$(this.options.template); +this.$tip=a; +}return a; +},validate:function(){if(!this.$element[0].parentNode){this.hide(); +this.$element=null; +this.options=null; +}},enable:function(){this.enabled=true; +},disable:function(){this.enabled=false; +},toggleEnabled:function(){this.enabled=!this.enabled; +},toggle:function(b){var a=(b)?$(b.currentTarget)[this.type](this._options).data(this.type):this; +if(a.tip().hasClass("in")){a.hide(); +}else{a.show(); +}},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type); +}}; +$.fn.tooltip=function(a){return this.each(function(){var d=$(this),c=d.data("tooltip"),b=typeof a==="object"&&a; +if(!c){d.data("tooltip",(c=new Tooltip(this,b))); +}if(typeof a==="string"){c[a](); +}}); +}; +$.fn.tooltip.Constructor=Tooltip; +$.fn.tooltip.defaults={animation:true,placement:"top",position:"static",selector:false,template:"
",trigger:"hover",title:"",delay:0,html:false,container:"body"}; +var Popover=function(b,a){this.init("popover",b,a); +}; +Popover.prototype=$.extend({},$.fn.tooltip.Constructor.prototype,{constructor:Popover,setContent:function(){var c=this.tip(),b=this.getTitle(),a=this.getContent(); +c.find(".popover-title")[this.options.html?"html":"text"](b); +c.find(".popover-content")[this.options.html?"html":"text"](a); +c.removeClass("fade top bottom left right in"); +},hasContent:function(){return this.getTitle()||this.getContent(); +},getContent:function(){var b,a=this.$element,c=this.options; +b=a.attr("data-content")||(typeof c.content==="function"?c.content.call(a[0]):c.content); +return b; +},tip:function(){if(!this.$tip){this.$tip=$(this.options.template); +}return this.$tip; +},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type); +}}); +$.fn.popover=function(a){return this.each(function(){var d=$(this),c=d.data("popover"),b=typeof a==="object"&&a; +if(!c){d.data("popover",(c=new Popover(this,b))); +}if(typeof a==="string"){c[a](); +}}); +}; +$.fn.popover.Constructor=Popover; +$.fn.popover.defaults=$.extend({},$.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:"

"}); +var Radio=function(a){this.$element=$(a); +}; +Radio.prototype.setState=function(b){var a=this.$element; +if(a.attr(b)===b){a.removeAttr(b); +a.parent(".radio-label").removeClass(b); +}else{a.attr(b,b); +a.parent(".radio-label").addClass(b); +}}; +Radio.prototype.toggle=function(){var c=$('input[type=radio][name="'+this.$element.children().attr("name")+'"]'),a=c.parent(".radio-label"),b=c.length-1,d; +if(b>=0){do{d=$(a[b]); +if(c[b].checked){d.addClass("checked"); +}else{d.removeClass("checked"); +}if(c[b].disabled){d.addClass("disabled"); +}else{d.removeClass("disabled"); +}}while(b--); +}}; +Radio.prototype.focus=function(){this.$element.addClass("focus"); +}; +Radio.prototype.blur=function(){this.$element.removeClass("focus"); +}; +$.fn.radio=function(a){return this.each(function(){var c=$(this),b; +c.data("radio",(b=new Radio(this))); +if(a==="toggle"){b.toggle(); +}else{if(a==="focus"){b.focus(); +}else{if(a==="blur"){b.blur(); +}else{if(a){b.setState(a); +}}}}}); +}; +$.fn.radio.Constructor=Radio; +$(function(){$("body").on("change.radio.data-api","input[type=radio]:not(.css-input)",function(a){$(a.currentTarget).parent(".radio-label").radio("toggle"); +}).on("focus.radio.data-api","input[type=radio]:not(.css-input)",function(a){$(a.currentTarget).parent(".radio-label").radio("focus"); +}).on("blur.radio.data-api","input[type=radio]:not(.css-input)",function(a){$(a.currentTarget).parent(".radio-label").radio("blur"); +}); +$("input[type=radio]:not(.css-input)").each(function(){$(this).parent(".radio-label").radio("toggle"); +}); +}); +!function(c){if(typeof ko!=="undefined"&&ko.bindingHandlers&&!ko.bindingHandlers.multiselect){ko.bindingHandlers.multiselect={init:function(h,i,j,g,e){var k=j().selectedOptions; +var f=ko.utils.unwrapObservable(i()); +c(h).multiselect(f); +if(a(k)){c(h).multiselect("select",ko.utils.unwrapObservable(k)); +k.subscribe(function(n){var l=[],m=[]; +d(n,function(o){switch(o.status){case"added":l.push(o.value); +break; +case"deleted":m.push(o.value); +break; +}}); +if(l.length>0){c(h).multiselect("select",l); +}if(m.length>0){c(h).multiselect("deselect",m); +}},null,"arrayChange"); +}},update:function(j,k,l,i,e){var h=l().options,g=c(j).data("multiselect"),f=ko.utils.unwrapObservable(k()); +if(a(h)){h.subscribe(function(m){c(j).multiselect("rebuild"); +}); +}if(!g){c(j).multiselect(f); +}else{g.updateOriginalOptions(); +}}}; +}function a(e){return ko.isObservable(e)&&!(e.destroyAll===undefined); +}function d(g,f){for(var e=0; +e'; +}else{if(f.length==c("option",c(e)).length){return this.allSelectedText+' '; +}else{if(f.length>this.numberDisplayed){return f.length+" "+this.nSelectedText+' '; +}else{var g=""; +f.each(function(){var h=(c(this).attr("label")!==undefined)?c(this).attr("label"):c(this).html(); +g+=h+", "; +}); +return g.substr(0,g.length-2)+' '; +}}}},buttonTitle:function(f,e){if(f.length===0){return this.nonSelectedText; +}else{var g=""; +f.each(function(){g+=c(this).text()+", "; +}); +return g.substr(0,g.length-2); +}},label:function(e){return c(e).attr("label")||c(e).html(); +},onChange:function(e,f){},onDropdownShow:function(e){},onDropdownHide:function(e){},onDropdownShown:function(e){},onDropdownHidden:function(e){},buttonClass:"select-box",buttonWidth:"auto",buttonContainer:'
',dropRight:false,selectedClass:"active",maxHeight:false,checkboxName:false,includeSelectAllOption:false,includeSelectAllIfMoreThan:0,selectAllText:" Select all",selectAllValue:"multiselect-all",selectAllName:false,enableFiltering:false,enableCaseInsensitiveFiltering:false,enableClickableOptGroups:false,filterPlaceholder:"Search",filterBehavior:"text",includeFilterClearBtn:true,preventInputChangeEvent:false,nonSelectedText:"None selected",nSelectedText:"selected",allSelectedText:"All selected",numberDisplayed:3,disableIfEmpty:false,templates:{button:'',ul:'',filter:'
  • ',filterClearBtn:'',li:'
  • ',divider:'
  • ',liGroup:'
  • '}},constructor:b,buildContainer:function(){this.$container=c(this.options.buttonContainer); +this.$container.on("show.bs.dropdown",this.options.onDropdownShow); +this.$container.on("hide.bs.dropdown",this.options.onDropdownHide); +this.$container.on("shown.bs.dropdown",this.options.onDropdownShown); +this.$container.on("hidden.bs.dropdown",this.options.onDropdownHidden); +},buildButton:function(){this.$button=c(this.options.templates.button).addClass(this.options.buttonClass); +if(this.$select.prop("disabled")){this.disable(); +}else{this.enable(); +}if(this.options.buttonWidth&&this.options.buttonWidth!=="auto"){this.$button.css({width:this.options.buttonWidth}); +this.$container.css({width:this.options.buttonWidth}); +}var e=this.$select.attr("tabindex"); +if(e){this.$button.attr("tabindex",e); +}this.$container.prepend(this.$button); +},buildDropdown:function(){this.$ul=c(this.options.templates.ul); +if(this.options.dropRight){this.$ul.addClass("pull-right"); +}if(this.options.maxHeight){this.$ul.css({"max-height":this.options.maxHeight+"px","overflow-y":"auto","overflow-x":"hidden"}); +}this.$container.append(this.$ul); +},selectMultiOptions:function(e){var i=e.prop("checked")||false; +if(i){var h=e.parents("li:last").siblings('li[class="active"]:first'); +var g=e.parents("li").index(); +var f=h.index(); +if(g>f){e.parents("li:last").prevUntil(h).each(function(){c(this).find("input:first").prop("checked",true).trigger("change"); +}); +}else{e.parents("li:last").nextUntil(h).each(function(){c(this).find("input:first").prop("checked",true).trigger("change"); +}); +}}},buildDropdownOptions:function(){this.$select.children().each(c.proxy(function(g,h){var f=c(h); +var e=f.prop("tagName").toLowerCase(); +if(f.prop("value")===this.options.selectAllValue){return; +}if(e==="optgroup"){this.createOptgroup(h); +}else{if(e==="option"){if(f.data("role")==="divider"){this.createDivider(); +}else{this.createOptionValue(h); +}}}},this)); +c("li input",this.$ul).on("change",c.proxy(function(i){var e=c(i.target); +var h=e.prop("checked")||false; +var f=e.val()===this.options.selectAllValue; +if(this.options.selectedClass){if(h){e.closest("li").addClass(this.options.selectedClass); +}else{e.closest("li").removeClass(this.options.selectedClass); +}}var j=e.val(); +var k=this.getOptionByValue(j); +var l=c("option",this.$select).not(k); +var g=c("input",this.$container).not(e); +if(f){if(h){this.selectAll(); +}else{this.deselectAll(); +}}if(!f){if(h){k.prop("selected",true); +if(this.options.multiple){k.prop("selected",true); +}else{if(this.options.selectedClass){c(g).closest("li").removeClass(this.options.selectedClass); +}c(g).prop("checked",false); +l.prop("selected",false); +this.$button.click(); +}if(this.options.selectedClass==="active"){l.closest("a").css("outline",""); +}}else{k.prop("selected",false); +}}this.$select.change(); +this.updateButtonText(); +this.updateSelectAll(); +this.options.onChange(k,h); +if(this.options.preventInputChangeEvent){return false; +}},this)); +c("li a",this.$ul).on("touchstart click",c.proxy(function(g){g.stopPropagation(); +g.preventDefault(); +var e=c(g.target); +var f=e.prop("checked",!e.prop("checked")).find("input:first"); +f.prop("checked",!f.prop("checked")); +f.change(); +if(g.shiftKey){var f=e.prop("checked",true).find("input:first"); +f.prop("checked",true); +f.change(); +this.selectMultiOptions(e); +}e.blur(); +},this)); +this.$container.off("keydown.multiselect").on("keydown.multiselect",c.proxy(function(h){if(c('input[type="text"]',this.$container).is(":focus")){return; +}if(h.keyCode===9&&this.$container.hasClass("open")){this.$button.click(); +}else{var i=c(this.$container).find("li:not(.divider):not(.disabled) a").filter(":visible"); +if(!i.length){return; +}var e=i.index(i.filter(":focus")); +if(h.keyCode===38&&e>0){e--; +}else{if(h.keyCode===40&&e").attr("type",f); +if(this.options.checkboxName){e.attr("name",this.options.checkboxName); +}j.append(e); +var g=m.prop("selected")||false; +e.val(l); +if(l===this.options.selectAllValue){i.addClass("multiselect-item multiselect-all"); +e.parent().parent().addClass("multiselect-all"); +}j.append(" "+k); +j.attr("title",m.attr("title")); +this.$ul.append(i); +if(m.is(":disabled")){e.attr("disabled","disabled").prop("disabled",true).closest("a").attr("tabindex","-1").closest("li").addClass("disabled"); +}e.prop("checked",g); +if(g&&this.options.selectedClass){e.closest("li").addClass(this.options.selectedClass); +}},createDivider:function(f){var e=c(this.options.templates.divider); +this.$ul.append(e); +},createOptgroup:function(e){var g=c(e).prop("label"); +var f=c(this.options.templates.liGroup); +c("label",f).text(g); +if(this.options.enableClickableOptGroups){f.addClass("multiselect-group-clickable"); +}this.$ul.append(f); +if(c(e).is(":disabled")){f.addClass("disabled"); +}c("option",e).each(c.proxy(function(h,i){this.createOptionValue(i); +},this)); +},buildSelectAll:function(){var e=this.hasSelectAll(); +if(!e&&this.options.includeSelectAllOption&&this.options.multiple&&c("option",this.$select).length>this.options.includeSelectAllIfMoreThan){if(this.options.includeSelectAllDivider){this.$ul.prepend(c(this.options.templates.divider)); +}var g=c(this.options.templates.li); +c("label",g).addClass("checkbox-label"); +if(this.options.selectAllName){c("label",g).append(''); +}else{c("label",g).append(''); +}var f=c("input",g); +f.val(this.options.selectAllValue); +g.addClass("multiselect-item multiselect-all"); +f.parent().parent().addClass("multiselect-all"); +c("label",g).append(" "+this.options.selectAllText); +this.$ul.prepend(g); +f.prop("checked",false); +}},buildFilter:function(){if(this.options.enableFiltering||this.options.enableCaseInsensitiveFiltering){var f=Math.max(this.options.enableFiltering,this.options.enableCaseInsensitiveFiltering); +if(this.$select.find("option").length>=f){this.$filter=c(this.options.templates.filter); +c("input",this.$filter).attr("placeholder",this.options.filterPlaceholder); +if(this.options.includeFilterClearBtn){var e=c(this.options.templates.filterClearBtn); +e.on("click",c.proxy(function(g){clearTimeout(this.searchTimeout); +this.$filter.find(".multiselect-search").val(""); +this.$filter.find(".input-group").removeClass("filtered"); +c("li",this.$ul).show().removeClass("filter-hidden"); +this.updateSelectAll(); +},this)); +this.$filter.find(".input-group").append(e); +}this.$ul.prepend(this.$filter); +this.$filter.val(this.query).on("click",function(g){g.stopPropagation(); +}).on("input keydown",c.proxy(function(i){if(i.which===13){i.preventDefault(); +}if(i.keyCode===38||i.keyCode===40){var j=c(this.$container).find("li:not(.divider):not(.disabled) a").filter(":visible"); +if(!j.length){return; +}var g=j.index(j.filter(":focus")); +if(i.keyCode===38&&g>0){g--; +}else{if(i.keyCode===40&&g-1){p=true; +}else{if(m.indexOf(this.query)>-1){p=true; +}}c(o).toggle(p).toggleClass("filter-hidden",!p); +if(c(this).hasClass("multiselect-group")){k=o; +l=p; +}else{if(p){c(k).show().removeClass("filter-hidden"); +}if(!p&&l){c(o).show().removeClass("filter-hidden"); +}}}},this)); +}this.updateSelectAll(); +},this),300,this); +},this)); +}}},destroy:function(){this.$container.remove(); +this.$select.show(); +this.$select.data("multiselect",null); +},refresh:function(){c("option",this.$select).each(c.proxy(function(e,f){var g=c("li input",this.$ul).filter(function(){return c(this).val()===c(f).val(); +}); +if(c(f).is(":selected")){g.prop("checked",true); +if(this.options.selectedClass){g.closest("li").addClass(this.options.selectedClass); +}}else{g.prop("checked",false); +if(this.options.selectedClass){g.closest("li").removeClass(this.options.selectedClass); +}}if(c(f).is(":disabled")){g.attr("disabled","disabled").prop("disabled",true).closest("li").addClass("disabled"); +}else{g.prop("disabled",false).closest("li").removeClass("disabled"); +}},this)); +this.updateButtonText(); +this.updateSelectAll(); +},select:function(j,k){if(!c.isArray(j)){j=[j]; +}for(var e=0; +e").attr({label:k.label||"Group "+e}); +d(k.children,function(l){i.append(c("
    + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/current/topic-partition.js.html b/current/topic-partition.js.html new file mode 100644 index 00000000..802e3465 --- /dev/null +++ b/current/topic-partition.js.html @@ -0,0 +1,185 @@ + + + + + JSDoc: Source: topic-partition.js + + + + + + + + + + + + + + + +
    +
    + +
    +

    Source: topic-partition.js

    + + + + + + +
    +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var Topic = require('./topic');
    +
    +module.exports = TopicPartition;
    +
    +/**
    + * Map an array of topic partition js objects to real topic partition objects.
    + *
    + * @param array The array of topic partition raw objects to map to topic
    + *              partition objects
    + */
    +TopicPartition.map = function(array) {
    +  return array.map(function(element) {
    +    return TopicPartition.create(element);
    +  });
    +};
    +
    +/**
    + * Take a topic partition javascript object and convert it to the class.
    + * The class will automatically convert offset identifiers to special constants
    + *
    + * @param element The topic partition raw javascript object
    + */
    +TopicPartition.create = function(element) {
    +  // Just ensure we take something that can have properties. The topic partition
    +  // class will
    +  element = element || {};
    +  return new TopicPartition(element.topic, element.partition, element.offset);
    +};
    +
    +/**
    + * Create a topic partition. Just does some validation and decoration
    + * on topic partitions provided.
    + *
    + * Goal is still to behave like a plain javascript object but with validation
    + * and potentially some extra methods
    + */
    +function TopicPartition(topic, partition, offset) {
    +  if (!(this instanceof TopicPartition)) {
    +    return new TopicPartition(topic, partition, offset);
    +  }
    +
    +  // Validate that the elements we are iterating over are actual topic partition
    +  // js objects. They do not need an offset, but they do need partition
    +  if (!topic) {
    +    throw new TypeError('"topic" must be a string and must be set');
    +  }
    +
    +  if (partition === null || partition === undefined) {
    +    throw new TypeError('"partition" must be a number and must set');
    +  }
    +
    +  // We can just set topic and partition as they stand.
    +  this.topic = topic;
    +  this.partition = partition;
    +
    +  if (offset === undefined || offset === null) {
    +    this.offset = Topic.OFFSET_STORED;
    +  } else if (typeof offset === 'string') {
    +    switch (offset.toLowerCase()) {
    +      case 'earliest':
    +      case 'beginning':
    +        this.offset = Topic.OFFSET_BEGINNING;
    +        break;
    +      case 'latest':
    +      case 'end':
    +        this.offset = Topic.OFFSET_END;
    +        break;
    +      case 'stored':
    +        this.offset = Topic.OFFSET_STORED;
    +        break;
    +      default:
    +        throw new TypeError('"offset", if provided as a string, must be beginning, end, or stored.');
    +    }
    +  } else if (typeof offset === 'number') {
    +    this.offset = offset;
    +  } else {
    +    throw new TypeError('"offset" must be a special string or number if it is set');
    +  }
    +}
    +
    +
    +
    + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/current/topic.js.html b/current/topic.js.html new file mode 100644 index 00000000..86ecd70c --- /dev/null +++ b/current/topic.js.html @@ -0,0 +1,139 @@ + + + + + JSDoc: Source: topic.js + + + + + + + + + + + + + + + +
    +
    + +
    +

    Source: topic.js

    + + + + + + +
    +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var librdkafka = require('../librdkafka');
    +
    +module.exports = Topic;
    +
    +var topicKey = 'RdKafka::Topic::';
    +var topicKeyLength = topicKey.length;
    +
    +// Take all of the topic special codes from librdkafka and add them
    +// to the object
    +// You can find this list in the C++ code at
    +// https://github.com/edenhill/librdkafka/blob/master/src-cpp/rdkafkacpp.h#L1250
    +for (var key in librdkafka.topic) {
    +  // Skip it if it doesn't start with ErrorCode
    +  if (key.indexOf('RdKafka::Topic::') !== 0) {
    +    continue;
    +  }
    +
    +  // Replace/add it if there are any discrepancies
    +  var newKey = key.substring(topicKeyLength);
    +  Topic[newKey] = librdkafka.topic[key];
    +}
    +
    +/**
    + * Create a topic. Just returns the string you gave it right now.
    + *
    + * Looks like a class, but all it does is return the topic name.
    + * This is so that one day if there are interface changes that allow
    + * different use of topic parameters, we can just add to this constructor and
    + * have it return something richer
    + */
    +function Topic(topicName) {
    +  return topicName;
    +}
    +
    +
    +
    + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/current/tutorial-consumer-flow.html b/current/tutorial-consumer-flow.html new file mode 100644 index 00000000..4ac9b639 --- /dev/null +++ b/current/tutorial-consumer-flow.html @@ -0,0 +1,169 @@ + + + + + JSDoc: Tutorial: consumer-flow + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: consumer-flow

    + +
    + +
    + + +

    consumer-flow

    +
    + +
    +

    Connecting to a Kafka Consumer is easy. Let's try to connect to one using +the Flowing implementation

    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var Kafka = require('../');
    +
    +var consumer = new Kafka.KafkaConsumer({
    +  //'debug': 'all',
    +  'metadata.broker.list': 'localhost:9092',
    +  'group.id': 'node-rdkafka-consumer-flow-example',
    +  'enable.auto.commit': false
    +});
    +
    +var topicName = 'test';
    +
    +//logging debug messages, if debug is enabled
    +consumer.on('event.log', function(log) {
    +  console.log(log);
    +});
    +
    +//logging all errors
    +consumer.on('event.error', function(err) {
    +  console.error('Error from consumer');
    +  console.error(err);
    +});
    +
    +//counter to commit offsets every numMessages are received
    +var counter = 0;
    +var numMessages = 5;
    +
    +consumer.on('ready', function(arg) {
    +  console.log('consumer ready.' + JSON.stringify(arg));
    +
    +  consumer.subscribe([topicName]);
    +  //start consuming messages
    +  consumer.consume();
    +});
    +
    +
    +consumer.on('data', function(m) {
    +  counter++;
    +
    +  //committing offsets every numMessages
    +  if (counter % numMessages === 0) {
    +    console.log('calling commit');
    +    consumer.commit(m);
    +  }
    +
    +  // Output the actual message contents
    +  console.log(JSON.stringify(m));
    +  console.log(m.value.toString());
    +
    +});
    +
    +consumer.on('disconnected', function(arg) {
    +  console.log('consumer disconnected. ' + JSON.stringify(arg));
    +});
    +
    +//starting the consumer
    +consumer.connect();
    +
    +//stopping this example after 30s
    +setTimeout(function() {
    +  consumer.disconnect();
    +}, 30000);
    +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/current/tutorial-consumer.html b/current/tutorial-consumer.html new file mode 100644 index 00000000..25b54832 --- /dev/null +++ b/current/tutorial-consumer.html @@ -0,0 +1,138 @@ + + + + + JSDoc: Tutorial: consumer + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: consumer

    + +
    + +
    + + +

    consumer

    +
    + +
    +

    Connecting to a Kafka Consumer is easy. Let's try to connect to one using +the Stream implementation

    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var Transform = require('stream').Transform;
    +
    +var Kafka = require('../');
    +
    +var stream = Kafka.KafkaConsumer.createReadStream({
    +  'metadata.broker.list': 'localhost:9092',
    +  'group.id': 'librd-test',
    +  'socket.keepalive.enable': true,
    +  'enable.auto.commit': false
    +}, {}, {
    +  topics: 'test',
    +  waitInterval: 0,
    +  objectMode: false
    +});
    +
    +stream.on('error', function(err) {
    +  if (err) console.log(err);
    +  process.exit(1);
    +});
    +
    +stream
    +  .pipe(process.stdout);
    +
    +stream.on('error', function(err) {
    +  console.log(err);
    +  process.exit(1);
    +});
    +
    +stream.consumer.on('event.error', function(err) {
    +  console.log(err);
    +})
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/current/tutorial-docker-alpine.html b/current/tutorial-docker-alpine.html new file mode 100644 index 00000000..1bd8d263 --- /dev/null +++ b/current/tutorial-docker-alpine.html @@ -0,0 +1,122 @@ + + + + + JSDoc: Tutorial: docker-alpine + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: docker-alpine

    + +
    + +
    + + +

    docker-alpine

    +
    + +
    +

    When using docker to install node-rdkafka, you need to make sure you install appropriate library dependencies. Alpine linux is a lighter weight version of linux and does not come with the same base libraries as other distributions (like glibc).

    +

    You can see some of the differences here: https://linuxacademy.com/blog/cloud/alpine-linux-and-docker/

    +
    FROM node:14-alpine
    +
    +RUN apk --no-cache add \
    +      bash \
    +      g++ \
    +      ca-certificates \
    +      lz4-dev \
    +      musl-dev \
    +      cyrus-sasl-dev \
    +      openssl-dev \
    +      make \
    +      python3
    +
    +RUN apk add --no-cache --virtual .build-deps gcc zlib-dev libc-dev bsd-compat-headers py-setuptools bash
    +
    +# Create app directory
    +RUN mkdir -p /usr/local/app
    +
    +# Move to the app directory
    +WORKDIR /usr/local/app
    +
    +# Install node-rdkafka
    +RUN npm install node-rdkafka
    +# Copy package.json first to check if an npm install is needed
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/current/tutorial-high-level-producer.html b/current/tutorial-high-level-producer.html new file mode 100644 index 00000000..30db0cf4 --- /dev/null +++ b/current/tutorial-high-level-producer.html @@ -0,0 +1,126 @@ + + + + + JSDoc: Tutorial: high-level-producer + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: high-level-producer

    + +
    + +
    + + +

    high-level-producer

    +
    + +
    +
    var Kafka = require('../');
    +
    +var producer = new Kafka.HighLevelProducer({
    +  'metadata.broker.list': 'localhost:9092',
    +});
    +
    +// Throw away the keys
    +producer.setKeySerializer(function(v) {
    +  return new Promise((resolve, reject) => {
    +    setTimeout(() => {
    +      resolve(null);
    +    }, 20);
    +  });
    +});
    +
    +// Take the message field
    +producer.setValueSerializer(function(v) {
    +  return Buffer.from(v.message);
    +});
    +
    +producer.connect(null, function() {
    +  producer.produce('test', null, {
    +    message: 'alliance4ever',
    +  }, null, Date.now(), function(err, offset) {
    +    // The offset if our acknowledgement level allows us to receive delivery offsets
    +    setImmediate(function() {
    +      producer.disconnect();
    +    });
    +  });
    +});
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/current/tutorial-metadata.html b/current/tutorial-metadata.html new file mode 100644 index 00000000..fbfe370e --- /dev/null +++ b/current/tutorial-metadata.html @@ -0,0 +1,121 @@ + + + + + JSDoc: Tutorial: metadata + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: metadata

    + +
    + +
    + + +

    metadata

    +
    + +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var Kafka = require('../');
    +
    +var producer = new Kafka.Producer({
    +  'metadata.broker.list': 'localhost:9092',
    +  'client.id': 'hey',
    +  'compression.codec': 'snappy'
    +});
    +
    +producer.connect()
    +  .on('ready', function(i, metadata) {
    +    console.log(i);
    +    console.log(metadata);
    +  })
    +  .on('event.error', function(err) {
    +    console.log(err);
    +  });
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/current/tutorial-producer-cluster.html b/current/tutorial-producer-cluster.html new file mode 100644 index 00000000..e027a763 --- /dev/null +++ b/current/tutorial-producer-cluster.html @@ -0,0 +1,197 @@ + + + + + JSDoc: Tutorial: producer-cluster + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: producer-cluster

    + +
    + +
    + + +

    producer-cluster

    +
    + +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var cluster = require('cluster');
    +var numCPUs = 6;
    +var Kafka = require('../');
    +
    +if (cluster.isMaster) {
    +  // Fork workers.
    +  for (var i = 0; i < numCPUs; i++) {
    +    cluster.fork();
    +  }
    +
    +  var exited_workers = 0;
    +
    +  cluster.on('exit', function(worker, code, signal) {
    +    exited_workers++;
    +    if (exited_workers === numCPUs - 1) {
    +      process.exit();
    +    }
    +  });
    +} else {
    +  // Configure client
    +  var producer = new Kafka.Producer({
    +    'client.id': 'kafka',
    +    'metadata.broker.list': 'localhost:9092',
    +    'compression.codec': 'none',
    +    'retry.backoff.ms': 200,
    +    'message.send.max.retries': 10,
    +    'socket.keepalive.enable': true,
    +    'queue.buffering.max.messages': 100000,
    +    'queue.buffering.max.ms': 1000,
    +    'batch.num.messages': 1000000,
    +    'dr_cb': true
    +  });
    +
    +  producer.setPollInterval(100);
    +
    +  var total = 0;
    +  var totalSent = 0;
    +  var max = 20000;
    +  var errors = 0;
    +  var started = Date.now();
    +
    +  var sendMessage = function() {
    +    var ret = producer.sendMessage({
    +      topic: 'librdtesting-01',
    +      message: Buffer.from('message ' + total)
    +    }, function() {
    +    });
    +    total++;
    +    if (total >= max) {
    +    } else {
    +      setImmediate(sendMessage);
    +    }
    +  };
    +
    +  var verified_received = 0;
    +  var exitNextTick = false;
    +  var errorsArr = [];
    +
    +  var t = setInterval(function() {
    +    producer.poll();
    +
    +    if (exitNextTick) {
    +      clearInterval(t);
    +      return setTimeout(function() {
    +        console.log('[%d] Received: %d, Errors: %d, Total: %d', process.pid, verified_received, errors, total);
    +        // console.log('[%d] Finished sending %d in %d seconds', process.pid, total, parseInt((Date.now() - started) / 1000));
    +        if (errors > 0) {
    +          console.error(errorsArr[0]);
    +          return process.exitCode = 1;
    +        }
    +        process.exitCode = 0;
    +        setTimeout(process.exit, 1000);
    +      }, 2000);
    +    }
    +
    +    if (verified_received + errors === max) {
    +      exitNextTick = true;
    +    }
    +
    +  }, 1000);
    +  producer.connect()
    +    .on('event.error', function(e) {
    +      errors++;
    +      errorsArr.push(e);
    +    })
    +    .on('delivery-report', function() {
    +      verified_received++;
    +    })
    +    .on('ready', sendMessage);
    +
    +
    +}
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/current/tutorial-producer_.html b/current/tutorial-producer_.html new file mode 100644 index 00000000..37ae5730 --- /dev/null +++ b/current/tutorial-producer_.html @@ -0,0 +1,167 @@ + + + + + JSDoc: Tutorial: producer + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: producer

    + +
    + +
    + + +

    producer

    +
    + +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var Kafka = require('../');
    +
    +var producer = new Kafka.Producer({
    +  //'debug' : 'all',
    +  'metadata.broker.list': 'localhost:9092',
    +  'dr_cb': true  //delivery report callback
    +});
    +
    +var topicName = 'test';
    +
    +//logging debug messages, if debug is enabled
    +producer.on('event.log', function(log) {
    +  console.log(log);
    +});
    +
    +//logging all errors
    +producer.on('event.error', function(err) {
    +  console.error('Error from producer');
    +  console.error(err);
    +});
    +
    +//counter to stop this sample after maxMessages are sent
    +var counter = 0;
    +var maxMessages = 10;
    +
    +producer.on('delivery-report', function(err, report) {
    +  console.log('delivery-report: ' + JSON.stringify(report));
    +  counter++;
    +});
    +
    +//Wait for the ready event before producing
    +producer.on('ready', function(arg) {
    +  console.log('producer ready.' + JSON.stringify(arg));
    +
    +  for (var i = 0; i < maxMessages; i++) {
    +    var value = Buffer.from('value-' +i);
    +    var key = "key-"+i;
    +    // if partition is set to -1, librdkafka will use the default partitioner
    +    var partition = -1;
    +    var headers = [
    +      { header: "header value" }
    +    ]
    +    producer.produce(topicName, partition, value, key, Date.now(), "", headers);
    +  }
    +
    +  //need to keep polling for a while to ensure the delivery reports are received
    +  var pollLoop = setInterval(function() {
    +      producer.poll();
    +      if (counter === maxMessages) {
    +        clearInterval(pollLoop);
    +        producer.disconnect();
    +      }
    +    }, 1000);
    +
    +});
    +
    +producer.on('disconnected', function(arg) {
    +  console.log('producer disconnected. ' + JSON.stringify(arg));
    +});
    +
    +//starting the producer
    +producer.connect();
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9a432ac7..a17f94a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "node-rdkafka", - "version": "v2.17.0", - "lockfileVersion": 2, + "version": "v2.18.0", + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "node-rdkafka", - "version": "v2.17.0", + "version": "v2.18.0", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -26,9 +26,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -37,122 +37,37 @@ "node": ">=6.0.0" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "dev": true, "dependencies": { + "@gar/promisify": "^1.1.3", "semver": "^7.3.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, - "optional": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=14" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@tootallnate/once": { @@ -165,9 +80,9 @@ } }, "node_modules/@types/linkify-it": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.4.tgz", - "integrity": "sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", + "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==", "dev": true }, "node_modules/@types/markdown-it": { @@ -181,9 +96,9 @@ } }, "node_modules/@types/mdurl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.4.tgz", - "integrity": "sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", + "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==", "dev": true }, "node_modules/abbrev": { @@ -330,12 +245,15 @@ "dev": true }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bindings": { @@ -381,26 +299,32 @@ "dev": true }, "node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "dev": true, "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", - "minipass": "^7.0.3", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", "p-map": "^4.0.0", - "ssri": "^10.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "unique-filename": "^2.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/cacache/node_modules/brace-expansion": { @@ -413,49 +337,34 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10" } }, "node_modules/camelcase": { @@ -633,20 +542,6 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -759,12 +654,6 @@ "domelementtype": "1" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -803,9 +692,9 @@ "dev": true }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -877,53 +766,16 @@ "flat": "cli.js" } }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "dependencies": { - "minipass": "^7.0.3" + "minipass": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 8" } }, "node_modules/fs.realpath": { @@ -1134,6 +986,12 @@ "node": ">=8" } }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1150,11 +1008,18 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } }, "node_modules/is-binary-path": { "version": "2.1.0", @@ -1246,24 +1111,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1285,6 +1132,12 @@ "xmlcreate": "^2.0.4" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, "node_modules/jsdoc": { "version": "3.6.11", "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", @@ -1409,29 +1262,30 @@ } }, "node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" + "ssri": "^9.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/markdown-it": { @@ -1500,10 +1354,13 @@ } }, "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { "node": ">=8" } @@ -1520,44 +1377,23 @@ "node": ">= 8" } }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/minipass-fetch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", - "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, "dependencies": { - "minipass": "^7.0.3", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "optionalDependencies": { "encoding": "^0.1.13" } }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -1570,18 +1406,6 @@ "node": ">= 8" } }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -1594,18 +1418,6 @@ "node": ">=8" } }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", @@ -1618,18 +1430,6 @@ "node": ">=8" } }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -1643,18 +1443,6 @@ "node": ">= 8" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -1668,9 +1456,9 @@ } }, "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", + "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", @@ -1680,13 +1468,12 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -1701,10 +1488,15 @@ }, "engines": { "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/mocha/node_modules/escape-string-regexp": { @@ -1720,58 +1512,36 @@ } }, "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, - "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -1779,21 +1549,9 @@ "dev": true }, "node_modules/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" - }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==" }, "node_modules/negotiator": { "version": "0.6.3", @@ -1805,16 +1563,16 @@ } }, "node_modules/node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", "dev": true, "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", + "make-fetch-happen": "^10.0.3", "nopt": "^6.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", @@ -1940,40 +1698,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -1986,6 +1710,12 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -2102,9 +1832,9 @@ "optional": true }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2143,27 +1873,6 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -2181,16 +1890,16 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, @@ -2208,25 +1917,22 @@ "node": ">= 10" } }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true + }, "node_modules/ssri": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", - "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, "dependencies": { - "minipass": "^7.0.3" + "minipass": "^3.1.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ssri/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/string_decoder": { @@ -2249,21 +1955,6 @@ "node": ">=8" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -2276,19 +1967,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2323,9 +2001,9 @@ "dev": true }, "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "dependencies": { "chownr": "^2.0.0", @@ -2339,26 +2017,11 @@ "node": ">=10" } }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { "node": ">=8" } @@ -2394,27 +2057,27 @@ "dev": true }, "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "dev": true, "dependencies": { - "unique-slug": "^4.0.0" + "unique-slug": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/util-deprecate": { @@ -2470,24 +2133,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -2569,1959 +2214,5 @@ "url": "https://github.com/sponsors/sindresorhus" } } - }, - "dependencies": { - "@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "dev": true - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "requires": { - "semver": "^7.3.5" - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@types/linkify-it": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.4.tgz", - "integrity": "sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==", - "dev": true - }, - "@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dev": true, - "requires": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "@types/mdurl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.4.tgz", - "integrity": "sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dev": true, - "requires": { - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", - "dev": true, - "requires": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true - } - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "^7.1.1" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==", - "dev": true - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - } - } - }, - "fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "requires": { - "minipass": "^7.0.3" - }, - "dependencies": { - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true - }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dev": true, - "requires": { - "xmlcreate": "^2.0.4" - } - }, - "jsdoc": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", - "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", - "dev": true, - "requires": { - "@babel/parser": "^7.9.4", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "taffydb": "2.6.2", - "underscore": "~1.13.2" - } - }, - "jshint": { - "version": "2.13.6", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.6.tgz", - "integrity": "sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ==", - "dev": true, - "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.21", - "minimatch": "~3.0.2", - "strip-json-comments": "1.0.x" - }, - "dependencies": { - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==", - "dev": true - } - } - }, - "klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dev": true, - "requires": { - "uc.micro": "^1.0.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - }, - "make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - } - }, - "markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dev": true, - "requires": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "dependencies": { - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true - } - } - }, - "markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "dev": true, - "requires": {} - }, - "marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true - }, - "minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-fetch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", - "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "dependencies": { - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true - } - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", - "dev": true, - "requires": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - } - } - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - } - }, - "nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true - } - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "requizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", - "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", - "dev": true, - "requires": { - "lodash": "^4.17.21" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "optional": true - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "ssri": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", - "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", - "dev": true, - "requires": { - "minipass": "^7.0.3" - }, - "dependencies": { - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true - } - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==", - "dev": true - }, - "tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - } - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toolkit-jsdoc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toolkit-jsdoc/-/toolkit-jsdoc-1.0.0.tgz", - "integrity": "sha512-57bpRaZgZ8M2FUblW3OJVWDfbING/rBvCda/mxXEth6fCp3M1m6/tX+pvXSJyqq24tVzdTYaGM+ZduPlwcDFHw==", - "dev": true - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true - }, - "unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "requires": { - "unique-slug": "^4.0.0" - } - }, - "unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } } } diff --git a/v2.18.0/AdminClient.html b/v2.18.0/AdminClient.html new file mode 100644 index 00000000..047121b0 --- /dev/null +++ b/v2.18.0/AdminClient.html @@ -0,0 +1,1292 @@ + + + + + JSDoc: Class: AdminClient + + + + + + + + + + + + + + + +
    +
    + +
    +

    Class: AdminClient

    + + + + + + +
    + +
    + +

    AdminClient

    + + +
    + +
    +
    + + + + + +

    + new AdminClient(conf) +

    + + + + + +
    +

    AdminClient class for administering Kafka + +This client is the way you can interface with the Kafka Admin APIs. +This class should not be made using the constructor, but instead +should be made using the factory method. + + +var client = AdminClient.create({ ... }); + + +Once you instantiate this object, it will have a handle to the kafka broker. +Unlike the other node-rdkafka classes, this class does not ensure that +it is connected to the upstream broker. Instead, making an action will +validate that.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    conf + + +object + + + + + Key value pairs to configure the admin client +topic configuration
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    +
    +

    Methods:

    +
    + +
    + + + + + + + +

    + connect() +

    + + + + + +
    +

    Connect using the admin client. + +Should be run using the factory method, so should never +need to be called outside. + +Unlike the other connect methods, this one is synchronous.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + createPartitions(topic, totalPartitions, timeout, cb) +

    + + + + + +
    +

    Create new partitions for a topic.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + The topic to add partitions to, by name.
    totalPartitions + + +number + + + + + The total number of partitions the topic should have + after the request
    timeout + + +number + + + + + Number of milliseconds to wait while trying to create the partitions.
    cb + + +function + + + + + The callback to be executed when finished
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + createTopic(topic, timeout, cb) +

    + + + + + +
    +

    Create a topic with a given config.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +NewTopic + + + + + Topic to create.
    timeout + + +number + + + + + Number of milliseconds to wait while trying to create the topic.
    cb + + +function + + + + + The callback to be executed when finished
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + deleteTopic(topic, timeout, cb) +

    + + + + + +
    +

    Delete a topic.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + The topic to delete, by name.
    timeout + + +number + + + + + Number of milliseconds to wait while trying to delete the topic.
    cb + + +function + + + + + The callback to be executed when finished
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + disconnect() +

    + + + + + +
    +

    Disconnect the admin client. + +This is a synchronous method, but all it does is clean up +some memory and shut some threads down

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Type Definitions:

    +
    + +
    + + + + +

    NewTopic

    + + + + +
    +

    + NewTopic model. + +This is the representation of a new message that is requested to be made +using the Admin client. +

    +
    + + + +
    Type:
    +
      +
    • + +object + + + +
    • +
    + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + the topic name to create
    num_partitions + + +number + + + + + the number of partitions to give the topic
    replication_factor + + +number + + + + + the replication factor of the topic
    config + + +object + + + + + a list of key values to be passed as configuration +for the topic.
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + +
    + +
    + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/Client.html b/v2.18.0/Client.html new file mode 100644 index 00000000..f830b329 --- /dev/null +++ b/v2.18.0/Client.html @@ -0,0 +1,3681 @@ + + + + + JSDoc: Class: Client + + + + + + + + + + + + + + + +
    +
    + +
    +

    Class: Client

    + + + + + + +
    + +
    + +

    Client

    + + +
    + +
    +
    + + + + + +

    + new Client(globalConf, SubClientType, topicConf) +

    + + + + + +
    +

    Base class for Consumer and Producer + +This should not be created independently, but rather is +the base class on which both producer and consumer +get their common functionality.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    globalConf + + +object + + + + + Global configuration in key value pairs.
    SubClientType + + +function + + + + + The function representing the subclient +type. In C++ land this needs to be a class that inherits from Connection.
    topicConf + + +object + + + + + Topic configuration in key value pairs
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + +
    + + +
    +
    +

    Extends:

    +
    + +
    + + + + + +
      +
    • Emitter
    • +
    + + + + + + + + + + + + + +
    +
    +

    Members:

    +
    + +
    + + + + +

    _metadata :Client~Metadata

    + + + + +
    +

    + Metadata object. Starts out empty but will be filled with information after +the initial connect. +

    +
    + + + +
    Type:
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + +
    +
    +

    Methods:

    +
    + +
    + + + + + + + +

    + connect(metadataOptions, cb) → {Client} +

    + + + + + +
    +

    Connect to the broker and receive its metadata. + +Connects to a broker by establishing the client and fetches its metadata.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    metadataOptions + + +object + + + + + Options to be sent to the metadata. +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + Topic to fetch metadata for. Empty string is treated as empty.
    allTopics + + +boolean + + + + + Fetch metadata for all topics, not just the ones we know about.
    timeout + + +int + + + + + The timeout, in ms, to allow for fetching metadata. Defaults to 30000ms
    + +
    cb + + +Client~connectionCallback + + + + + Callback that indicates we are +done connecting.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Returns itself. +
    + + + +
    +
    + Type +
    +
    + +Client + + + +
    +
    + + + + + + + + + + + +

    + connectedTime() → {number} +

    + + + + + +
    +

    Find out how long we have been connected to Kafka.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Milliseconds since the connection has been established. +
    + + + +
    +
    + Type +
    +
    + +number + + + +
    +
    + + + + + + + + + + + +

    + disconnect() → {function} +

    + + + + + +
    +

    Disconnect from the Kafka client. + +This method will disconnect us from Kafka unless we are already in a +disconnecting state. Use this when you're done reading or producing messages +on a given client. + +It will also emit the disconnected event.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + +
    +
    +

    Fires:

    +
    +
    + + + + + + + + + + + +
    Returns:
    + + +
    + - Callback to call when disconnection is complete. +
    + + + +
    +
    + Type +
    +
    + +function + + + +
    +
    + + + + + + + + + + + +

    + getClient() → {Connection} +

    + + + + + +
    +

    Get the native Kafka client. + +You probably shouldn't use this, but if you want to execute methods directly +on the c++ wrapper you can do it here.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + +
    See:
    +
    +
      +
    • connection.cc
    • +
    +
    + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - The native Kafka client. +
    + + + +
    +
    + Type +
    +
    + +Connection + + + +
    +
    + + + + + + + + + + + +

    + getLastError() → {LibrdKafkaError} +

    + + + + + +
    +

    Get the last error emitted if it exists.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Returns the LibrdKafkaError or null if +one hasn't been thrown. +
    + + + +
    +
    + Type +
    +
    + +LibrdKafkaError + + + +
    +
    + + + + + + + + + + + +

    + getMetadata(metadataOptions, cb) +

    + + + + + +
    +

    Get client metadata. + +Note: using a metadataOptions.topic parameter has a potential side-effect. +A Topic object will be created, if it did not exist yet, with default options +and it will be cached by librdkafka. + +A subsequent call to create the topic object with specific options (e.g. acks) will return +the previous instance and the specific options will be silently ignored. + +To avoid this side effect, the topic object can be created with the expected options before requesting metadata, +or the metadata request can be performed for all topics (by omitting metadataOptions.topic).

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    metadataOptions + + +object + + + + + Metadata options to pass to the client. +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + Topic string for which to fetch +metadata
    timeout + + +number + + + + + Max time, in ms, to try to fetch +metadata before timing out. Defaults to 3000.
    + +
    cb + + +Client~metadataCallback + + + + + Callback to fire with the metadata.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + isConnected() → {boolean} +

    + + + + + +
    +

    Whether or not we are connected to Kafka.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Whether we are connected. +
    + + + +
    +
    + Type +
    +
    + +boolean + + + +
    +
    + + + + + + + + + + + +

    + offsetsForTimes(toppars, timeout, cb) +

    + + + + + +
    +

    Query offsets for times from the broker. + +This function makes a call to the broker to get the offsets for times specified.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    toppars + + +Array.<TopicPartition> + + + + + Array of topic partitions. The offset in these + should instead refer to a timestamp you want + offsets for
    timeout + + +number + + + + + Number of ms to wait to recieve a response.
    cb + + +Client~offsetsForTimesCallback + + + + + Callback to fire with the filled in offsets.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + queryWatermarkOffsets(topic, partition, timeout, cb) +

    + + + + + +
    +

    Query offsets from the broker. + +This function makes a call to the broker to get the current low (oldest/beginning) +and high (newest/end) offsets for a topic partition.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + Topic to recieve offsets from.
    partition + + +number + + + + + Partition of the provided topic to recieve offsets from
    timeout + + +number + + + + + Number of ms to wait to recieve a response.
    cb + + +Client~watermarkOffsetsCallback + + + + + Callback to fire with the offsets.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Type Definitions:

    +
    + +
    + + + + + + + +

    + connectionCallback(err, metadata) +

    + + + + + +
    +

    This callback is used to pass metadata or an error after a successful +connection

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    err + + +Error + + + + + An error, if one occurred while connecting.
    metadata + + +Client~Metadata + + + + + Metadata object.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + +

    Metadata

    + + + + +
    +

    + Metadata object. + +This is the representation of Kafka metadata in JavaScript. +

    +
    + + + +
    Type:
    +
      +
    • + +object + + + +
    • +
    + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    orig_broker_id + + +number + + + + + The broker ID of the original bootstrap +broker.
    orig_broker_name + + +string + + + + + The name of the original bootstrap +broker.
    brokers + + +Array.<Client~MetadataBroker> + + + + + An array of broker objects
    topics + + +Array.<Client~MetadataTopic> + + + + + An array of topics.
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + +

    MetadataBroker

    + + + + + + +
    Type:
    +
      +
    • + +object + + + +
    • +
    + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    id + + +number + + + + + Broker ID
    host + + +string + + + + + Broker host
    port + + +number + + + + + Broker port.
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + +

    MetadataPartition

    + + + + + + +
    Type:
    +
      +
    • + +object + + + +
    • +
    + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    id + + +number + + + + + Partition id
    leader + + +number + + + + + Broker ID for the partition leader
    replicas + + +Array.<number> + + + + + Array of replica IDs
    isrs + + +Array.<number> + + + + + Arrqay of ISRS ids
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + +

    MetadataTopic

    + + + + + + +
    Type:
    +
      +
    • + +object + + + +
    • +
    + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    name + + +string + + + + + Topic name
    partitions + + +Array.<Client~MetadataPartition> + + + + + Array of partitions
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + +

    + offsetsForTimesCallback(err, toppars) +

    + + + + + +
    +

    This callback is used to pass toppars or an error after a successful +times query

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    err + + +Error + + + + + An error, if one occurred while connecting.
    toppars + + +Array.<TopicPartition> + + + + + Topic partitions with offsets filled in
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + +

    watermarkOffsets

    + + + + + + +
    Type:
    +
      +
    • + +object + + + +
    • +
    + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    high + + +number + + + + + High (newest/end) offset
    low + + +number + + + + + Low (oldest/beginning) offset
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + +

    + watermarkOffsetsCallback(err, offsets) +

    + + + + + +
    +

    This callback is used to pass offsets or an error after a successful +query

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    err + + +Error + + + + + An error, if one occurred while connecting.
    offsets + + +Client~watermarkOffsets + + + + + Watermark offsets
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +

    Events

    + + + + + + +

    + disconnected +

    + + + + + +
    +

    Disconnect event. Called after disconnection is finished.

    +
    + + + + + +
    +
    +

    Type:

    +
    +
    + +
      +
    • + +object + + + +
    • +
    + + + + + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    connectionOpened + + +date + + + + + when the connection was opened.
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + ready +

    + + + + + +
    +

    Ready event. Called when the Client connects successfully

    +
    + + + + + +
    +
    +

    Type:

    +
    +
    + +
      +
    • + +object + + + +
    • +
    + + + + + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    name + + +string + + + + + the name of the broker.
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/HighLevelProducer.html b/v2.18.0/HighLevelProducer.html new file mode 100644 index 00000000..8f4be47b --- /dev/null +++ b/v2.18.0/HighLevelProducer.html @@ -0,0 +1,4811 @@ + + + + + JSDoc: Class: HighLevelProducer + + + + + + + + + + + + + + + +
    +
    + +
    +

    Class: HighLevelProducer

    + + + + + + +
    + +
    + +

    HighLevelProducer

    + + +
    + +
    +
    + + + + + +

    + new HighLevelProducer(conf, topicConf) +

    + + + + + +
    +

    Producer class for sending messages to Kafka in a higher level fashion + +This is the main entry point for writing data to Kafka if you want more +functionality than librdkafka supports out of the box. You +configure this like you do any other client, with a global +configuration and default topic configuration. + +Once you instantiate this object, you need to connect to it first. +This allows you to get the metadata and make sure the connection +can be made before you depend on it. After that, problems with +the connection will by brought down by using poll, which automatically +runs when a transaction is made on the object. + +This has a few restrictions, so it is not for free! + +1. You may not define opaque tokens + The higher level producer is powered by opaque tokens. +2. Every message ack will dispatch an event on the node thread. +3. Will use a ref counter to determine if there are outgoing produces. + +This will return the new object you should use instead when doing your +produce calls

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    conf + + +object + + + + + Key value pairs to configure the producer
    topicConf + + +object + + + + + Key value pairs to create a default +topic configuration
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + +
    + + +
    +
    +

    Extends:

    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    +
    +

    Members:

    +
    + +
    + + + + +

    _disconnect

    + + + + +
    +

    + Save the base disconnect method here so we can overwrite it and add a flush +

    +
    + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + +

    _metadata :Client~Metadata

    + + + + +
    +

    + Metadata object. Starts out empty but will be filled with information after +the initial connect. +

    +
    + + + +
    Type:
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + +
    +
    +

    Methods:

    +
    + +
    + + + + + + + +

    + _modifiedProduce(topic, partition, message, key, timestamp, headers, callback) → {boolean} +

    + + + + + +
    +

    Produce a message to Kafka asynchronously. + +This is the method mainly used in this class. Use it to produce +a message to Kafka. + +When this is sent off, and you recieve your callback, the assurances afforded +to you will be equal to those provided by your ack level.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + The topic name to produce to.
    partition + + +number +| + +null + + + + + The partition number to produce to.
    message + + +Buffer +| + +null + + + + + The message to produce.
    key + + +string + + + + + The key associated with the message.
    timestamp + + +number +| + +null + + + + + Timestamp to send with the message.
    headers + + +object + + + + + A list of custom key value pairs that provide message metadata.
    callback + + +function + + + + + Callback to call when the delivery report is recieved.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + +
    See:
    +
    + +
    + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    +
    +
    + - Throws a librdkafka error if it failed. +
    +
    +
    +
    +
    +
    + Type +
    +
    + +LibrdKafkaError + + + +
    +
    +
    +
    +
    + + + + + +
    Returns:
    + + +
    + - returns an error if it failed, or true if not +
    + + + +
    +
    + Type +
    +
    + +boolean + + + +
    +
    + + + + + + + + + + + +

    + abortTransaction(timeout, cb) → {Producer} +

    + + + + + +
    +

    Aborts the ongoing transaction.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    timeout + + +number + + + + + Number of milliseconds to try to abort, defaults to 5 seconds
    cb + + +function + + + + + Callback to return when operation is completed
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + beginTransaction() → {Producer} +

    + + + + + +
    +

    Begin a transaction. + +'initTransaction' must have been called successfully (once) before this function is called.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + commitTransaction(timeout, cb) → {Producer} +

    + + + + + +
    +

    Commit the current transaction (as started with 'beginTransaction').

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    timeout + + +number + + + + + Number of milliseconds to try to commit before giving up, defaults to 5 seconds
    cb + + +function + + + + + Callback to return when operation is completed
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + connect(metadataOptions, cb) → {Client} +

    + + + + + +
    +

    Connect to the broker and receive its metadata. + +Connects to a broker by establishing the client and fetches its metadata.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    metadataOptions + + +object + + + + + Options to be sent to the metadata. +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + Topic to fetch metadata for. Empty string is treated as empty.
    allTopics + + +boolean + + + + + Fetch metadata for all topics, not just the ones we know about.
    timeout + + +int + + + + + The timeout, in ms, to allow for fetching metadata. Defaults to 30000ms
    + +
    cb + + +Client~connectionCallback + + + + + Callback that indicates we are +done connecting.
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Returns itself. +
    + + + +
    +
    + Type +
    +
    + +Client + + + +
    +
    + + + + + + + + + + + +

    + connectedTime() → {number} +

    + + + + + +
    +

    Find out how long we have been connected to Kafka.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Milliseconds since the connection has been established. +
    + + + +
    +
    + Type +
    +
    + +number + + + +
    +
    + + + + + + + + + + + +

    + disconnect(timeout, cb) +

    + + + + + +
    +

    Disconnect the producer + +Flush everything on the internal librdkafka producer buffer. Then disconnect

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    timeout + + +number + + + + + Number of milliseconds to try to flush before giving up, defaults to 5 seconds.
    cb + + +function + + + + + The callback to fire when
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + flush(timeout, callback) → {Producer} +

    + + + + + +
    +

    Flush the producer + +Flush everything on the internal librdkafka producer buffer. Do this before +disconnects usually

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    timeout + + +number + + + + + Number of milliseconds to try to flush before giving up.
    callback + + +function + + + + + Callback to fire when the flush is done.
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + getClient() → {Connection} +

    + + + + + +
    +

    Get the native Kafka client. + +You probably shouldn't use this, but if you want to execute methods directly +on the c++ wrapper you can do it here.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + +
    See:
    +
    +
      +
    • connection.cc
    • +
    +
    + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - The native Kafka client. +
    + + + +
    +
    + Type +
    +
    + +Connection + + + +
    +
    + + + + + + + + + + + +

    + getLastError() → {LibrdKafkaError} +

    + + + + + +
    +

    Get the last error emitted if it exists.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Returns the LibrdKafkaError or null if +one hasn't been thrown. +
    + + + +
    +
    + Type +
    +
    + +LibrdKafkaError + + + +
    +
    + + + + + + + + + + + +

    + getMetadata(metadataOptions, cb) +

    + + + + + +
    +

    Get client metadata. + +Note: using a metadataOptions.topic parameter has a potential side-effect. +A Topic object will be created, if it did not exist yet, with default options +and it will be cached by librdkafka. + +A subsequent call to create the topic object with specific options (e.g. acks) will return +the previous instance and the specific options will be silently ignored. + +To avoid this side effect, the topic object can be created with the expected options before requesting metadata, +or the metadata request can be performed for all topics (by omitting metadataOptions.topic).

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    metadataOptions + + +object + + + + + Metadata options to pass to the client. +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + Topic string for which to fetch +metadata
    timeout + + +number + + + + + Max time, in ms, to try to fetch +metadata before timing out. Defaults to 3000.
    + +
    cb + + +Client~metadataCallback + + + + + Callback to fire with the metadata.
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + initTransactions(timeout, cb) → {Producer} +

    + + + + + +
    +

    Init a transaction. + +Initialize transactions, this is only performed once per transactional producer.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    timeout + + +number + + + + + Number of milliseconds to try to initialize before giving up, defaults to 5 seconds.
    cb + + +function + + + + + Callback to return when operation is completed
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + isConnected() → {boolean} +

    + + + + + +
    +

    Whether or not we are connected to Kafka.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Whether we are connected. +
    + + + +
    +
    + Type +
    +
    + +boolean + + + +
    +
    + + + + + + + + + + + +

    + offsetsForTimes(toppars, timeout, cb) +

    + + + + + +
    +

    Query offsets for times from the broker. + +This function makes a call to the broker to get the offsets for times specified.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    toppars + + +Array.<TopicPartition> + + + + + Array of topic partitions. The offset in these + should instead refer to a timestamp you want + offsets for
    timeout + + +number + + + + + Number of ms to wait to recieve a response.
    cb + + +Client~offsetsForTimesCallback + + + + + Callback to fire with the filled in offsets.
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + poll() → {Producer} +

    + + + + + +
    +

    Poll for events + +We need to run poll in order to learn about new events that have occurred. +This is no longer done automatically when we produce, so we need to run +it manually, or set the producer to automatically poll.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + produce(topic, partition, message, key, timestamp, opaque, headers) → {boolean} +

    + + + + + +
    +

    Produce a message to Kafka synchronously. + +This is the method mainly used in this class. Use it to produce +a message to Kafka. + +When this is sent off, there is no guarantee it is delivered. If you need +guaranteed delivery, change your *acks* settings, or use delivery reports.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + The topic name to produce to.
    partition + + +number +| + +null + + + + + The partition number to produce to.
    message + + +Buffer +| + +null + + + + + The message to produce.
    key + + +string + + + + + The key associated with the message.
    timestamp + + +number +| + +null + + + + + Timestamp to send with the message.
    opaque + + +object + + + + + An object you want passed along with this message, if provided.
    headers + + +object + + + + + A list of custom key value pairs that provide message metadata.
    + + + + + + +
    + + + + + + + + +
    Overrides:
    +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + +
    See:
    +
    + +
    + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    +
    +
    + - Throws a librdkafka error if it failed. +
    +
    +
    +
    +
    +
    + Type +
    +
    + +LibrdKafkaError + + + +
    +
    +
    +
    +
    + + + + + +
    Returns:
    + + +
    + - returns an error if it failed, or true if not +
    + + + +
    +
    + Type +
    +
    + +boolean + + + +
    +
    + + + + + + + + + + + +

    + queryWatermarkOffsets(topic, partition, timeout, cb) +

    + + + + + +
    +

    Query offsets from the broker. + +This function makes a call to the broker to get the current low (oldest/beginning) +and high (newest/end) offsets for a topic partition.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + Topic to recieve offsets from.
    partition + + +number + + + + + Partition of the provided topic to recieve offsets from
    timeout + + +number + + + + + Number of ms to wait to recieve a response.
    cb + + +Client~watermarkOffsetsCallback + + + + + Callback to fire with the offsets.
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + sendOffsetsToTransaction(offsets, consumer, timeout, cb) → {Producer} +

    + + + + + +
    +

    Send the current offsets of the consumer to the ongoing transaction.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    offsets + + +number + + + + + Offsets to send as part of the next commit
    consumer + + +Consumer + + + + + An instance of the consumer
    timeout + + +number + + + + + Number of milliseconds to try to send offsets, defaults to 5 seconds
    cb + + +function + + + + + Callback to return when operation is completed
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + setKeySerializer() +

    + + + + + +
    +

    Set the key serializer + +This allows the value inside the produce call to differ from the value of the +value actually produced to kafka. Good if, for example, you want to serialize +it to a particular format.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + setPollInterval(interval) → {Producer} +

    + + + + + +
    +

    Set automatic polling for events. + +We need to run poll in order to learn about new events that have occurred. +If you would like this done on an interval with disconnects and reconnections +managed, you can do it here

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    interval + + +number + + + + + Interval, in milliseconds, to poll
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + setValueSerializer() +

    + + + + + +
    +

    Set the value serializer + +This allows the value inside the produce call to differ from the value of the +value actually produced to kafka. Good if, for example, you want to serialize +it to a particular format.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + +

    Events

    + + + + + + +

    + disconnected +

    + + + + + +
    +

    Disconnect event. Called after disconnection is finished.

    +
    + + + + + +
    +
    +

    Type:

    +
    +
    + +
      +
    • + +object + + + +
    • +
    + + + + + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    connectionOpened + + +date + + + + + when the connection was opened.
    + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + ready +

    + + + + + +
    +

    Ready event. Called when the Client connects successfully

    +
    + + + + + +
    +
    +

    Type:

    +
    +
    + +
      +
    • + +object + + + +
    • +
    + + + + + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    name + + +string + + + + + the name of the broker.
    + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/KafkaConsumer.html b/v2.18.0/KafkaConsumer.html new file mode 100644 index 00000000..cf5b217b --- /dev/null +++ b/v2.18.0/KafkaConsumer.html @@ -0,0 +1,6859 @@ + + + + + JSDoc: Class: KafkaConsumer + + + + + + + + + + + + + + + +
    +
    + +
    +

    Class: KafkaConsumer

    + + + + + + +
    + +
    + +

    KafkaConsumer

    + + +
    + +
    +
    + + + + + +

    + new KafkaConsumer(conf, topicConf) +

    + + + + + +
    +

    KafkaConsumer class for reading messages from Kafka + +This is the main entry point for reading data from Kafka. You +configure this like you do any other client, with a global +configuration and default topic configuration. + +Once you instantiate this object, connecting will open a socket. +Data will not be read until you tell the consumer what topics +you want to read from.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    conf + + +object + + + + + Key value pairs to configure the consumer
    topicConf + + +object + + + + + Key value pairs to create a default +topic configuration
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + +
    + + +
    +
    +

    Extends:

    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    +
    +

    Members:

    +
    + +
    + + + + +

    _metadata :Client~Metadata

    + + + + +
    +

    + Metadata object. Starts out empty but will be filled with information after +the initial connect. +

    +
    + + + +
    Type:
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + +
    +
    +

    Methods:

    +
    + +
    + + + + + + + +

    + (static) createReadStream(conf, topicConf, streamOptions) → {KafkaConsumerStream} +

    + + + + + +
    +

    Get a stream representation of this KafkaConsumer

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    conf + + +object + + + + + Key value pairs to configure the consumer
    topicConf + + +object + + + + + Key value pairs to create a default +topic configuration
    streamOptions + + +object + + + + + Stream options +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topics + + +array + + + + + Array of topics to subscribe to.
    + +
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + +
    See:
    +
    +
      +
    • TopicReadable
    • +
    +
    + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Readable stream that receives messages +when new ones become available. +
    + + + +
    +
    + Type +
    +
    + +KafkaConsumerStream + + + +
    +
    + + + + + + +

    + +

    + + + + + + + + + + +

    + assign(assignments) → {Client} +

    + + + + + +
    +

    Assign the consumer specific partitions and topics

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    assignments + + +array + + + + + Assignments array. Should contain +objects with topic and partition set.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Returns itself +
    + + + +
    +
    + Type +
    +
    + +Client + + + +
    +
    + + + + + + + + + + + +

    + assignments() → {array} +

    + + + + + +
    +

    Get the assignments for the consumer

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + assignments - Array of topic partitions +
    + + + +
    +
    + Type +
    +
    + +array + + + +
    +
    + + + + + + + + + + + +

    + commit(topicPartition) → {KafkaConsumer} +

    + + + + + +
    +

    Commit a topic partition or all topic partitions that have been read + +If you provide a topic partition, it will commit that. Otherwise, +it will commit all read offsets for all topic partitions.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topicPartition + + +object +| + +array +| + +null + + + + + Topic partition object to commit, list of topic +partitions, or null if you want to commit all read offsets.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    + + When commit returns a non 0 error code + +
    + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +KafkaConsumer + + + +
    +
    + + + + + + + + + + + +

    + commitMessage(msg) → {KafkaConsumer} +

    + + + + + +
    +

    Commit a message + +This is basically a convenience method to map commit properly. We need to +add one to the offset in this case

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    msg + + +object + + + + + Message object to commit
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    + + When commit returns a non 0 error code + +
    + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +KafkaConsumer + + + +
    +
    + + + + + + + + + + + +

    + commitMessageSync(msg) → {KafkaConsumer} +

    + + + + + +
    +

    Commit a message synchronously

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    msg + + +object + + + + + A message object to commit.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + +
    See:
    +
    + +
    + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    +
    +
    + - if the commit fails +
    +
    +
    +
    +
    +
    + Type +
    +
    + +LibrdKafkaError + + + +
    +
    +
    +
    +
    + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +KafkaConsumer + + + +
    +
    + + + + + + + + + + + +

    + commitSync(topicPartition) → {KafkaConsumer} +

    + + + + + +
    +

    Commit a topic partition (or all topic partitions) synchronously

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topicPartition + + +object +| + +array +| + +null + + + + + Topic partition object to commit, list of topic +partitions, or null if you want to commit all read offsets.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    +
    +
    + - if the commit fails +
    +
    +
    +
    +
    +
    + Type +
    +
    + +LibrdKafkaError + + + +
    +
    +
    +
    +
    + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +KafkaConsumer + + + +
    +
    + + + + + + + + + + + +

    + committed(toppars, timeout, cb) → {Client} +

    + + + + + +
    +

    Get a current list of the committed offsets per topic partition + +Returns an array of objects in the form of a topic partition list

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    toppars + + +Array.<TopicPartition> + + + + + Topic partition list to query committed +offsets for. Defaults to the current assignment
    timeout + + +number + + + + + Number of ms to block before calling back +and erroring
    cb + + +function + + + + + Callback method to execute when finished or timed +out
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Returns itself +
    + + + +
    +
    + Type +
    +
    + +Client + + + +
    +
    + + + + + + + + + + + +

    + connect(metadataOptions, cb) → {Client} +

    + + + + + +
    +

    Connect to the broker and receive its metadata. + +Connects to a broker by establishing the client and fetches its metadata.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    metadataOptions + + +object + + + + + Options to be sent to the metadata. +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + Topic to fetch metadata for. Empty string is treated as empty.
    allTopics + + +boolean + + + + + Fetch metadata for all topics, not just the ones we know about.
    timeout + + +int + + + + + The timeout, in ms, to allow for fetching metadata. Defaults to 30000ms
    + +
    cb + + +Client~connectionCallback + + + + + Callback that indicates we are +done connecting.
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Returns itself. +
    + + + +
    +
    + Type +
    +
    + +Client + + + +
    +
    + + + + + + + + + + + +

    + connectedTime() → {number} +

    + + + + + +
    +

    Find out how long we have been connected to Kafka.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Milliseconds since the connection has been established. +
    + + + +
    +
    + Type +
    +
    + +number + + + +
    +
    + + + + + + + + + + + +

    + consume(size, cb) +

    + + + + + +
    +

    Read a number of messages from Kafka. + +This method is similar to the main one, except that it reads a number +of messages before calling back. This may get better performance than +reading a single message each time in stream implementations. + +This will keep going until it gets ERR__PARTITION_EOF or ERR__TIMED_OUT +so the array may not be the same size you ask for. The size is advisory, +but we will not exceed it.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    size + + +number + + + + + Number of messages to read
    cb + + +KafkaConsumer~readCallback + + + + + Callback to return when work is done.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + consume(cb) +

    + + + + + +
    +

    Read messages from Kafka as fast as possible + +This method keeps a background thread running to fetch the messages +as quickly as it can, sleeping only in between EOF and broker timeouts. + +Use this to get the maximum read performance if you don't care about the +stream backpressure.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    cb + + +KafkaConsumer~readCallback + + + + + Callback to return when a message +is fetched.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + disconnect() → {function} +

    + + + + + +
    +

    Disconnect from the Kafka client. + +This method will disconnect us from Kafka unless we are already in a +disconnecting state. Use this when you're done reading or producing messages +on a given client. + +It will also emit the disconnected event.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + +
    +
    +

    Fires:

    +
    +
    + + + + + + + + + + + +
    Returns:
    + + +
    + - Callback to call when disconnection is complete. +
    + + + +
    +
    + Type +
    +
    + +function + + + +
    +
    + + + + + + + + + + + +

    + getClient() → {Connection} +

    + + + + + +
    +

    Get the native Kafka client. + +You probably shouldn't use this, but if you want to execute methods directly +on the c++ wrapper you can do it here.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + +
    See:
    +
    +
      +
    • connection.cc
    • +
    +
    + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - The native Kafka client. +
    + + + +
    +
    + Type +
    +
    + +Connection + + + +
    +
    + + + + + + + + + + + +

    + getLastError() → {LibrdKafkaError} +

    + + + + + +
    +

    Get the last error emitted if it exists.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Returns the LibrdKafkaError or null if +one hasn't been thrown. +
    + + + +
    +
    + Type +
    +
    + +LibrdKafkaError + + + +
    +
    + + + + + + + + + + + +

    + getMetadata(metadataOptions, cb) +

    + + + + + +
    +

    Get client metadata. + +Note: using a metadataOptions.topic parameter has a potential side-effect. +A Topic object will be created, if it did not exist yet, with default options +and it will be cached by librdkafka. + +A subsequent call to create the topic object with specific options (e.g. acks) will return +the previous instance and the specific options will be silently ignored. + +To avoid this side effect, the topic object can be created with the expected options before requesting metadata, +or the metadata request can be performed for all topics (by omitting metadataOptions.topic).

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    metadataOptions + + +object + + + + + Metadata options to pass to the client. +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + Topic string for which to fetch +metadata
    timeout + + +number + + + + + Max time, in ms, to try to fetch +metadata before timing out. Defaults to 3000.
    + +
    cb + + +Client~metadataCallback + + + + + Callback to fire with the metadata.
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + getWatermarkOffsets(topic, partition) → {Client~watermarkOffsets} +

    + + + + + +
    +

    Get last known offsets from the client. + +The low offset is updated periodically (if statistics.interval.ms is set) +while the high offset is updated on each fetched message set from the +broker. + +If there is no cached offset (either low or high, or both), then this will +throw an error.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + Topic to recieve offsets from.
    partition + + +number + + + + + Partition of the provided topic to recieve offsets from
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    +
    +
    + - Throws when there is no offset stored +
    +
    +
    +
    +
    +
    + Type +
    +
    + +LibrdKafkaError + + + +
    +
    +
    +
    +
    + + + + + +
    Returns:
    + + +
    + - Returns an object with a high and low property, specifying +the high and low offsets for the topic partition +
    + + + +
    +
    + Type +
    +
    + +Client~watermarkOffsets + + + +
    +
    + + + + + + + + + + + +

    + isConnected() → {boolean} +

    + + + + + +
    +

    Whether or not we are connected to Kafka.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Whether we are connected. +
    + + + +
    +
    + Type +
    +
    + +boolean + + + +
    +
    + + + + + + + + + + + +

    + offsetsForTimes(toppars, timeout, cb) +

    + + + + + +
    +

    Query offsets for times from the broker. + +This function makes a call to the broker to get the offsets for times specified.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    toppars + + +Array.<TopicPartition> + + + + + Array of topic partitions. The offset in these + should instead refer to a timestamp you want + offsets for
    timeout + + +number + + + + + Number of ms to wait to recieve a response.
    cb + + +Client~offsetsForTimesCallback + + + + + Callback to fire with the filled in offsets.
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + offsetsStore(topicPartitions) +

    + + + + + +
    +

    Store offset for topic partition. + +The offset will be committed (written) to the offset store according to the auto commit interval, +if auto commit is on, or next manual offset if not. + +enable.auto.offset.store must be set to false to use this API,

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topicPartitions + + +Array.<TopicPartition> + + + + + Topic partitions with offsets to store offsets for.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + +
    See:
    +
    + +
    + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    +
    +
    + - Throws when there is no offset stored +
    +
    +
    +
    +
    +
    + Type +
    +
    + +LibrdKafkaError + + + +
    +
    +
    +
    +
    + + + + + + + + + + + + + +

    + pause(topicPartitions) +

    + + + + + +
    +

    Pause producing or consumption for the provided list of partitions.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topicPartitions + + +Array.<TopicPartition> + + + + + List of topics to pause consumption on.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    +
    +
    + - Throws when there is no offset stored +
    +
    +
    +
    +
    +
    + Type +
    +
    + +LibrdKafkaError + + + +
    +
    +
    +
    +
    + + + + + + + + + + + + + +

    + position(toppars) → {array} +

    + + + + + +
    +

    Get the current offset position of the KafkaConsumer + +Returns a list of RdKafka::TopicPartitions on success, or throws +an error on failure

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    toppars + + +Array.<TopicPartition> + + + + + List of topic partitions to query +position for. Defaults to the current assignment
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    + + - Throws when an error code came back from native land + +
    + + + + + +
    Returns:
    + + +
    + - TopicPartition array. Each item is an object with +an offset, topic, and partition +
    + + + +
    +
    + Type +
    +
    + +array + + + +
    +
    + + + + + + + + + + + +

    + queryWatermarkOffsets(topic, partition, timeout, cb) +

    + + + + + +
    +

    Query offsets from the broker. + +This function makes a call to the broker to get the current low (oldest/beginning) +and high (newest/end) offsets for a topic partition.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + Topic to recieve offsets from.
    partition + + +number + + + + + Partition of the provided topic to recieve offsets from
    timeout + + +number + + + + + Number of ms to wait to recieve a response.
    cb + + +Client~watermarkOffsetsCallback + + + + + Callback to fire with the offsets.
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + resume(topicPartitions) +

    + + + + + +
    +

    Resume consumption for the provided list of partitions.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topicPartitions + + +Array.<TopicPartition> + + + + + List of topic partitions to resume consumption on.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    +
    +
    + - Throws when there is no offset stored +
    +
    +
    +
    +
    +
    + Type +
    +
    + +LibrdKafkaError + + + +
    +
    +
    +
    +
    + + + + + + + + + + + + + +

    + seek(toppar, timeout, cb) → {Client} +

    + + + + + +
    +

    Seek consumer for topic+partition to offset which is either an absolute or +logical offset. + +Does not return anything, as it is asynchronous. There are special cases +with the timeout parameter. The consumer must have previously been assigned +to topics and partitions that seek seeks to seek.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    toppar + + +TopicPartition + + + + + Topic partition to seek.
    timeout + + +number + + + + + Number of ms to block before calling back +and erroring. If the parameter is null or 0, the call will not wait +for the seek to be performed. Essentially, it will happen in the background +with no notification
    cb + + +function + + + + + Callback method to execute when finished or timed +out. If the seek timed out, the internal state of the consumer is unknown.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Returns itself +
    + + + +
    +
    + Type +
    +
    + +Client + + + +
    +
    + + + + + + +

    + +

    + + + + + + + + + + +

    + setDefaultConsumeLoopTimeoutDelay(intervalMs) +

    + + + + + +
    +

    Set the default sleep delay for the next consume loop after the previous one has timed out.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    intervalMs + + +number + + + + + number of milliseconds to sleep after a message fetch has timed out
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + setDefaultConsumeTimeout(timeoutMs) +

    + + + + + +
    +

    Set the default consume timeout provided to c++land

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    timeoutMs + + +number + + + + + number of milliseconds to wait for a message to be fetched
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + subscribe(topics) → {KafkaConsumer} +

    + + + + + +
    +

    Subscribe to an array of topics (synchronously). + +This operation is pretty fast because it just sets +an assignment in librdkafka. This is the recommended +way to deal with subscriptions in a situation where you +will be reading across multiple files or as part of +your configure-time initialization. + +This is also a good way to do it for streams.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topics + + +array + + + + + An array of topics to listen to
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    + + - Throws when an error code came back from native land + +
    + + + + + +
    Returns:
    + + +
    + - Returns itself. +
    + + + +
    +
    + Type +
    +
    + +KafkaConsumer + + + +
    +
    + + + + + + + + + + + +

    + subscription() → {array} +

    + + + + + +
    +

    Get the current subscription of the KafkaConsumer + +Get a list of subscribed topics. Should generally match what you +passed on via subscribe

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + +
    See:
    +
    +
      +
    • KafkaConsumer::subscribe
    • +
    +
    + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    + + - Throws when an error code came back from native land + +
    + + + + + +
    Returns:
    + + +
    + - Array of strings to show the current assignment +
    + + + +
    +
    + Type +
    +
    + +array + + + +
    +
    + + + + + + + + + + + +

    + unassign() → {Client} +

    + + + + + +
    +

    Unassign the consumer from its assigned partitions and topics.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Returns itself +
    + + + +
    +
    + Type +
    +
    + +Client + + + +
    +
    + + + + + + + + + + + +

    + unsubscribe() → {KafkaConsumer} +

    + + + + + +
    +

    Unsubscribe from all currently subscribed topics + +Before you subscribe to new topics you need to unsubscribe +from the old ones, if there is an active subscription. +Otherwise, you will get an error because there is an +existing subscription.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    + + - Throws when an error code comes back from native land + +
    + + + + + +
    Returns:
    + + +
    + - Returns itself. +
    + + + +
    +
    + Type +
    +
    + +KafkaConsumer + + + +
    +
    + + + + + + + + + + +
    +
    +

    Type Definitions:

    +
    + +
    + + + + +

    Message

    + + + + +
    +

    + KafkaConsumer message. + +This is the representation of a message read from Kafka. +

    +
    + + + +
    Type:
    +
      +
    • + +object + + + +
    • +
    + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    value + + +buffer + + + + + the message buffer from Kafka.
    topic + + +string + + + + + the topic name
    partition + + +number + + + + + the partition on the topic the +message was on
    offset + + +number + + + + + the offset of the message
    key + + +string + + + + + the message key
    size + + +number + + + + + message size, in bytes.
    timestamp + + +number + + + + + message timestamp
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + +

    + readCallback(err, message) +

    + + + + + +
    +

    This callback returns the message read from Kafka.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    err + + +LibrdKafkaError + + + + + An error, if one occurred while reading +the data.
    message + + +KafkaConsumer~Message + + + + +
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +

    Events

    + + + + + + +

    + data +

    + + + + + +
    +

    Data event. called whenever a message is received.

    +
    + + + + + +
    +
    +

    Type:

    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + disconnected +

    + + + + + +
    +

    Disconnect event. Called after disconnection is finished.

    +
    + + + + + +
    +
    +

    Type:

    +
    +
    + +
      +
    • + +object + + + +
    • +
    + + + + + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    connectionOpened + + +date + + + + + when the connection was opened.
    + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + ready +

    + + + + + +
    +

    Ready event. Called when the Client connects successfully

    +
    + + + + + +
    +
    +

    Type:

    +
    +
    + +
      +
    • + +object + + + +
    • +
    + + + + + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    name + + +string + + + + + the name of the broker.
    + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/KafkaConsumerStream.html b/v2.18.0/KafkaConsumerStream.html new file mode 100644 index 00000000..a5595d45 --- /dev/null +++ b/v2.18.0/KafkaConsumerStream.html @@ -0,0 +1,412 @@ + + + + + JSDoc: Class: KafkaConsumerStream + + + + + + + + + + + + + + + +
    +
    + +
    +

    Class: KafkaConsumerStream

    + + + + + + +
    + +
    + +

    KafkaConsumerStream

    + + +
    + +
    +
    + + + + + +

    + new KafkaConsumerStream(consumer, options) +

    + + + + + +
    +

    ReadableStream integrating with the Kafka Consumer. + +This class is used to read data off of Kafka in a streaming way. It is +useful if you'd like to have a way to pipe Kafka into other systems. You +should generally not make this class yourself, as it is not even exposed +as part of module.exports. Instead, you should KafkaConsumer.createReadStream. + +The stream implementation is slower than the continuous subscribe callback. +If you don't care so much about backpressure and would rather squeeze +out performance, use that method. Using the stream will ensure you read only +as fast as you write. + +The stream detects if Kafka is already connected. If it is, it will begin +reading. If it is not, it will connect and read when it is ready. + +This stream operates in objectMode. It streams {Consumer~Message}

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    consumer + + +Consumer + + + + + The Kafka Consumer object.
    options + + +object + + + + + Options to configure the stream. +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    waitInterval + + +number + + + + + Number of ms to wait if Kafka reports +that it has timed out or that we are out of messages (right now).
    topics + + +array + + + + + Array of topics, or a function that parses +metadata into an array of topics
    + +
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + +
    See:
    +
    +
      +
    • Consumer~Message
    • +
    +
    + + + +
    + + + + + + + + + + + + + + + + + +
    + + +
    +
    +

    Extends:

    +
    + +
    + + + + + +
      +
    • stream.Readable
    • +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/LibrdKafkaError.html b/v2.18.0/LibrdKafkaError.html new file mode 100644 index 00000000..cd7129a1 --- /dev/null +++ b/v2.18.0/LibrdKafkaError.html @@ -0,0 +1,4473 @@ + + + + + JSDoc: Class: LibrdKafkaError + + + + + + + + + + + + + + + +
    +
    + +
    +

    Class: LibrdKafkaError

    + + + + + + +
    + +
    + +

    LibrdKafkaError

    + + +
    + +
    +
    + + + + + +

    + new LibrdKafkaError(e) +

    + + + + + +
    +

    Representation of a librdkafka error + +This can be created by giving either another error +to piggy-back on. In this situation it tries to parse +the error string to figure out the intent. However, more usually, +it is constructed by an error object created by a C++ Baton.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    e + + +object +| + +error + + + + + An object or error to wrap
    + + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    message + + +string + + + + + The error message
    code + + +number + + + + + The error code.
    origin + + +string + + + + + The origin, whether it is local or remote
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + +
    +
    +

    Members:

    +
    + +
    + + + + +

    (static, constant) codes :number

    + + + + +
    +

    + Enum for identifying errors reported by the library + +You can find this list in the C++ code at +https://github.com/edenhill/librdkafka/blob/master/src-cpp/rdkafkacpp.h#L148 +

    +
    + + + +
    Type:
    +
      +
    • + +number + + + +
    • +
    + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    ERR__BEGIN + + +number + + + + + Begin internal error codes
    ERR__BAD_MSG + + +number + + + + + Received message is incorrect
    ERR__BAD_COMPRESSION + + +number + + + + + Bad/unknown compression
    ERR__DESTROY + + +number + + + + + Broker is going away
    ERR__FAIL + + +number + + + + + Generic failure
    ERR__TRANSPORT + + +number + + + + + Broker transport failure
    ERR__CRIT_SYS_RESOURCE + + +number + + + + + Critical system resource
    ERR__RESOLVE + + +number + + + + + Failed to resolve broker
    ERR__MSG_TIMED_OUT + + +number + + + + + Produced message timed out
    ERR__PARTITION_EOF + + +number + + + + + Reached the end of the topic+partition queue on + the broker. Not really an error. + This event is disabled by default, + see the `enable.partition.eof` configuration property.
    ERR__UNKNOWN_PARTITION + + +number + + + + + Permanent: Partition does not exist in cluster.
    ERR__FS + + +number + + + + + File or filesystem error
    ERR__UNKNOWN_TOPIC + + +number + + + + + Permanent: Topic does not exist in cluster.
    ERR__ALL_BROKERS_DOWN + + +number + + + + + All broker connections are down.
    ERR__INVALID_ARG + + +number + + + + + Invalid argument, or invalid configuration
    ERR__TIMED_OUT + + +number + + + + + Operation timed out
    ERR__QUEUE_FULL + + +number + + + + + Queue is full
    ERR__ISR_INSUFF + + +number + + + + + ISR count < required.acks
    ERR__NODE_UPDATE + + +number + + + + + Broker node update
    ERR__SSL + + +number + + + + + SSL error
    ERR__WAIT_COORD + + +number + + + + + Waiting for coordinator to become available.
    ERR__UNKNOWN_GROUP + + +number + + + + + Unknown client group
    ERR__IN_PROGRESS + + +number + + + + + Operation in progress
    ERR__PREV_IN_PROGRESS + + +number + + + + + Previous operation in progress, wait for it to finish.
    ERR__EXISTING_SUBSCRIPTION + + +number + + + + + This operation would interfere with an existing subscription
    ERR__ASSIGN_PARTITIONS + + +number + + + + + Assigned partitions (rebalance_cb)
    ERR__REVOKE_PARTITIONS + + +number + + + + + Revoked partitions (rebalance_cb)
    ERR__CONFLICT + + +number + + + + + Conflicting use
    ERR__STATE + + +number + + + + + Wrong state
    ERR__UNKNOWN_PROTOCOL + + +number + + + + + Unknown protocol
    ERR__NOT_IMPLEMENTED + + +number + + + + + Not implemented
    ERR__AUTHENTICATION + + +number + + + + + Authentication failure
    ERR__NO_OFFSET + + +number + + + + + No stored offset
    ERR__OUTDATED + + +number + + + + + Outdated
    ERR__TIMED_OUT_QUEUE + + +number + + + + + Timed out in queue
    ERR__UNSUPPORTED_FEATURE + + +number + + + + + Feature not supported by broker
    ERR__WAIT_CACHE + + +number + + + + + Awaiting cache update
    ERR__INTR + + +number + + + + + Operation interrupted
    ERR__KEY_SERIALIZATION + + +number + + + + + Key serialization error
    ERR__VALUE_SERIALIZATION + + +number + + + + + Value serialization error
    ERR__KEY_DESERIALIZATION + + +number + + + + + Key deserialization error
    ERR__VALUE_DESERIALIZATION + + +number + + + + + Value deserialization error
    ERR__PARTIAL + + +number + + + + + Partial response
    ERR__READ_ONLY + + +number + + + + + Modification attempted on read-only object
    ERR__NOENT + + +number + + + + + No such entry / item not found
    ERR__UNDERFLOW + + +number + + + + + Read underflow
    ERR__INVALID_TYPE + + +number + + + + + Invalid type
    ERR__RETRY + + +number + + + + + Retry operation
    ERR__PURGE_QUEUE + + +number + + + + + Purged in queue
    ERR__PURGE_INFLIGHT + + +number + + + + + Purged in flight
    ERR__FATAL + + +number + + + + + Fatal error: see RdKafka::Handle::fatal_error()
    ERR__INCONSISTENT + + +number + + + + + Inconsistent state
    ERR__GAPLESS_GUARANTEE + + +number + + + + + Gap-less ordering would not be guaranteed if proceeding
    ERR__MAX_POLL_EXCEEDED + + +number + + + + + Maximum poll interval exceeded
    ERR__UNKNOWN_BROKER + + +number + + + + + Unknown broker
    ERR__NOT_CONFIGURED + + +number + + + + + Functionality not configured
    ERR__FENCED + + +number + + + + + Instance has been fenced
    ERR__APPLICATION + + +number + + + + + Application generated error
    ERR__ASSIGNMENT_LOST + + +number + + + + + Assignment lost
    ERR__NOOP + + +number + + + + + No operation performed
    ERR__AUTO_OFFSET_RESET + + +number + + + + + No offset to automatically reset to
    ERR__LOG_TRUNCATION + + +number + + + + + Partition log truncation detected
    ERR__END + + +number + + + + + End internal error codes
    ERR_UNKNOWN + + +number + + + + + Unknown broker error
    ERR_NO_ERROR + + +number + + + + + Success
    ERR_OFFSET_OUT_OF_RANGE + + +number + + + + + Offset out of range
    ERR_INVALID_MSG + + +number + + + + + Invalid message
    ERR_UNKNOWN_TOPIC_OR_PART + + +number + + + + + Unknown topic or partition
    ERR_INVALID_MSG_SIZE + + +number + + + + + Invalid message size
    ERR_LEADER_NOT_AVAILABLE + + +number + + + + + Leader not available
    ERR_NOT_LEADER_FOR_PARTITION + + +number + + + + + Not leader for partition
    ERR_REQUEST_TIMED_OUT + + +number + + + + + Request timed out
    ERR_BROKER_NOT_AVAILABLE + + +number + + + + + Broker not available
    ERR_REPLICA_NOT_AVAILABLE + + +number + + + + + Replica not available
    ERR_MSG_SIZE_TOO_LARGE + + +number + + + + + Message size too large
    ERR_STALE_CTRL_EPOCH + + +number + + + + + StaleControllerEpochCode
    ERR_OFFSET_METADATA_TOO_LARGE + + +number + + + + + Offset metadata string too large
    ERR_NETWORK_EXCEPTION + + +number + + + + + Broker disconnected before response received
    ERR_COORDINATOR_LOAD_IN_PROGRESS + + +number + + + + + Coordinator load in progress
    ERR_GROUP_LOAD_IN_PROGRESS + + +number + + + + + Group coordinator load in progress
    ERR_COORDINATOR_NOT_AVAILABLE + + +number + + + + + Coordinator not available
    ERR_GROUP_COORDINATOR_NOT_AVAILABLE + + +number + + + + + Group coordinator not available
    ERR_NOT_COORDINATOR + + +number + + + + + Not coordinator
    ERR_NOT_COORDINATOR_FOR_GROUP + + +number + + + + + Not coordinator for group
    ERR_TOPIC_EXCEPTION + + +number + + + + + Invalid topic
    ERR_RECORD_LIST_TOO_LARGE + + +number + + + + + Message batch larger than configured server segment size
    ERR_NOT_ENOUGH_REPLICAS + + +number + + + + + Not enough in-sync replicas
    ERR_NOT_ENOUGH_REPLICAS_AFTER_APPEND + + +number + + + + + Message(s) written to insufficient number of in-sync replicas
    ERR_INVALID_REQUIRED_ACKS + + +number + + + + + Invalid required acks value
    ERR_ILLEGAL_GENERATION + + +number + + + + + Specified group generation id is not valid
    ERR_INCONSISTENT_GROUP_PROTOCOL + + +number + + + + + Inconsistent group protocol
    ERR_INVALID_GROUP_ID + + +number + + + + + Invalid group.id
    ERR_UNKNOWN_MEMBER_ID + + +number + + + + + Unknown member
    ERR_INVALID_SESSION_TIMEOUT + + +number + + + + + Invalid session timeout
    ERR_REBALANCE_IN_PROGRESS + + +number + + + + + Group rebalance in progress
    ERR_INVALID_COMMIT_OFFSET_SIZE + + +number + + + + + Commit offset data size is not valid
    ERR_TOPIC_AUTHORIZATION_FAILED + + +number + + + + + Topic authorization failed
    ERR_GROUP_AUTHORIZATION_FAILED + + +number + + + + + Group authorization failed
    ERR_CLUSTER_AUTHORIZATION_FAILED + + +number + + + + + Cluster authorization failed
    ERR_INVALID_TIMESTAMP + + +number + + + + + Invalid timestamp
    ERR_UNSUPPORTED_SASL_MECHANISM + + +number + + + + + Unsupported SASL mechanism
    ERR_ILLEGAL_SASL_STATE + + +number + + + + + Illegal SASL state
    ERR_UNSUPPORTED_VERSION + + +number + + + + + Unuspported version
    ERR_TOPIC_ALREADY_EXISTS + + +number + + + + + Topic already exists
    ERR_INVALID_PARTITIONS + + +number + + + + + Invalid number of partitions
    ERR_INVALID_REPLICATION_FACTOR + + +number + + + + + Invalid replication factor
    ERR_INVALID_REPLICA_ASSIGNMENT + + +number + + + + + Invalid replica assignment
    ERR_INVALID_CONFIG + + +number + + + + + Invalid config
    ERR_NOT_CONTROLLER + + +number + + + + + Not controller for cluster
    ERR_INVALID_REQUEST + + +number + + + + + Invalid request
    ERR_UNSUPPORTED_FOR_MESSAGE_FORMAT + + +number + + + + + Message format on broker does not support request
    ERR_POLICY_VIOLATION + + +number + + + + + Policy violation
    ERR_OUT_OF_ORDER_SEQUENCE_NUMBER + + +number + + + + + Broker received an out of order sequence number
    ERR_DUPLICATE_SEQUENCE_NUMBER + + +number + + + + + Broker received a duplicate sequence number
    ERR_INVALID_PRODUCER_EPOCH + + +number + + + + + Producer attempted an operation with an old epoch
    ERR_INVALID_TXN_STATE + + +number + + + + + Producer attempted a transactional operation in an invalid state
    ERR_INVALID_PRODUCER_ID_MAPPING + + +number + + + + + Producer attempted to use a producer id which is not + currently assigned to its transactional id
    ERR_INVALID_TRANSACTION_TIMEOUT + + +number + + + + + Transaction timeout is larger than the maximum + value allowed by the broker's max.transaction.timeout.ms
    ERR_CONCURRENT_TRANSACTIONS + + +number + + + + + Producer attempted to update a transaction while another + concurrent operation on the same transaction was ongoing
    ERR_TRANSACTION_COORDINATOR_FENCED + + +number + + + + + Indicates that the transaction coordinator sending a + WriteTxnMarker is no longer the current coordinator for a + given producer
    ERR_TRANSACTIONAL_ID_AUTHORIZATION_FAILED + + +number + + + + + Transactional Id authorization failed
    ERR_SECURITY_DISABLED + + +number + + + + + Security features are disabled
    ERR_OPERATION_NOT_ATTEMPTED + + +number + + + + + Operation not attempted
    ERR_KAFKA_STORAGE_ERROR + + +number + + + + + Disk error when trying to access log file on the disk
    ERR_LOG_DIR_NOT_FOUND + + +number + + + + + The user-specified log directory is not found in the broker config
    ERR_SASL_AUTHENTICATION_FAILED + + +number + + + + + SASL Authentication failed
    ERR_UNKNOWN_PRODUCER_ID + + +number + + + + + Unknown Producer Id
    ERR_REASSIGNMENT_IN_PROGRESS + + +number + + + + + Partition reassignment is in progress
    ERR_DELEGATION_TOKEN_AUTH_DISABLED + + +number + + + + + Delegation Token feature is not enabled
    ERR_DELEGATION_TOKEN_NOT_FOUND + + +number + + + + + Delegation Token is not found on server
    ERR_DELEGATION_TOKEN_OWNER_MISMATCH + + +number + + + + + Specified Principal is not valid Owner/Renewer
    ERR_DELEGATION_TOKEN_REQUEST_NOT_ALLOWED + + +number + + + + + Delegation Token requests are not allowed on this connection
    ERR_DELEGATION_TOKEN_AUTHORIZATION_FAILED + + +number + + + + + Delegation Token authorization failed
    ERR_DELEGATION_TOKEN_EXPIRED + + +number + + + + + Delegation Token is expired
    ERR_INVALID_PRINCIPAL_TYPE + + +number + + + + + Supplied principalType is not supported
    ERR_NON_EMPTY_GROUP + + +number + + + + + The group is not empty
    ERR_GROUP_ID_NOT_FOUND + + +number + + + + + The group id does not exist
    ERR_FETCH_SESSION_ID_NOT_FOUND + + +number + + + + + The fetch session ID was not found
    ERR_INVALID_FETCH_SESSION_EPOCH + + +number + + + + + The fetch session epoch is invalid
    ERR_LISTENER_NOT_FOUND + + +number + + + + + No matching listener
    ERR_TOPIC_DELETION_DISABLED + + +number + + + + + Topic deletion is disabled
    ERR_FENCED_LEADER_EPOCH + + +number + + + + + Leader epoch is older than broker epoch
    ERR_UNKNOWN_LEADER_EPOCH + + +number + + + + + Leader epoch is newer than broker epoch
    ERR_UNSUPPORTED_COMPRESSION_TYPE + + +number + + + + + Unsupported compression type
    ERR_STALE_BROKER_EPOCH + + +number + + + + + Broker epoch has changed
    ERR_OFFSET_NOT_AVAILABLE + + +number + + + + + Leader high watermark is not caught up
    ERR_MEMBER_ID_REQUIRED + + +number + + + + + Group member needs a valid member ID
    ERR_PREFERRED_LEADER_NOT_AVAILABLE + + +number + + + + + Preferred leader was not available
    ERR_GROUP_MAX_SIZE_REACHED + + +number + + + + + Consumer group has reached maximum size
    ERR_FENCED_INSTANCE_ID + + +number + + + + + Static consumer fenced by other consumer with same +group.instance.id.
    ERR_ELIGIBLE_LEADERS_NOT_AVAILABLE + + +number + + + + + Eligible partition leaders are not available
    ERR_ELECTION_NOT_NEEDED + + +number + + + + + Leader election not needed for topic partition
    ERR_NO_REASSIGNMENT_IN_PROGRESS + + +number + + + + + No partition reassignment is in progress
    ERR_GROUP_SUBSCRIBED_TO_TOPIC + + +number + + + + + Deleting offsets of a topic while the consumer group is + subscribed to it
    ERR_INVALID_RECORD + + +number + + + + + Broker failed to validate record
    ERR_UNSTABLE_OFFSET_COMMIT + + +number + + + + + There are unstable offsets that need to be cleared
    ERR_THROTTLING_QUOTA_EXCEEDED + + +number + + + + + Throttling quota has been exceeded
    ERR_PRODUCER_FENCED + + +number + + + + + There is a newer producer with the same transactionalId + which fences the current one
    ERR_RESOURCE_NOT_FOUND + + +number + + + + + Request illegally referred to resource that does not exist
    ERR_DUPLICATE_RESOURCE + + +number + + + + + Request illegally referred to the same resource twice
    ERR_UNACCEPTABLE_CREDENTIAL + + +number + + + + + Requested credential would not meet criteria for acceptability
    ERR_INCONSISTENT_VOTER_SET + + +number + + + + + Indicates that the either the sender or recipient of a + voter-only request is not one of the expected voters
    ERR_INVALID_UPDATE_VERSION + + +number + + + + + Invalid update version
    ERR_FEATURE_UPDATE_FAILED + + +number + + + + + Unable to update finalized features due to server error
    ERR_PRINCIPAL_DESERIALIZATION_FAILURE + + +number + + + + + Request principal deserialization failed during forwarding
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + +
    + +
    + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/Producer.html b/v2.18.0/Producer.html new file mode 100644 index 00000000..52630751 --- /dev/null +++ b/v2.18.0/Producer.html @@ -0,0 +1,4650 @@ + + + + + JSDoc: Class: Producer + + + + + + + + + + + + + + + +
    +
    + +
    +

    Class: Producer

    + + + + + + +
    + +
    + +

    Producer

    + + +
    + +
    +
    + + + + + +

    + new Producer(conf, topicConf) +

    + + + + + +
    +

    Producer class for sending messages to Kafka + +This is the main entry point for writing data to Kafka. You +configure this like you do any other client, with a global +configuration and default topic configuration. + +Once you instantiate this object, you need to connect to it first. +This allows you to get the metadata and make sure the connection +can be made before you depend on it. After that, problems with +the connection will by brought down by using poll, which automatically +runs when a transaction is made on the object.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    conf + + +object + + + + + Key value pairs to configure the producer
    topicConf + + +object + + + + + Key value pairs to create a default +topic configuration
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + +
    + + +
    +
    +

    Extends:

    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    +
    +

    Members:

    +
    + +
    + + + + +

    _disconnect

    + + + + +
    +

    + Save the base disconnect method here so we can overwrite it and add a flush +

    +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + +

    _metadata :Client~Metadata

    + + + + +
    +

    + Metadata object. Starts out empty but will be filled with information after +the initial connect. +

    +
    + + + +
    Type:
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + +
    +
    +

    Methods:

    +
    + +
    + + + + + + + +

    + (static) createWriteStream(conf, topicConf, streamOptions) → {ProducerStream} +

    + + + + + +
    +

    Create a write stream interface for a producer. + +This stream does not run in object mode. It only takes buffers of data.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    conf + + +object + + + + + Key value pairs to configure the producer
    topicConf + + +object + + + + + Key value pairs to create a default +topic configuration
    streamOptions + + +object + + + + + Stream options
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns the write stream for writing to Kafka. +
    + + + +
    +
    + Type +
    +
    + +ProducerStream + + + +
    +
    + + + + + + + + + + + +

    + abortTransaction(timeout, cb) → {Producer} +

    + + + + + +
    +

    Aborts the ongoing transaction.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    timeout + + +number + + + + + Number of milliseconds to try to abort, defaults to 5 seconds
    cb + + +function + + + + + Callback to return when operation is completed
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + beginTransaction() → {Producer} +

    + + + + + +
    +

    Begin a transaction. + +'initTransaction' must have been called successfully (once) before this function is called.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + commitTransaction(timeout, cb) → {Producer} +

    + + + + + +
    +

    Commit the current transaction (as started with 'beginTransaction').

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    timeout + + +number + + + + + Number of milliseconds to try to commit before giving up, defaults to 5 seconds
    cb + + +function + + + + + Callback to return when operation is completed
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + connect(metadataOptions, cb) → {Client} +

    + + + + + +
    +

    Connect to the broker and receive its metadata. + +Connects to a broker by establishing the client and fetches its metadata.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    metadataOptions + + +object + + + + + Options to be sent to the metadata. +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + Topic to fetch metadata for. Empty string is treated as empty.
    allTopics + + +boolean + + + + + Fetch metadata for all topics, not just the ones we know about.
    timeout + + +int + + + + + The timeout, in ms, to allow for fetching metadata. Defaults to 30000ms
    + +
    cb + + +Client~connectionCallback + + + + + Callback that indicates we are +done connecting.
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Returns itself. +
    + + + +
    +
    + Type +
    +
    + +Client + + + +
    +
    + + + + + + + + + + + +

    + connectedTime() → {number} +

    + + + + + +
    +

    Find out how long we have been connected to Kafka.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Milliseconds since the connection has been established. +
    + + + +
    +
    + Type +
    +
    + +number + + + +
    +
    + + + + + + + + + + + +

    + disconnect(timeout, cb) +

    + + + + + +
    +

    Disconnect the producer + +Flush everything on the internal librdkafka producer buffer. Then disconnect

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    timeout + + +number + + + + + Number of milliseconds to try to flush before giving up, defaults to 5 seconds.
    cb + + +function + + + + + The callback to fire when
    + + + + + + +
    + + + + + + + + +
    Overrides:
    +
    + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + flush(timeout, callback) → {Producer} +

    + + + + + +
    +

    Flush the producer + +Flush everything on the internal librdkafka producer buffer. Do this before +disconnects usually

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    timeout + + +number + + + + + Number of milliseconds to try to flush before giving up.
    callback + + +function + + + + + Callback to fire when the flush is done.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + getClient() → {Connection} +

    + + + + + +
    +

    Get the native Kafka client. + +You probably shouldn't use this, but if you want to execute methods directly +on the c++ wrapper you can do it here.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + +
    See:
    +
    +
      +
    • connection.cc
    • +
    +
    + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - The native Kafka client. +
    + + + +
    +
    + Type +
    +
    + +Connection + + + +
    +
    + + + + + + + + + + + +

    + getLastError() → {LibrdKafkaError} +

    + + + + + +
    +

    Get the last error emitted if it exists.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Returns the LibrdKafkaError or null if +one hasn't been thrown. +
    + + + +
    +
    + Type +
    +
    + +LibrdKafkaError + + + +
    +
    + + + + + + + + + + + +

    + getMetadata(metadataOptions, cb) +

    + + + + + +
    +

    Get client metadata. + +Note: using a metadataOptions.topic parameter has a potential side-effect. +A Topic object will be created, if it did not exist yet, with default options +and it will be cached by librdkafka. + +A subsequent call to create the topic object with specific options (e.g. acks) will return +the previous instance and the specific options will be silently ignored. + +To avoid this side effect, the topic object can be created with the expected options before requesting metadata, +or the metadata request can be performed for all topics (by omitting metadataOptions.topic).

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    metadataOptions + + +object + + + + + Metadata options to pass to the client. +
    Properties
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + Topic string for which to fetch +metadata
    timeout + + +number + + + + + Max time, in ms, to try to fetch +metadata before timing out. Defaults to 3000.
    + +
    cb + + +Client~metadataCallback + + + + + Callback to fire with the metadata.
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + initTransactions(timeout, cb) → {Producer} +

    + + + + + +
    +

    Init a transaction. + +Initialize transactions, this is only performed once per transactional producer.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    timeout + + +number + + + + + Number of milliseconds to try to initialize before giving up, defaults to 5 seconds.
    cb + + +function + + + + + Callback to return when operation is completed
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + isConnected() → {boolean} +

    + + + + + +
    +

    Whether or not we are connected to Kafka.

    +
    + + + + + + + + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - Whether we are connected. +
    + + + +
    +
    + Type +
    +
    + +boolean + + + +
    +
    + + + + + + + + + + + +

    + offsetsForTimes(toppars, timeout, cb) +

    + + + + + +
    +

    Query offsets for times from the broker. + +This function makes a call to the broker to get the offsets for times specified.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    toppars + + +Array.<TopicPartition> + + + + + Array of topic partitions. The offset in these + should instead refer to a timestamp you want + offsets for
    timeout + + +number + + + + + Number of ms to wait to recieve a response.
    cb + + +Client~offsetsForTimesCallback + + + + + Callback to fire with the filled in offsets.
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + poll() → {Producer} +

    + + + + + +
    +

    Poll for events + +We need to run poll in order to learn about new events that have occurred. +This is no longer done automatically when we produce, so we need to run +it manually, or set the producer to automatically poll.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + produce(topic, partition, message, key, timestamp, opaque, headers) → {boolean} +

    + + + + + +
    +

    Produce a message to Kafka synchronously. + +This is the method mainly used in this class. Use it to produce +a message to Kafka. + +When this is sent off, there is no guarantee it is delivered. If you need +guaranteed delivery, change your *acks* settings, or use delivery reports.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + The topic name to produce to.
    partition + + +number +| + +null + + + + + The partition number to produce to.
    message + + +Buffer +| + +null + + + + + The message to produce.
    key + + +string + + + + + The key associated with the message.
    timestamp + + +number +| + +null + + + + + Timestamp to send with the message.
    opaque + + +object + + + + + An object you want passed along with this message, if provided.
    headers + + +object + + + + + A list of custom key value pairs that provide message metadata.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + +
    See:
    +
    + +
    + + + +
    + + + + + + + + + + + +
    +
    +

    Throws:

    +
    +
    + + + + +
    +
    +
    + - Throws a librdkafka error if it failed. +
    +
    +
    +
    +
    +
    + Type +
    +
    + +LibrdKafkaError + + + +
    +
    +
    +
    +
    + + + + + +
    Returns:
    + + +
    + - returns an error if it failed, or true if not +
    + + + +
    +
    + Type +
    +
    + +boolean + + + +
    +
    + + + + + + + + + + + +

    + queryWatermarkOffsets(topic, partition, timeout, cb) +

    + + + + + +
    +

    Query offsets from the broker. + +This function makes a call to the broker to get the current low (oldest/beginning) +and high (newest/end) offsets for a topic partition.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    topic + + +string + + + + + Topic to recieve offsets from.
    partition + + +number + + + + + Partition of the provided topic to recieve offsets from
    timeout + + +number + + + + + Number of ms to wait to recieve a response.
    cb + + +Client~watermarkOffsetsCallback + + + + + Callback to fire with the offsets.
    + + + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + sendOffsetsToTransaction(offsets, consumer, timeout, cb) → {Producer} +

    + + + + + +
    +

    Send the current offsets of the consumer to the ongoing transaction.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    offsets + + +number + + + + + Offsets to send as part of the next commit
    consumer + + +Consumer + + + + + An instance of the consumer
    timeout + + +number + + + + + Number of milliseconds to try to send offsets, defaults to 5 seconds
    cb + + +function + + + + + Callback to return when operation is completed
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + + +

    + setPollInterval(interval) → {Producer} +

    + + + + + +
    +

    Set automatic polling for events. + +We need to run poll in order to learn about new events that have occurred. +If you would like this done on an interval with disconnects and reconnections +managed, you can do it here

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    interval + + +number + + + + + Interval, in milliseconds, to poll
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + - returns itself. +
    + + + +
    +
    + Type +
    +
    + +Producer + + + +
    +
    + + + + + + + + + + +
    +
    +

    Type Definitions:

    +
    + +
    + + + + +

    Message

    + + + + +
    +

    + Producer message. This is sent to the wrapper, not received from it +

    +
    + + + +
    Type:
    +
      +
    • + +object + + + +
    • +
    + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    message + + +string +| + +buffer + + + + + The buffer to send to Kafka.
    topic + + +Topic + + + + + The Kafka topic to produce to.
    partition + + +number + + + + + The partition to produce to. Defaults to +the partitioner
    key + + +string + + + + + The key string to use for the message.
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + +
    See:
    +
    +
      +
    • Consumer~Message
    • +
    +
    + + + +
    + + + + + + + + + + +

    Events

    + + + + + + +

    + disconnected +

    + + + + + +
    +

    Disconnect event. Called after disconnection is finished.

    +
    + + + + + +
    +
    +

    Type:

    +
    +
    + +
      +
    • + +object + + + +
    • +
    + + + + + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    connectionOpened + + +date + + + + + when the connection was opened.
    + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + ready +

    + + + + + +
    +

    Ready event. Called when the Client connects successfully

    +
    + + + + + +
    +
    +

    Type:

    +
    +
    + +
      +
    • + +object + + + +
    • +
    + + + + + + + + + +
    Properties:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    name + + +string + + + + + the name of the broker.
    + + + + +
    + + + + + + +
    Inherited From:
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/ProducerStream.html b/v2.18.0/ProducerStream.html new file mode 100644 index 00000000..d7606703 --- /dev/null +++ b/v2.18.0/ProducerStream.html @@ -0,0 +1,348 @@ + + + + + JSDoc: Class: ProducerStream + + + + + + + + + + + + + + + +
    +
    + +
    +

    Class: ProducerStream

    + + + + + + +
    + +
    + +

    ProducerStream

    + + +
    + +
    +
    + + + + + +

    + new ProducerStream(producer, topics, options) +

    + + + + + +
    +

    Writable stream integrating with the Kafka Producer. + +This class is used to write data to Kafka in a streaming way. It takes +buffers of data and puts them into the appropriate Kafka topic. If you need +finer control over partitions or keys, this is probably not the class for +you. In that situation just use the Producer itself. + +The stream detects if Kafka is already connected. You can safely begin +writing right away. + +This stream does not operate in Object mode and can only be given buffers.

    +
    + + + + + + + + + +
    +
    +

    Parameters:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    producer + + +Producer + + + + + The Kafka Producer object.
    topics + + +array + + + + + Array of topics
    options + + +object + + + + + Topic configuration.
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + +
    + + +
    +
    +

    Extends:

    +
    + +
    + + + + + +
      +
    • stream.Writable
    • +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/admin.js.html b/v2.18.0/admin.js.html new file mode 100644 index 00000000..3aad70e9 --- /dev/null +++ b/v2.18.0/admin.js.html @@ -0,0 +1,310 @@ + + + + + JSDoc: Source: admin.js + + + + + + + + + + + + + + + +
    +
    + +
    +

    Source: admin.js

    + + + + + + +
    +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +'use strict';
    +
    +module.exports = {
    +  create: createAdminClient,
    +};
    +
    +var Client = require('./client');
    +var util = require('util');
    +var Kafka = require('../librdkafka');
    +var LibrdKafkaError = require('./error');
    +var shallowCopy = require('./util').shallowCopy;
    +
    +/**
    + * Create a new AdminClient for making topics, partitions, and more.
    + *
    + * This is a factory method because it immediately starts an
    + * active handle with the brokers.
    + *
    + */
    +function createAdminClient(conf) {
    +  var client = new AdminClient(conf);
    +
    +  // Wrap the error so we throw if it failed with some context
    +  LibrdKafkaError.wrap(client.connect(), true);
    +
    +  // Return the client if we succeeded
    +  return client;
    +}
    +
    +/**
    + * AdminClient class for administering Kafka
    + *
    + * This client is the way you can interface with the Kafka Admin APIs.
    + * This class should not be made using the constructor, but instead
    + * should be made using the factory method.
    + *
    + * <code>
    + * var client = AdminClient.create({ ... });
    + * </code>
    + *
    + * Once you instantiate this object, it will have a handle to the kafka broker.
    + * Unlike the other node-rdkafka classes, this class does not ensure that
    + * it is connected to the upstream broker. Instead, making an action will
    + * validate that.
    + *
    + * @param {object} conf - Key value pairs to configure the admin client
    + * topic configuration
    + * @constructor
    + */
    +function AdminClient(conf) {
    +  if (!(this instanceof AdminClient)) {
    +    return new AdminClient(conf);
    +  }
    +
    +  conf = shallowCopy(conf);
    +
    +  /**
    +   * NewTopic model.
    +   *
    +   * This is the representation of a new message that is requested to be made
    +   * using the Admin client.
    +   *
    +   * @typedef {object} AdminClient~NewTopic
    +   * @property {string} topic - the topic name to create
    +   * @property {number} num_partitions - the number of partitions to give the topic
    +   * @property {number} replication_factor - the replication factor of the topic
    +   * @property {object} config - a list of key values to be passed as configuration
    +   * for the topic.
    +   */
    +
    +  this._client = new Kafka.AdminClient(conf);
    +  this._isConnected = false;
    +  this.globalConfig = conf;
    +}
    +
    +/**
    + * Connect using the admin client.
    + *
    + * Should be run using the factory method, so should never
    + * need to be called outside.
    + *
    + * Unlike the other connect methods, this one is synchronous.
    + */
    +AdminClient.prototype.connect = function() {
    +  LibrdKafkaError.wrap(this._client.connect(), true);
    +  this._isConnected = true;
    +};
    +
    +/**
    + * Disconnect the admin client.
    + *
    + * This is a synchronous method, but all it does is clean up
    + * some memory and shut some threads down
    + */
    +AdminClient.prototype.disconnect = function() {
    +  LibrdKafkaError.wrap(this._client.disconnect(), true);
    +  this._isConnected = false;
    +};
    +
    +/**
    + * Create a topic with a given config.
    + *
    + * @param {NewTopic} topic - Topic to create.
    + * @param {number} timeout - Number of milliseconds to wait while trying to create the topic.
    + * @param {function} cb - The callback to be executed when finished
    + */
    +AdminClient.prototype.createTopic = function(topic, timeout, cb) {
    +  if (!this._isConnected) {
    +    throw new Error('Client is disconnected');
    +  }
    +
    +  if (typeof timeout === 'function') {
    +    cb = timeout;
    +    timeout = 5000;
    +  }
    +
    +  if (!timeout) {
    +    timeout = 5000;
    +  }
    +
    +  this._client.createTopic(topic, timeout, function(err) {
    +    if (err) {
    +      if (cb) {
    +        cb(LibrdKafkaError.create(err));
    +      }
    +      return;
    +    }
    +
    +    if (cb) {
    +      cb();
    +    }
    +  });
    +};
    +
    +/**
    + * Delete a topic.
    + *
    + * @param {string} topic - The topic to delete, by name.
    + * @param {number} timeout - Number of milliseconds to wait while trying to delete the topic.
    + * @param {function} cb - The callback to be executed when finished
    + */
    +AdminClient.prototype.deleteTopic = function(topic, timeout, cb) {
    +  if (!this._isConnected) {
    +    throw new Error('Client is disconnected');
    +  }
    +
    +  if (typeof timeout === 'function') {
    +    cb = timeout;
    +    timeout = 5000;
    +  }
    +
    +  if (!timeout) {
    +    timeout = 5000;
    +  }
    +
    +  this._client.deleteTopic(topic, timeout, function(err) {
    +    if (err) {
    +      if (cb) {
    +        cb(LibrdKafkaError.create(err));
    +      }
    +      return;
    +    }
    +
    +    if (cb) {
    +      cb();
    +    }
    +  });
    +};
    +
    +/**
    + * Create new partitions for a topic.
    + *
    + * @param {string} topic - The topic to add partitions to, by name.
    + * @param {number} totalPartitions - The total number of partitions the topic should have
    + *                                   after the request
    + * @param {number} timeout - Number of milliseconds to wait while trying to create the partitions.
    + * @param {function} cb - The callback to be executed when finished
    + */
    +AdminClient.prototype.createPartitions = function(topic, totalPartitions, timeout, cb) {
    +  if (!this._isConnected) {
    +    throw new Error('Client is disconnected');
    +  }
    +
    +  if (typeof timeout === 'function') {
    +    cb = timeout;
    +    timeout = 5000;
    +  }
    +
    +  if (!timeout) {
    +    timeout = 5000;
    +  }
    +
    +  this._client.createPartitions(topic, totalPartitions, timeout, function(err) {
    +    if (err) {
    +      if (cb) {
    +        cb(LibrdKafkaError.create(err));
    +      }
    +      return;
    +    }
    +
    +    if (cb) {
    +      cb();
    +    }
    +  });
    +};
    +
    +
    +
    + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/v2.18.0/client.js.html b/v2.18.0/client.js.html new file mode 100644 index 00000000..42f6d5bb --- /dev/null +++ b/v2.18.0/client.js.html @@ -0,0 +1,651 @@ + + + + + JSDoc: Source: client.js + + + + + + + + + + + + + + + +
    +
    + +
    +

    Source: client.js

    + + + + + + +
    +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +module.exports = Client;
    +
    +var Emitter = require('events').EventEmitter;
    +var util = require('util');
    +var Kafka = require('../librdkafka.js');
    +var assert = require('assert');
    +
    +var LibrdKafkaError = require('./error');
    +
    +util.inherits(Client, Emitter);
    +
    +/**
    + * Base class for Consumer and Producer
    + *
    + * This should not be created independently, but rather is
    + * the base class on which both producer and consumer
    + * get their common functionality.
    + *
    + * @param {object} globalConf - Global configuration in key value pairs.
    + * @param {function} SubClientType - The function representing the subclient
    + * type. In C++ land this needs to be a class that inherits from Connection.
    + * @param {object} topicConf - Topic configuration in key value pairs
    + * @constructor
    + * @extends Emitter
    + */
    +function Client(globalConf, SubClientType, topicConf) {
    +  if (!(this instanceof Client)) {
    +    return new Client(globalConf, SubClientType, topicConf);
    +  }
    +
    +  Emitter.call(this);
    +
    +  // This superclass must be initialized with the Kafka.{Producer,Consumer}
    +  // @example var client = new Client({}, Kafka.Producer);
    +  // remember this is a superclass so this will get taken care of in
    +  // the producer and consumer main wrappers
    +
    +  var no_event_cb = globalConf.event_cb === false;
    +  topicConf = topicConf || {};
    +
    +  // delete this because librdkafka will complain since this particular
    +  // key is a real conf value
    +  delete globalConf.event_cb;
    +
    +  this._client = new SubClientType(globalConf, topicConf);
    +
    +  var extractFunctions = function(obj) {
    +    obj = obj || {};
    +    var obj2 = {};
    +    for (var p in obj) {
    +      if (typeof obj[p] === "function") {
    +        obj2[p] = obj[p];
    +      }
    +    }
    +    return obj2;
    +  }
    +  this._cb_configs = {
    +    global: extractFunctions(globalConf),
    +    topic: extractFunctions(topicConf),
    +    event: {},
    +  }
    +
    +  if (!no_event_cb) {
    +    this._cb_configs.event.event_cb = function(eventType, eventData) {
    +      switch (eventType) {
    +        case 'error':
    +          this.emit('event.error', LibrdKafkaError.create(eventData));
    +          break;
    +        case 'stats':
    +          this.emit('event.stats', eventData);
    +          break;
    +        case 'log':
    +          this.emit('event.log', eventData);
    +          break;
    +        default:
    +          this.emit('event.event', eventData);
    +          this.emit('event.' + eventType, eventData);
    +      }
    +    }.bind(this);
    +  }
    +
    +  this.metrics = {};
    +  this._isConnected = false;
    +  this.errorCounter = 0;
    +
    +  /**
    +   * Metadata object. Starts out empty but will be filled with information after
    +   * the initial connect.
    +   *
    +   * @type {Client~Metadata}
    +   */
    +  this._metadata = {};
    +
    +  var self = this;
    +
    +  this.on('ready', function(info) {
    +    self.metrics.connectionOpened = Date.now();
    +    self.name = info.name;
    +  })
    +  .on('disconnected', function() {
    +    // reset metrics
    +    self.metrics = {};
    +    self._isConnected = false;
    +    // keep the metadata. it still may be useful
    +  })
    +  .on('event.error', function(err) {
    +    self.lastError = err;
    +    ++self.errorCounter;
    +  });
    +
    +}
    +
    +/**
    + * Connect to the broker and receive its metadata.
    + *
    + * Connects to a broker by establishing the client and fetches its metadata.
    + *
    + * @param {object} metadataOptions - Options to be sent to the metadata.
    + * @param {string} metadataOptions.topic - Topic to fetch metadata for. Empty string is treated as empty.
    + * @param {boolean} metadataOptions.allTopics - Fetch metadata for all topics, not just the ones we know about.
    + * @param {int} metadataOptions.timeout - The timeout, in ms, to allow for fetching metadata. Defaults to 30000ms
    + * @param  {Client~connectionCallback} cb - Callback that indicates we are
    + * done connecting.
    + * @return {Client} - Returns itself.
    + */
    +Client.prototype.connect = function(metadataOptions, cb) {
    +  var self = this;
    +
    +  var next = function(err, data) {
    +    self._isConnecting = false;
    +    if (cb) {
    +      cb(err, data);
    +    }
    +  };
    +
    +  if (this._isConnected) {
    +    setImmediate(next);
    +    return self;
    +  }
    +
    +  if (this._isConnecting) {
    +    this.once('ready', function() {
    +      next(null, this._metadata);
    +    });
    +    return self;
    +  }
    +
    +  this._isConnecting = true;
    +
    +  var fail = function(err) {
    +    var callbackCalled = false;
    +    var t;
    +
    +    if (self._isConnected) {
    +      self._isConnected = false;
    +      self._client.disconnect(function() {
    +        if (callbackCalled) {
    +          return;
    +        }
    +        clearTimeout(t);
    +        callbackCalled = true;
    +
    +        next(err); return;
    +      });
    +
    +      // don't take too long. this is a failure, after all
    +      t = setTimeout(function() {
    +        if (callbackCalled) {
    +          return;
    +        }
    +        callbackCalled = true;
    +
    +        next(err); return;
    +      }, 10000).unref();
    +
    +      self.emit('connection.failure', err, self.metrics);
    +    } else {
    +
    +      next(err);
    +    }
    +  };
    +
    +  this._client.configureCallbacks(true, this._cb_configs);
    +
    +  this._client.connect(function(err, info) {
    +    if (err) {
    +      fail(LibrdKafkaError.create(err)); return;
    +    }
    +
    +    self._isConnected = true;
    +
    +    // Otherwise we are successful
    +    self.getMetadata(metadataOptions || {}, function(err, metadata) {
    +      if (err) {
    +        // We are connected so we need to disconnect
    +        fail(LibrdKafkaError.create(err)); return;
    +      }
    +
    +      self._isConnecting = false;
    +      // We got the metadata otherwise. It is set according to above param
    +      // Set it here as well so subsequent ready callbacks
    +      // can check it
    +      self._isConnected = true;
    +
    +      /**
    +       * Ready event. Called when the Client connects successfully
    +       *
    +       * @event Client#ready
    +       * @type {object}
    +       * @property {string} name - the name of the broker.
    +       */
    +      self.emit('ready', info, metadata);
    +      next(null, metadata); return;
    +
    +    });
    +
    +  });
    +
    +  return self;
    +
    +};
    +
    +/**
    + * Get the native Kafka client.
    + *
    + * You probably shouldn't use this, but if you want to execute methods directly
    + * on the c++ wrapper you can do it here.
    + *
    + * @see connection.cc
    + * @return {Connection} - The native Kafka client.
    + */
    +Client.prototype.getClient = function() {
    +  return this._client;
    +};
    +
    +/**
    + * Find out how long we have been connected to Kafka.
    + *
    + * @return {number} - Milliseconds since the connection has been established.
    + */
    +Client.prototype.connectedTime = function() {
    +  if (!this.isConnected()) {
    +    return 0;
    +  }
    +  return Date.now() - this.metrics.connectionOpened;
    +};
    +
    +/**
    + * Whether or not we are connected to Kafka.
    + *
    + * @return {boolean} - Whether we are connected.
    + */
    +Client.prototype.isConnected = function() {
    +  return !!(this._isConnected && this._client);
    +};
    +
    +/**
    + * Get the last error emitted if it exists.
    + *
    + * @return {LibrdKafkaError} - Returns the LibrdKafkaError or null if
    + * one hasn't been thrown.
    + */
    +Client.prototype.getLastError = function() {
    +  return this.lastError || null;
    +};
    +
    +/**
    + * Disconnect from the Kafka client.
    + *
    + * This method will disconnect us from Kafka unless we are already in a
    + * disconnecting state. Use this when you're done reading or producing messages
    + * on a given client.
    + *
    + * It will also emit the disconnected event.
    + *
    + * @fires Client#disconnected
    + * @return {function} - Callback to call when disconnection is complete.
    + */
    +Client.prototype.disconnect = function(cb) {
    +  var self = this;
    +
    +  if (!this._isDisconnecting && this._client) {
    +    this._isDisconnecting = true;
    +    this._client.disconnect(function() {
    +      // this take 5000 milliseconds. Librdkafka needs to make sure the memory
    +      // has been cleaned up before we delete things. @see RdKafka::wait_destroyed
    +      self._client.configureCallbacks(false, self._cb_configs);
    +
    +      // Broadcast metrics. Gives people one last chance to do something with them
    +      self._isDisconnecting = false;
    +      /**
    +       * Disconnect event. Called after disconnection is finished.
    +       *
    +       * @event Client#disconnected
    +       * @type {object}
    +       * @property {date} connectionOpened - when the connection was opened.
    +       */
    +      var metricsCopy = Object.assign({}, self.metrics);
    +      self.emit('disconnected', metricsCopy);
    +      if (cb) {
    +        cb(null, metricsCopy);
    +      }
    +
    +    });
    +
    +  }
    +
    +  return self;
    +};
    +
    +/**
    + * Get client metadata.
    + *
    + * Note: using a <code>metadataOptions.topic</code> parameter has a potential side-effect.
    + * A Topic object will be created, if it did not exist yet, with default options
    + * and it will be cached by librdkafka.
    + *
    + * A subsequent call to create the topic object with specific options (e.g. <code>acks</code>) will return
    + * the previous instance and the specific options will be silently ignored.
    + *
    + * To avoid this side effect, the topic object can be created with the expected options before requesting metadata,
    + * or the metadata request can be performed for all topics (by omitting <code>metadataOptions.topic</code>).
    + *
    + * @param {object} metadataOptions - Metadata options to pass to the client.
    + * @param {string} metadataOptions.topic - Topic string for which to fetch
    + * metadata
    + * @param {number} metadataOptions.timeout - Max time, in ms, to try to fetch
    + * metadata before timing out. Defaults to 3000.
    + * @param {Client~metadataCallback} cb - Callback to fire with the metadata.
    + */
    +Client.prototype.getMetadata = function(metadataOptions, cb) {
    +  if (!this.isConnected()) {
    +    return cb(new Error('Client is disconnected'));
    +  }
    +
    +  var self = this;
    +
    +  this._client.getMetadata(metadataOptions || {}, function(err, metadata) {
    +    if (err) {
    +      if (cb) {
    +        cb(LibrdKafkaError.create(err));
    +      }
    +      return;
    +    }
    +
    +    // No error otherwise
    +    self._metadata = metadata;
    +
    +    if (cb) {
    +      cb(null, metadata);
    +    }
    +
    +  });
    +
    +};
    +
    +/**
    + * Query offsets from the broker.
    + *
    + * This function makes a call to the broker to get the current low (oldest/beginning)
    + * and high (newest/end) offsets for a topic partition.
    + *
    + * @param {string} topic - Topic to recieve offsets from.
    + * @param {number} partition - Partition of the provided topic to recieve offsets from
    + * @param {number} timeout - Number of ms to wait to recieve a response.
    + * @param {Client~watermarkOffsetsCallback} cb - Callback to fire with the offsets.
    + */
    +Client.prototype.queryWatermarkOffsets = function(topic, partition, timeout, cb) {
    +  if (!this.isConnected()) {
    +    if (cb) {
    +      return cb(new Error('Client is disconnected'));
    +    } else {
    +      return;
    +    }
    +  }
    +
    +  var self = this;
    +
    +  if (typeof timeout === 'function') {
    +    cb = timeout;
    +    timeout = 1000;
    +  }
    +
    +  if (!timeout) {
    +    timeout = 1000;
    +  }
    +
    +  this._client.queryWatermarkOffsets(topic, partition, timeout, function(err, offsets) {
    +    if (err) {
    +      if (cb) {
    +        cb(LibrdKafkaError.create(err));
    +      }
    +      return;
    +    }
    +
    +    if (cb) {
    +      cb(null, offsets);
    +    }
    +
    +  });
    +};
    +
    +/**
    + * Query offsets for times from the broker.
    + *
    + * This function makes a call to the broker to get the offsets for times specified.
    + *
    + * @param {TopicPartition[]} toppars - Array of topic partitions. The offset in these
    + *                                     should instead refer to a timestamp you want
    + *                                     offsets for
    + * @param {number} timeout - Number of ms to wait to recieve a response.
    + * @param {Client~offsetsForTimesCallback} cb - Callback to fire with the filled in offsets.
    + */
    +Client.prototype.offsetsForTimes = function(toppars, timeout, cb) {
    +  if (!this.isConnected()) {
    +    if (cb) {
    +      return cb(new Error('Client is disconnected'));
    +    } else {
    +      return;
    +    }
    +  }
    +
    +  var self = this;
    +
    +  if (typeof timeout === 'function') {
    +    cb = timeout;
    +    timeout = 1000;
    +  }
    +
    +  if (!timeout) {
    +    timeout = 1000;
    +  }
    +
    +  this._client.offsetsForTimes(toppars, timeout, function(err, toppars) {
    +    if (err) {
    +      if (cb) {
    +        cb(LibrdKafkaError.create(err));
    +      }
    +      return;
    +    }
    +
    +    if (cb) {
    +      cb(null, toppars);
    +    }
    +
    +  });
    +};
    +
    +/**
    + * Wrap a potential RdKafka error.
    + *
    + * This internal method is meant to take a return value
    + * from a function that returns an RdKafka error code, throw if it
    + * is an error (Making it a proper librdkafka error object), or
    + * return the appropriate value otherwise.
    + *
    + * It is intended to be used in a return statement,
    + *
    + * @private
    + * @param {number} errorCode - Error code returned from a native method
    + * @param {bool} intIsError - If specified true, any non-number return type will be classified as a success
    + * @return {boolean} - Returns true or the method return value unless it throws.
    + */
    +Client.prototype._errorWrap = function(errorCode, intIsError) {
    +  var returnValue = true;
    +  if (intIsError) {
    +    returnValue = errorCode;
    +    errorCode = typeof errorCode === 'number' ? errorCode : 0;
    +  }
    +
    +  if (errorCode !== LibrdKafkaError.codes.ERR_NO_ERROR) {
    +    var e = LibrdKafkaError.create(errorCode);
    +    throw e;
    +  }
    +
    +  return returnValue;
    +};
    +
    +/**
    + * This callback is used to pass metadata or an error after a successful
    + * connection
    + *
    + * @callback Client~connectionCallback
    + * @param {Error} err - An error, if one occurred while connecting.
    + * @param {Client~Metadata} metadata - Metadata object.
    + */
    +
    + /**
    +  * This callback is used to pass offsets or an error after a successful
    +  * query
    +  *
    +  * @callback Client~watermarkOffsetsCallback
    +  * @param {Error} err - An error, if one occurred while connecting.
    +  * @param {Client~watermarkOffsets} offsets - Watermark offsets
    +  */
    +
    +  /**
    +   * This callback is used to pass toppars or an error after a successful
    +   * times query
    +   *
    +   * @callback Client~offsetsForTimesCallback
    +   * @param {Error} err - An error, if one occurred while connecting.
    +   * @param {TopicPartition[]} toppars - Topic partitions with offsets filled in
    +   */
    +
    +/**
    + * @typedef {object} Client~watermarkOffsets
    + * @property {number} high - High (newest/end) offset
    + * @property {number} low - Low (oldest/beginning) offset
    + */
    +
    +/**
    + * @typedef {object} Client~MetadataBroker
    + * @property {number} id - Broker ID
    + * @property {string} host - Broker host
    + * @property {number} port - Broker port.
    + */
    +
    +/**
    + * @typedef {object} Client~MetadataTopic
    + * @property {string} name - Topic name
    + * @property {Client~MetadataPartition[]} partitions - Array of partitions
    + */
    +
    +/**
    + * @typedef {object} Client~MetadataPartition
    + * @property {number} id - Partition id
    + * @property {number} leader - Broker ID for the partition leader
    + * @property {number[]} replicas - Array of replica IDs
    + * @property {number[]} isrs - Arrqay of ISRS ids
    +*/
    +
    +/**
    + * Metadata object.
    + *
    + * This is the representation of Kafka metadata in JavaScript.
    + *
    + * @typedef {object} Client~Metadata
    + * @property {number} orig_broker_id - The broker ID of the original bootstrap
    + * broker.
    + * @property {string} orig_broker_name - The name of the original bootstrap
    + * broker.
    + * @property {Client~MetadataBroker[]} brokers - An array of broker objects
    + * @property {Client~MetadataTopic[]} topics - An array of topics.
    + */
    +
    +
    +
    + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/v2.18.0/error.js.html b/v2.18.0/error.js.html new file mode 100644 index 00000000..351ff44f --- /dev/null +++ b/v2.18.0/error.js.html @@ -0,0 +1,569 @@ + + + + + JSDoc: Source: error.js + + + + + + + + + + + + + + + +
    +
    + +
    +

    Source: error.js

    + + + + + + +
    +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +module.exports = LibrdKafkaError;
    +
    +var util = require('util');
    +var librdkafka = require('../librdkafka');
    +
    +util.inherits(LibrdKafkaError, Error);
    +
    +LibrdKafkaError.create = createLibrdkafkaError;
    +LibrdKafkaError.wrap = errorWrap;
    +
    +/**
    + * Enum for identifying errors reported by the library
    + *
    + * You can find this list in the C++ code at
    + * https://github.com/edenhill/librdkafka/blob/master/src-cpp/rdkafkacpp.h#L148
    + *
    + * @readonly
    + * @enum {number}
    + * @constant
    + */
    +// ====== Generated from librdkafka 2.3.0 file src-cpp/rdkafkacpp.h ======
    +LibrdKafkaError.codes = {
    +
    +  /* Internal errors to rdkafka: */
    +  /** Begin internal error codes */
    +  ERR__BEGIN: -200,
    +  /** Received message is incorrect */
    +  ERR__BAD_MSG: -199,
    +  /** Bad/unknown compression */
    +  ERR__BAD_COMPRESSION: -198,
    +  /** Broker is going away */
    +  ERR__DESTROY: -197,
    +  /** Generic failure */
    +  ERR__FAIL: -196,
    +  /** Broker transport failure */
    +  ERR__TRANSPORT: -195,
    +  /** Critical system resource */
    +  ERR__CRIT_SYS_RESOURCE: -194,
    +  /** Failed to resolve broker */
    +  ERR__RESOLVE: -193,
    +  /** Produced message timed out*/
    +  ERR__MSG_TIMED_OUT: -192,
    +  /** Reached the end of the topic+partition queue on
    +  *  the broker. Not really an error.
    +  *  This event is disabled by default,
    +  *  see the `enable.partition.eof` configuration property. */
    +  ERR__PARTITION_EOF: -191,
    +  /** Permanent: Partition does not exist in cluster. */
    +  ERR__UNKNOWN_PARTITION: -190,
    +  /** File or filesystem error */
    +  ERR__FS: -189,
    +  /** Permanent: Topic does not exist in cluster. */
    +  ERR__UNKNOWN_TOPIC: -188,
    +  /** All broker connections are down. */
    +  ERR__ALL_BROKERS_DOWN: -187,
    +  /** Invalid argument, or invalid configuration */
    +  ERR__INVALID_ARG: -186,
    +  /** Operation timed out */
    +  ERR__TIMED_OUT: -185,
    +  /** Queue is full */
    +  ERR__QUEUE_FULL: -184,
    +  /** ISR count < required.acks */
    +  ERR__ISR_INSUFF: -183,
    +  /** Broker node update */
    +  ERR__NODE_UPDATE: -182,
    +  /** SSL error */
    +  ERR__SSL: -181,
    +  /** Waiting for coordinator to become available. */
    +  ERR__WAIT_COORD: -180,
    +  /** Unknown client group */
    +  ERR__UNKNOWN_GROUP: -179,
    +  /** Operation in progress */
    +  ERR__IN_PROGRESS: -178,
    +  /** Previous operation in progress, wait for it to finish. */
    +  ERR__PREV_IN_PROGRESS: -177,
    +  /** This operation would interfere with an existing subscription */
    +  ERR__EXISTING_SUBSCRIPTION: -176,
    +  /** Assigned partitions (rebalance_cb) */
    +  ERR__ASSIGN_PARTITIONS: -175,
    +  /** Revoked partitions (rebalance_cb) */
    +  ERR__REVOKE_PARTITIONS: -174,
    +  /** Conflicting use */
    +  ERR__CONFLICT: -173,
    +  /** Wrong state */
    +  ERR__STATE: -172,
    +  /** Unknown protocol */
    +  ERR__UNKNOWN_PROTOCOL: -171,
    +  /** Not implemented */
    +  ERR__NOT_IMPLEMENTED: -170,
    +  /** Authentication failure*/
    +  ERR__AUTHENTICATION: -169,
    +  /** No stored offset */
    +  ERR__NO_OFFSET: -168,
    +  /** Outdated */
    +  ERR__OUTDATED: -167,
    +  /** Timed out in queue */
    +  ERR__TIMED_OUT_QUEUE: -166,
    +  /** Feature not supported by broker */
    +  ERR__UNSUPPORTED_FEATURE: -165,
    +  /** Awaiting cache update */
    +  ERR__WAIT_CACHE: -164,
    +  /** Operation interrupted */
    +  ERR__INTR: -163,
    +  /** Key serialization error */
    +  ERR__KEY_SERIALIZATION: -162,
    +  /** Value serialization error */
    +  ERR__VALUE_SERIALIZATION: -161,
    +  /** Key deserialization error */
    +  ERR__KEY_DESERIALIZATION: -160,
    +  /** Value deserialization error */
    +  ERR__VALUE_DESERIALIZATION: -159,
    +  /** Partial response */
    +  ERR__PARTIAL: -158,
    +  /** Modification attempted on read-only object */
    +  ERR__READ_ONLY: -157,
    +  /** No such entry / item not found */
    +  ERR__NOENT: -156,
    +  /** Read underflow */
    +  ERR__UNDERFLOW: -155,
    +  /** Invalid type */
    +  ERR__INVALID_TYPE: -154,
    +  /** Retry operation */
    +  ERR__RETRY: -153,
    +  /** Purged in queue */
    +  ERR__PURGE_QUEUE: -152,
    +  /** Purged in flight */
    +  ERR__PURGE_INFLIGHT: -151,
    +  /** Fatal error: see RdKafka::Handle::fatal_error() */
    +  ERR__FATAL: -150,
    +  /** Inconsistent state */
    +  ERR__INCONSISTENT: -149,
    +  /** Gap-less ordering would not be guaranteed if proceeding */
    +  ERR__GAPLESS_GUARANTEE: -148,
    +  /** Maximum poll interval exceeded */
    +  ERR__MAX_POLL_EXCEEDED: -147,
    +  /** Unknown broker */
    +  ERR__UNKNOWN_BROKER: -146,
    +  /** Functionality not configured */
    +  ERR__NOT_CONFIGURED: -145,
    +  /** Instance has been fenced */
    +  ERR__FENCED: -144,
    +  /** Application generated error */
    +  ERR__APPLICATION: -143,
    +  /** Assignment lost */
    +  ERR__ASSIGNMENT_LOST: -142,
    +  /** No operation performed */
    +  ERR__NOOP: -141,
    +  /** No offset to automatically reset to */
    +  ERR__AUTO_OFFSET_RESET: -140,
    +  /** Partition log truncation detected */
    +  ERR__LOG_TRUNCATION: -139,
    +  /** End internal error codes */
    +  ERR__END: -100,
    +  /* Kafka broker errors: */
    +  /** Unknown broker error */
    +  ERR_UNKNOWN: -1,
    +  /** Success */
    +  ERR_NO_ERROR: 0,
    +  /** Offset out of range */
    +  ERR_OFFSET_OUT_OF_RANGE: 1,
    +  /** Invalid message */
    +  ERR_INVALID_MSG: 2,
    +  /** Unknown topic or partition */
    +  ERR_UNKNOWN_TOPIC_OR_PART: 3,
    +  /** Invalid message size */
    +  ERR_INVALID_MSG_SIZE: 4,
    +  /** Leader not available */
    +  ERR_LEADER_NOT_AVAILABLE: 5,
    +  /** Not leader for partition */
    +  ERR_NOT_LEADER_FOR_PARTITION: 6,
    +  /** Request timed out */
    +  ERR_REQUEST_TIMED_OUT: 7,
    +  /** Broker not available */
    +  ERR_BROKER_NOT_AVAILABLE: 8,
    +  /** Replica not available */
    +  ERR_REPLICA_NOT_AVAILABLE: 9,
    +  /** Message size too large */
    +  ERR_MSG_SIZE_TOO_LARGE: 10,
    +  /** StaleControllerEpochCode */
    +  ERR_STALE_CTRL_EPOCH: 11,
    +  /** Offset metadata string too large */
    +  ERR_OFFSET_METADATA_TOO_LARGE: 12,
    +  /** Broker disconnected before response received */
    +  ERR_NETWORK_EXCEPTION: 13,
    +  /** Coordinator load in progress */
    +  ERR_COORDINATOR_LOAD_IN_PROGRESS: 14,
    +/** Group coordinator load in progress */
    +  ERR_GROUP_LOAD_IN_PROGRESS: 14,
    +  /** Coordinator not available */
    +  ERR_COORDINATOR_NOT_AVAILABLE: 15,
    +/** Group coordinator not available */
    +  ERR_GROUP_COORDINATOR_NOT_AVAILABLE: 15,
    +  /** Not coordinator */
    +  ERR_NOT_COORDINATOR: 16,
    +/** Not coordinator for group */
    +  ERR_NOT_COORDINATOR_FOR_GROUP: 16,
    +  /** Invalid topic */
    +  ERR_TOPIC_EXCEPTION: 17,
    +  /** Message batch larger than configured server segment size */
    +  ERR_RECORD_LIST_TOO_LARGE: 18,
    +  /** Not enough in-sync replicas */
    +  ERR_NOT_ENOUGH_REPLICAS: 19,
    +  /** Message(s) written to insufficient number of in-sync replicas */
    +  ERR_NOT_ENOUGH_REPLICAS_AFTER_APPEND: 20,
    +  /** Invalid required acks value */
    +  ERR_INVALID_REQUIRED_ACKS: 21,
    +  /** Specified group generation id is not valid */
    +  ERR_ILLEGAL_GENERATION: 22,
    +  /** Inconsistent group protocol */
    +  ERR_INCONSISTENT_GROUP_PROTOCOL: 23,
    +  /** Invalid group.id */
    +  ERR_INVALID_GROUP_ID: 24,
    +  /** Unknown member */
    +  ERR_UNKNOWN_MEMBER_ID: 25,
    +  /** Invalid session timeout */
    +  ERR_INVALID_SESSION_TIMEOUT: 26,
    +  /** Group rebalance in progress */
    +  ERR_REBALANCE_IN_PROGRESS: 27,
    +  /** Commit offset data size is not valid */
    +  ERR_INVALID_COMMIT_OFFSET_SIZE: 28,
    +  /** Topic authorization failed */
    +  ERR_TOPIC_AUTHORIZATION_FAILED: 29,
    +  /** Group authorization failed */
    +  ERR_GROUP_AUTHORIZATION_FAILED: 30,
    +  /** Cluster authorization failed */
    +  ERR_CLUSTER_AUTHORIZATION_FAILED: 31,
    +  /** Invalid timestamp */
    +  ERR_INVALID_TIMESTAMP: 32,
    +  /** Unsupported SASL mechanism */
    +  ERR_UNSUPPORTED_SASL_MECHANISM: 33,
    +  /** Illegal SASL state */
    +  ERR_ILLEGAL_SASL_STATE: 34,
    +  /** Unuspported version */
    +  ERR_UNSUPPORTED_VERSION: 35,
    +  /** Topic already exists */
    +  ERR_TOPIC_ALREADY_EXISTS: 36,
    +  /** Invalid number of partitions */
    +  ERR_INVALID_PARTITIONS: 37,
    +  /** Invalid replication factor */
    +  ERR_INVALID_REPLICATION_FACTOR: 38,
    +  /** Invalid replica assignment */
    +  ERR_INVALID_REPLICA_ASSIGNMENT: 39,
    +  /** Invalid config */
    +  ERR_INVALID_CONFIG: 40,
    +  /** Not controller for cluster */
    +  ERR_NOT_CONTROLLER: 41,
    +  /** Invalid request */
    +  ERR_INVALID_REQUEST: 42,
    +  /** Message format on broker does not support request */
    +  ERR_UNSUPPORTED_FOR_MESSAGE_FORMAT: 43,
    +  /** Policy violation */
    +  ERR_POLICY_VIOLATION: 44,
    +  /** Broker received an out of order sequence number */
    +  ERR_OUT_OF_ORDER_SEQUENCE_NUMBER: 45,
    +  /** Broker received a duplicate sequence number */
    +  ERR_DUPLICATE_SEQUENCE_NUMBER: 46,
    +  /** Producer attempted an operation with an old epoch */
    +  ERR_INVALID_PRODUCER_EPOCH: 47,
    +  /** Producer attempted a transactional operation in an invalid state */
    +  ERR_INVALID_TXN_STATE: 48,
    +  /** Producer attempted to use a producer id which is not
    +  *  currently assigned to its transactional id */
    +  ERR_INVALID_PRODUCER_ID_MAPPING: 49,
    +  /** Transaction timeout is larger than the maximum
    +  *  value allowed by the broker's max.transaction.timeout.ms */
    +  ERR_INVALID_TRANSACTION_TIMEOUT: 50,
    +  /** Producer attempted to update a transaction while another
    +  *  concurrent operation on the same transaction was ongoing */
    +  ERR_CONCURRENT_TRANSACTIONS: 51,
    +  /** Indicates that the transaction coordinator sending a
    +  *  WriteTxnMarker is no longer the current coordinator for a
    +  *  given producer */
    +  ERR_TRANSACTION_COORDINATOR_FENCED: 52,
    +  /** Transactional Id authorization failed */
    +  ERR_TRANSACTIONAL_ID_AUTHORIZATION_FAILED: 53,
    +  /** Security features are disabled */
    +  ERR_SECURITY_DISABLED: 54,
    +  /** Operation not attempted */
    +  ERR_OPERATION_NOT_ATTEMPTED: 55,
    +  /** Disk error when trying to access log file on the disk */
    +  ERR_KAFKA_STORAGE_ERROR: 56,
    +  /** The user-specified log directory is not found in the broker config */
    +  ERR_LOG_DIR_NOT_FOUND: 57,
    +  /** SASL Authentication failed */
    +  ERR_SASL_AUTHENTICATION_FAILED: 58,
    +  /** Unknown Producer Id */
    +  ERR_UNKNOWN_PRODUCER_ID: 59,
    +  /** Partition reassignment is in progress */
    +  ERR_REASSIGNMENT_IN_PROGRESS: 60,
    +  /** Delegation Token feature is not enabled */
    +  ERR_DELEGATION_TOKEN_AUTH_DISABLED: 61,
    +  /** Delegation Token is not found on server */
    +  ERR_DELEGATION_TOKEN_NOT_FOUND: 62,
    +  /** Specified Principal is not valid Owner/Renewer */
    +  ERR_DELEGATION_TOKEN_OWNER_MISMATCH: 63,
    +  /** Delegation Token requests are not allowed on this connection */
    +  ERR_DELEGATION_TOKEN_REQUEST_NOT_ALLOWED: 64,
    +  /** Delegation Token authorization failed */
    +  ERR_DELEGATION_TOKEN_AUTHORIZATION_FAILED: 65,
    +  /** Delegation Token is expired */
    +  ERR_DELEGATION_TOKEN_EXPIRED: 66,
    +  /** Supplied principalType is not supported */
    +  ERR_INVALID_PRINCIPAL_TYPE: 67,
    +  /** The group is not empty */
    +  ERR_NON_EMPTY_GROUP: 68,
    +  /** The group id does not exist */
    +  ERR_GROUP_ID_NOT_FOUND: 69,
    +  /** The fetch session ID was not found */
    +  ERR_FETCH_SESSION_ID_NOT_FOUND: 70,
    +  /** The fetch session epoch is invalid */
    +  ERR_INVALID_FETCH_SESSION_EPOCH: 71,
    +  /** No matching listener */
    +  ERR_LISTENER_NOT_FOUND: 72,
    +  /** Topic deletion is disabled */
    +  ERR_TOPIC_DELETION_DISABLED: 73,
    +  /** Leader epoch is older than broker epoch */
    +  ERR_FENCED_LEADER_EPOCH: 74,
    +  /** Leader epoch is newer than broker epoch */
    +  ERR_UNKNOWN_LEADER_EPOCH: 75,
    +  /** Unsupported compression type */
    +  ERR_UNSUPPORTED_COMPRESSION_TYPE: 76,
    +  /** Broker epoch has changed */
    +  ERR_STALE_BROKER_EPOCH: 77,
    +  /** Leader high watermark is not caught up */
    +  ERR_OFFSET_NOT_AVAILABLE: 78,
    +  /** Group member needs a valid member ID */
    +  ERR_MEMBER_ID_REQUIRED: 79,
    +  /** Preferred leader was not available */
    +  ERR_PREFERRED_LEADER_NOT_AVAILABLE: 80,
    +  /** Consumer group has reached maximum size */
    +  ERR_GROUP_MAX_SIZE_REACHED: 81,
    +  /** Static consumer fenced by other consumer with same
    +  * group.instance.id. */
    +  ERR_FENCED_INSTANCE_ID: 82,
    +  /** Eligible partition leaders are not available */
    +  ERR_ELIGIBLE_LEADERS_NOT_AVAILABLE: 83,
    +  /** Leader election not needed for topic partition */
    +  ERR_ELECTION_NOT_NEEDED: 84,
    +  /** No partition reassignment is in progress */
    +  ERR_NO_REASSIGNMENT_IN_PROGRESS: 85,
    +  /** Deleting offsets of a topic while the consumer group is
    +  *  subscribed to it */
    +  ERR_GROUP_SUBSCRIBED_TO_TOPIC: 86,
    +  /** Broker failed to validate record */
    +  ERR_INVALID_RECORD: 87,
    +  /** There are unstable offsets that need to be cleared */
    +  ERR_UNSTABLE_OFFSET_COMMIT: 88,
    +  /** Throttling quota has been exceeded */
    +  ERR_THROTTLING_QUOTA_EXCEEDED: 89,
    +  /** There is a newer producer with the same transactionalId
    +  *  which fences the current one */
    +  ERR_PRODUCER_FENCED: 90,
    +  /** Request illegally referred to resource that does not exist */
    +  ERR_RESOURCE_NOT_FOUND: 91,
    +  /** Request illegally referred to the same resource twice */
    +  ERR_DUPLICATE_RESOURCE: 92,
    +  /** Requested credential would not meet criteria for acceptability */
    +  ERR_UNACCEPTABLE_CREDENTIAL: 93,
    +  /** Indicates that the either the sender or recipient of a
    +  *  voter-only request is not one of the expected voters */
    +  ERR_INCONSISTENT_VOTER_SET: 94,
    +  /** Invalid update version */
    +  ERR_INVALID_UPDATE_VERSION: 95,
    +  /** Unable to update finalized features due to server error */
    +  ERR_FEATURE_UPDATE_FAILED: 96,
    +  /** Request principal deserialization failed during forwarding */
    +  ERR_PRINCIPAL_DESERIALIZATION_FAILURE: 97
    +};
    +
    +/**
    + * Representation of a librdkafka error
    + *
    + * This can be created by giving either another error
    + * to piggy-back on. In this situation it tries to parse
    + * the error string to figure out the intent. However, more usually,
    + * it is constructed by an error object created by a C++ Baton.
    + *
    + * @param {object|error} e - An object or error to wrap
    + * @property {string} message - The error message
    + * @property {number} code - The error code.
    + * @property {string} origin - The origin, whether it is local or remote
    + * @constructor
    + */
    +function LibrdKafkaError(e) {
    +  if (!(this instanceof LibrdKafkaError)) {
    +    return new LibrdKafkaError(e);
    +  }
    +
    +  if (typeof e === 'number') {
    +    this.message = librdkafka.err2str(e);
    +    this.code = e;
    +    this.errno = e;
    +    if (e >= LibrdKafkaError.codes.ERR__END) {
    +      this.origin = 'local';
    +    } else {
    +      this.origin = 'kafka';
    +    }
    +    Error.captureStackTrace(this, this.constructor);
    +  } else if (!util.isError(e)) {
    +    // This is the better way
    +    this.message = e.message;
    +    this.code = e.code;
    +    this.errno = e.code;
    +    if (e.code >= LibrdKafkaError.codes.ERR__END) {
    +      this.origin = 'local';
    +    } else {
    +      this.origin = 'kafka';
    +    }
    +    Error.captureStackTrace(this, this.constructor);
    +  } else {
    +    var message = e.message;
    +    var parsedMessage = message.split(': ');
    +
    +    var origin, msg;
    +
    +    if (parsedMessage.length > 1) {
    +      origin = parsedMessage[0].toLowerCase();
    +      msg = parsedMessage[1].toLowerCase();
    +    } else {
    +      origin = 'unknown';
    +      msg = message.toLowerCase();
    +    }
    +
    +    // special cases
    +    if (msg === 'consumer is disconnected' || msg === 'producer is disconnected') {
    +      this.origin = 'local';
    +      this.code = LibrdKafkaError.codes.ERR__STATE;
    +      this.errno = this.code;
    +      this.message = msg;
    +    } else {
    +      this.origin = origin;
    +      this.message = msg;
    +      this.code = typeof e.code === 'number' ? e.code : -1;
    +      this.errno = this.code;
    +      this.stack = e.stack;
    +    }
    +
    +  }
    +
    +  if (e.hasOwnProperty('isFatal')) this.isFatal = e.isFatal;
    +  if (e.hasOwnProperty('isRetriable')) this.isRetriable = e.isRetriable;
    +  if (e.hasOwnProperty('isTxnRequiresAbort')) this.isTxnRequiresAbort = e.isTxnRequiresAbort;
    +
    +}
    +
    +function createLibrdkafkaError(e) {
    +  return new LibrdKafkaError(e);
    +}
    +
    +function errorWrap(errorCode, intIsError) {
    +  var returnValue = true;
    +  if (intIsError) {
    +    returnValue = errorCode;
    +    errorCode = typeof errorCode === 'number' ? errorCode : 0;
    +  }
    +
    +  if (errorCode !== LibrdKafkaError.codes.ERR_NO_ERROR) {
    +    var e = LibrdKafkaError.create(errorCode);
    +    throw e;
    +  }
    +
    +  return returnValue;
    +}
    +
    +
    +
    + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/v2.18.0/global.html b/v2.18.0/global.html new file mode 100644 index 00000000..99720758 --- /dev/null +++ b/v2.18.0/global.html @@ -0,0 +1,660 @@ + + + + + JSDoc: Global + + + + + + + + + + + + + + + +
    +
    + +
    +

    Global

    + + + + + + +
    + +
    + +

    + + +
    + +
    +
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + + + + + + + + +
    +
    +

    Methods:

    +
    + +
    + + + + + + + +

    + createAdminClient() +

    + + + + + +
    +

    Create a new AdminClient for making topics, partitions, and more. + +This is a factory method because it immediately starts an +active handle with the brokers.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + createSerializer() → {function} +

    + + + + + +
    +

    Create a serializer + +Method simply wraps a serializer provided by a user +so it adds context to the error

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + +
    Returns:
    + + +
    + Serialization function +
    + + + +
    +
    + Type +
    +
    + +function + + + +
    +
    + + + + + + + + + + + +

    + RefCounter() +

    + + + + + +
    +

    Ref counter class. + +Is used to basically determine active/inactive and allow callbacks that +hook into each. + +For the producer, it is used to begin rapid polling after a produce until +the delivery report is dispatched.

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + Topic() +

    + + + + + +
    +

    Create a topic. Just returns the string you gave it right now. + +Looks like a class, but all it does is return the topic name. +This is so that one day if there are interface changes that allow +different use of topic parameters, we can just add to this constructor and +have it return something richer

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +

    + TopicPartition() +

    + + + + + +
    +

    Create a topic partition. Just does some validation and decoration +on topic partitions provided. + +Goal is still to behave like a plain javascript object but with validation +and potentially some extra methods

    +
    + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Source:
    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/index.html b/v2.18.0/index.html new file mode 100644 index 00000000..e2856db0 --- /dev/null +++ b/v2.18.0/index.html @@ -0,0 +1,777 @@ + + + + + JSDoc: Home + + + + + + + + + + + + + + + +
    +
    + +
    +

    Home

    + + + + + + + + +

    + + + + + + + + + + + + + + + +
    +

    node-rdkafka - Node.js wrapper for Kafka C/C++ library

    +

    Copyright (c) 2016 Blizzard Entertainment.

    +

    https://github.com/blizzard/node-rdkafka

    +

    Build Status

    +

    npm version

    +

    Looking for Collaborators!

    +

    I am looking for your help to make this project even better! If you're interested, check this out

    +

    Overview

    +

    The node-rdkafka library is a high-performance NodeJS client for Apache Kafka that wraps the native librdkafka library. All the complexity of balancing writes across partitions and managing (possibly ever-changing) brokers should be encapsulated in the library.

    +

    This library currently uses librdkafka version 2.3.0.

    +

    Reference Docs

    +

    To view the reference docs for the current version, go here

    +

    Contributing

    +

    For guidelines on contributing please see CONTRIBUTING.md

    +

    Code of Conduct

    +

    Play nice; Play fair.

    +

    Requirements

    +
      +
    • Apache Kafka >=0.9
    • +
    • Node.js >=4
    • +
    • Linux/Mac
    • +
    • Windows?! See below
    • +
    • OpenSSL
    • +
    +

    Mac OS High Sierra / Mojave

    +

    OpenSSL has been upgraded in High Sierra and homebrew does not overwrite default system libraries. That means when building node-rdkafka, because you are using openssl, you need to tell the linker where to find it:

    +
    export CPPFLAGS=-I/usr/local/opt/openssl/include
    +export LDFLAGS=-L/usr/local/opt/openssl/lib
    +
    +

    Then you can run npm install on your application to get it to build correctly.

    +

    NOTE: From the librdkafka docs

    +
    +

    WARNING: Due to a bug in Apache Kafka 0.9.0.x, the ApiVersionRequest (as sent by the client when connecting to the broker) will be silently ignored by the broker causing the request to time out after 10 seconds. This causes client-broker connections to stall for 10 seconds during connection-setup before librdkafka falls back on the broker.version.fallback protocol features. The workaround is to explicitly configure api.version.request to false on clients communicating with <=0.9.0.x brokers.

    +
    +

    Alpine

    +

    Using Alpine Linux? Check out the docs.

    +

    Windows

    +

    Windows build is not compiled from librdkafka source but it is rather linked against the appropriate version of NuGet librdkafka.redist static binary that gets downloaded from https://globalcdn.nuget.org/packages/librdkafka.redist.2.3.0.nupkg during installation. This download link can be changed using the environment variable NODE_RDKAFKA_NUGET_BASE_URL that defaults to https://globalcdn.nuget.org/packages/ when it's no set.

    +

    Requirements:

    + +

    Note: I still do not recommend using node-rdkafka in production on Windows. This feature was in high demand and is provided to help develop, but we do not test against Windows, and windows support may lag behind Linux/Mac support because those platforms are the ones used to develop this library. Contributors are welcome if any Windows issues are found :)

    +

    Tests

    +

    This project includes two types of unit tests in this project:

    +
      +
    • end-to-end integration tests
    • +
    • unit tests
    • +
    +

    You can run both types of tests by using Makefile. Doing so calls mocha in your locally installed node_modules directory.

    +
      +
    • Before you run the tests, be sure to init and update the submodules: +
        +
      1. git submodule init
      2. +
      3. git submodule update
      4. +
      +
    • +
    • To run the unit tests, you can run make lint or make test.
    • +
    • To run the integration tests, you must have a running Kafka installation available. By default, the test tries to connect to localhost:9092; however, you can supply the KAFKA_HOST environment variable to override this default behavior. Run make e2e.
    • +
    +

    Usage

    +

    You can install the node-rdkafka module like any other module:

    +
    npm install node-rdkafka
    +
    +

    To use the module, you must require it.

    +
    const Kafka = require('node-rdkafka');
    +
    +

    Configuration

    +

    You can pass many configuration options to librdkafka. A full list can be found in librdkafka's Configuration.md

    +

    Configuration keys that have the suffix _cb are designated as callbacks. Some +of these keys are informational and you can choose to opt-in (for example, dr_cb). Others are callbacks designed to +return a value, such as partitioner_cb.

    +

    Not all of these options are supported. +The library will throw an error if the value you send in is invalid.

    +

    The library currently supports the following callbacks:

    +
      +
    • partitioner_cb
    • +
    • dr_cb or dr_msg_cb
    • +
    • event_cb
    • +
    • rebalance_cb (see Rebalancing)
    • +
    • offset_commit_cb (see Commits)
    • +
    +

    Librdkafka Methods

    +

    This library includes two utility functions for detecting the status of your installation. Please try to include these when making issue reports where applicable.

    +

    You can get the features supported by your compile of librdkafka by reading the variable "features" on the root of the node-rdkafka object.

    +
    const Kafka = require('node-rdkafka');
    +console.log(Kafka.features);
    +
    +// #=> [ 'gzip', 'snappy', 'ssl', 'sasl', 'regex', 'lz4' ]
    +
    +

    You can also get the version of librdkafka

    +
    const Kafka = require('node-rdkafka');
    +console.log(Kafka.librdkafkaVersion);
    +
    +// #=> 2.3.0
    +
    +

    Sending Messages

    +

    A Producer sends messages to Kafka. The Producer constructor takes a configuration object, as shown in the following example:

    +
    const producer = new Kafka.Producer({
    +  'metadata.broker.list': 'kafka-host1:9092,kafka-host2:9092'
    +});
    +
    +

    A Producer requires only metadata.broker.list (the Kafka brokers) to be created. The values in this list are separated by commas. For other configuration options, see the Configuration.md file described previously.

    +

    The following example illustrates a list with several librdkafka options set.

    +
    const producer = new Kafka.Producer({
    +  'client.id': 'kafka',
    +  'metadata.broker.list': 'localhost:9092',
    +  'compression.codec': 'gzip',
    +  'retry.backoff.ms': 200,
    +  'message.send.max.retries': 10,
    +  'socket.keepalive.enable': true,
    +  'queue.buffering.max.messages': 100000,
    +  'queue.buffering.max.ms': 1000,
    +  'batch.num.messages': 1000000,
    +  'dr_cb': true
    +});
    +
    +

    Stream API

    +

    You can easily use the Producer as a writable stream immediately after creation (as shown in the following example):

    +
    // Our producer with its Kafka brokers
    +// This call returns a new writable stream to our topic 'topic-name'
    +const stream = Kafka.Producer.createWriteStream({
    +  'metadata.broker.list': 'kafka-host1:9092,kafka-host2:9092'
    +}, {}, {
    +  topic: 'topic-name'
    +});
    +
    +// Writes a message to the stream
    +const queuedSuccess = stream.write(Buffer.from('Awesome message'));
    +
    +if (queuedSuccess) {
    +  console.log('We queued our message!');
    +} else {
    +  // Note that this only tells us if the stream's queue is full,
    +  // it does NOT tell us if the message got to Kafka!  See below...
    +  console.log('Too many messages in our queue already');
    +}
    +
    +// NOTE: MAKE SURE TO LISTEN TO THIS IF YOU WANT THE STREAM TO BE DURABLE
    +// Otherwise, any error will bubble up as an uncaught exception.
    +stream.on('error', (err) => {
    +  // Here's where we'll know if something went wrong sending to Kafka
    +  console.error('Error in our kafka stream');
    +  console.error(err);
    +})
    +
    +

    If you do not want your code to crash when an error happens, ensure you have an error listener on the stream. Most errors are not necessarily fatal, but the ones that are will immediately destroy the stream. If you use autoClose, the stream will close itself at the first sign of a problem.

    +

    Standard API

    +

    The Standard API is more performant, particularly when handling high volumes of messages. +However, it requires more manual setup to use. The following example illustrates its use:

    +
    const producer = new Kafka.Producer({
    +  'metadata.broker.list': 'localhost:9092',
    +  'dr_cb': true
    +});
    +
    +// Connect to the broker manually
    +producer.connect();
    +
    +// Wait for the ready event before proceeding
    +producer.on('ready', () => {
    +  try {
    +    producer.produce(
    +      // Topic to send the message to
    +      'topic',
    +      // optionally we can manually specify a partition for the message
    +      // this defaults to -1 - which will use librdkafka's default partitioner (consistent random for keyed messages, random for unkeyed messages)
    +      null,
    +      // Message to send. Must be a buffer
    +      Buffer.from('Awesome message'),
    +      // for keyed messages, we also specify the key - note that this field is optional
    +      'Stormwind',
    +      // you can send a timestamp here. If your broker version supports it,
    +      // it will get added. Otherwise, we default to 0
    +      Date.now(),
    +      // you can send an opaque token here, which gets passed along
    +      // to your delivery reports
    +    );
    +  } catch (err) {
    +    console.error('A problem occurred when sending our message');
    +    console.error(err);
    +  }
    +});
    +
    +// Any errors we encounter, including connection errors
    +producer.on('event.error', (err) => {
    +  console.error('Error from producer');
    +  console.error(err);
    +})
    +
    +// We must either call .poll() manually after sending messages
    +// or set the producer to poll on an interval (.setPollInterval).
    +// Without this, we do not get delivery events and the queue
    +// will eventually fill up.
    +producer.setPollInterval(100);
    +
    +

    To see the configuration options available to you, see the Configuration section.

    +
    Methods
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MethodDescription
    producer.connect()Connects to the broker.

    The connect() method emits the ready event when it connects successfully. If it does not, the error will be passed through the callback.
    producer.disconnect()Disconnects from the broker.

    The disconnect() method emits the disconnected event when it has disconnected. If it does not, the error will be passed through the callback.
    producer.poll()Polls the producer for delivery reports or other events to be transmitted via the emitter.

    In order to get the events in librdkafka's queue to emit, you must call this regularly.
    producer.setPollInterval(interval)Polls the producer on this interval, handling disconnections and reconnection. Set it to 0 to turn it off.
    producer.produce(topic, partition, msg, key, timestamp, opaque)Sends a message.

    The produce() method throws when produce would return an error. Ordinarily, this is just if the queue is full.
    producer.flush(timeout, callback)Flush the librdkafka internal queue, sending all messages. Default timeout is 500ms
    producer.initTransactions(timeout, callback)Initializes the transactional producer.
    producer.beginTransaction(callback)Starts a new transaction.
    producer.sendOffsetsToTransaction(offsets, consumer, timeout, callback)Sends consumed topic-partition-offsets to the broker, which will get committed along with the transaction.
    producer.abortTransaction(timeout, callback)Aborts the ongoing transaction.
    producer.commitTransaction(timeout, callback)Commits the ongoing transaction.
    +
    Events
    +

    Some configuration properties that end in _cb indicate that an event should be generated for that option. You can either:

    +
      +
    • provide a value of true and react to the event
    • +
    • provide a callback function directly
    • +
    +

    The following example illustrates an event:

    +
    const producer = new Kafka.Producer({
    +  'client.id': 'my-client', // Specifies an identifier to use to help trace activity in Kafka
    +  'metadata.broker.list': 'localhost:9092', // Connect to a Kafka instance on localhost
    +  'dr_cb': true // Specifies that we want a delivery-report event to be generated
    +});
    +
    +// Poll for events every 100 ms
    +producer.setPollInterval(100);
    +
    +producer.on('delivery-report', (err, report) => {
    +  // Report of delivery statistics here:
    +  //
    +  console.log(report);
    +});
    +
    +

    The following table describes types of events.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    EventDescription
    disconnectedThe disconnected event is emitted when the broker has disconnected.

    This event is emitted only when .disconnect is called. The wrapper will always try to reconnect otherwise.
    readyThe ready event is emitted when the Producer is ready to send messages.
    eventThe event event is emitted when librdkafka reports an event (if you opted in via the event_cb option).
    event.logThe event.log event is emitted when logging events come in (if you opted into logging via the event_cb option).

    You will need to set a value for debug if you want to send information.
    event.statsThe event.stats event is emitted when librdkafka reports stats (if you opted in by setting the statistics.interval.ms to a non-zero value).
    event.errorThe event.error event is emitted when librdkafka reports an error
    event.throttleThe event.throttle event emitted when librdkafka reports throttling.
    delivery-reportThe delivery-report event is emitted when a delivery report has been found via polling.

    To use this event, you must set request.required.acks to 1 or -1 in topic configuration and dr_cb (or dr_msg_cb if you want the report to contain the message payload) to true in the Producer constructor options.
    +

    Higher Level Producer

    +

    The higher level producer is a variant of the producer which can propagate callbacks to you upon message delivery.

    +
    const producer = new Kafka.HighLevelProducer({
    +  'metadata.broker.list': 'localhost:9092',
    +});
    +
    +

    This will enrich the produce call so it will have a callback to tell you when the message has been delivered. You lose the ability to specify opaque tokens.

    +
    producer.produce(topicName, null, Buffer.from('alliance4ever'), null, Date.now(), (err, offset) => {
    +  // The offset if our acknowledgement level allows us to receive delivery offsets
    +  console.log(offset);
    +});
    +
    +

    Additionally you can add serializers to modify the value of a produce for a key or value before it is sent over to Kafka.

    +
    producer.setValueSerializer((value) => {
    +  return Buffer.from(JSON.stringify(value));
    +});
    +
    +

    Otherwise the behavior of the class should be exactly the same.

    +

    Kafka.KafkaConsumer

    +

    To read messages from Kafka, you use a KafkaConsumer. You instantiate a KafkaConsumer object as follows:

    +
    const consumer = new Kafka.KafkaConsumer({
    +  'group.id': 'kafka',
    +  'metadata.broker.list': 'localhost:9092',
    +}, {});
    +
    +

    The first parameter is the global config, while the second parameter is the topic config that gets applied to all subscribed topics. To view a list of all supported configuration properties, see the Configuration.md file described previously. Look for the C and * keys.

    +

    The group.id and metadata.broker.list properties are required for a consumer.

    +

    Rebalancing

    +

    Rebalancing is managed internally by librdkafka by default. If you would like to override this functionality, you may provide your own logic as a rebalance callback.

    +
    const consumer = new Kafka.KafkaConsumer({
    +  'group.id': 'kafka',
    +  'metadata.broker.list': 'localhost:9092',
    +  'rebalance_cb': (err, assignment) => {
    +
    +    if (err.code === Kafka.CODES.ERRORS.ERR__ASSIGN_PARTITIONS) {
    +      // Note: this can throw when you are disconnected. Take care and wrap it in
    +      // a try catch if that matters to you
    +      this.assign(assignment);
    +    } else if (err.code == Kafka.CODES.ERRORS.ERR__REVOKE_PARTITIONS){
    +      // Same as above
    +      this.unassign();
    +    } else {
    +      // We had a real error
    +      console.error(err);
    +    }
    +
    +  }
    +})
    +
    +

    this is bound to the KafkaConsumer you have created. By specifying a rebalance_cb you can also listen to the rebalance event as an emitted event. This event is not emitted when using the internal librdkafka rebalancer.

    +

    Commits

    +

    When you commit in node-rdkafka, the standard way is to queue the commit request up with the next librdkafka request to the broker. When doing this, there isn't a way to know the result of the commit. Luckily there is another callback you can listen to to get this information

    +
    const consumer = new Kafka.KafkaConsumer({
    +  'group.id': 'kafka',
    +  'metadata.broker.list': 'localhost:9092',
    +  'offset_commit_cb': (err, topicPartitions) => {
    +
    +    if (err) {
    +      // There was an error committing
    +      console.error(err);
    +    } else {
    +      // Commit went through. Let's log the topic partitions
    +      console.log(topicPartitions);
    +    }
    +
    +  }
    +})
    +
    +

    this is bound to the KafkaConsumer you have created. By specifying an offset_commit_cb you can also listen to the offset.commit event as an emitted event. It receives an error and the list of topic partitions as argument. This is not emitted unless opted in.

    +

    Message Structure

    +

    Messages that are returned by the KafkaConsumer have the following structure.

    +
    {
    +  value: Buffer.from('hi'), // message contents as a Buffer
    +  size: 2, // size of the message, in bytes
    +  topic: 'librdtesting-01', // topic the message comes from
    +  offset: 1337, // offset the message was read from
    +  partition: 1, // partition the message was on
    +  key: 'someKey', // key of the message if present
    +  timestamp: 1510325354780 // timestamp of message creation
    +}
    +
    +

    Stream API

    +

    The stream API is the easiest way to consume messages. The following example illustrates the use of the stream API:

    +
    // Read from the librdtesting-01 topic... note that this creates a new stream on each call!
    +const stream = KafkaConsumer.createReadStream(globalConfig, topicConfig, {
    +  topics: ['librdtesting-01']
    +});
    +
    +stream.on('data', (message) => {
    +  console.log('Got message');
    +  console.log(message.value.toString());
    +});
    +
    +

    You can also get the consumer from the streamConsumer, for using consumer methods. The following example illustrates that:

    +
    stream.consumer.commit(); // Commits all locally stored offsets
    +
    +

    Standard API

    +

    You can also use the Standard API and manage callbacks and events yourself. You can choose different modes for consuming messages:

    +
      +
    • Flowing mode. This mode flows all of the messages it can read by maintaining an infinite loop in the event loop. It only stops when it detects the consumer has issued the unsubscribe or disconnect method.
    • +
    • Non-flowing mode. This mode reads a single message from Kafka at a time manually.
    • +
    +

    The following example illustrates flowing mode:

    +
    // Flowing mode
    +consumer.connect();
    +
    +consumer
    +  .on('ready', () => {
    +    consumer.subscribe(['librdtesting-01']);
    +
    +    // Consume from the librdtesting-01 topic. This is what determines
    +    // the mode we are running in. By not specifying a callback (or specifying
    +    // only a callback) we get messages as soon as they are available.
    +    consumer.consume();
    +  })
    +  .on('data', (data) => {
    +    // Output the actual message contents
    +    console.log(data.value.toString());
    +  });
    +
    +

    The following example illustrates non-flowing mode:

    +
    // Non-flowing mode
    +consumer.connect();
    +
    +consumer
    +  .on('ready', () => {
    +    // Subscribe to the librdtesting-01 topic
    +    // This makes subsequent consumes read from that topic.
    +    consumer.subscribe(['librdtesting-01']);
    +
    +    // Read one message every 1000 milliseconds
    +    setInterval(() => {
    +      consumer.consume(1);
    +    }, 1000);
    +  })
    +  .on('data', (data) => {
    +    console.log('Message found!  Contents below.');
    +    console.log(data.value.toString());
    +  });
    +
    +

    The following table lists important methods for this API.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MethodDescription
    consumer.connect()Connects to the broker.

    The connect() emits the event ready when it has successfully connected. If it does not, the error will be passed through the callback.
    consumer.disconnect()Disconnects from the broker.

    The disconnect() method emits disconnected when it has disconnected. If it does not, the error will be passed through the callback.
    consumer.subscribe(topics)Subscribes to an array of topics.
    consumer.unsubscribe()Unsubscribes from the currently subscribed topics.

    You cannot subscribe to different topics without calling the unsubscribe() method first.
    consumer.consume(cb)Gets messages from the existing subscription as quickly as possible. If cb is specified, invokes cb(err, message).

    This method keeps a background thread running to do the work. Note that the number of threads in nodejs process is limited by UV_THREADPOOL_SIZE (default value is 4) and using up all of them blocks other parts of the application that need threads. If you need multiple consumers then consider increasing UV_THREADPOOL_SIZE or using consumer.consume(number, cb) instead.
    consumer.consume(number, cb)Gets number of messages from the existing subscription. If cb is specified, invokes cb(err, message).
    consumer.commit()Commits all locally stored offsets
    consumer.commit(topicPartition)Commits offsets specified by the topic partition
    consumer.commitMessage(message)Commits the offsets specified by the message
    +

    The following table lists events for this API.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    EventDescription
    dataWhen using the Standard API consumed messages are emitted in this event.
    partition.eofWhen using Standard API and the configuration option enable.partition.eof is set, partition.eof events are emitted in this event. The event contains topic, partition and offset properties.
    warningThe event is emitted in case of UNKNOWN_TOPIC_OR_PART or TOPIC_AUTHORIZATION_FAILED errors when consuming in Flowing mode. Since the consumer will continue working if the error is still happening, the warning event should reappear after the next metadata refresh. To control the metadata refresh rate set topic.metadata.refresh.interval.ms property. Once you resolve the error, you can manually call getMetadata to speed up consumer recovery.
    disconnectedThe disconnected event is emitted when the broker disconnects.

    This event is only emitted when .disconnect is called. The wrapper will always try to reconnect otherwise.
    readyThe ready event is emitted when the Consumer is ready to read messages.
    eventThe event event is emitted when librdkafka reports an event (if you opted in via the event_cb option).
    event.logThe event.log event is emitted when logging events occur (if you opted in for logging via the event_cb option).

    You will need to set a value for debug if you want information to send.
    event.statsThe event.stats event is emitted when librdkafka reports stats (if you opted in by setting the statistics.interval.ms to a non-zero value).
    event.errorThe event.error event is emitted when librdkafka reports an error
    event.throttleThe event.throttle event is emitted when librdkafka reports throttling.
    +

    Reading current offsets from the broker for a topic

    +

    Some times you find yourself in the situation where you need to know the latest (and earliest) offset for one of your topics. Connected producers and consumers both allow you to query for these through queryWaterMarkOffsets like follows:

    +
    const timeout = 5000, partition = 0;
    +consumer.queryWatermarkOffsets('my-topic', partition, timeout, (err, offsets) => {
    +  const high = offsets.highOffset;
    +  const low = offsets.lowOffset;
    +});
    +
    +producer.queryWatermarkOffsets('my-topic', partition, timeout, (err, offsets) => {
    +  const high = offsets.highOffset;
    +  const low = offsets.lowOffset;
    +});
    +
    +An error will be returned if the client was not connected or the request timed out within the specified interval.
    +
    +
    +

    Metadata

    +

    Both Kafka.Producer and Kafka.KafkaConsumer include a getMetadata method to retrieve metadata from Kafka.

    +

    Getting metadata on any connection returns the following data structure:

    +
    {
    +  orig_broker_id: 1,
    +  orig_broker_name: "broker_name",
    +  brokers: [
    +    {
    +      id: 1,
    +      host: 'localhost',
    +      port: 40
    +    }
    +  ],
    +  topics: [
    +    {
    +      name: 'awesome-topic',
    +      partitions: [
    +        {
    +          id: 1,
    +          leader: 20,
    +          replicas: [1, 2],
    +          isrs: [1, 2]
    +        }
    +      ]
    +    }
    +  ]
    +}
    +
    +

    The following example illustrates how to use the getMetadata method.

    +

    When fetching metadata for a specific topic, if a topic reference does not exist, one is created using the default config. +Please see the documentation on Client.getMetadata if you want to set configuration parameters, e.g. acks, on a topic to produce messages to.

    +
    const opts = {
    +  topic: 'librdtesting-01',
    +  timeout: 10000
    +};
    +
    +producer.getMetadata(opts, (err, metadata) => {
    +  if (err) {
    +    console.error('Error getting metadata');
    +    console.error(err);
    +  } else {
    +    console.log('Got metadata');
    +    console.log(metadata);
    +  }
    +});
    +
    +

    Admin Client

    +

    node-rdkafka now supports the admin client for creating, deleting, and scaling out topics. The librdkafka APIs also support altering configuration of topics and broker, but that is not currently implemented.

    +

    To create an Admin client, you can do as follows:

    +
    const Kafka = require('node-rdkafka');
    +
    +const client = Kafka.AdminClient.create({
    +  'client.id': 'kafka-admin',
    +  'metadata.broker.list': 'broker01'
    +});
    +
    +

    This will instantiate the AdminClient, which will allow the calling of the admin methods.

    +
    client.createTopic({
    +  topic: topicName,
    +  num_partitions: 1,
    +  replication_factor: 1
    +}, (err) => {
    +  // Done!
    +});
    +
    +

    All of the admin api methods can have an optional timeout as their penultimate parameter.

    +

    The following table lists important methods for this API.

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    MethodDescription
    client.disconnect()Destroy the admin client, making it invalid for further use.
    client.createTopic(topic, timeout, cb)Create a topic on the broker with the given configuration. See JS doc for more on structure of the topic object
    client.deleteTopic(topicName, timeout, cb)Delete a topic of the given name
    client.createPartitions(topicName, desiredPartitions, timeout, cb)Create partitions until the topic has the desired number of partitions.
    +

    Check the tests for an example of how to use this API!

    +
    + + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/kafka-consumer-stream.js.html b/v2.18.0/kafka-consumer-stream.js.html new file mode 100644 index 00000000..6ec74311 --- /dev/null +++ b/v2.18.0/kafka-consumer-stream.js.html @@ -0,0 +1,478 @@ + + + + + JSDoc: Source: kafka-consumer-stream.js + + + + + + + + + + + + + + + +
    +
    + +
    +

    Source: kafka-consumer-stream.js

    + + + + + + +
    +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +'use strict';
    +
    +module.exports = KafkaConsumerStream;
    +
    +var Readable = require('stream').Readable;
    +var util = require('util');
    +
    +util.inherits(KafkaConsumerStream, Readable);
    +
    +/**
    + * ReadableStream integrating with the Kafka Consumer.
    + *
    + * This class is used to read data off of Kafka in a streaming way. It is
    + * useful if you'd like to have a way to pipe Kafka into other systems. You
    + * should generally not make this class yourself, as it is not even exposed
    + * as part of module.exports. Instead, you should KafkaConsumer.createReadStream.
    + *
    + * The stream implementation is slower than the continuous subscribe callback.
    + * If you don't care so much about backpressure and would rather squeeze
    + * out performance, use that method. Using the stream will ensure you read only
    + * as fast as you write.
    + *
    + * The stream detects if Kafka is already connected. If it is, it will begin
    + * reading. If it is not, it will connect and read when it is ready.
    + *
    + * This stream operates in objectMode. It streams {Consumer~Message}
    + *
    + * @param {Consumer} consumer - The Kafka Consumer object.
    + * @param {object} options - Options to configure the stream.
    + * @param {number} options.waitInterval - Number of ms to wait if Kafka reports
    + * that it has timed out or that we are out of messages (right now).
    + * @param {array} options.topics - Array of topics, or a function that parses
    + * metadata into an array of topics
    + * @constructor
    + * @extends stream.Readable
    + * @see Consumer~Message
    + */
    +function KafkaConsumerStream(consumer, options) {
    +  if (!(this instanceof KafkaConsumerStream)) {
    +    return new KafkaConsumerStream(consumer, options);
    +  }
    +
    +  if (options === undefined) {
    +    options = { waitInterval: 1000 };
    +  } else if (typeof options === 'number') {
    +    options = { waitInterval: options };
    +  } else if (options === null || typeof options !== 'object') {
    +    throw new TypeError('"options" argument must be a number or an object');
    +  }
    +
    +  var topics = options.topics;
    +
    +  if (typeof topics === 'function') {
    +    // Just ignore the rest of the checks here
    +  } else if (!Array.isArray(topics)) {
    +    if (typeof topics !== 'string' && !(topics instanceof RegExp)) {
    +      throw new TypeError('"topics" argument must be a string, regex, or an array');
    +    } else {
    +      topics = [topics];
    +    }
    +  }
    +
    +  options = Object.create(options);
    +
    +  var fetchSize = options.fetchSize || 1;
    +
    +  // Run in object mode by default.
    +  if (options.objectMode === null || options.objectMode === undefined) {
    +    options.objectMode = true;
    +
    +    // If they did not explicitly set high water mark, and we are running
    +    // in object mode, set it to the fetch size + 2 to ensure there is room
    +    // for a standard fetch
    +    if (!options.highWaterMark) {
    +      options.highWaterMark = fetchSize + 2;
    +    }
    +  }
    +
    +  if (options.objectMode !== true) {
    +    this._read = this._read_buffer;
    +  } else {
    +    this._read = this._read_message;
    +  }
    +
    +  Readable.call(this, options);
    +
    +  this.consumer = consumer;
    +  this.topics = topics;
    +  this.autoClose = options.autoClose === undefined ? true : !!options.autoClose;
    +  this.waitInterval = options.waitInterval === undefined ? 1000 : options.waitInterval;
    +  this.fetchSize = fetchSize;
    +  this.connectOptions = options.connectOptions || {};
    +  this.streamAsBatch = options.streamAsBatch || false;
    +
    +  // Hold the messages in here
    +  this.messages = [];
    +
    +  var self = this;
    +
    +  this.consumer
    +    .on('unsubscribed', function() {
    +      // Invalidate the stream when we unsubscribe
    +      self.push(null);
    +    });
    +
    +  // Call connect. Handles potentially being connected already
    +  this.connect(this.connectOptions);
    +
    +  this.once('end', function() {
    +    if (this.autoClose) {
    +      this.destroy();
    +    }
    +  });
    +
    +}
    +
    +/**
    + * Internal stream read method. This method reads message objects.
    + * @param {number} size - This parameter is ignored for our cases.
    + * @private
    + */
    +KafkaConsumerStream.prototype._read_message = function(size) {
    +  if (this.messages.length > 0) {
    +    return this.push(this.messages.shift());
    +  }
    +
    +  if (!this.consumer) {
    +    // This consumer is set to `null` in the close function
    +    return;
    +  }
    +
    +  if (!this.consumer.isConnected()) {
    +    this.consumer.once('ready', function() {
    +      // This is the way Node.js does it
    +      // https://github.com/nodejs/node/blob/master/lib/fs.js#L1733
    +      this._read(size);
    +    }.bind(this));
    +    return;
    +  }
    +
    +  if (this.destroyed) {
    +    return;
    +  }
    +
    +  var self = this;
    +
    +  // If the size (number of messages) we are being advised to fetch is
    +  // greater than or equal to the fetch size, use the fetch size.
    +  // Only opt to use the size in case it is LESS than the fetch size.
    +  // Essentially, we want to use the smaller value here
    +  var fetchSize = size >= this.fetchSize ? this.fetchSize : size;
    +
    +  this.consumer.consume(fetchSize, onread);
    +
    +  // Retry function. Will wait up to the wait interval, with some
    +  // random noise if one is provided. Otherwise, will go immediately.
    +  function retry() {
    +    if (!self.waitInterval) {
    +      setImmediate(function() {
    +        self._read(size);
    +      });
    +    } else {
    +      setTimeout(function() {
    +        self._read(size);
    +      }, self.waitInterval * Math.random()).unref();
    +    }
    +  }
    +
    +  function onread(err, messages) {
    +
    +    // If there was an error we still want to emit it.
    +    // Essentially, if the user does not register an error
    +    // handler, it will still cause the stream to blow up.
    +    //
    +    // But... if one is provided, consumption will move on
    +    // as normal
    +    if (err) {
    +      self.emit('error', err);
    +    }
    +
    +    // If there are no messages it means we reached EOF or a timeout.
    +    // Do what we used to do
    +
    +    if (err || messages.length < 1) {
    +      // If we got an error or if there were no messages, initiate a retry
    +      retry();
    +      return;
    +    } else {
    +      if (self.streamAsBatch) {
    +        self.push(messages);
    +      } else {
    +        for (var i = 0; i < messages.length; i++) {
    +          self.messages.push(messages[i]);
    +        }
    +
    +        // Now that we have added them all the inner messages buffer,
    +        // we can just push the most recent one
    +        self.push(self.messages.shift());
    +      }
    +    }
    +
    +  }
    +};
    +
    +/**
    + * Internal stream read method. This method reads message buffers.
    + * @param {number} size - This parameter is ignored for our cases.
    + * @private
    + */
    +KafkaConsumerStream.prototype._read_buffer = function(size) {
    +  if (this.messages.length > 0) {
    +    return this.push(this.messages.shift());
    +  }
    +
    +  if (!this.consumer) {
    +    // This consumer is set to `null` in the close function
    +    return;
    +  }
    +
    +  if (!this.consumer.isConnected()) {
    +    this.consumer.once('ready', function() {
    +      // This is the way Node.js does it
    +      // https://github.com/nodejs/node/blob/master/lib/fs.js#L1733
    +      this._read(size);
    +    }.bind(this));
    +    return;
    +  }
    +
    +  if (this.destroyed) {
    +    return;
    +  }
    +
    +  var self = this;
    +
    +  // If the size (number of messages) we are being advised to fetch is
    +  // greater than or equal to the fetch size, use the fetch size.
    +  // Only opt to use the size in case it is LESS than the fetch size.
    +  // Essentially, we want to use the smaller value here
    +  var fetchSize = size >= this.fetchSize ? this.fetchSize : size;
    +
    +  this.consumer.consume(fetchSize, onread);
    +
    +  // Retry function. Will wait up to the wait interval, with some
    +  // random noise if one is provided. Otherwise, will go immediately.
    +  function retry() {
    +    if (!self.waitInterval) {
    +      setImmediate(function() {
    +        self._read(size);
    +      });
    +    } else {
    +      setTimeout(function() {
    +        self._read(size);
    +      }, self.waitInterval * Math.random()).unref();
    +    }
    +  }
    +
    +  function onread(err, messages) {
    +    // If there was an error we still want to emit it.
    +    // Essentially, if the user does not register an error
    +    // handler, it will still cause the stream to blow up.
    +    //
    +    // But... if one is provided, consumption will move on
    +    // as normal
    +    if (err) {
    +      self.emit('error', err);
    +    }
    +
    +    // If there are no messages it means we reached EOF or a timeout.
    +    // Do what we used to do
    +
    +    if (err || messages.length < 1) {
    +      // If we got an error or if there were no messages, initiate a retry
    +      retry();
    +      return;
    +    } else {
    +      if (self.streamAsBatch) {
    +        self.push(messages);
    +      } else {
    +        for (var i = 0; i < messages.length; i++) {
    +          self.messages.push(messages[i].value);
    +        }
    +        // Now that we have added them all the inner messages buffer,
    +        // we can just push the most recent one
    +        self.push(self.messages.shift());
    +      }
    +    }
    +
    +  }
    +};
    +
    +KafkaConsumerStream.prototype.connect = function(options) {
    +  var self = this;
    +
    +  function connectCallback(err, metadata) {
    +    if (err) {
    +      self.emit('error', err);
    +      self.destroy();
    +      return;
    +    }
    +
    +    try {
    +      // Subscribe to the topics as well so we will be ready
    +      // If this throws the stream is invalid
    +
    +      // This is the magic part. If topics is a function, before we subscribe,
    +      // pass the metadata in
    +      if (typeof self.topics === 'function') {
    +        var topics = self.topics(metadata);
    +        self.consumer.subscribe(topics);
    +      } else {
    +        self.consumer.subscribe(self.topics);
    +      }
    +    } catch (e) {
    +      self.emit('error', e);
    +      self.destroy();
    +      return;
    +    }
    +
    +    // start the flow of data
    +    self.read();
    +  }
    +
    +  if (!this.consumer.isConnected()) {
    +    self.consumer.connect(options, connectCallback);
    +  } else {
    +    // Immediately call the connect callback
    +    setImmediate(function() {
    +      connectCallback(null, self.consumer._metadata);
    +    });
    +  }
    +
    +};
    +
    +KafkaConsumerStream.prototype.destroy = function() {
    +  if (this.destroyed) {
    +    return;
    +  }
    +  this.destroyed = true;
    +  this.close();
    +};
    +
    +KafkaConsumerStream.prototype.close = function(cb) {
    +  var self = this;
    +  if (cb) {
    +    this.once('close', cb);
    +  }
    +
    +  if (!self.consumer._isConnecting && !self.consumer._isConnected) {
    +    // If we aren't even connected just exit. We are done.
    +    close();
    +    return;
    +  }
    +
    +  if (self.consumer._isConnecting) {
    +    self.consumer.once('ready', function() {
    +      // Don't pass the CB because it has already been passed.
    +      self.close();
    +    });
    +    return;
    +  }
    +
    +  if (self.consumer._isConnected) {
    +    self.consumer.unsubscribe();
    +    self.consumer.disconnect(function() {
    +      close();
    +    });
    +  }
    +
    +  function close() {
    +    self.emit('close');
    +  }
    +};
    +
    +
    +
    + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/v2.18.0/kafka-consumer.js.html b/v2.18.0/kafka-consumer.js.html new file mode 100644 index 00000000..0822a9f3 --- /dev/null +++ b/v2.18.0/kafka-consumer.js.html @@ -0,0 +1,753 @@ + + + + + JSDoc: Source: kafka-consumer.js + + + + + + + + + + + + + + + +
    +
    + +
    +

    Source: kafka-consumer.js

    + + + + + + +
    +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +'use strict';
    +
    +module.exports = KafkaConsumer;
    +
    +var Client = require('./client');
    +var util = require('util');
    +var Kafka = require('../librdkafka');
    +var KafkaConsumerStream = require('./kafka-consumer-stream');
    +var LibrdKafkaError = require('./error');
    +var TopicPartition = require('./topic-partition');
    +var shallowCopy = require('./util').shallowCopy;
    +var DEFAULT_CONSUME_LOOP_TIMEOUT_DELAY = 500;
    +var DEFAULT_CONSUME_TIME_OUT = 1000;
    +util.inherits(KafkaConsumer, Client);
    +
    +/**
    + * KafkaConsumer class for reading messages from Kafka
    + *
    + * This is the main entry point for reading data from Kafka. You
    + * configure this like you do any other client, with a global
    + * configuration and default topic configuration.
    + *
    + * Once you instantiate this object, connecting will open a socket.
    + * Data will not be read until you tell the consumer what topics
    + * you want to read from.
    + *
    + * @param {object} conf - Key value pairs to configure the consumer
    + * @param {object} topicConf - Key value pairs to create a default
    + * topic configuration
    + * @extends Client
    + * @constructor
    + */
    +function KafkaConsumer(conf, topicConf) {
    +  if (!(this instanceof KafkaConsumer)) {
    +    return new KafkaConsumer(conf, topicConf);
    +  }
    +
    +  conf = shallowCopy(conf);
    +  topicConf = shallowCopy(topicConf);
    +
    +  var onRebalance = conf.rebalance_cb;
    +
    +  var self = this;
    +
    +  // If rebalance is undefined we don't want any part of this
    +  if (onRebalance && typeof onRebalance === 'boolean') {
    +    conf.rebalance_cb = function(err, assignment) {
    +      // Create the librdkafka error
    +      err = LibrdKafkaError.create(err);
    +      // Emit the event
    +      self.emit('rebalance', err, assignment);
    +
    +      // That's it
    +      try {
    +        if (err.code === -175 /*ERR__ASSIGN_PARTITIONS*/) {
    +          self.assign(assignment);
    +        } else if (err.code === -174 /*ERR__REVOKE_PARTITIONS*/) {
    +          self.unassign();
    +        }
    +      } catch (e) {
    +        // Ignore exceptions if we are not connected
    +        if (self.isConnected()) {
    +          self.emit('rebalance.error', e);
    +        }
    +      }
    +    };
    +  } else if (onRebalance && typeof onRebalance === 'function') {
    +    /*
    +     * Once this is opted in to, that's it. It's going to manually rebalance
    +     * forever. There is no way to unset config values in librdkafka, just
    +     * a way to override them.
    +     */
    +
    +     conf.rebalance_cb = function(err, assignment) {
    +       // Create the librdkafka error
    +       err = err ? LibrdKafkaError.create(err) : undefined;
    +
    +       self.emit('rebalance', err, assignment);
    +       onRebalance.call(self, err, assignment);
    +     };
    +  }
    +
    +  // Same treatment for offset_commit_cb
    +  var onOffsetCommit = conf.offset_commit_cb;
    +
    +  if (onOffsetCommit && typeof onOffsetCommit === 'boolean') {
    +    conf.offset_commit_cb = function(err, offsets) {
    +      if (err) {
    +        err = LibrdKafkaError.create(err);
    +      }
    +      // Emit the event
    +      self.emit('offset.commit', err, offsets);
    +    };
    +  } else if (onOffsetCommit && typeof onOffsetCommit === 'function') {
    +    conf.offset_commit_cb = function(err, offsets) {
    +      if (err) {
    +        err = LibrdKafkaError.create(err);
    +      }
    +      // Emit the event
    +      self.emit('offset.commit', err, offsets);
    +      onOffsetCommit.call(self, err, offsets);
    +    };
    +  }
    +
    +  /**
    +   * KafkaConsumer message.
    +   *
    +   * This is the representation of a message read from Kafka.
    +   *
    +   * @typedef {object} KafkaConsumer~Message
    +   * @property {buffer} value - the message buffer from Kafka.
    +   * @property {string} topic - the topic name
    +   * @property {number} partition - the partition on the topic the
    +   * message was on
    +   * @property {number} offset - the offset of the message
    +   * @property {string} key - the message key
    +   * @property {number} size - message size, in bytes.
    +   * @property {number} timestamp - message timestamp
    +   */
    +
    +  Client.call(this, conf, Kafka.KafkaConsumer, topicConf);
    +
    +  this.globalConfig = conf;
    +  this.topicConfig = topicConf;
    +
    +  this._consumeTimeout = DEFAULT_CONSUME_TIME_OUT;
    +  this._consumeLoopTimeoutDelay = DEFAULT_CONSUME_LOOP_TIMEOUT_DELAY;
    +}
    +
    +/**
    + * Set the default consume timeout provided to c++land
    + * @param {number} timeoutMs - number of milliseconds to wait for a message to be fetched
    + */
    +KafkaConsumer.prototype.setDefaultConsumeTimeout = function(timeoutMs) {
    +  this._consumeTimeout = timeoutMs;
    +};
    +
    +/**
    + * Set the default sleep delay for the next consume loop after the previous one has timed out.
    + * @param {number} intervalMs - number of milliseconds to sleep after a message fetch has timed out
    + */
    +KafkaConsumer.prototype.setDefaultConsumeLoopTimeoutDelay = function(intervalMs) {
    +  this._consumeLoopTimeoutDelay = intervalMs;
    +};
    +
    +/**
    + * Get a stream representation of this KafkaConsumer
    + *
    + * @see TopicReadable
    + * @example
    + * var consumerStream = Kafka.KafkaConsumer.createReadStream({
    + * 	'metadata.broker.list': 'localhost:9092',
    + * 	'group.id': 'librd-test',
    + * 	'socket.keepalive.enable': true,
    + * 	'enable.auto.commit': false
    + * }, {}, { topics: [ 'test' ] });
    + *
    + * @param {object} conf - Key value pairs to configure the consumer
    + * @param {object} topicConf - Key value pairs to create a default
    + * topic configuration
    + * @param {object} streamOptions - Stream options
    + * @param {array} streamOptions.topics - Array of topics to subscribe to.
    + * @return {KafkaConsumerStream} - Readable stream that receives messages
    + * when new ones become available.
    + */
    +KafkaConsumer.createReadStream = function(conf, topicConf, streamOptions) {
    +  var consumer = new KafkaConsumer(conf, topicConf);
    +  return new KafkaConsumerStream(consumer, streamOptions);
    +};
    +
    +/**
    + * Get a current list of the committed offsets per topic partition
    + *
    + * Returns an array of objects in the form of a topic partition list
    + *
    + * @param {TopicPartition[]} toppars - Topic partition list to query committed
    + * offsets for. Defaults to the current assignment
    + * @param  {number} timeout - Number of ms to block before calling back
    + * and erroring
    + * @param  {Function} cb - Callback method to execute when finished or timed
    + * out
    + * @return {Client} - Returns itself
    + */
    +KafkaConsumer.prototype.committed = function(toppars, timeout, cb) {
    +  // We want to be backwards compatible here, and the previous version of
    +  // this function took two arguments
    +
    +  // If CB is not set, shift to backwards compatible version
    +  if (!cb) {
    +    cb = arguments[1];
    +    timeout = arguments[0];
    +    toppars = this.assignments();
    +  } else {
    +    toppars = toppars || this.assignments();
    +  }
    +
    +  var self = this;
    +  this._client.committed(toppars, timeout, function(err, topicPartitions) {
    +    if (err) {
    +      cb(LibrdKafkaError.create(err));
    +      return;
    +    }
    +
    +    cb(null, topicPartitions);
    +  });
    +  return this;
    +};
    +
    +/**
    + * Seek consumer for topic+partition to offset which is either an absolute or
    + * logical offset.
    + *
    + * Does not return anything, as it is asynchronous. There are special cases
    + * with the timeout parameter. The consumer must have previously been assigned
    + * to topics and partitions that seek seeks to seek.
    + *
    + * @example
    + * consumer.seek({ topic: 'topic', partition: 0, offset: 1000 }, 0, function(err) {
    + *   if (err) {
    + *
    + *   }
    + * });
    + *
    + * @param {TopicPartition} toppar - Topic partition to seek.
    + * @param  {number} timeout - Number of ms to block before calling back
    + * and erroring. If the parameter is null or 0, the call will not wait
    + * for the seek to be performed. Essentially, it will happen in the background
    + * with no notification
    + * @param  {Function} cb - Callback method to execute when finished or timed
    + * out. If the seek timed out, the internal state of the consumer is unknown.
    + * @return {Client} - Returns itself
    + */
    +KafkaConsumer.prototype.seek = function(toppar, timeout, cb) {
    +  var self = this;
    +  this._client.seek(TopicPartition.create(toppar), timeout, function(err) {
    +    if (err) {
    +      cb(LibrdKafkaError.create(err));
    +      return;
    +    }
    +
    +    cb();
    +  });
    +  return this;
    +};
    +
    +/**
    + * Assign the consumer specific partitions and topics
    + *
    + * @param {array} assignments - Assignments array. Should contain
    + * objects with topic and partition set.
    + * @return {Client} - Returns itself
    + */
    +
    +KafkaConsumer.prototype.assign = function(assignments) {
    +  this._client.assign(TopicPartition.map(assignments));
    +  return this;
    +};
    +
    +/**
    + * Unassign the consumer from its assigned partitions and topics.
    + *
    + * @return {Client} - Returns itself
    + */
    +
    +KafkaConsumer.prototype.unassign = function() {
    +  this._client.unassign();
    +  return this;
    +};
    +
    +
    +/**
    + * Get the assignments for the consumer
    + *
    + * @return {array} assignments - Array of topic partitions
    + */
    +
    +KafkaConsumer.prototype.assignments = function() {
    +  return this._errorWrap(this._client.assignments(), true);
    +};
    +
    +/**
    + * Subscribe to an array of topics (synchronously).
    + *
    + * This operation is pretty fast because it just sets
    + * an assignment in librdkafka. This is the recommended
    + * way to deal with subscriptions in a situation where you
    + * will be reading across multiple files or as part of
    + * your configure-time initialization.
    + *
    + * This is also a good way to do it for streams.
    + *
    + * @param  {array} topics - An array of topics to listen to
    + * @throws - Throws when an error code came back from native land
    + * @return {KafkaConsumer} - Returns itself.
    + */
    +KafkaConsumer.prototype.subscribe = function(topics) {
    +  // Will throw if it is a bad error.
    +  this._errorWrap(this._client.subscribe(topics));
    +  this.emit('subscribed', topics);
    +  return this;
    +};
    +
    +/**
    + * Get the current subscription of the KafkaConsumer
    + *
    + * Get a list of subscribed topics. Should generally match what you
    + * passed on via subscribe
    + *
    + * @see KafkaConsumer::subscribe
    + * @throws - Throws when an error code came back from native land
    + * @return {array} - Array of strings to show the current assignment
    + */
    +KafkaConsumer.prototype.subscription = function() {
    +  return this._errorWrap(this._client.subscription(), true);
    +};
    +
    +/**
    + * Get the current offset position of the KafkaConsumer
    + *
    + * Returns a list of RdKafka::TopicPartitions on success, or throws
    + * an error on failure
    + *
    + * @param {TopicPartition[]} toppars - List of topic partitions to query
    + * position for. Defaults to the current assignment
    + * @throws - Throws when an error code came back from native land
    + * @return {array} - TopicPartition array. Each item is an object with
    + * an offset, topic, and partition
    + */
    +KafkaConsumer.prototype.position = function(toppars) {
    +  if (!toppars) {
    +    toppars = this.assignments();
    +  }
    +  return this._errorWrap(this._client.position(toppars), true);
    +};
    +
    +/**
    + * Unsubscribe from all currently subscribed topics
    + *
    + * Before you subscribe to new topics you need to unsubscribe
    + * from the old ones, if there is an active subscription.
    + * Otherwise, you will get an error because there is an
    + * existing subscription.
    + *
    + * @throws - Throws when an error code comes back from native land
    + * @return {KafkaConsumer} - Returns itself.
    + */
    +KafkaConsumer.prototype.unsubscribe = function() {
    +  this._errorWrap(this._client.unsubscribe());
    +  this.emit('unsubscribed', []);
    +  // Backwards compatible change
    +  this.emit('unsubscribe', []);
    +  return this;
    +};
    +
    +/**
    + * Read a number of messages from Kafka.
    + *
    + * This method is similar to the main one, except that it reads a number
    + * of messages before calling back. This may get better performance than
    + * reading a single message each time in stream implementations.
    + *
    + * This will keep going until it gets ERR__PARTITION_EOF or ERR__TIMED_OUT
    + * so the array may not be the same size you ask for. The size is advisory,
    + * but we will not exceed it.
    + *
    + * @param {number} size - Number of messages to read
    + * @param {KafkaConsumer~readCallback} cb - Callback to return when work is done.
    + *//**
    + * Read messages from Kafka as fast as possible
    + *
    + * This method keeps a background thread running to fetch the messages
    + * as quickly as it can, sleeping only in between EOF and broker timeouts.
    + *
    + * Use this to get the maximum read performance if you don't care about the
    + * stream backpressure.
    + * @param {KafkaConsumer~readCallback} cb - Callback to return when a message
    + * is fetched.
    + */
    +KafkaConsumer.prototype.consume = function(number, cb) {
    +  var timeoutMs = this._consumeTimeout !== undefined ? this._consumeTimeout : DEFAULT_CONSUME_TIME_OUT;
    +  var self = this;
    +
    +  if ((number && typeof number === 'number') || (number && cb)) {
    +
    +    if (cb === undefined) {
    +      cb = function() {};
    +    } else if (typeof cb !== 'function') {
    +      throw new TypeError('Callback must be a function');
    +    }
    +
    +    this._consumeNum(timeoutMs, number, cb);
    +  } else {
    +
    +    // See https://github.com/Blizzard/node-rdkafka/issues/220
    +    // Docs specify just a callback can be provided but really we needed
    +    // a fallback to the number argument
    +    // @deprecated
    +    if (cb === undefined) {
    +      if (typeof number === 'function') {
    +        cb = number;
    +      } else {
    +        cb = function() {};
    +      }
    +    }
    +
    +    this._consumeLoop(timeoutMs, cb);
    +  }
    +};
    +
    +/**
    + * Open a background thread and keep getting messages as fast
    + * as we can. Should not be called directly, and instead should
    + * be called using consume.
    + *
    + * @private
    + * @see consume
    + */
    +KafkaConsumer.prototype._consumeLoop = function(timeoutMs, cb) {
    +  var self = this;
    +  var retryReadInterval = this._consumeLoopTimeoutDelay;
    +  self._client.consumeLoop(timeoutMs, retryReadInterval, function readCallback(err, message, eofEvent, warning) {
    +
    +    if (err) {
    +      // A few different types of errors here
    +      // but the two we do NOT care about are
    +      // time outs at least now
    +      // Broker no more messages will also not come here
    +      cb(LibrdKafkaError.create(err));
    +    } else if (eofEvent) {
    +      self.emit('partition.eof', eofEvent);
    +    } else if (warning) {
    +      self.emit('warning', LibrdKafkaError.create(warning));
    +    } else {
    +      /**
    +       * Data event. called whenever a message is received.
    +       *
    +       * @event KafkaConsumer#data
    +       * @type {KafkaConsumer~Message}
    +       */
    +      self.emit('data', message);
    +      cb(err, message);
    +    }
    +  });
    +
    +};
    +
    +/**
    + * Consume a number of messages and wrap in a try catch with
    + * proper error reporting. Should not be called directly,
    + * and instead should be called using consume.
    + *
    + * @private
    + * @see consume
    + */
    +KafkaConsumer.prototype._consumeNum = function(timeoutMs, numMessages, cb) {
    +  var self = this;
    +
    +  this._client.consume(timeoutMs, numMessages, function(err, messages, eofEvents) {
    +    if (err) {
    +      err = LibrdKafkaError.create(err);
    +      if (cb) {
    +        cb(err);
    +      }
    +      return;
    +    }
    +
    +    var currentEofEventsIndex = 0;
    +
    +    function emitEofEventsFor(messageIndex) {
    +      while (currentEofEventsIndex < eofEvents.length && eofEvents[currentEofEventsIndex].messageIndex === messageIndex) {
    +        delete eofEvents[currentEofEventsIndex].messageIndex;
    +        self.emit('partition.eof', eofEvents[currentEofEventsIndex])
    +        ++currentEofEventsIndex;
    +      }
    +    }
    +
    +    emitEofEventsFor(-1);
    +
    +    for (var i = 0; i < messages.length; i++) {
    +      self.emit('data', messages[i]);
    +      emitEofEventsFor(i);
    +    }
    +
    +    emitEofEventsFor(messages.length);
    +
    +    if (cb) {
    +      cb(null, messages);
    +    }
    +
    +  });
    +
    +};
    +
    +/**
    + * This callback returns the message read from Kafka.
    + *
    + * @callback KafkaConsumer~readCallback
    + * @param {LibrdKafkaError} err - An error, if one occurred while reading
    + * the data.
    + * @param {KafkaConsumer~Message} message
    + */
    +
    +/**
    + * Commit a topic partition or all topic partitions that have been read
    + *
    + * If you provide a topic partition, it will commit that. Otherwise,
    + * it will commit all read offsets for all topic partitions.
    + *
    + * @param {object|array|null} - Topic partition object to commit, list of topic
    + * partitions, or null if you want to commit all read offsets.
    + * @throws When commit returns a non 0 error code
    + *
    + * @return {KafkaConsumer} - returns itself.
    + */
    +KafkaConsumer.prototype.commit = function(topicPartition) {
    +  this._errorWrap(this._client.commit(topicPartition), true);
    +  return this;
    +};
    +
    +/**
    + * Commit a message
    + *
    + * This is basically a convenience method to map commit properly. We need to
    + * add one to the offset in this case
    + *
    + * @param {object} - Message object to commit
    + * @throws When commit returns a non 0 error code
    + *
    + * @return {KafkaConsumer} - returns itself.
    + */
    +KafkaConsumer.prototype.commitMessage = function(msg) {
    +  var topicPartition = {
    +    topic: msg.topic,
    +    partition: msg.partition,
    +    offset: msg.offset + 1
    +  };
    +
    +  this._errorWrap(this._client.commit(topicPartition), true);
    +  return this;
    +};
    +
    +/**
    + * Commit a topic partition (or all topic partitions) synchronously
    + *
    + * @param {object|array|null} - Topic partition object to commit, list of topic
    + * partitions, or null if you want to commit all read offsets.
    + * @throws {LibrdKafkaError} - if the commit fails
    + *
    + * @return {KafkaConsumer} - returns itself.
    + */
    +KafkaConsumer.prototype.commitSync = function(topicPartition) {
    +  this._errorWrap(this._client.commitSync(topicPartition), true);
    +  return this;
    +};
    +
    +/**
    + * Commit a message synchronously
    + *
    + * @see KafkaConsumer#commitMessageSync
    + * @param  {object} msg - A message object to commit.
    + *
    + * @throws {LibrdKafkaError} - if the commit fails
    + *
    + * @return {KafkaConsumer} - returns itself.
    + */
    +KafkaConsumer.prototype.commitMessageSync = function(msg) {
    +  var topicPartition = {
    +    topic: msg.topic,
    +    partition: msg.partition,
    +    offset: msg.offset + 1
    +  };
    +
    +  this._errorWrap(this._client.commitSync(topicPartition), true);
    +  return this;
    +};
    +
    +/**
    + * Get last known offsets from the client.
    + *
    + * The low offset is updated periodically (if statistics.interval.ms is set)
    + * while the high offset is updated on each fetched message set from the
    + * broker.
    + *
    + * If there is no cached offset (either low or high, or both), then this will
    + * throw an error.
    + *
    + * @param {string} topic - Topic to recieve offsets from.
    + * @param {number} partition - Partition of the provided topic to recieve offsets from
    + * @return {Client~watermarkOffsets} - Returns an object with a high and low property, specifying
    + * the high and low offsets for the topic partition
    + * @throws {LibrdKafkaError} - Throws when there is no offset stored
    + */
    +KafkaConsumer.prototype.getWatermarkOffsets = function(topic, partition) {
    +  if (!this.isConnected()) {
    +    throw new Error('Client is disconnected');
    +  }
    +
    +  return this._errorWrap(this._client.getWatermarkOffsets(topic, partition), true);
    +};
    +
    +/**
    + * Store offset for topic partition.
    + *
    + * The offset will be committed (written) to the offset store according to the auto commit interval,
    + * if auto commit is on, or next manual offset if not.
    + *
    + * enable.auto.offset.store must be set to false to use this API,
    + *
    + * @see https://github.com/edenhill/librdkafka/blob/261371dc0edef4cea9e58a076c8e8aa7dc50d452/src-cpp/rdkafkacpp.h#L1702
    + *
    + * @param {Array.<TopicPartition>} topicPartitions - Topic partitions with offsets to store offsets for.
    + * @throws {LibrdKafkaError} - Throws when there is no offset stored
    + */
    +KafkaConsumer.prototype.offsetsStore = function(topicPartitions) {
    +  if (!this.isConnected()) {
    +    throw new Error('Client is disconnected');
    +  }
    +
    +  return this._errorWrap(this._client.offsetsStore(topicPartitions), true);
    +};
    +
    +/**
    + * Resume consumption for the provided list of partitions.
    + *
    + * @param {Array.<TopicPartition>} topicPartitions - List of topic partitions to resume consumption on.
    + * @throws {LibrdKafkaError} - Throws when there is no offset stored
    + */
    +KafkaConsumer.prototype.resume = function(topicPartitions) {
    +  if (!this.isConnected()) {
    +    throw new Error('Client is disconnected');
    +  }
    +
    +  return this._errorWrap(this._client.resume(topicPartitions), true);
    +};
    +
    +/**
    + * Pause producing or consumption for the provided list of partitions.
    + *
    + * @param {Array.<TopicPartition>} topicPartitions - List of topics to pause consumption on.
    + * @throws {LibrdKafkaError} - Throws when there is no offset stored
    + */
    +KafkaConsumer.prototype.pause = function(topicPartitions) {
    +  if (!this.isConnected()) {
    +    throw new Error('Client is disconnected');
    +  }
    +
    +  return this._errorWrap(this._client.pause(topicPartitions), true);
    +};
    +
    +
    +
    + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/v2.18.0/producer-stream.js.html b/v2.18.0/producer-stream.js.html new file mode 100644 index 00000000..20591fad --- /dev/null +++ b/v2.18.0/producer-stream.js.html @@ -0,0 +1,404 @@ + + + + + JSDoc: Source: producer-stream.js + + + + + + + + + + + + + + + +
    +
    + +
    +

    Source: producer-stream.js

    + + + + + + +
    +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +'use strict';
    +
    +module.exports = ProducerStream;
    +
    +var Writable = require('stream').Writable;
    +var util = require('util');
    +var ErrorCode = require('./error').codes;
    +
    +util.inherits(ProducerStream, Writable);
    +
    +/**
    + * Writable stream integrating with the Kafka Producer.
    + *
    + * This class is used to write data to Kafka in a streaming way. It takes
    + * buffers of data and puts them into the appropriate Kafka topic. If you need
    + * finer control over partitions or keys, this is probably not the class for
    + * you. In that situation just use the Producer itself.
    + *
    + * The stream detects if Kafka is already connected. You can safely begin
    + * writing right away.
    + *
    + * This stream does not operate in Object mode and can only be given buffers.
    + *
    + * @param {Producer} producer - The Kafka Producer object.
    + * @param {array} topics - Array of topics
    + * @param {object} options - Topic configuration.
    + * @constructor
    + * @extends stream.Writable
    + */
    +function ProducerStream(producer, options) {
    +  if (!(this instanceof ProducerStream)) {
    +    return new ProducerStream(producer, options);
    +  }
    +
    +  if (options === undefined) {
    +    options = {};
    +  } else if (typeof options === 'string') {
    +    options = { encoding: options };
    +  } else if (options === null || typeof options !== 'object') {
    +    throw new TypeError('"streamOptions" argument must be a string or an object');
    +  }
    +
    +  if (!options.objectMode && !options.topic) {
    +    throw new TypeError('ProducerStreams not using objectMode must provide a topic to produce to.');
    +  }
    +
    +  if (options.objectMode !== true) {
    +    this._write = this._write_buffer;
    +  } else {
    +    this._write = this._write_message;
    +  }
    +
    +  Writable.call(this, options);
    +
    +  this.producer = producer;
    +  this.topicName = options.topic;
    +
    +  this.autoClose = options.autoClose === undefined ? true : !!options.autoClose;
    +  this.connectOptions = options.connectOptions || {};
    +
    +  this.producer.setPollInterval(options.pollInterval || 1000);
    +
    +  if (options.encoding) {
    +    this.setDefaultEncoding(options.encoding);
    +  }
    +
    +  // Connect to the producer. Unless we are already connected
    +  if (!this.producer.isConnected()) {
    +    this.connect(this.connectOptions);
    +  }
    +
    +  var self = this;
    +
    +  this.once('finish', function() {
    +    if (this.autoClose) {
    +      this.close();
    +    }
    +  });
    +
    +}
    +
    +ProducerStream.prototype.connect = function(options) {
    +  this.producer.connect(options, function(err, data) {
    +    if (err) {
    +      this.emit('error', err);
    +      return;
    +    }
    +
    +  }.bind(this));
    +};
    +
    +/**
    + * Internal stream write method for ProducerStream when writing buffers.
    + *
    + * This method should never be called externally. It has some recursion to
    + * handle cases where the producer is not yet connected.
    + *
    + * @param  {buffer} chunk - Chunk to write.
    + * @param  {string} encoding - Encoding for the buffer
    + * @param  {Function} cb - Callback to call when the stream is done processing
    + * the data.
    + * @private
    + * @see https://github.com/nodejs/node/blob/master/lib/fs.js#L1901
    + */
    +ProducerStream.prototype._write_buffer = function(data, encoding, cb) {
    +  if (!(data instanceof Buffer)) {
    +    this.emit('error', new Error('Invalid data. Can only produce buffers'));
    +    return;
    +  }
    +
    +  var self = this;
    +
    +  if (!this.producer.isConnected()) {
    +    this.producer.once('ready', function() {
    +      self._write(data, encoding, cb);
    +    });
    +    return;
    +  }
    +
    +  try {
    +    this.producer.produce(self.topicName, null, data, null);
    +    setImmediate(cb);
    +  } catch (e) {
    +    if (ErrorCode.ERR__QUEUE_FULL === e.code) {
    +      // Poll for good measure
    +      self.producer.poll();
    +
    +      // Just delay this thing a bit and pass the params
    +      // backpressure will get exerted this way.
    +      setTimeout(function() {
    +        self._write(data, encoding, cb);
    +      }, 500);
    +    } else {
    +      if (self.autoClose) {
    +        self.close();
    +      }
    +      setImmediate(function() {
    +        cb(e);
    +      });
    +    }
    +  }
    +};
    +
    +/**
    + * Internal stream write method for ProducerStream when writing objects.
    + *
    + * This method should never be called externally. It has some recursion to
    + * handle cases where the producer is not yet connected.
    + *
    + * @param  {object} message - Message to write.
    + * @param  {string} encoding - Encoding for the buffer
    + * @param  {Function} cb - Callback to call when the stream is done processing
    + * the data.
    + * @private
    + * @see https://github.com/nodejs/node/blob/master/lib/fs.js#L1901
    + */
    +ProducerStream.prototype._write_message = function(message, encoding, cb) {
    +  var self = this;
    +
    +  if (!this.producer.isConnected()) {
    +    this.producer.once('ready', function() {
    +      self._write(message, encoding, cb);
    +    });
    +    return;
    +  }
    +
    +  try {
    +    this.producer.produce(message.topic, message.partition, message.value, message.key, message.timestamp, message.opaque, message.headers);
    +    setImmediate(cb);
    +  } catch (e) {
    +    if (ErrorCode.ERR__QUEUE_FULL === e.code) {
    +      // Poll for good measure
    +      self.producer.poll();
    +
    +      // Just delay this thing a bit and pass the params
    +      // backpressure will get exerted this way.
    +      setTimeout(function() {
    +        self._write(message, encoding, cb);
    +      }, 500);
    +    } else {
    +      if (self.autoClose) {
    +        self.close();
    +      }
    +      setImmediate(function() {
    +        cb(e);
    +      });
    +    }
    +  }
    +};
    +
    +function writev(producer, topic, chunks, cb) {
    +
    +  // @todo maybe a produce batch method?
    +  var doneCount = 0;
    +  var err = null;
    +  var chunk = null;
    +
    +  function maybeDone(e) {
    +    if (e) {
    +      err = e;
    +    }
    +    doneCount ++;
    +    if (doneCount === chunks.length) {
    +      cb(err);
    +    }
    +  }
    +
    +  function retry(restChunks) {
    +    // Poll for good measure
    +    producer.poll();
    +
    +    // Just delay this thing a bit and pass the params
    +    // backpressure will get exerted this way.
    +    setTimeout(function() {
    +      writev(producer, topic, restChunks, cb);
    +    }, 500);
    +  }
    +
    +  for (var i = 0; i < chunks.length; i++) {
    +    chunk = chunks[i];
    +
    +    try {
    +      if (Buffer.isBuffer(chunk)) {
    +        producer.produce(topic, null, chunk, null);
    +      } else {
    +        producer.produce(chunk.topic, chunk.partition, chunk.value, chunk.key, chunk.timestamp, chunk.opaque, chunk.headers);
    +      }
    +      maybeDone();
    +    } catch (e) {
    +      if (ErrorCode.ERR__QUEUE_FULL === e.code) {
    +        retry(chunks.slice(i));
    +      } else {
    +        cb(e);
    +      }
    +      break;
    +    }
    +  }
    +
    +}
    +
    +ProducerStream.prototype._writev = function(data, cb) {
    +  if (!this.producer.isConnected()) {
    +    this.once('ready', function() {
    +      this._writev(data, cb);
    +    });
    +    return;
    +  }
    +
    +  var self = this;
    +  var len = data.length;
    +  var chunks = new Array(len);
    +  var size = 0;
    +
    +  for (var i = 0; i < len; i++) {
    +    var chunk = data[i].chunk;
    +
    +    chunks[i] = chunk;
    +    size += chunk.length;
    +  }
    +
    +  writev(this.producer, this.topicName, chunks, function(err) {
    +    if (err) {
    +      self.close();
    +      cb(err);
    +      return;
    +    }
    +    cb();
    +  });
    +
    +};
    +
    +ProducerStream.prototype.close = function(cb) {
    +  var self = this;
    +  if (cb) {
    +    this.once('close', cb);
    +  }
    +
    +  // Use interval variables in here
    +  if (self.producer._isConnected) {
    +    self.producer.disconnect(function() {
    +      // Previously this set the producer to null. I'm not sure there is any benefit
    +      // to that other than I guess helping flag it for GC?
    +      // https://github.com/Blizzard/node-rdkafka/issues/344
    +      close();
    +    });
    +  } else if (self.producer._isConnecting){
    +    self.producer.once('ready', function() {
    +      // Don't pass CB this time because it has already been passed
    +      self.close();
    +    });
    +  } else {
    +    setImmediate(close);
    +  }
    +
    +  function close() {
    +    self.emit('close');
    +  }
    +};
    +
    +
    +
    + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/v2.18.0/producer.js.html b/v2.18.0/producer.js.html new file mode 100644 index 00000000..6bc7fd0a --- /dev/null +++ b/v2.18.0/producer.js.html @@ -0,0 +1,472 @@ + + + + + JSDoc: Source: producer.js + + + + + + + + + + + + + + + +
    +
    + +
    +

    Source: producer.js

    + + + + + + +
    +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +module.exports = Producer;
    +
    +var Client = require('./client');
    +
    +var util = require('util');
    +var Kafka = require('../librdkafka.js');
    +var ProducerStream = require('./producer-stream');
    +var LibrdKafkaError = require('./error');
    +var shallowCopy = require('./util').shallowCopy;
    +
    +util.inherits(Producer, Client);
    +
    +/**
    + * Producer class for sending messages to Kafka
    + *
    + * This is the main entry point for writing data to Kafka. You
    + * configure this like you do any other client, with a global
    + * configuration and default topic configuration.
    + *
    + * Once you instantiate this object, you need to connect to it first.
    + * This allows you to get the metadata and make sure the connection
    + * can be made before you depend on it. After that, problems with
    + * the connection will by brought down by using poll, which automatically
    + * runs when a transaction is made on the object.
    + *
    + * @param {object} conf - Key value pairs to configure the producer
    + * @param {object} topicConf - Key value pairs to create a default
    + * topic configuration
    + * @extends Client
    + * @constructor
    + */
    +function Producer(conf, topicConf) {
    +  if (!(this instanceof Producer)) {
    +    return new Producer(conf, topicConf);
    +  }
    +
    +  conf = shallowCopy(conf);
    +  topicConf = shallowCopy(topicConf);
    +
    +  /**
    +   * Producer message. This is sent to the wrapper, not received from it
    +   *
    +   * @typedef {object} Producer~Message
    +   * @property {string|buffer} message - The buffer to send to Kafka.
    +   * @property {Topic} topic - The Kafka topic to produce to.
    +   * @property {number} partition - The partition to produce to. Defaults to
    +   * the partitioner
    +   * @property {string} key - The key string to use for the message.
    +   * @see Consumer~Message
    +   */
    +
    +  var gTopic = conf.topic || false;
    +  var gPart = conf.partition || null;
    +  var dr_cb = conf.dr_cb || null;
    +  var dr_msg_cb = conf.dr_msg_cb || null;
    +
    +  // delete keys we don't want to pass on
    +  delete conf.topic;
    +  delete conf.partition;
    +
    +  delete conf.dr_cb;
    +  delete conf.dr_msg_cb;
    +
    +  // client is an initialized consumer object
    +  // @see NodeKafka::Producer::Init
    +  Client.call(this, conf, Kafka.Producer, topicConf);
    +
    +  // Delete these keys after saving them in vars
    +  this.globalConfig = conf;
    +  this.topicConfig = topicConf;
    +  this.defaultTopic = gTopic || null;
    +  this.defaultPartition = gPart == null ? -1 : gPart;
    +
    +  this.sentMessages = 0;
    +
    +  this.pollInterval = undefined;
    +
    +  if (dr_msg_cb || dr_cb) {
    +    this._cb_configs.event.delivery_cb =  function(err, report) {
    +      if (err) {
    +        err = LibrdKafkaError.create(err);
    +      }
    +      this.emit('delivery-report', err, report);
    +    }.bind(this);
    +    this._cb_configs.event.delivery_cb.dr_msg_cb = !!dr_msg_cb;
    +
    +    if (typeof dr_cb === 'function') {
    +      this.on('delivery-report', dr_cb);
    +    }
    +
    +  }
    +}
    +
    +/**
    + * Produce a message to Kafka synchronously.
    + *
    + * This is the method mainly used in this class. Use it to produce
    + * a message to Kafka.
    + *
    + * When this is sent off, there is no guarantee it is delivered. If you need
    + * guaranteed delivery, change your *acks* settings, or use delivery reports.
    + *
    + * @param {string} topic - The topic name to produce to.
    + * @param {number|null} partition - The partition number to produce to.
    + * @param {Buffer|null} message - The message to produce.
    + * @param {string} key - The key associated with the message.
    + * @param {number|null} timestamp - Timestamp to send with the message.
    + * @param {object} opaque - An object you want passed along with this message, if provided.
    + * @param {object} headers - A list of custom key value pairs that provide message metadata.
    + * @throws {LibrdKafkaError} - Throws a librdkafka error if it failed.
    + * @return {boolean} - returns an error if it failed, or true if not
    + * @see Producer#produce
    + */
    +Producer.prototype.produce = function(topic, partition, message, key, timestamp, opaque, headers) {
    +  if (!this._isConnected) {
    +    throw new Error('Producer not connected');
    +  }
    +
    +  // I have removed support for using a topic object. It is going to be removed
    +  // from librdkafka soon, and it causes issues with shutting down
    +  if (!topic || typeof topic !== 'string') {
    +    throw new TypeError('"topic" must be a string');
    +  }
    +
    +  this.sentMessages++;
    +
    +  partition = partition == null ? this.defaultPartition : partition;
    +
    +  return this._errorWrap(
    +    this._client.produce(topic, partition, message, key, timestamp, opaque, headers));
    +
    +};
    +
    +/**
    + * Create a write stream interface for a producer.
    + *
    + * This stream does not run in object mode. It only takes buffers of data.
    + *
    + * @param {object} conf - Key value pairs to configure the producer
    + * @param {object} topicConf - Key value pairs to create a default
    + * topic configuration
    + * @param {object} streamOptions - Stream options
    + * @return {ProducerStream} - returns the write stream for writing to Kafka.
    + */
    +Producer.createWriteStream = function(conf, topicConf, streamOptions) {
    +  var producer = new Producer(conf, topicConf);
    +  return new ProducerStream(producer, streamOptions);
    +};
    +
    +/**
    + * Poll for events
    + *
    + * We need to run poll in order to learn about new events that have occurred.
    + * This is no longer done automatically when we produce, so we need to run
    + * it manually, or set the producer to automatically poll.
    + *
    + * @return {Producer} - returns itself.
    + */
    +Producer.prototype.poll = function() {
    +  if (!this._isConnected) {
    +    throw new Error('Producer not connected');
    +  }
    +  this._client.poll();
    +  return this;
    +};
    +
    +/**
    + * Set automatic polling for events.
    + *
    + * We need to run poll in order to learn about new events that have occurred.
    + * If you would like this done on an interval with disconnects and reconnections
    + * managed, you can do it here
    + *
    + * @param {number} interval - Interval, in milliseconds, to poll
    + *
    + * @return {Producer} - returns itself.
    + */
    +Producer.prototype.setPollInterval = function(interval) {
    +  // If we already have a poll interval we need to stop it
    +  if (this.pollInterval) {
    +    clearInterval(this.pollInterval);
    +    this.pollInterval = undefined;
    +  }
    +
    +  if (interval === 0) {
    +    // If the interval was set to 0, bail out. We don't want to process this.
    +    // If there was an interval previously set, it has been removed.
    +    return;
    +  }
    +
    +  var self = this;
    +
    +  // Now we want to make sure we are connected.
    +  if (!this._isConnected) {
    +    // If we are not, execute this once the connection goes through.
    +    this.once('ready', function() {
    +      self.setPollInterval(interval);
    +    });
    +    return;
    +  }
    +
    +  // We know we are connected at this point.
    +  // Unref this interval
    +  this.pollInterval = setInterval(function() {
    +    try {
    +      self.poll();
    +    } catch (e) {
    +      // We can probably ignore errors here as far as broadcasting.
    +      // Disconnection issues will get handled below
    +    }
    +  }, interval).unref();
    +
    +  // Handle disconnections
    +  this.once('disconnected', function() {
    +    // Just rerun this function with interval 0. If any
    +    // poll interval is set, this will remove it
    +    self.setPollInterval(0);
    +  });
    +
    +  return this;
    +};
    +
    +/**
    + * Flush the producer
    + *
    + * Flush everything on the internal librdkafka producer buffer. Do this before
    + * disconnects usually
    + *
    + * @param {number} timeout - Number of milliseconds to try to flush before giving up.
    + * @param {function} callback - Callback to fire when the flush is done.
    + *
    + * @return {Producer} - returns itself.
    + */
    +Producer.prototype.flush = function(timeout, callback) {
    +  if (!this._isConnected) {
    +    throw new Error('Producer not connected');
    +  }
    +
    +  if (timeout === undefined || timeout === null) {
    +    timeout = 500;
    +  }
    +
    +  this._client.flush(timeout, function(err) {
    +    if (err) {
    +      err = LibrdKafkaError.create(err);
    +    }
    +
    +    if (callback) {
    +      callback(err);
    +    }
    +  });
    +  return this;
    +};
    +
    +/**
    + * Save the base disconnect method here so we can overwrite it and add a flush
    + */
    +Producer.prototype._disconnect = Producer.prototype.disconnect;
    +
    +/**
    + * Disconnect the producer
    + *
    + * Flush everything on the internal librdkafka producer buffer. Then disconnect
    + *
    + * @param {number} timeout - Number of milliseconds to try to flush before giving up, defaults to 5 seconds.
    + * @param {function} cb - The callback to fire when
    + */
    +Producer.prototype.disconnect = function(timeout, cb) {
    +  var self = this;
    +  var timeoutInterval = 5000;
    +
    +  if (typeof timeout === 'function') {
    +    cb = timeout;
    +  } else {
    +    timeoutInterval = timeout;
    +  }
    +
    +  this.flush(timeoutInterval, function() {
    +    self._disconnect(cb);
    +  });
    +};
    +
    +/**
    + * Init a transaction.
    + *
    + * Initialize transactions, this is only performed once per transactional producer.
    + *
    + * @param {number} timeout - Number of milliseconds to try to initialize before giving up, defaults to 5 seconds.
    + * @param {function} cb - Callback to return when operation is completed
    + * @return {Producer} - returns itself.
    + */
    +Producer.prototype.initTransactions = function(timeout, cb) {
    +  if (typeof timeout === 'function') {
    +    cb = timeout;
    +    timeout = 5000;
    +  }
    +  this._client.initTransactions(timeout, function(err) {
    +    cb(err ? LibrdKafkaError.create(err) : err);
    +  });
    +};
    +
    +/**
    + * Begin a transaction.
    + *
    + * 'initTransaction' must have been called successfully (once) before this function is called.
    + *
    + * @return {Producer} - returns itself.
    + */
    +Producer.prototype.beginTransaction = function(cb) {
    +  this._client.beginTransaction(function(err) {
    +    cb(err ? LibrdKafkaError.create(err) : err);
    +  });
    +};
    +
    +/**
    + * Commit the current transaction (as started with 'beginTransaction').
    + *
    + * @param {number} timeout - Number of milliseconds to try to commit before giving up, defaults to 5 seconds
    + * @param {function} cb - Callback to return when operation is completed
    + * @return {Producer} - returns itself.
    + */
    +Producer.prototype.commitTransaction = function(timeout, cb) {
    +  if (typeof timeout === 'function') {
    +    cb = timeout;
    +    timeout = 5000;
    +  }
    +  this._client.commitTransaction(timeout, function(err) {
    +    cb(err ? LibrdKafkaError.create(err) : err);
    +  });
    +};
    +
    +/**
    + * Aborts the ongoing transaction.
    + *
    + * @param {number} timeout - Number of milliseconds to try to abort, defaults to 5 seconds
    + * @param {function} cb - Callback to return when operation is completed
    + * @return {Producer} - returns itself.
    + */
    +Producer.prototype.abortTransaction = function(timeout, cb) {
    +  if (typeof timeout === 'function') {
    +    cb = timeout;
    +    timeout = 5000;
    +  }
    +  this._client.abortTransaction(timeout, function(err) {
    +    cb(err ? LibrdKafkaError.create(err) : err);
    +  });
    +};
    +
    +/**
    + * Send the current offsets of the consumer to the ongoing transaction.
    + *
    + * @param {number} offsets - Offsets to send as part of the next commit
    + * @param {Consumer} consumer - An instance of the consumer
    + * @param {number} timeout - Number of milliseconds to try to send offsets, defaults to 5 seconds
    + * @param {function} cb - Callback to return when operation is completed
    + * @return {Producer} - returns itself.
    + */
    +Producer.prototype.sendOffsetsToTransaction = function(offsets, consumer, timeout, cb) {
    +  if (typeof timeout === 'function') {
    +    cb = timeout;
    +    timeout = 5000;
    +  }
    +  this._client.sendOffsetsToTransaction(offsets, consumer.getClient(), timeout, function(err) {
    +    cb(err ? LibrdKafkaError.create(err) : err);
    +  });
    +};
    +
    +
    +
    + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/v2.18.0/producer_high-level-producer.js.html b/v2.18.0/producer_high-level-producer.js.html new file mode 100644 index 00000000..a576b745 --- /dev/null +++ b/v2.18.0/producer_high-level-producer.js.html @@ -0,0 +1,420 @@ + + + + + JSDoc: Source: producer/high-level-producer.js + + + + + + + + + + + + + + + +
    +
    + +
    +

    Source: producer/high-level-producer.js

    + + + + + + +
    +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +module.exports = HighLevelProducer;
    +
    +var util = require('util');
    +var Producer = require('../producer');
    +var LibrdKafkaError = require('../error');
    +var EventEmitter = require('events').EventEmitter;
    +var RefCounter = require('../tools/ref-counter');
    +var shallowCopy = require('../util').shallowCopy;
    +var isObject = require('../util').isObject;
    +
    +util.inherits(HighLevelProducer, Producer);
    +
    +var noopSerializer = createSerializer(function (v) { return v; });
    +
    +/**
    + * Create a serializer
    + *
    + * Method simply wraps a serializer provided by a user
    + * so it adds context to the error
    + *
    + * @returns {function} Serialization function
    + */
    +function createSerializer(serializer) {
    +  var applyFn = function serializationWrapper(v, cb) {
    +    try {
    +      return cb ? serializer(v, cb) : serializer(v);
    +    } catch (e) {
    +      var modifiedError = new Error('Could not serialize value: ' + e.message);
    +      modifiedError.value = v;
    +      modifiedError.serializer = serializer;
    +      throw modifiedError;
    +    }
    +  };
    +
    +  // We can check how many parameters the function has and activate the asynchronous
    +  // operation if the number of parameters the function accepts is > 1
    +  return {
    +    apply: applyFn,
    +    async: serializer.length > 1
    +  };
    +}
    +
    +/**
    + * Producer class for sending messages to Kafka in a higher level fashion
    + *
    + * This is the main entry point for writing data to Kafka if you want more
    + * functionality than librdkafka supports out of the box. You
    + * configure this like you do any other client, with a global
    + * configuration and default topic configuration.
    + *
    + * Once you instantiate this object, you need to connect to it first.
    + * This allows you to get the metadata and make sure the connection
    + * can be made before you depend on it. After that, problems with
    + * the connection will by brought down by using poll, which automatically
    + * runs when a transaction is made on the object.
    + *
    + * This has a few restrictions, so it is not for free!
    + *
    + * 1. You may not define opaque tokens
    + *    The higher level producer is powered by opaque tokens.
    + * 2. Every message ack will dispatch an event on the node thread.
    + * 3. Will use a ref counter to determine if there are outgoing produces.
    + *
    + * This will return the new object you should use instead when doing your
    + * produce calls
    + *
    + * @param {object} conf - Key value pairs to configure the producer
    + * @param {object} topicConf - Key value pairs to create a default
    + * topic configuration
    + * @extends Producer
    + * @constructor
    + */
    +function HighLevelProducer(conf, topicConf) {
    +  if (!(this instanceof HighLevelProducer)) {
    +    return new HighLevelProducer(conf, topicConf);
    +  }
    +
    +  // Force this to be true for the high level producer
    +  conf = shallowCopy(conf);
    +  conf.dr_cb = true;
    +
    +  // producer is an initialized consumer object
    +  // @see NodeKafka::Producer::Init
    +  Producer.call(this, conf, topicConf);
    +  var self = this;
    +
    +  // Add a delivery emitter to the producer
    +  this._hl = {
    +    deliveryEmitter: new EventEmitter(),
    +    messageId: 0,
    +    // Special logic for polling. We use a reference counter to know when we need
    +    // to be doing it and when we can stop. This means when we go into fast polling
    +    // mode we don't need to do multiple calls to poll since they all will yield
    +    // the same result
    +    pollingRefTimeout: null,
    +  };
    +
    +  // Add the polling ref counter to the class which ensures we poll when we go active
    +  this._hl.pollingRef = new RefCounter(function() {
    +    self._hl.pollingRefTimeout = setInterval(function() {
    +      try {
    +        self.poll();
    +      } catch (e) {
    +        if (!self._isConnected) {
    +          // If we got disconnected for some reason there is no point
    +          // in polling anymore
    +          clearInterval(self._hl.pollingRefTimeout);
    +        }
    +      }
    +    }, 1);
    +  }, function() {
    +    clearInterval(self._hl.pollingRefTimeout);
    +  });
    +
    +  // Default poll interval. More sophisticated polling is also done in create rule method
    +  this.setPollInterval(1000);
    +
    +  // Listen to all delivery reports to propagate elements with a _message_id to the emitter
    +  this.on('delivery-report', function(err, report) {
    +    if (report.opaque && report.opaque.__message_id !== undefined) {
    +      self._hl.deliveryEmitter.emit(report.opaque.__message_id, err, report.offset);
    +    }
    +  });
    +
    +  // Save old produce here since we are making some modifications for it
    +  this._oldProduce = this.produce;
    +  this.produce = this._modifiedProduce;
    +
    +  // Serializer information
    +  this.keySerializer = noopSerializer;
    +  this.valueSerializer = noopSerializer;
    +}
    +
    +/**
    + * Produce a message to Kafka asynchronously.
    + *
    + * This is the method mainly used in this class. Use it to produce
    + * a message to Kafka.
    + *
    + * When this is sent off, and you recieve your callback, the assurances afforded
    + * to you will be equal to those provided by your ack level.
    + *
    + * @param {string} topic - The topic name to produce to.
    + * @param {number|null} partition - The partition number to produce to.
    + * @param {Buffer|null} message - The message to produce.
    + * @param {string} key - The key associated with the message.
    + * @param {number|null} timestamp - Timestamp to send with the message.
    + * @param {object} headers - A list of custom key value pairs that provide message metadata.
    + * @param {function} callback - Callback to call when the delivery report is recieved.
    + * @throws {LibrdKafkaError} - Throws a librdkafka error if it failed.
    + * @return {boolean} - returns an error if it failed, or true if not
    + * @see Producer#produce
    + */
    +HighLevelProducer.prototype._modifiedProduce = function(topic, partition, message, key, timestamp, headers, callback) {
    +  // headers are optional
    +  if (arguments.length === 6) {
    +    callback = headers;
    +    headers = undefined;
    +  }
    +
    +  // Add the message id
    +  var opaque = {
    +    __message_id: this._hl.messageId++,
    +  };
    +
    +  this._hl.pollingRef.increment();
    +
    +  var self = this;
    +
    +  var resolvedSerializedValue;
    +  var resolvedSerializedKey;
    +  var calledBack = false;
    +
    +  // Actually do the produce with new key and value based on deserialized
    +  // results
    +  function doProduce(v, k) {
    +    try {
    +      var r = self._oldProduce(topic, partition,
    +        v, k,
    +        timestamp, opaque, headers);
    +
    +      self._hl.deliveryEmitter.once(opaque.__message_id, function(err, offset) {
    +        self._hl.pollingRef.decrement();
    +        setImmediate(function() {
    +          // Offset must be greater than or equal to 0 otherwise it is a null offset
    +          // Possibly because we have acks off
    +          callback(err, offset >= 0 ? offset : null);
    +        });
    +      });
    +
    +      return r;
    +    } catch (e) {
    +      callback(e);
    +    }
    +  }
    +
    +  function produceIfComplete() {
    +    if (resolvedSerializedKey !== undefined && resolvedSerializedValue !== undefined) {
    +      doProduce(resolvedSerializedValue, resolvedSerializedKey);
    +    }
    +  }
    +
    +  // To run on a promise if returned by the serializer
    +  function finishSerializedValue(v) {
    +    if (!calledBack) {
    +      resolvedSerializedValue = v;
    +      produceIfComplete();
    +    }
    +  }
    +
    +  // To run on a promise of returned by the serializer
    +  function finishSerializedKey(k) {
    +    resolvedSerializedKey = k;
    +
    +    if (!calledBack) {
    +      produceIfComplete();
    +    }
    +  }
    +
    +  function failSerializedValue(err) {
    +    if (!calledBack) {
    +      calledBack = true;
    +      callback(err);
    +    }
    +  }
    +
    +  function failSerializedKey(err) {
    +    if (!calledBack) {
    +      calledBack = true;
    +      callback(err);
    +    }
    +  }
    +
    +  function valueSerializerCallback(err, v) {
    +    if (err) {
    +      failSerializedValue(err);
    +    } else {
    +      finishSerializedValue(v);
    +    }
    +  }
    +
    +  function keySerializerCallback(err, v) {
    +    if (err) {
    +      failSerializedKey(err);
    +    } else {
    +      finishSerializedKey(v);
    +    }
    +  }
    +
    +  try {
    +    if (this.valueSerializer.async) {
    +      // If this is async we need to give it a callback
    +      this.valueSerializer.apply(message, valueSerializerCallback);
    +    } else {
    +      var serializedValue = this.valueSerializer.apply(message);
    +      // Check if we were returned a promise in order to support promise behavior
    +      if (serializedValue &&
    +          typeof serializedValue.then === 'function' &&
    +          typeof serializedValue.catch === 'function') {
    +        // This is a promise. We need to hook into its then and catch
    +        serializedValue.then(finishSerializedValue).catch(failSerializedValue);
    +      } else {
    +        resolvedSerializedValue = serializedValue;
    +      }
    +    }
    +
    +    if (this.keySerializer.async) {
    +      // If this is async we need to give it a callback
    +      this.keySerializer.apply(key, keySerializerCallback);
    +    } else {
    +      var serializedKey = this.keySerializer.apply(key);
    +      // Check if we were returned a promise in order to support promise behavior
    +      if (serializedKey &&
    +          typeof serializedKey.then === 'function' &&
    +          typeof serializedKey.catch === 'function') {
    +        // This is a promise. We need to hook into its then and catch
    +        serializedKey.then(finishSerializedKey).catch(failSerializedKey);
    +      } else {
    +        resolvedSerializedKey = serializedKey;
    +      }
    +    }
    +
    +    // Only do the produce here if we are complete. That is, if the key
    +    // and value have been serialized.
    +    produceIfComplete();
    +  } catch (e) {
    +    setImmediate(function() {
    +      calledBack = true;
    +      callback(e);
    +    });
    +  }
    +};
    +
    +/**
    + * Set the key serializer
    + *
    + * This allows the value inside the produce call to differ from the value of the
    + * value actually produced to kafka. Good if, for example, you want to serialize
    + * it to a particular format.
    + */
    +HighLevelProducer.prototype.setKeySerializer = function(serializer) {
    +  this.keySerializer = createSerializer(serializer);
    +};
    +
    +/**
    + * Set the value serializer
    + *
    + * This allows the value inside the produce call to differ from the value of the
    + * value actually produced to kafka. Good if, for example, you want to serialize
    + * it to a particular format.
    + */
    +HighLevelProducer.prototype.setValueSerializer = function(serializer) {
    +  this.valueSerializer = createSerializer(serializer);
    +};
    +
    +
    +
    + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/v2.18.0/scripts/prettify/lang-css.js b/v2.18.0/scripts/prettify/lang-css.js new file mode 100644 index 00000000..041e1f59 --- /dev/null +++ b/v2.18.0/scripts/prettify/lang-css.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", +/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/v2.18.0/scripts/prettify/prettify.js b/v2.18.0/scripts/prettify/prettify.js new file mode 100644 index 00000000..eef5ad7e --- /dev/null +++ b/v2.18.0/scripts/prettify/prettify.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p li { + float: right; +} + +dl dd { + margin-left: 0px; +} + +.navigation-sidebar { + margin-right: 40px; +} + +.navigation-sidebar > ul { + border: 1px solid rgba(255,255,255,0.1); +} + +.navigation-sidebar > ul > li > a { + border-top: 1px solid rgba(255,255,255,0.1); + border-bottom: 1px solid rgba(255,255,255,0.1); + background: rgba(255,255,255,0.03); + display: block; + width: 100%; + height: 40px; + line-height: 40px; + padding: 0 40px 0 10px; + position: relative; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: color .2s,background-color .2s; + transition: color .2s,background-color .2s; +} + +.navigation-sidebar > ul > li:last-child { + margin-bottom: 10px; +} + +.navigation-sidebar > ul > li > a:after { + /*content: "";*/ + display: block; + position: absolute; + width: 16px; + height: 16px; + overflow: hidden; + right: 7px; + top: 12px; + background-image: url("../toolkit/images/toolkit/themes/bnet/icons/sprite-16-blue.png"); + background-position: 0 0; + background-repeat: no-repeat; + background-position: -80px -256px; +} + +.navigation-sidebar > ul > li > ul > li > a { + display: block; + height: 20px; + white-space: nowrap; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + line-height: 20px; + padding: 0 10px; + color: rgba(255,255,255,0.5); + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.navigation-sidebar > ul > li > ul > li:first-child { + margin-top: 10px; +} + +.navigation-sidebar > ul > li > ul > li { + margin: 0; +} + +.navigation-sidebar > ul > li > ul > li:last-child { + margin-bottom: 0px; +} diff --git a/v2.18.0/styles/prettify.css b/v2.18.0/styles/prettify.css new file mode 100644 index 00000000..0fd654ff --- /dev/null +++ b/v2.18.0/styles/prettify.css @@ -0,0 +1 @@ +.str{color:#ec7600}.kwd{color:#93c763}.com{color:#66747b}.typ{color:#678cb1}.lit{color:#facd22}.pun{color:#f1f2f3}.pln{color:#f1f2f3}.tag{color:#8ac763}.atn{color:#e0e2e4}.atv{color:#ec7600}.dec{color:#a082bd}pre.prettyprint{padding:10px;border:1px solid rgba(255,255,255,.1)}.prettyprint.linenums{box-shadow:40px 0 0 #293134 inset,41px 0 0 #255c6f inset}ol.linenums{margin-top:0;margin-bottom:0}.prettyprint{background:#22282a;color:#f1f2f3;overflow:hidden}li.L0,li.L1,li.L2,li.L3,li.L4,li.L5,li.L6,li.L7,li.L8,li.L9{color:rgba(255,255,255,.3);list-style-type:decimal;margin:0 -10px 0 1px;padding:0 10px 0 10px}li.L1,li.L3,li.L5,li.L7,li.L9{background:rgba(255,255,255,.01)}@media print{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun{color:#440}.pln{color:#000}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}} diff --git a/v2.18.0/toolkit/css/toolkit/bnet-responsive-ie8.min.css b/v2.18.0/toolkit/css/toolkit/bnet-responsive-ie8.min.css new file mode 100644 index 00000000..082fc8a5 --- /dev/null +++ b/v2.18.0/toolkit/css/toolkit/bnet-responsive-ie8.min.css @@ -0,0 +1,2818 @@ +/** + * Battle.net Front end Toolkit + * + * @copyright ©2013 Blizzard Entertainment, Inc. All rights reserved. + * + * Twitter Bootstrap + * + * @see http://twitter.github.com/bootstrap/ + * @copyright ©2011 Twitter, Inc. All rights reserved. + * @license http://www.apache.org/licenses/LICENSE-2.0 + * + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Twitter typeahead.js + * + * @see https://github.com/twitter/typeahead.js + * @copyright ©2013 Twitter, Inc. All rights reserved. + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) 2013 Twitter, Inc + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Normalize.css + * + * @see http://git.io/normalize + * @copyright Nicolas Gallagher and Jonathan Neal + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) Nicolas Gallagher and Jonathan Neal + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Normalize.css + * + * @see http://scobo.github.io/lodestone/ + * @copyright D Scott Boyce + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) D Scott Boyce + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Unsemantic + * + * @see http://unsemantic.com + * @copyright Nathan Smith + * @license http://opensource.org/licenses/mit-license.php + * @license http://www.gnu.org/licenses/gpl.html + */ +/*! Lodestone v2.0.1 | MIT License | http://scobo.github.io/lodestone/ */.affix{position:fixed} +.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.clearfix:before,.clearfix:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.clearfix:after{clear:both} +.pull-right{float:right} +.pull-left{float:left} +.icon-spacer{background-image:none!important} +body .body-content{-webkit-transition:opacity,0.4s;transition:opacity .4s} +body.preload .body-content{opacity:0} +.fade{opacity:0;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.fade.in{opacity:1} +.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height,0.4s;transition:height .4s} +.collapse.in{height:auto} +.invisible{visibility:hidden!important} +.hide{display:none!important} +.show{display:block!important} +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} +audio,canvas,video{display:inline-block} +audio:not([controls]){display:none;height:0} +[hidden],template{display:none} +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;height:auto} +body{margin:0;height:auto} +a{text-decoration:none;background:transparent} +a:focus{outline:0} +a:active,a:hover{outline:0} +h1{font-size:2em;margin:.67em 0} +abbr[title]{border-bottom:1px dotted} +b,strong{font-weight:700} +dfn{font-style:italic} +hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} +mark{background:#ff0;color:#000} +code,kbd,pre,samp{font-family:monospace,serif;font-size:1em} +pre{white-space:pre-wrap} +q{quotes:"???" "???" "???" "???"} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-0.5em} +sub{bottom:-0.25em} +img{border:0} +svg:not(:root){overflow:hidden} +figure{margin:0} +fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em} +legend{border:0;padding:0} +button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +button,input{line-height:normal} +button,select{text-transform:none} +button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} +input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box} +input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +textarea{overflow:auto;vertical-align:top} +table{border-collapse:collapse;border-spacing:0} +.accordion-heading .accordion-toggle{display:block} +.modal.agegate{overflow:visible} +.modal.agegate .modal-body{overflow:visible} +.btn{display:inline-block;text-align:center;vertical-align:middle;cursor:pointer;-moz-box-sizing:border-box;box-sizing:border-box} +.btn:focus{outline:0} +.btn.active,.btn:active{outline:0} +.btn.loading{position:relative;overflow:hidden} +.btn.disabled,.btn[disabled]{cursor:default!important} +.btn.disabled-loading{overflow:hidden;position:relative} +.btn-block{display:block;width:100%;padding-left:0;padding-right:0} +input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%} +.carousel{position:relative} +.carousel .carousel-inner{overflow:hidden;width:100%;height:100%;position:relative} +.carousel .carousel-inner .cover{width:100%;height:100%;position:absolute;z-index:1} +.carousel .carousel-inner .carousel-caption{width:100%;height:100px;position:absolute;bottom:-55px;z-index:0} +.carousel .carousel-inner .carousel-caption .bg-layer{width:100%;height:100%;position:absolute;top:60px;left:0;z-index:-1} +.carousel .carousel-inner .carousel-caption .summary{height:32px} +.carousel .carousel-inner>.item{display:none;position:relative} +.carousel .carousel-inner>.item img{display:block;line-height:1;width:100%;height:auto} +.carousel .carousel-inner>.active,.carousel .carousel-inner>.next,.carousel .carousel-inner>.prev{display:block} +.carousel .carousel-inner>.active{left:0} +.carousel .carousel-inner>.next,.carousel .carousel-inner>.prev{position:absolute;top:0;width:100%} +.carousel .carousel-inner>.next{left:100%} +.carousel .carousel-inner>.prev{left:-100%} +.carousel .carousel-inner>.next.left,.carousel .carousel-inner>.prev.right{left:0} +.carousel .carousel-inner>.active.left{left:-100%} +.carousel .carousel-inner>.active.right{left:100%} +.carousel.crossfade .carousel-inner{overflow:hidden;width:100%;height:100%;position:relative} +.carousel.crossfade .carousel-inner>.item{display:none;position:relative;opacity:0} +.carousel.crossfade .carousel-inner>.item img{display:block;line-height:1;width:100%;height:auto} +.carousel.crossfade .carousel-inner>.active,.carousel.crossfade .carousel-inner>.next,.carousel.crossfade .carousel-inner>.prev{display:block} +.carousel.crossfade .carousel-inner>.active{opacity:1} +.carousel.crossfade .carousel-inner>.next,.carousel.crossfade .carousel-inner>.prev{position:absolute;top:0;left:0;opacity:0} +.carousel.crossfade .carousel-inner>.active.left,.carousel.crossfade .carousel-inner>.active.right{left:0;opacity:0} +.carousel .carousel-controls{position:absolute;z-index:100} +.carousel .carousel-controls button{position:absolute} +.carousel .carousel-controls button span{display:block;position:relative;z-index:-1} +code{white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box} +pre{display:block;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;-moz-box-sizing:border-box;box-sizing:border-box} +pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0} +.pre-scrollable{max-height:340px;overflow-y:scroll} +.dropdown{position:relative} +.dropdown-toggle{display:inline-block;position:relative} +.dropdown-toggle:active,.open .dropdown-toggle{outline:0} +.dropdown-menu{position:absolute;top:100%;display:none;float:left;min-width:160px;margin:0;list-style:none} +.dropdown-menu.pull-right{right:0;left:auto} +.dropdown-menu li>a{display:block;clear:both;white-space:nowrap} +.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{text-decoration:none} +.dropdown-menu .active>a,.dropdown-menu .active>a:hover,.dropdown-menu .active>a:focus{text-decoration:none} +.dropdown-menu .disabled>a:hover,.dropdown-menu .disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;cursor:default} +.open>.dropdown-menu{display:block} +.pull-right>.dropdown-menu{right:0;left:auto} +.dropdown-submenu{position:relative} +.dropdown .dropdown-menu .nav-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.label,.badge{display:inline-block;vertical-align:baseline;white-space:nowrap} +.badge{text-align:center} +.label:empty,.badge:empty{display:none} +a.label:focus,a.label:hover,a.badge:focus,a.badge:hover{cursor:pointer} +.media{overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box} +.media .img{float:left} +.media .img img{display:block} +.media .bd{overflow:hidden} +.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000} +.modal-backdrop.fade{opacity:0} +.modal-backdrop,.modal-backdrop.fade.in{opacity:.8} +.nav{margin:0;list-style:none} +.nav>li{padding:0;margin:0;float:left} +.nav>li>a{display:block} +.nav>li:last-child{margin-right:0} +.nav>li.pull-right{float:right} +.navbar .nav:before,.navbar .nav:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.navbar .nav:after{clear:both} +.navbar .nav>li:last-child{margin-right:0} +.navbar:not(.header) .nav>li:last-child,.navbar:not(.header) .nav>li.pull-right{margin-right:0} +.nav-list>li{float:none} +.nav-list>li>a{display:inline-block} +.nav-list>li.disabled>a{cursor:default} +.nav-list.icons>li{position:relative} +.nav-list.icons>li [class^="icon-"]:not(.icon-external-link),.nav-list.icons>li [class*="icon-"]:not(.icon-external-link){position:absolute} +.nav-tabs:before{content:"";display:table;line-height:0;visibility:hidden} +.nav.nav-tabs:after{content:"\00A0\00A0\00A0";display:table-cell;clear:both;width:1%;overflow:hidden;visibility:visible} +.nav-tabs>li{float:left} +.nav-tabs>li:first-child{padding-left:0} +.nav-tabs>li>a{-webkit-transition:background-color .2s,color .2s;transition:background-color .2s,color .2s} +.nav-tabs>li.active{border-bottom:0} +.nav-tabs>li.active>a{border-bottom-color:transparent;cursor:default} +.nav-tabs>li.disabled>a{cursor:default} +.nav-pills:before,.nav-pills:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.nav-pills:after{clear:both} +.nav-pills>li{float:left} +.nav-pills>li>a{text-decoration:none;-webkit-transition:box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.nav-pills>li>a:active{outline:0} +.nav-pills>li:last-child>a{margin:0} +.nav-pills>li.disabled>a{cursor:default} +.nav-header{display:block} +.tabbable:before,.tabbable:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.tabbable:after{clear:both} +.tab-content{overflow:auto} +.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;overflow:hidden} +.tab-content>.active,.pill-content>.active{display:block} +.pager{display:inline-block;margin-left:0;margin-bottom:0} +.pager:before,.pager:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.pager:after{clear:both} +.pager>li{padding-left:0;display:block;float:left} +.pager>li>a,.pager>li>span{display:block;text-align:center} +.pager>li>a:focus{outline:0} +.pager.aligned{display:block} +.pager.aligned>.next{float:right} +.pagination ul{display:inline-block;margin-left:0;margin-bottom:0} +.pagination ul>li{padding-left:0;display:block;float:left} +.pagination ul>li>a,.pagination ul>li>span{display:block;text-align:center} +.pagination ul>li>a:active{outline:0} +.pagination-group{overflow:hidden} +.pagination-group .pagination-left{float:left} +.pagination-group .pagination-right{float:right} +.pagination-group .pagination-right-absolute{position:absolute;right:0} +.pagination-left{text-align:right} +.pagination-centered{text-align:center} +.pagination-right{text-align:right} +.pagination-inline{display:inline-block;vertical-align:middle} +.pagination select.view-per-page{float:left;margin:0 6px 0 0} +.popover{position:absolute;top:0;left:0;display:none;text-align:left;white-space:normal} +.popover-content p:last-child,.popover-content ul:last-child,.popover-content ol:last-child{margin-bottom:0} +.progress{overflow:hidden;position:relative} +.progress:after{content:"";display:block;position:absolute;width:100%} +.progress .bar{position:relative;float:left;top:0;width:0;text-align:left;padding:0;z-index:1} +.progress.active .bar:after{content:"";display:block;overflow:hidden;position:absolute} +.progress-striped .bar:before{content:"";display:block;width:100%;overflow:hidden;position:absolute;left:0} +.progress .description{position:absolute;display:block;z-index:2} +.progress-tracker{overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.progress-tracker:before,.progress-tracker:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.progress-tracker:after{clear:both} +.progress-tracker li{display:block;float:left} +.progress-tracker li:first-of-type{padding-left:0} +.progress-tracker li:last-of-type{padding-right:0} +.scrollbar-content{position:relative} +.scrollbar-content .viewport{overflow:hidden;position:relative} +.scrollbar-content .overview{list-style:none;position:absolute;left:0;top:0;padding:0;margin:0} +.scrollbar-content .scrollbar{position:absolute;right:0;top:0} +.scrollbar-content .track{position:relative;height:100%} +.scrollbar-content .thumb{overflow:hidden;position:absolute;top:0;left:0;-moz-box-sizing:border-box;box-sizing:border-box} +.scrollbar-content .thumb .end{overflow:hidden;display:block;height:100%} +.scrollbar-content .disable{display:none} +.no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +[class^="icon-"],[class*=" icon-"]{display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-repeat:no-repeat;text-indent:-9999px;-webkit-transition:opacity,0.2s;transition:opacity .2s} +[class^="icon-24-"],[class*=" icon-24-"]{width:24px;height:24px} +[class^="icon-32-"],[class*=" icon-32-"]{width:32px;height:32px} +[class^="icon-48-"],[class*=" icon-48-"]{width:48px;height:48px} +[class^="icon-64-"],[class*=" icon-64-"]{width:64px;height:64px} +[class^="icon-128-"],[class*=" icon-128-"]{width:128px;height:128px} +[class^="icon-payment-"],[class*=" icon-payment-"]{width:24px} +[class^="icon-24-payment-"],[class*=" icon-24-payment-"]{width:36px} +.icon-placeholder{background-position:0 0} +.icon-ban-circle{background-position:-16px 0} +.icon-time{background-position:-32px 0} +.icon-add-time{background-position:-48px 0} +.icon-question-circle{background-position:-64px 0} +.icon-balance{background-position:-80px 0} +.icon-remove-circle{background-position:-96px 0} +.icon-mouse{background-position:-112px 0} +.icon-mouse-delete{background-position:-128px 0} +.icon-envelope{background-position:-144px 0} +.icon-open-envelope{background-position:0 -16px} +.icon-home{background-position:-16px -16px} +.icon-play{background-position:-32px -16px} +.icon-pause{background-position:-48px -16px} +.icon-file{background-position:-64px -16px} +.icon-search{background-position:-80px -16px} +.icon-edit{background-position:-96px -16px} +.icon-shopping-cart{background-position:-112px -16px} +.icon-download-alt{background-position:-128px -16px} +.icon-achievement{background-position:-144px -16px} +.icon-heart{background-position:0 -32px} +.icon-heart-broken{background-position:-16px -32px} +.icon-comment{background-position:-32px -32px} +.icon-gavel{background-position:-48px -32px} +.icon-broadcast{background-position:-64px -32px} +.icon-service{background-position:-80px -32px} +.icon-headphones-alt{background-position:-96px -32px} +.icon-user{background-position:-112px -32px} +.icon-flask{background-position:-128px -32px} +.icon-chevron-left{background-position:-144px -32px} +.icon-chevron-right{background-position:0 -48px} +.icon-share{background-position:-16px -48px} +.icon-bookmarks{background-position:-32px -48px} +.icon-cog{background-position:-48px -48px} +.icon-mobile{background-position:-64px -48px} +.icon-download-square{background-position:-80px -48px} +.icon-upload{background-position:-96px -48px} +.icon-group{background-position:-112px -48px} +.icon-crown{background-position:-128px -48px} +.icon-globe-alt{background-position:-144px -48px} +.icon-series{background-position:0 -64px} +.icon-paw{background-position:-16px -64px} +.icon-trash{background-position:-32px -64px} +.icon-windows{background-position:-48px -64px} +.icon-apple{background-position:-64px -64px} +.icon-gift{background-position:-80px -64px} +.icon-refresh{background-position:-96px -64px} +.icon-reset{background-position:-112px -64px} +.icon-check{background-position:-128px -64px} +.icon-external-link{background-position:-144px -64px} +.icon-character{background-position:0 -80px} +.icon-character-add{background-position:-16px -80px} +.icon-character-search{background-position:-32px -80px} +.icon-character-remove{background-position:-48px -80px} +.icon-character-cog{background-position:-64px -80px} +.icon-download-alt-cog{background-position:-80px -80px} +.icon-download-alt-search{background-position:-96px -80px} +.icon-lock{background-position:-112px -80px} +.icon-warning-sign{background-position:-128px -80px} +.icon-ok{background-position:-144px -80px} +.icon-speaker{background-position:0 -96px} +.icon-wow{background-position:-16px -96px} +.icon-warcraft{background-position:-32px -96px} +.icon-starcraft{background-position:-48px -96px} +.icon-starcraft-2{background-position:-64px -96px} +.icon-diablo-3{background-position:-80px -96px} +.icon-battlenet{background-position:-96px -96px} +.icon-remove{background-position:-112px -96px} +.icon-repeat{background-position:-128px -96px} +.icon-dropdown{background-position:-144px -96px} +.icon-shortcut{background-position:0 -112px} +.icon-wrench{background-position:-16px -112px} +.icon-plus{background-position:-32px -112px} +.icon-fullscreen{background-position:-48px -112px} +.icon-glass{background-position:-64px -112px} +.icon-music-alt{background-position:-80px -112px} +.icon-music{background-position:-96px -112px} +.icon-star-empty{background-position:-112px -112px} +.icon-star{background-position:-128px -112px} +.icon-film{background-position:-144px -112px} +.icon-th-large{background-position:0 -128px} +.icon-th{background-position:-16px -128px} +.icon-th-list{background-position:-32px -128px} +.icon-zoom-in{background-position:-48px -128px} +.icon-zoom-out{background-position:-64px -128px} +.icon-off{background-position:-80px -128px} +.icon-signal{background-position:-96px -128px} +.icon-road{background-position:-112px -128px} +.icon-upload-square{background-position:-128px -128px} +.icon-download{background-position:-144px -128px} +.icon-inbox{background-position:0 -144px} +.icon-play-circle{background-position:-16px -144px} +.icon-list-alt{background-position:-32px -144px} +.icon-flag{background-position:-48px -144px} +.icon-headphones{background-position:-64px -144px} +.icon-volume{background-position:-80px -144px} +.icon-volume-off{background-position:-96px -144px} +.icon-volume-down{background-position:-112px -144px} +.icon-volume-up{background-position:-128px -144px} +.icon-qrcode{background-position:-144px -144px} +.icon-barcode{background-position:0 -160px} +.icon-tag{background-position:-16px -160px} +.icon-tags{background-position:-32px -160px} +.icon-book{background-position:-48px -160px} +.icon-bookmark{background-position:-64px -160px} +.icon-print{background-position:-80px -160px} +.icon-camera{background-position:-96px -160px} +.icon-font{background-position:-112px -160px} +.icon-bold{background-position:-128px -160px} +.icon-italic{background-position:-144px -160px} +.icon-text-height{background-position:0 -176px} +.icon-text-width{background-position:-16px -176px} +.icon-align-left{background-position:-32px -176px} +.icon-align-center{background-position:-48px -176px} +.icon-align-right{background-position:-64px -176px} +.icon-align-justify{background-position:-80px -176px} +.icon-list{background-position:-96px -176px} +.icon-indent-left{background-position:-112px -176px} +.icon-indent-right{background-position:-128px -176px} +.icon-facetime-video{background-position:-144px -176px} +.icon-picture{background-position:0 -192px} +.icon-pencil{background-position:-16px -192px} +.icon-map-marker{background-position:-32px -192px} +.icon-adjust{background-position:-48px -192px} +.icon-tint{background-position:-64px -192px} +.icon-move{background-position:-80px -192px} +.icon-step-backward{background-position:-96px -192px} +.icon-fast-backward{background-position:-112px -192px} +.icon-backward{background-position:-128px -192px} +.icon-step-forward{background-position:-144px -192px} +.icon-fast-forward{background-position:0 -208px} +.icon-forward{background-position:-16px -208px} +.icon-eject{background-position:-32px -208px} +.icon-square{background-position:-48px -208px} +.icon-plus-circle{background-position:-64px -208px} +.icon-minus-circle{background-position:-80px -208px} +.icon-plus-sign{background-position:-96px -208px} +.icon-minus-sign{background-position:-112px -208px} +.icon-remove-sign{background-position:-128px -208px} +.icon-ok-circle{background-position:-144px -208px} +.icon-ok-sign{background-position:0 -224px} +.icon-minus{background-position:-16px -224px} +.icon-info-circle{background-position:-32px -224px} +.icon-info-sign{background-position:-48px -224px} +.icon-question-sign{background-position:-64px -224px} +.icon-screenshot{background-position:-80px -224px} +.icon-arrow-right{background-position:-96px -224px} +.icon-arrow-left{background-position:-112px -224px} +.icon-arrow-up{background-position:-128px -224px} +.icon-arrow-down{background-position:-144px -224px} +.icon-share-alt{background-position:0 -240px} +.icon-resize-full{background-position:-16px -240px} +.icon-resize-small{background-position:-32px -240px} +.icon-asterisk{background-position:-48px -240px} +.icon-exclamation-circle{background-position:-64px -240px} +.icon-exclamation-sign{background-position:-80px -240px} +.icon-leaf{background-position:-96px -240px} +.icon-fire{background-position:-112px -240px} +.icon-eye-open{background-position:-128px -240px} +.icon-eye-close{background-position:-144px -240px} +.icon-plane{background-position:0 -256px} +.icon-calendar{background-position:-16px -256px} +.icon-random{background-position:-32px -256px} +.icon-magnet{background-position:-48px -256px} +.icon-chevron-down{background-position:-64px -256px} +.icon-chevron-up{background-position:-80px -256px} +.icon-folder-close{background-position:-96px -256px} +.icon-folder-open{background-position:-112px -256px} +.icon-resize-vertical{background-position:-128px -256px} +.icon-resize-horizontal{background-position:-144px -256px} +.icon-hdd{background-position:0 -272px} +.icon-bullhorn{background-position:-16px -272px} +.icon-bell{background-position:-32px -272px} +.icon-certificate-empty{background-position:-48px -272px} +.icon-certificate{background-position:-64px -272px} +.icon-thumbs-up{background-position:-80px -272px} +.icon-thumbs-down{background-position:-96px -272px} +.icon-hand-right{background-position:-112px -272px} +.icon-hand-left{background-position:-128px -272px} +.icon-hand-up{background-position:-144px -272px} +.icon-hand-down{background-position:0 -288px} +.icon-arrow-right-square{background-position:-16px -288px} +.icon-arrow-left-square{background-position:-32px -288px} +.icon-arrow-right-circle{background-position:-48px -288px} +.icon-arrow-left-circle{background-position:-64px -288px} +.icon-globe{background-position:-80px -288px} +.icon-tasks{background-position:-96px -288px} +.icon-filter{background-position:-112px -288px} +.icon-briefcase{background-position:-128px -288px} +.icon-underline{background-position:-144px -288px} +.icon-sort{background-position:0 -304px} +.icon-sort-descending{background-position:-16px -304px} +.icon-sort-ascending{background-position:-32px -304px} +.icon-sort-disabled{background-position:-48px -304px} +.icon-arrow-down-solid{background-position:-64px -304px} +.icon-arrow-up-solid{background-position:-80px -304px} +.icon-arrow-left-solid{background-position:-96px -304px} +.icon-arrow-right-solid{background-position:-112px -304px} +.icon-0-sign{background-position:-128px -304px} +.icon-1-sign{background-position:-144px -304px} +.icon-2-sign{background-position:0 -320px} +.icon-3-sign{background-position:-16px -320px} +.icon-4-sign{background-position:-32px -320px} +.icon-5-sign{background-position:-48px -320px} +.icon-6-sign{background-position:-64px -320px} +.icon-7-sign{background-position:-80px -320px} +.icon-8-sign{background-position:-96px -320px} +.icon-9-sign{background-position:-112px -320px} +.icon-secure{background-position:-128px -320px} +.icon-not-secure{background-position:-144px -320px} +.icon-add-wow{background-position:0 -336px} +.icon-add-warcraft{background-position:-16px -336px} +.icon-add-starcraft{background-position:-32px -336px} +.icon-add-starcraft-2{background-position:-48px -336px} +.icon-add-diablo-3{background-position:-64px -336px} +.icon-add-battlenet{background-position:-80px -336px} +.icon-free-game-services{background-position:-96px -336px} +.icon-character-services{background-position:-112px -336px} +.icon-facebook{background-position:-128px -336px} +.icon-twitter{background-position:-144px -336px} +.icon-hearthstone{background-position:0 -352px} +.icon-add-hearthstone{background-position:-16px -352px} +.icon-heroes{background-position:-32px -352px} +.icon-add-heroes{background-position:-48px -352px} +.icon-friends-wow{background-position:-64px -352px} +.icon-friends-warcraft{background-position:-80px -352px} +.icon-friends-starcraft{background-position:-96px -352px} +.icon-friends-starcraft-2{background-position:-112px -352px} +.icon-friends-diablo-3{background-position:-128px -352px} +.icon-friends-battlenet{background-position:-144px -352px} +.icon-friends-hearthstone{background-position:0 -368px} +.icon-friends-heroes{background-position:-16px -368px} +.icon-news-wow{background-position:-32px -368px} +.icon-news-warcraft{background-position:-48px -368px} +.icon-news-starcraft{background-position:-64px -368px} +.icon-news-starcraft-2{background-position:-80px -368px} +.icon-news-diablo-3{background-position:-96px -368px} +.icon-news-battlenet{background-position:-112px -368px} +.icon-news-hearthstone{background-position:-128px -368px} +.icon-news-heroes{background-position:-144px -368px} +.icon-git{background-position:0 -384px} +.icon-bootstrap{background-position:-16px -384px} +.icon-maven{background-position:-32px -384px} +.icon-twitch{background-position:-48px -384px} +.icon-youtube{background-position:-64px -384px} +.icon-popout{background-position:-80px -384px} +.icon-share-opts{background-position:-96px -384px} +.icon-logout{background-position:-112px -384px} +.icon-signup{background-position:-128px -384px} +.icon-queue{background-position:-144px -384px} +.icon-maintenance{background-position:0 -400px} +.icon-security{background-position:-16px -400px} +.icon-authenticator-unknown{background-position:-32px -400px} +.icon-authenticator-present{background-position:-48px -400px} +.icon-account-forgot{background-position:-64px -400px} +.icon-account-locked{background-position:-80px -400px} +.icon-email-forgot{background-position:-96px -400px} +.icon-remove-authenticator{background-position:-112px -400px} +.icon-authenticator-mobile{background-position:-128px -400px} +.icon-ipin{background-position:-144px -400px} +.icon-overwatch{background-position:0 -416px} +.icon-add-overwatch{background-position:-16px -416px} +.icon-friends-overwatch{background-position:-32px -416px} +.icon-news-overwatch{background-position:-48px -416px} +.icon-disk{background-position:-64px -416px} +.icon-confirm{background-position:-80px -416px} +.icon-decline{background-position:-96px -416px} +.icon-android{background-position:-112px -416px} +.icon-xbone{background-position:-128px -416px} +.icon-x360{background-position:-144px -416px} +.icon-ps3{background-position:0 -432px} +.icon-ps4{background-position:-16px -432px} +.icon-48-placeholder{background-position:0 0} +.icon-48-ban-circle{background-position:-48px 0} +.icon-48-time{background-position:-96px 0} +.icon-48-add-time{background-position:-144px 0} +.icon-48-question-circle{background-position:-192px 0} +.icon-48-balance{background-position:-240px 0} +.icon-48-remove-circle{background-position:-288px 0} +.icon-48-mouse{background-position:-336px 0} +.icon-48-mouse-delete{background-position:-384px 0} +.icon-48-envelope{background-position:-432px 0} +.icon-48-open-envelope{background-position:0 -48px} +.icon-48-home{background-position:-48px -48px} +.icon-48-play{background-position:-96px -48px} +.icon-48-pause{background-position:-144px -48px} +.icon-48-file{background-position:-192px -48px} +.icon-48-search{background-position:-240px -48px} +.icon-48-edit{background-position:-288px -48px} +.icon-48-shopping-cart{background-position:-336px -48px} +.icon-48-download-alt{background-position:-384px -48px} +.icon-48-achievement{background-position:-432px -48px} +.icon-48-heart{background-position:0 -96px} +.icon-48-heart-broken{background-position:-48px -96px} +.icon-48-comment{background-position:-96px -96px} +.icon-48-gavel{background-position:-144px -96px} +.icon-48-broadcast{background-position:-192px -96px} +.icon-48-service{background-position:-240px -96px} +.icon-48-headphones-alt{background-position:-288px -96px} +.icon-48-user{background-position:-336px -96px} +.icon-48-flask{background-position:-384px -96px} +.icon-48-chevron-left{background-position:-432px -96px} +.icon-48-chevron-right{background-position:0 -144px} +.icon-48-share{background-position:-48px -144px} +.icon-48-bookmarks{background-position:-96px -144px} +.icon-48-cog{background-position:-144px -144px} +.icon-48-mobile{background-position:-192px -144px} +.icon-48-download-square{background-position:-240px -144px} +.icon-48-upload{background-position:-288px -144px} +.icon-48-group{background-position:-336px -144px} +.icon-48-crown{background-position:-384px -144px} +.icon-48-globe-alt{background-position:-432px -144px} +.icon-48-series{background-position:0 -192px} +.icon-48-paw{background-position:-48px -192px} +.icon-48-trash{background-position:-96px -192px} +.icon-48-windows{background-position:-144px -192px} +.icon-48-apple{background-position:-192px -192px} +.icon-48-gift{background-position:-240px -192px} +.icon-48-refresh{background-position:-288px -192px} +.icon-48-reset{background-position:-336px -192px} +.icon-48-check{background-position:-384px -192px} +.icon-48-external-link{background-position:-432px -192px} +.icon-48-character{background-position:0 -240px} +.icon-48-character-add{background-position:-48px -240px} +.icon-48-character-search{background-position:-96px -240px} +.icon-48-character-remove{background-position:-144px -240px} +.icon-48-character-cog{background-position:-192px -240px} +.icon-48-download-alt-cog{background-position:-240px -240px} +.icon-48-download-alt-search{background-position:-288px -240px} +.icon-48-lock{background-position:-336px -240px} +.icon-48-warning-sign{background-position:-384px -240px} +.icon-48-ok{background-position:-432px -240px} +.icon-48-speaker{background-position:0 -288px} +.icon-48-wow{background-position:-48px -288px} +.icon-48-warcraft{background-position:-96px -288px} +.icon-48-starcraft{background-position:-144px -288px} +.icon-48-starcraft-2{background-position:-192px -288px} +.icon-48-diablo-3{background-position:-240px -288px} +.icon-48-battlenet{background-position:-288px -288px} +.icon-48-remove{background-position:-336px -288px} +.icon-48-repeat{background-position:-384px -288px} +.icon-48-dropdown{background-position:-432px -288px} +.icon-48-shortcut{background-position:0 -336px} +.icon-48-wrench{background-position:-48px -336px} +.icon-48-plus{background-position:-96px -336px} +.icon-48-fullscreen{background-position:-144px -336px} +.icon-48-glass{background-position:-192px -336px} +.icon-48-music-alt{background-position:-240px -336px} +.icon-48-music{background-position:-288px -336px} +.icon-48-star-empty{background-position:-336px -336px} +.icon-48-star{background-position:-384px -336px} +.icon-48-film{background-position:-432px -336px} +.icon-48-th-large{background-position:0 -384px} +.icon-48-th{background-position:-48px -384px} +.icon-48-th-list{background-position:-96px -384px} +.icon-48-zoom-in{background-position:-144px -384px} +.icon-48-zoom-out{background-position:-192px -384px} +.icon-48-off{background-position:-240px -384px} +.icon-48-signal{background-position:-288px -384px} +.icon-48-road{background-position:-336px -384px} +.icon-48-upload-square{background-position:-384px -384px} +.icon-48-download{background-position:-432px -384px} +.icon-48-inbox{background-position:0 -432px} +.icon-48-play-circle{background-position:-48px -432px} +.icon-48-list-alt{background-position:-96px -432px} +.icon-48-flag{background-position:-144px -432px} +.icon-48-headphones{background-position:-192px -432px} +.icon-48-volume{background-position:-240px -432px} +.icon-48-volume-off{background-position:-288px -432px} +.icon-48-volume-down{background-position:-336px -432px} +.icon-48-volume-up{background-position:-384px -432px} +.icon-48-qrcode{background-position:-432px -432px} +.icon-48-barcode{background-position:0 -480px} +.icon-48-tag{background-position:-48px -480px} +.icon-48-tags{background-position:-96px -480px} +.icon-48-book{background-position:-144px -480px} +.icon-48-bookmark{background-position:-192px -480px} +.icon-48-print{background-position:-240px -480px} +.icon-48-camera{background-position:-288px -480px} +.icon-48-font{background-position:-336px -480px} +.icon-48-bold{background-position:-384px -480px} +.icon-48-italic{background-position:-432px -480px} +.icon-48-text-height{background-position:0 -528px} +.icon-48-text-width{background-position:-48px -528px} +.icon-48-align-left{background-position:-96px -528px} +.icon-48-align-right{background-position:-192px -528px} +.icon-48-align-justify{background-position:-240px -528px} +.icon-48-list{background-position:-288px -528px} +.icon-48-indent-left{background-position:-336px -528px} +.icon-48-indent-right{background-position:-384px -528px} +.icon-48-facetime-video{background-position:-432px -528px} +.icon-48-picture{background-position:0 -576px} +.icon-48-pencil{background-position:-48px -576px} +.icon-48-map-marker{background-position:-96px -576px} +.icon-48-adjust{background-position:-144px -576px} +.icon-48-tint{background-position:-192px -576px} +.icon-48-move{background-position:-240px -576px} +.icon-48-step-backward{background-position:-288px -576px} +.icon-48-fast-backward{background-position:-336px -576px} +.icon-48-backward{background-position:-384px -576px} +.icon-48-step-forward{background-position:-432px -576px} +.icon-48-fast-forward{background-position:0 -624px} +.icon-48-forward{background-position:-48px -624px} +.icon-48-eject{background-position:-96px -624px} +.icon-48-square{background-position:-144px -624px} +.icon-48-plus-circle{background-position:-192px -624px} +.icon-48-minus-circle{background-position:-240px -624px} +.icon-48-plus-sign{background-position:-288px -624px} +.icon-48-minus-sign{background-position:-336px -624px} +.icon-48-remove-sign{background-position:-384px -624px} +.icon-48-ok-circle{background-position:-432px -624px} +.icon-48-ok-sign{background-position:0 -672px} +.icon-48-minus{background-position:-48px -672px} +.icon-48-info-circle{background-position:-96px -672px} +.icon-48-info-sign{background-position:-144px -672px} +.icon-48-question-sign{background-position:-192px -672px} +.icon-48-screenshot{background-position:-240px -672px} +.icon-48-arrow-right{background-position:-288px -672px} +.icon-48-arrow-left{background-position:-336px -672px} +.icon-48-arrow-up{background-position:-384px -672px} +.icon-48-arrow-down{background-position:-432px -672px} +.icon-48-share-alt{background-position:0 -720px} +.icon-48-resize-full{background-position:-48px -720px} +.icon-48-resize-small{background-position:-96px -720px} +.icon-48-asterisk{background-position:-144px -720px} +.icon-48-exclamation-circle{background-position:-192px -720px} +.icon-48-exclamation-sign{background-position:-240px -720px} +.icon-48-leaf{background-position:-288px -720px} +.icon-48-fire{background-position:-336px -720px} +.icon-48-eye-open{background-position:-384px -720px} +.icon-48-eye-close{background-position:-432px -720px} +.icon-48-plane{background-position:0 -768px} +.icon-48-calendar{background-position:-48px -768px} +.icon-48-random{background-position:-96px -768px} +.icon-48-magnet{background-position:-144px -768px} +.icon-48-chevron-down{background-position:-192px -768px} +.icon-48-folder-close{background-position:-288px -768px} +.icon-48-folder-open{background-position:-336px -768px} +.icon-48-resize-vertical{background-position:-384px -768px} +.icon-48-resize-horizontal{background-position:-432px -768px} +.icon-48-hdd{background-position:0 -816px} +.icon-48-bullhorn{background-position:-48px -816px} +.icon-48-bell{background-position:-96px -816px} +.icon-48-certificate-empty{background-position:-144px -816px} +.icon-48-certificate{background-position:-192px -816px} +.icon-48-thumbs-up{background-position:-240px -816px} +.icon-48-thumbs-down{background-position:-288px -816px} +.icon-48-hand-right{background-position:-336px -816px} +.icon-48-hand-left{background-position:-384px -816px} +.icon-48-hand-up{background-position:-432px -816px} +.icon-48-hand-down{background-position:0 -864px} +.icon-48-arrow-right-square{background-position:-48px -864px} +.icon-48-arrow-left-square{background-position:-96px -864px} +.icon-48-arrow-right-circle{background-position:-144px -864px} +.icon-48-arrow-left-circle{background-position:-192px -864px} +.icon-48-globe{background-position:-240px -864px} +.icon-48-tasks{background-position:-288px -864px} +.icon-48-filter{background-position:-336px -864px} +.icon-48-briefcase{background-position:-384px -864px} +.icon-48-underline{background-position:-432px -864px} +.icon-48-sort{background-position:0 -912px} +.icon-48-sort-descending{background-position:-48px -912px} +.icon-48-sort-ascending{background-position:-96px -912px} +.icon-48-sort-disabled{background-position:-144px -912px} +.icon-48-arrow-down-solid{background-position:-192px -912px} +.icon-48-arrow-up-solid{background-position:-240px -912px} +.icon-48-arrow-left-solid{background-position:-288px -912px} +.icon-48-arrow-right-solid{background-position:-336px -912px} +.icon-48-0-sign{background-position:-384px -912px} +.icon-48-1-sign{background-position:-432px -912px} +.icon-48-2-sign{background-position:0 -960px} +.icon-48-3-sign{background-position:-48px -960px} +.icon-48-4-sign{background-position:-96px -960px} +.icon-48-5-sign{background-position:-144px -960px} +.icon-48-6-sign{background-position:-192px -960px} +.icon-48-7-sign{background-position:-240px -960px} +.icon-48-8-sign{background-position:-288px -960px} +.icon-48-9-sign{background-position:-336px -960px} +.icon-48-secure{background-position:-384px -960px} +.icon-48-not-secure{background-position:-432px -960px} +.icon-48-add-wow{background-position:0 -1008px} +.icon-48-add-warcraft{background-position:-48px -1008px} +.icon-48-add-starcraft{background-position:-96px -1008px} +.icon-48-add-starcraft-2{background-position:-144px -1008px} +.icon-48-add-diablo-3{background-position:-192px -1008px} +.icon-48-add-battlenet{background-position:-240px -1008px} +.icon-48-free-game-services{background-position:-288px -1008px} +.icon-48-character-services{background-position:-336px -1008px} +.icon-48-facebook{background-position:-384px -1008px} +.icon-48-twitter{background-position:-432px -1008px} +.icon-48-hearthstone{background-position:0 -1056px} +.icon-48-add-hearthstone{background-position:-48px -1056px} +.icon-48-heroes{background-position:-96px -1056px} +.icon-48-add-heroes{background-position:-144px -1056px} +.icon-48-friends-wow{background-position:-192px -1056px} +.icon-48-friends-warcraft{background-position:-240px -1056px} +.icon-48-friends-starcraft{background-position:-288px -1056px} +.icon-48-friends-starcraft-2{background-position:-336px -1056px} +.icon-48-friends-diablo-3{background-position:-384px -1056px} +.icon-48-friends-battlenet{background-position:-432px -1056px} +.icon-48-friends-hearthstone{background-position:0 -1104px} +.icon-48-friends-heroes{background-position:-48px -1104px} +.icon-48-news-wow{background-position:-96px -1104px} +.icon-48-news-warcraft{background-position:-144px -1104px} +.icon-48-news-starcraft{background-position:-192px -1104px} +.icon-48-news-starcraft-2{background-position:-240px -1104px} +.icon-48-news-diablo-3{background-position:-288px -1104px} +.icon-48-news-battlenet{background-position:-336px -1104px} +.icon-48-news-hearthstone{background-position:-384px -1104px} +.icon-48-news-heroes{background-position:-432px -1104px} +.icon-48-git{background-position:0 -1152px} +.icon-48-bootstrap{background-position:-48px -1152px} +.icon-48-maven{background-position:-96px -1152px} +.icon-48-twitch{background-position:-144px -1152px} +.icon-48-youtube{background-position:-192px -1152px} +.icon-48-popout{background-position:-240px -1152px} +.icon-48-share-opts{background-position:-288px -1152px} +.icon-48-logout{background-position:-336px -1152px} +.icon-48-signup{background-position:-384px -1152px} +.icon-48-queue{background-position:-432px -1152px} +.icon-48-maintenance{background-position:0 -1200px} +.icon-48-security{background-position:-48px -1200px} +.icon-48-authenticator-unknown{background-position:-96px -1200px} +.icon-48-authenticator-present{background-position:-144px -1200px} +.icon-48-account-forgot{background-position:-192px -1200px} +.icon-48-account-locked{background-position:-240px -1200px} +.icon-48-email-forgot{background-position:-288px -1200px} +.icon-48-remove-authenticator{background-position:-336px -1200px} +.icon-48-authenticator-mobile{background-position:-384px -1200px} +.icon-48-ipin{background-position:-432px -1200px} +.icon-48-overwatch{background-position:0 -1248px} +.icon-48-add-overwatch{background-position:-48px -1248px} +.icon-48-friends-overwatch{background-position:-96px -1248px} +.icon-48-news-overwatch{background-position:-144px -1248px} +.icon-128-placeholder{background-position:0 0} +.icon-128-ban-circle{background-position:-128px 0} +.icon-128-time{background-position:-256px 0} +.icon-128-add-time{background-position:-384px 0} +.icon-128-question-circle{background-position:-512px 0} +.icon-128-balance{background-position:-640px 0} +.icon-128-remove-circle{background-position:-768px 0} +.icon-128-mouse{background-position:-896px 0} +.icon-128-mouse-delete{background-position:-1024px 0} +.icon-128-envelope{background-position:-1152px 0} +.icon-128-open-envelope{background-position:0 -128px} +.icon-128-home{background-position:-128px -128px} +.icon-128-play{background-position:-256px -128px} +.icon-128-pause{background-position:-384px -128px} +.icon-128-file{background-position:-512px -128px} +.icon-128-search{background-position:-640px -128px} +.icon-128-edit{background-position:-768px -128px} +.icon-128-shopping-cart{background-position:-896px -128px} +.icon-128-download-alt{background-position:-1024px -128px} +.icon-128-achievement{background-position:-1152px -128px} +.icon-128-heart{background-position:0 -256px} +.icon-128-heart-broken{background-position:-128px -256px} +.icon-128-comment{background-position:-256px -256px} +.icon-128-gavel{background-position:-384px -256px} +.icon-128-broadcast{background-position:-512px -256px} +.icon-128-service{background-position:-640px -256px} +.icon-128-headphones-alt{background-position:-768px -256px} +.icon-128-user{background-position:-896px -256px} +.icon-128-flask{background-position:-1024px -256px} +.icon-128-chevron-left{background-position:-1152px -256px} +.icon-128-chevron-right{background-position:0 -384px} +.icon-128-share{background-position:-128px -384px} +.icon-128-bookmarks{background-position:-256px -384px} +.icon-128-cog{background-position:-384px -384px} +.icon-128-mobile{background-position:-512px -384px} +.icon-128-download-square{background-position:-640px -384px} +.icon-128-upload{background-position:-768px -384px} +.icon-128-group{background-position:-896px -384px} +.icon-128-crown{background-position:-1024px -384px} +.icon-128-globe-alt{background-position:-1152px -384px} +.icon-128-series{background-position:0 -512px} +.icon-128-paw{background-position:-128px -512px} +.icon-128-trash{background-position:-256px -512px} +.icon-128-windows{background-position:-384px -512px} +.icon-128-apple{background-position:-512px -512px} +.icon-128-gift{background-position:-640px -512px} +.icon-128-refresh{background-position:-768px -512px} +.icon-128-reset{background-position:-896px -512px} +.icon-128-check{background-position:-1024px -512px} +.icon-128-external-link{background-position:-1152px -512px} +.icon-128-character{background-position:0 -640px} +.icon-128-character-add{background-position:-128px -640px} +.icon-128-character-search{background-position:-256px -640px} +.icon-128-character-remove{background-position:-384px -640px} +.icon-128-character-cog{background-position:-512px -640px} +.icon-128-download-alt-cog{background-position:-640px -640px} +.icon-128-download-alt-search{background-position:-768px -640px} +.icon-128-lock{background-position:-896px -640px} +.icon-128-warning-sign{background-position:-1024px -640px} +.icon-128-ok{background-position:-1152px -640px} +.icon-128-speaker{background-position:0 -768px} +.icon-128-wow{background-position:-128px -768px} +.icon-128-warcraft{background-position:-256px -768px} +.icon-128-starcraft{background-position:-384px -768px} +.icon-128-starcraft-2{background-position:-512px -768px} +.icon-128-diablo-3{background-position:-640px -768px} +.icon-128-battlenet{background-position:-768px -768px} +.icon-128-remove{background-position:-896px -768px} +.icon-128-repeat{background-position:-1024px -768px} +.icon-128-dropdown{background-position:-1152px -768px} +.icon-128-shortcut{background-position:0 -896px} +.icon-128-wrench{background-position:-128px -896px} +.icon-128-plus{background-position:-256px -896px} +.icon-128-fullscreen{background-position:-384px -896px} +.icon-128-glass{background-position:-512px -896px} +.icon-128-music-alt{background-position:-640px -896px} +.icon-128-music{background-position:-768px -896px} +.icon-128-star-empty{background-position:-896px -896px} +.icon-128-star{background-position:-1024px -896px} +.icon-128-film{background-position:-1152px -896px} +.icon-128-th-large{background-position:0 -1024px} +.icon-128-th{background-position:-128px -1024px} +.icon-128-th-list{background-position:-256px -1024px} +.icon-128-zoom-in{background-position:-384px -1024px} +.icon-128-zoom-out{background-position:-512px -1024px} +.icon-128-off{background-position:-640px -1024px} +.icon-128-signal{background-position:-768px -1024px} +.icon-128-road{background-position:-896px -1024px} +.icon-128-upload-square{background-position:-1024px -1024px} +.icon-128-download{background-position:-1152px -1024px} +.icon-128-inbox{background-position:0 -1152px} +.icon-128-play-circle{background-position:-128px -1152px} +.icon-128-list-alt{background-position:-256px -1152px} +.icon-128-flag{background-position:-384px -1152px} +.icon-128-headphones{background-position:-512px -1152px} +.icon-128-volume{background-position:-640px -1152px} +.icon-128-volume-off{background-position:-768px -1152px} +.icon-128-volume-down{background-position:-896px -1152px} +.icon-128-volume-up{background-position:-1024px -1152px} +.icon-128-qrcode{background-position:-1152px -1152px} +.icon-128-barcode{background-position:0 -1280px} +.icon-128-tag{background-position:-128px -1280px} +.icon-128-tags{background-position:-256px -1280px} +.icon-128-book{background-position:-384px -1280px} +.icon-128-bookmark{background-position:-512px -1280px} +.icon-128-print{background-position:-640px -1280px} +.icon-128-camera{background-position:-768px -1280px} +.icon-128-font{background-position:-896px -1280px} +.icon-128-bold{background-position:-1024px -1280px} +.icon-128-italic{background-position:-1152px -1280px} +.icon-128-text-height{background-position:0 -1408px} +.icon-128-text-width{background-position:-128px -1408px} +.icon-128-align-left{background-position:-256px -1408px} +.icon-128-align-right{background-position:-512px -1408px} +.icon-128-align-justify{background-position:-640px -1408px} +.icon-128-list{background-position:-768px -1408px} +.icon-128-indent-left{background-position:-896px -1408px} +.icon-128-indent-right{background-position:-1024px -1408px} +.icon-128-facetime-video{background-position:-1152px -1408px} +.icon-128-picture{background-position:0 -1536px} +.icon-128-pencil{background-position:-128px -1536px} +.icon-128-map-marker{background-position:-256px -1536px} +.icon-128-adjust{background-position:-384px -1536px} +.icon-128-tint{background-position:-512px -1536px} +.icon-128-move{background-position:-640px -1536px} +.icon-128-step-backward{background-position:-768px -1536px} +.icon-128-fast-backward{background-position:-896px -1536px} +.icon-128-backward{background-position:-1024px -1536px} +.icon-128-step-forward{background-position:-1152px -1536px} +.icon-128-fast-forward{background-position:0 -1664px} +.icon-128-forward{background-position:-128px -1664px} +.icon-128-eject{background-position:-256px -1664px} +.icon-128-square{background-position:-384px -1664px} +.icon-128-plus-circle{background-position:-512px -1664px} +.icon-128-minus-circle{background-position:-640px -1664px} +.icon-128-plus-sign{background-position:-768px -1664px} +.icon-128-minus-sign{background-position:-896px -1664px} +.icon-128-remove-sign{background-position:-1024px -1664px} +.icon-128-ok-circle{background-position:-1152px -1664px} +.icon-128-ok-sign{background-position:0 -1792px} +.icon-128-minus{background-position:-128px -1792px} +.icon-128-info-circle{background-position:-256px -1792px} +.icon-128-info-sign{background-position:-384px -1792px} +.icon-128-question-sign{background-position:-512px -1792px} +.icon-128-screenshot{background-position:-640px -1792px} +.icon-128-arrow-right{background-position:-768px -1792px} +.icon-128-arrow-left{background-position:-896px -1792px} +.icon-128-arrow-up{background-position:-1024px -1792px} +.icon-128-arrow-down{background-position:-1152px -1792px} +.icon-128-share-alt{background-position:0 -1920px} +.icon-128-resize-full{background-position:-128px -1920px} +.icon-128-resize-small{background-position:-256px -1920px} +.icon-128-asterisk{background-position:-384px -1920px} +.icon-128-exclamation-circle{background-position:-512px -1920px} +.icon-128-exclamation-sign{background-position:-640px -1920px} +.icon-128-leaf{background-position:-768px -1920px} +.icon-128-fire{background-position:-896px -1920px} +.icon-128-eye-open{background-position:-1024px -1920px} +.icon-128-eye-close{background-position:-1152px -1920px} +.icon-128-plane{background-position:0 -2048px} +.icon-128-calendar{background-position:-128px -2048px} +.icon-128-random{background-position:-256px -2048px} +.icon-128-magnet{background-position:-384px -2048px} +.icon-128-chevron-down{background-position:-512px -2048px} +.icon-128-folder-close{background-position:-768px -2048px} +.icon-128-folder-open{background-position:-896px -2048px} +.icon-128-resize-vertical{background-position:-1024px -2048px} +.icon-128-resize-horizontal{background-position:-1152px -2048px} +.icon-128-hdd{background-position:0 -2176px} +.icon-128-bullhorn{background-position:-128px -2176px} +.icon-128-bell{background-position:-256px -2176px} +.icon-128-certificate-empty{background-position:-384px -2176px} +.icon-128-certificate{background-position:-512px -2176px} +.icon-128-thumbs-up{background-position:-640px -2176px} +.icon-128-thumbs-down{background-position:-768px -2176px} +.icon-128-hand-right{background-position:-896px -2176px} +.icon-128-hand-left{background-position:-1024px -2176px} +.icon-128-hand-up{background-position:-1152px -2176px} +.icon-128-hand-down{background-position:0 -2304px} +.icon-128-arrow-right-square{background-position:-128px -2304px} +.icon-128-arrow-left-square{background-position:-256px -2304px} +.icon-128-arrow-right-circle{background-position:-384px -2304px} +.icon-128-arrow-left-circle{background-position:-512px -2304px} +.icon-128-globe{background-position:-640px -2304px} +.icon-128-tasks{background-position:-768px -2304px} +.icon-128-filter{background-position:-896px -2304px} +.icon-128-briefcase{background-position:-1024px -2304px} +.icon-128-underline{background-position:-1152px -2304px} +.icon-128-sort{background-position:0 -2432px} +.icon-128-sort-descending{background-position:-128px -2432px} +.icon-128-sort-ascending{background-position:-256px -2432px} +.icon-128-sort-disabled{background-position:-384px -2432px} +.icon-128-arrow-down-solid{background-position:-512px -2432px} +.icon-128-arrow-up-solid{background-position:-640px -2432px} +.icon-128-arrow-left-solid{background-position:-768px -2432px} +.icon-128-arrow-right-solid{background-position:-896px -2432px} +.icon-128-0-sign{background-position:-1024px -2432px} +.icon-128-1-sign{background-position:-1152px -2432px} +.icon-128-2-sign{background-position:0 -2560px} +.icon-128-3-sign{background-position:-128px -2560px} +.icon-128-4-sign{background-position:-256px -2560px} +.icon-128-5-sign{background-position:-384px -2560px} +.icon-128-6-sign{background-position:-512px -2560px} +.icon-128-7-sign{background-position:-640px -2560px} +.icon-128-8-sign{background-position:-768px -2560px} +.icon-128-9-sign{background-position:-896px -2560px} +.icon-128-secure{background-position:-1024px -2560px} +.icon-128-not-secure{background-position:-1152px -2560px} +.icon-128-add-wow{background-position:0 -2688px} +.icon-128-add-warcraft{background-position:-128px -2688px} +.icon-128-add-starcraft{background-position:-256px -2688px} +.icon-128-add-starcraft-2{background-position:-384px -2688px} +.icon-128-add-diablo-3{background-position:-512px -2688px} +.icon-128-add-battlenet{background-position:-640px -2688px} +.icon-128-free-game-services{background-position:-768px -2688px} +.icon-128-character-services{background-position:-896px -2688px} +.icon-128-facebook{background-position:-1024px -2688px} +.icon-128-twitter{background-position:-1152px -2688px} +.icon-128-hearthstone{background-position:0 -2816px} +.icon-128-add-hearthstone{background-position:-128px -2816px} +.icon-128-heroes{background-position:-256px -2816px} +.icon-128-add-heroes{background-position:-384px -2816px} +.icon-128-friends-wow{background-position:-512px -2816px} +.icon-128-friends-warcraft{background-position:-640px -2816px} +.icon-128-friends-starcraft{background-position:-768px -2816px} +.icon-128-friends-starcraft-2{background-position:-896px -2816px} +.icon-128-friends-diablo-3{background-position:-1024px -2816px} +.icon-128-friends-battlenet{background-position:-1152px -2816px} +.icon-128-friends-hearthstone{background-position:0 -2944px} +.icon-128-friends-heroes{background-position:-128px -2944px} +.icon-128-news-wow{background-position:-256px -2944px} +.icon-128-news-warcraft{background-position:-384px -2944px} +.icon-128-news-starcraft{background-position:-512px -2944px} +.icon-128-news-starcraft-2{background-position:-640px -2944px} +.icon-128-news-diablo-3{background-position:-768px -2944px} +.icon-128-news-battlenet{background-position:-896px -2944px} +.icon-128-news-hearthstone{background-position:-1024px -2944px} +.icon-128-news-heroes{background-position:-1152px -2944px} +.icon-128-git{background-position:0 -3072px} +.icon-128-bootstrap{background-position:-128px -3072px} +.icon-128-maven{background-position:-256px -3072px} +.icon-128-twitch{background-position:-384px -3072px} +.icon-128-youtube{background-position:-512px -3072px} +.icon-128-popout{background-position:-640px -3072px} +.icon-128-share-opts{background-position:-768px -3072px} +.icon-128-logout{background-position:-896px -3072px} +.icon-128-signup{background-position:-1024px -3072px} +.icon-128-queue{background-position:-1152px -3072px} +.icon-128-maintenance{background-position:0 -3200px} +.icon-128-security{background-position:-128px -3200px} +.icon-128-authenticator-unknown{background-position:-256px -3200px} +.icon-128-authenticator-present{background-position:-384px -3200px} +.icon-128-account-forgot{background-position:-512px -3200px} +.icon-128-account-locked{background-position:-640px -3200px} +.icon-128-email-forgot{background-position:-768px -3200px} +.icon-128-remove-authenticator{background-position:-896px -3200px} +.icon-128-authenticator-mobile{background-position:-1024px -3200px} +.icon-128-ipin{background-position:-1152px -3200px} +.icon-128-overwatch{background-position:0 -3328px} +.icon-128-add-overwatch{background-position:-128px -3328px} +.icon-128-friends-overwatch{background-position:-256px -3328px} +.icon-128-news-overwatch{background-position:-384px -3328px} +.icon-payment-placeholder{background-position:0 0} +.icon-payment-visa{background-position:-24px 0} +.icon-payment-visa-electron{background-position:-48px 0} +.icon-payment-visa-debit{background-position:-72px 0} +.icon-payment-mastercard{background-position:-96px 0} +.icon-payment-maestro{background-position:-120px 0} +.icon-payment-american-express{background-position:-144px 0} +.icon-payment-discover{background-position:-168px 0} +.icon-payment-diners-club{background-position:0 -16px} +.icon-payment-jcb{background-position:-24px -16px} +.icon-payment-carte-bleue{background-position:-48px -16px} +.icon-payment-giropay{background-position:-72px -16px} +.icon-payment-webmoney{background-position:-96px -16px} +.icon-payment-ideal{background-position:-120px -16px} +.icon-payment-solo{background-position:-144px -16px} +.icon-payment-oxxo{background-position:-168px -16px} +.icon-payment-seven-eleven{background-position:0 -32px} +.icon-payment-santander{background-position:-24px -32px} +.icon-payment-bbva-bancomer{background-position:-48px -32px} +.icon-payment-ixe{background-position:-72px -32px} +.icon-payment-hsbc{background-position:-96px -32px} +.icon-payment-scotiabank{background-position:-120px -32px} +.icon-payment-t-online{background-position:-144px -32px} +.icon-payment-qiwi{background-position:-168px -32px} +.icon-payment-dineromail{background-position:0 -48px} +.icon-payment-dinheiromail{background-position:-24px -48px} +.icon-payment-pago-facil{background-position:-48px -48px} +.icon-payment-magna{background-position:-72px -48px} +.icon-payment-italcred{background-position:-96px -48px} +.icon-payment-hipercard{background-position:-120px -48px} +.icon-payment-cobro-express{background-position:-144px -48px} +.icon-payment-cabal{background-position:-168px -48px} +.icon-payment-bapro{background-position:0 -64px} +.icon-payment-banamex{background-position:-24px -64px} +.icon-payment-servipag{background-position:-48px -64px} +.icon-payment-rapipago{background-position:-72px -64px} +.icon-payment-presto{background-position:-96px -64px} +.icon-payment-payone{background-position:-120px -64px} +.icon-payment-tarjeta-shopping{background-position:-144px -64px} +.icon-payment-aura{background-position:-168px -64px} +.icon-payment-banco-de-chile{background-position:0 -80px} +.icon-payment-miscuentas{background-position:-24px -80px} +.icon-payment-argencard{background-position:-48px -80px} +.icon-payment-paggo{background-position:-72px -80px} +.icon-payment-banco-de-brasil{background-position:-96px -80px} +.icon-payment-bradesco{background-position:-120px -80px} +.icon-payment-todito-card{background-position:-144px -80px} +.icon-payment-todito-cash{background-position:-168px -80px} +.icon-payment-elv{background-position:0 -96px} +.icon-payment-automatische-incasso{background-position:-24px -96px} +.icon-payment-lastschriftverfahren{background-position:-48px -96px} +.icon-payment-domiciliacion-bancaria{background-position:-72px -96px} +.icon-payment-boleto-bancario{background-position:-96px -96px} +.icon-payment-paypal{background-position:-120px -96px} +.icon-payment-battlenet-balance{background-position:-144px -96px} +.icon-payment-chase-paymentech{background-position:-168px -96px} +.icon-payment-global-collect{background-position:0 -112px} +.icon-payment-netease{background-position:-24px -112px} +.icon-payment-credit-card,.icon-payment-neweb-credit-card{background-position:-48px -112px} +.icon-payment-lguplus-ars{background-position:-72px -112px} +.icon-payment-lguplus-wire-transfer{background-position:-96px -112px} +.icon-payment-danal-mobile{background-position:-120px -112px} +.icon-payment-inicis-credit-card{background-position:-144px -112px} +.icon-payment-kr-gift-card{background-position:-168px -112px} +.icon-payment-gift-card{background-position:0 -128px} +.icon-payment-tarjeta-naranja{background-position:-24px -128px} +.icon-payment-ripsa-pagos{background-position:-48px -128px} +.icon-payment-provincia-pagos{background-position:-72px -128px} +.icon-payment-elo{background-position:-96px -128px} +.icon-payment-banrisul{background-position:-120px -128px} +.icon-payment-bci{background-position:-144px -128px} +.icon-payment-sencillito{background-position:-168px -128px} +.icon-payment-ripley{background-position:0 -144px} +.icon-payment-banbajio{background-position:-24px -144px} +.icon-payment-visa-virtual{background-position:-48px -144px} +.icon-payment-money-online{background-position:-72px -144px} +.icon-payment-mycard{background-position:-96px -144px} +.icon-payment-neweb-alipay{background-position:-120px -144px} +.icon-payment-neweb-virtualatm{background-position:-144px -144px} +.icon-payment-neweb-atm{background-position:-168px -144px} +.icon-payment-kr-cvs{background-position:0 -160px} +.icon-payment-lguplus-gift-cert-b{background-position:-48px -160px} +.icon-payment-lguplus-gift-cert-c{background-position:-72px -160px} +.icon-payment-cencosud{background-position:-96px -160px} +.icon-payment-netease-wallet{background-position:-120px -160px} +.icon-payment-payu{background-position:-144px -160px} +.icon-payment-banco-de-bogota{background-position:-168px -160px} +.icon-payment-bancolombia{background-position:0 -176px} +.icon-payment-efecty{background-position:-24px -176px} +.icon-payment-pse{background-position:-48px -176px} +.icon-payment-via-baloto{background-position:-72px -176px} +.icon-payment-diestel{background-position:-96px -176px} +.icon-payment-bcp-agente-bcp{background-position:-120px -176px} +.icon-payment-internet-via-bcp{background-position:-144px -176px} +.icon-payment-bcp-ventanilla-agencias{background-position:-168px -176px} +.icon-payment-debito-automatico{background-position:-24px -192px} +.icon-payment-itau{background-position:-48px -192px} +.icon-payment-cash-on-delivery{background-position:-72px -192px} +.icon-24-payment-placeholder{background-position:0 0} +.icon-24-payment-visa{background-position:-36px 0} +.icon-24-payment-visa-electron{background-position:-72px 0} +.icon-24-payment-visa-debit{background-position:-108px 0} +.icon-24-payment-mastercard{background-position:-144px 0} +.icon-24-payment-maestro{background-position:-180px 0} +.icon-24-payment-american-express{background-position:-216px 0} +.icon-24-payment-discover{background-position:-252px 0} +.icon-24-payment-diners-club{background-position:0 -24px} +.icon-24-payment-jcb{background-position:-36px -24px} +.icon-24-payment-carte-bleue{background-position:-72px -24px} +.icon-24-payment-giropay{background-position:-108px -24px} +.icon-24-payment-webmoney{background-position:-144px -24px} +.icon-24-payment-ideal{background-position:-180px -24px} +.icon-24-payment-solo{background-position:-216px -24px} +.icon-24-payment-oxxo{background-position:-252px -24px} +.icon-24-payment-seven-eleven{background-position:0 -48px} +.icon-24-payment-santander{background-position:-36px -48px} +.icon-24-payment-bbva-bancomer{background-position:-72px -48px} +.icon-24-payment-ixe{background-position:-108px -48px} +.icon-24-payment-hsbc{background-position:-144px -48px} +.icon-24-payment-scotiabank{background-position:-180px -48px} +.icon-24-payment-t-online{background-position:-216px -48px} +.icon-24-payment-qiwi{background-position:-252px -48px} +.icon-24-payment-dineromail{background-position:0 -72px} +.icon-24-payment-dinheiromail{background-position:-36px -72px} +.icon-24-payment-pago-facil{background-position:-72px -72px} +.icon-24-payment-magna{background-position:-108px -72px} +.icon-24-payment-italcred{background-position:-144px -72px} +.icon-24-payment-hipercard{background-position:-180px -72px} +.icon-24-payment-cobro-express{background-position:-216px -72px} +.icon-24-payment-cabal{background-position:-252px -72px} +.icon-24-payment-bapro{background-position:0 -96px} +.icon-24-payment-banamex{background-position:-36px -96px} +.icon-24-payment-servipag{background-position:-72px -96px} +.icon-24-payment-rapipago{background-position:-108px -96px} +.icon-24-payment-presto{background-position:-144px -96px} +.icon-24-payment-payone{background-position:-180px -96px} +.icon-24-payment-tarjeta-shopping{background-position:-216px -96px} +.icon-24-payment-aura{background-position:-252px -96px} +.icon-24-payment-banco-de-chile{background-position:0 -120px} +.icon-24-payment-miscuentas{background-position:-36px -120px} +.icon-24-payment-argencard{background-position:-72px -120px} +.icon-24-payment-paggo{background-position:-108px -120px} +.icon-24-payment-banco-de-brasil{background-position:-144px -120px} +.icon-24-payment-bradesco{background-position:-180px -120px} +.icon-24-payment-todito-card{background-position:-216px -120px} +.icon-24-payment-todito-cash{background-position:-252px -120px} +.icon-24-payment-elv{background-position:0 -144px} +.icon-24-payment-automatische-incasso{background-position:-36px -144px} +.icon-24-payment-lastschriftverfahren{background-position:-72px -144px} +.icon-24-payment-domiciliacion-bancaria{background-position:-108px -144px} +.icon-24-payment-boleto-bancario{background-position:-144px -144px} +.icon-24-payment-paypal{background-position:-180px -144px} +.icon-24-payment-battlenet-balance{background-position:-216px -144px} +.icon-24-payment-chase-paymentech{background-position:-252px -144px} +.icon-24-payment-global-collect{background-position:0 -168px} +.icon-24-payment-netease{background-position:-36px -168px} +.icon-24-payment-credit-card,.icon-24-payment-neweb-credit-card{background-position:-72px -168px} +.icon-24-payment-lguplus-ars{background-position:-108px -168px} +.icon-24-payment-lguplus-wire-transfer{background-position:-144px -168px} +.icon-24-payment-danal-mobile{background-position:-180px -168px} +.icon-24-payment-inicis-credit-card{background-position:-216px -168px} +.icon-24-payment-kr-gift-card{background-position:-252px -168px} +.icon-24-payment-gift-card{background-position:0 -192px} +.icon-24-payment-tarjeta-naranja{background-position:-36px -192px} +.icon-24-payment-ripsa-pagos{background-position:-72px -192px} +.icon-24-payment-provincia-pagos{background-position:-108px -192px} +.icon-24-payment-elo{background-position:-144px -192px} +.icon-24-payment-banrisul{background-position:-180px -192px} +.icon-24-payment-bci{background-position:-216px -192px} +.icon-24-payment-sencillito{background-position:-252px -192px} +.icon-24-payment-ripley{background-position:0 -216px} +.icon-24-payment-banbajio{background-position:-36px -216px} +.icon-24-payment-visa-virtual{background-position:-72px -216px} +.icon-24-payment-money-online{background-position:-108px -216px} +.icon-24-payment-mycard{background-position:-144px -216px} +.icon-24-payment-neweb-alipay{background-position:-180px -216px} +.icon-24-payment-neweb-virtualatm{background-position:-216px -216px} +.icon-24-payment-neweb-atm{background-position:-252px -216px} +.icon-24-payment-kr-cvs{background-position:0 -240px} +.icon-24-payment-kr-posa{background-position:-144px -288px} +.icon-24-payment-sepa{background-position:-36px -240px} +.icon-24-payment-lguplus-gift-cert-b{background-position:-72px -240px} +.icon-24-payment-lguplus-gift-cert-c{background-position:-108px -240px} +.icon-24-payment-cencosud{background-position:-144px -240px} +.icon-24-payment-netease-wallet{background-position:-180px -240px} +.icon-24-payment-payu{background-position:-216px -240px} +.icon-24-payment-banco-de-bogota{background-position:-252px -240px} +.icon-24-payment-bancolombia{background-position:0 -264px} +.icon-24-payment-efecty{background-position:-36px -264px} +.icon-24-payment-pse{background-position:-72px -264px} +.icon-24-payment-via-baloto{background-position:-108px -264px} +.icon-24-payment-diestel{background-position:-144px -264px} +.icon-24-payment-bcp-agente-bcp{background-position:-180px -264px} +.icon-24-payment-internet-via-bcp{background-position:-216px -264px} +.icon-24-payment-bcp-ventanilla-agencias{background-position:-252px -264px} +.icon-24-payment-debito-automatico{background-position:-36px -288px} +.icon-24-payment-itau{background-position:-72px -288px} +.icon-24-payment-cash-on-delivery{background-position:-108px -288px} +table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0} +.table{width:100%} +.table th,.table td{text-align:left;vertical-align:top} +.table thead th{vertical-align:bottom;position:relative} +.table thead th a.table-sort.sort-disabled,.table thead th a.table-sort.sort-disabled:hover,.table thead th a.table-sort.sort-disabled:focus{cursor:default} +.tooltip{position:absolute;display:block;visibility:visible;opacity:0} +.tooltip.in{opacity:1} +.tooltip-fixed{position:fixed} +.tooltip-inner{text-decoration:none} +.tooltip.left .tooltip-inner{text-align:left} +.tooltip.right .tooltip-inner{text-align:left} +.tooltipster-base{padding:0;font-size:0;line-height:0;position:absolute;left:0;top:0;pointer-events:none;width:auto;overflow:visible} +.tooltipster-base .tooltipster-content{overflow:hidden} +.tooltipster-arrow{display:block;text-align:center;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1} +.tooltipster-arrow span,.tooltipster-arrow-border{display:block;width:0;height:0;position:absolute} +.tooltipster-fade{opacity:0;-webkit-transition-property:opacity;transition-property:opacity} +.tooltipster-fade-show{opacity:1} +.tooltipster-grow{-webkit-transform:scale(0,0);-ms-transform:scale(0,0);transform:scale(0,0);-webkit-transition-property:-webkit-transform;-webkit-transition-property:transform;transition-property:transform;-webkit-backface-visibility:hidden} +.tooltipster-grow-show{-webkit-transform:scale(1,1);-ms-transform:scale(1,1);transform:scale(1,1);-webkit-transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15);transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15)} +.tooltipster-swing{opacity:0;-webkit-transform:rotateZ(4deg);-ms-transform:rotateZ(4deg);transform:rotateZ(4deg);-webkit-transition-property:-webkit-transform;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-property:-webkit-transform,opacity} +.tooltipster-swing-show{opacity:1;-webkit-transform:rotateZ(0deg);-ms-transform:rotateZ(0deg);transform:rotateZ(0deg);-webkit-transition-timing-function:cubic-bezier(0.23,0.635,0.495,2.4);transition-timing-function:cubic-bezier(0.23,0.635,0.495,2.4)} +.tooltipster-fall{top:0;-webkit-transition-property:top;transition-property:top;-webkit-transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15);transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15)} +.tooltipster-fall.tooltipster-dying{-webkit-transition-property:all;transition-property:all;top:0!important;opacity:0} +.tooltipster-slide{left:-40px;-webkit-transition-property:left;transition-property:left;-webkit-transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15);transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15)} +.tooltipster-slide.tooltipster-dying{-webkit-transition-property:all;transition-property:all;left:0!important;opacity:0} +.tooltipster-content-changing{opacity:.5;-webkit-transform:scale(1.1,1.1);-ms-transform:scale(1.1,1.1);transform:scale(1.1,1.1)} +body{font-size-adjust:auto;-webkit-font-feature-settings:"kern" 1,"liga" 1;-ms-font-feature-settings:"kern" 1,"liga" 1;-moz-font-feature-settings:"kern" 1,"liga" 1;font-feature-settings:"kern" 1,"liga" 1} +h1,h2,h3,h4,h5,h6,.heading-1,.heading-2,.heading-3,.heading-4,.heading-5,.heading-6{display:block} +.title{-webkit-transition:color .2s;transition:color .2s} +.title .subtitle{text-transform:none;letter-spacing:normal;-webkit-transition:color .2s;transition:color .2s} +.fraction{-webkit-font-feature-settings:"frac" 1,"kern" 1,"liga" 1;-ms-font-feature-settings:"frac" 1,"kern" 1,"liga" 1;-moz-font-feature-settings:"frac" 1,"kern" 1,"liga" 1;font-feature-settings:"frac" 1,"kern" 1,"liga" 1} +i{font-style:italic} +em{font-style:italic} +s{text-decoration:line-through} +del{text-decoration:line-through} +abbr[title],abbr[data-original-title]{cursor:help} +.initialism{text-transform:uppercase} +cite{font-style:normal} +ul,ol{padding:0} +ul ul,ul ol,ol ol,ol ul{margin-bottom:0} +ul{list-style:disc} +ul ul{list-style:square} +ul ul ul{list-style:circle} +ol{list-style:decimal} +li:last-of-type{margin-bottom:0} +ul.unstyled,ol.unstyled{margin:0;list-style:none} +ul.unstyled li,ol.unstyled li{padding-left:0;margin-bottom:0} +ul.icons,ol.icons{margin-left:0;list-style:none} +ul.icons li,ol.icons li{position:relative} +ul.icons li [class^="icon-"],ol.icons li [class^="icon-"],ul.icons li [class*=" icon-"],ol.icons li [class*=" icon-"]{position:absolute} +ul.icons li a [class*="icon-external-link"],ol.icons li a [class*="icon-external-link"]{position:static;left:auto} +ul.inline,ol.inline{margin-left:0;list-style:none} +ul.inline>li,ol.inline>li{display:inline-block} +ul.inline>li:first-of-type,ol.inline>li:first-of-type{padding-left:0} +dl{overflow:auto} +dl dd:last-of-type{margin-bottom:0} +dl dd.inline,dl dd.enumerated{margin-left:0;margin-top:0;display:inline-block} +dl dd.inline:after{content:"";display:inline-block;width:1em} +dl dd.inline.omega:after{width:0} +dl dd.enumerated:after{content:"???"} +:lang(zh) dl dd.enumerated:after{content:"???"} +dl dd.enumerated.omega:after{content:""} +.dl-horizontal:before,.dl-horizontal:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.dl-horizontal:after{clear:both} +.dl-horizontal dt{float:left;width:20%;clear:left;text-align:right;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.dl-horizontal dd{margin-left:25%} +blockquote p:last-of-type{margin-bottom:0} +blockquote small{display:block} +blockquote small:before{content:"\002014\0000A0"} +blockquote.pull-right{float:right;padding-left:0;border-left:0} +blockquote.pull-right p,blockquote.pull-right small{text-align:right} +q:before,blockquote:before{content:""} +q:after,blockquote:after{content:""} +address{display:block;font-style:normal} +hr{-moz-box-sizing:border-box;box-sizing:border-box;border:0} +@media screen and (max-width:400px){@-ms-viewport{width:320px} +} +.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.grid-container:before,.grid-container:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.grid-container:after{clear:both} +body{min-width:960px} +.grid-container{-moz-box-sizing:border-box;box-sizing:border-box;margin-left:auto;margin-right:auto;max-width:1200px;padding-left:40px;padding-right:40px} +.grid-parent{padding-left:0;padding-right:0} +.grid-0{-moz-box-sizing:border-box;box-sizing:border-box;padding-left:0;padding-right:0} +.push-0,.pull-0{position:relative} +@media screen and (min-width:768px){.grid-100:before,.grid-100:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.hide-on-web{display:none!important} +.grid-0,.grid-95,.grid-90,.grid-85,.grid-80,.grid-75,.grid-70,.grid-65,.grid-60,.grid-55,.grid-50,.grid-45,.grid-40,.grid-35,.grid-30,.grid-25,.grid-20,.grid-15,.grid-10,.grid-5,.grid-100,.grid-66,.grid-33{-moz-box-sizing:border-box;box-sizing:border-box;padding-left:0;padding-right:0} +.push-0,.pull-0,.push-95,.pull-95,.push-90,.pull-90,.push-85,.pull-85,.push-80,.pull-80,.push-75,.pull-75,.push-70,.pull-70,.push-65,.pull-65,.push-60,.pull-60,.push-55,.pull-55,.push-50,.pull-50,.push-45,.pull-45,.push-40,.pull-40,.push-35,.pull-35,.push-30,.pull-30,.push-25,.pull-25,.push-20,.pull-20,.push-15,.pull-15,.push-10,.pull-10,.push-5,.pull-5,.push-66,.pull-66,.push-33,.pull-33{position:relative} +.grid-95{float:left;width:95%} +.prefix-95{margin-left:95%} +.suffix-95{margin-right:95%} +.push-95{left:95%} +.pull-95{left:-95%} +.grid-90{float:left;width:90%} +.prefix-90{margin-left:90%} +.suffix-90{margin-right:90%} +.push-90{left:90%} +.pull-90{left:-90%} +.grid-85{float:left;width:85%} +.prefix-85{margin-left:85%} +.suffix-85{margin-right:85%} +.push-85{left:85%} +.pull-85{left:-85%} +.grid-80{float:left;width:80%} +.prefix-80{margin-left:80%} +.suffix-80{margin-right:80%} +.push-80{left:80%} +.pull-80{left:-80%} +.grid-75{float:left;width:75%} +.prefix-75{margin-left:75%} +.suffix-75{margin-right:75%} +.push-75{left:75%} +.pull-75{left:-75%} +.grid-70{float:left;width:70%} +.prefix-70{margin-left:70%} +.suffix-70{margin-right:70%} +.push-70{left:70%} +.pull-70{left:-70%} +.grid-65{float:left;width:65%} +.prefix-65{margin-left:65%} +.suffix-65{margin-right:65%} +.push-65{left:65%} +.pull-65{left:-65%} +.grid-60{float:left;width:60%} +.prefix-60{margin-left:60%} +.suffix-60{margin-right:60%} +.push-60{left:60%} +.pull-60{left:-60%} +.grid-55{float:left;width:55%} +.prefix-55{margin-left:55%} +.suffix-55{margin-right:55%} +.push-55{left:55%} +.pull-55{left:-55%} +.grid-50{float:left;width:50%} +.prefix-50{margin-left:50%} +.suffix-50{margin-right:50%} +.push-50{left:50%} +.pull-50{left:-50%} +.grid-45{float:left;width:45%} +.prefix-45{margin-left:45%} +.suffix-45{margin-right:45%} +.push-45{left:45%} +.pull-45{left:-45%} +.grid-40{float:left;width:40%} +.prefix-40{margin-left:40%} +.suffix-40{margin-right:40%} +.push-40{left:40%} +.pull-40{left:-40%} +.grid-35{float:left;width:35%} +.prefix-35{margin-left:35%} +.suffix-35{margin-right:35%} +.push-35{left:35%} +.pull-35{left:-35%} +.grid-30{float:left;width:30%} +.prefix-30{margin-left:30%} +.suffix-30{margin-right:30%} +.push-30{left:30%} +.pull-30{left:-30%} +.grid-25{float:left;width:25%} +.prefix-25{margin-left:25%} +.suffix-25{margin-right:25%} +.push-25{left:25%} +.pull-25{left:-25%} +.grid-20{float:left;width:20%} +.prefix-20{margin-left:20%} +.suffix-20{margin-right:20%} +.push-20{left:20%} +.pull-20{left:-20%} +.grid-15{float:left;width:15%} +.prefix-15{margin-left:15%} +.suffix-15{margin-right:15%} +.push-15{left:15%} +.pull-15{left:-15%} +.grid-10{float:left;width:10%} +.prefix-10{margin-left:10%} +.suffix-10{margin-right:10%} +.push-10{left:10%} +.pull-10{left:-10%} +.grid-5{float:left;width:5%} +.prefix-5{margin-left:5%} +.suffix-5{margin-right:5%} +.push-5{left:5%} +.pull-5{left:-5%} +.grid-100{clear:both;width:100%} +.grid-100:before,.grid-100:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.grid-100:after{clear:both} +.grid-66{float:left;width:66.66666667%} +.prefix-66{margin-left:66.66666667%} +.suffix-66{margin-right:66.66666667%} +.push-66{left:66.66666667%} +.pull-66{left:-66.66666667%} +.grid-33{float:left;width:33.33333333%} +.prefix-33{margin-left:33.33333333%} +.suffix-33{margin-right:33.33333333%} +.push-33{left:33.33333333%} +.pull-33{left:-33.33333333%} +} +@media screen and (max-width:767px){body{min-width:0} +.grid-container{max-width:none;padding-left:10px;padding-right:10px} +.hide-on-mobile{display:none!important} +.grid-0,.mobile-grid-95,.mobile-grid-90,.mobile-grid-85,.mobile-grid-80,.mobile-grid-75,.mobile-grid-70,.mobile-grid-65,.mobile-grid-60,.mobile-grid-55,.mobile-grid-50,.mobile-grid-45,.mobile-grid-40,.mobile-grid-35,.mobile-grid-30,.mobile-grid-25,.mobile-grid-20,.mobile-grid-15,.mobile-grid-10,.mobile-grid-5,.mobile-grid-100,.mobile-grid-66,.mobile-grid-33{-moz-box-sizing:border-box;box-sizing:border-box;padding-left:0;padding-right:0} +.push-0,.pull-0,.mobile-push-95,.mobile-pull-95,.mobile-push-90,.mobile-pull-90,.mobile-push-85,.mobile-pull-85,.mobile-push-80,.mobile-pull-80,.mobile-push-75,.mobile-pull-75,.mobile-push-70,.mobile-pull-70,.mobile-push-65,.mobile-pull-65,.mobile-push-60,.mobile-pull-60,.mobile-push-55,.mobile-pull-55,.mobile-push-50,.mobile-pull-50,.mobile-push-45,.mobile-pull-45,.mobile-push-40,.mobile-pull-40,.mobile-push-35,.mobile-pull-35,.mobile-push-30,.mobile-pull-30,.mobile-push-25,.mobile-pull-25,.mobile-push-20,.mobile-pull-20,.mobile-push-15,.mobile-pull-15,.mobile-push-10,.mobile-pull-10,.mobile-push-5,.mobile-pull-5,.mobile-push-66,.mobile-pull-66,.mobile-push-33,.mobile-pull-33{position:relative} +.mobile-grid-95{float:left;width:95%} +.mobile-prefix-95{margin-left:95%} +.mobile-suffix-95{margin-right:95%} +.mobile-push-95{left:95%} +.mobile-pull-95{left:-95%} +.mobile-grid-90{float:left;width:90%} +.mobile-prefix-90{margin-left:90%} +.mobile-suffix-90{margin-right:90%} +.mobile-push-90{left:90%} +.mobile-pull-90{left:-90%} +.mobile-grid-85{float:left;width:85%} +.mobile-prefix-85{margin-left:85%} +.mobile-suffix-85{margin-right:85%} +.mobile-push-85{left:85%} +.mobile-pull-85{left:-85%} +.mobile-grid-80{float:left;width:80%} +.mobile-prefix-80{margin-left:80%} +.mobile-suffix-80{margin-right:80%} +.mobile-push-80{left:80%} +.mobile-pull-80{left:-80%} +.mobile-grid-75{float:left;width:75%} +.mobile-prefix-75{margin-left:75%} +.mobile-suffix-75{margin-right:75%} +.mobile-push-75{left:75%} +.mobile-pull-75{left:-75%} +.mobile-grid-70{float:left;width:70%} +.mobile-prefix-70{margin-left:70%} +.mobile-suffix-70{margin-right:70%} +.mobile-push-70{left:70%} +.mobile-pull-70{left:-70%} +.mobile-grid-65{float:left;width:65%} +.mobile-prefix-65{margin-left:65%} +.mobile-suffix-65{margin-right:65%} +.mobile-push-65{left:65%} +.mobile-pull-65{left:-65%} +.mobile-grid-60{float:left;width:60%} +.mobile-prefix-60{margin-left:60%} +.mobile-suffix-60{margin-right:60%} +.mobile-push-60{left:60%} +.mobile-pull-60{left:-60%} +.mobile-grid-55{float:left;width:55%} +.mobile-prefix-55{margin-left:55%} +.mobile-suffix-55{margin-right:55%} +.mobile-push-55{left:55%} +.mobile-pull-55{left:-55%} +.mobile-grid-50{float:left;width:50%} +.mobile-prefix-50{margin-left:50%} +.mobile-suffix-50{margin-right:50%} +.mobile-push-50{left:50%} +.mobile-pull-50{left:-50%} +.mobile-grid-45{float:left;width:45%} +.mobile-prefix-45{margin-left:45%} +.mobile-suffix-45{margin-right:45%} +.mobile-push-45{left:45%} +.mobile-pull-45{left:-45%} +.mobile-grid-40{float:left;width:40%} +.mobile-prefix-40{margin-left:40%} +.mobile-suffix-40{margin-right:40%} +.mobile-push-40{left:40%} +.mobile-pull-40{left:-40%} +.mobile-grid-35{float:left;width:35%} +.mobile-prefix-35{margin-left:35%} +.mobile-suffix-35{margin-right:35%} +.mobile-push-35{left:35%} +.mobile-pull-35{left:-35%} +.mobile-grid-30{float:left;width:30%} +.mobile-prefix-30{margin-left:30%} +.mobile-suffix-30{margin-right:30%} +.mobile-push-30{left:30%} +.mobile-pull-30{left:-30%} +.mobile-grid-25{float:left;width:25%} +.mobile-prefix-25{margin-left:25%} +.mobile-suffix-25{margin-right:25%} +.mobile-push-25{left:25%} +.mobile-pull-25{left:-25%} +.mobile-grid-20{float:left;width:20%} +.mobile-prefix-20{margin-left:20%} +.mobile-suffix-20{margin-right:20%} +.mobile-push-20{left:20%} +.mobile-pull-20{left:-20%} +.mobile-grid-15{float:left;width:15%} +.mobile-prefix-15{margin-left:15%} +.mobile-suffix-15{margin-right:15%} +.mobile-push-15{left:15%} +.mobile-pull-15{left:-15%} +.mobile-grid-10{float:left;width:10%} +.mobile-prefix-10{margin-left:10%} +.mobile-suffix-10{margin-right:10%} +.mobile-push-10{left:10%} +.mobile-pull-10{left:-10%} +.mobile-grid-5{float:left;width:5%} +.mobile-prefix-5{margin-left:5%} +.mobile-suffix-5{margin-right:5%} +.mobile-push-5{left:5%} +.mobile-pull-5{left:-5%} +.mobile-grid-100{clear:both;width:100%} +.mobile-grid-100:before,.mobile-grid-100:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.mobile-grid-100:after{clear:both} +.mobile-grid-66{float:left;width:66.66666667%} +.mobile-prefix-66{margin-left:66.66666667%} +.mobile-suffix-66{margin-right:66.66666667%} +.mobile-push-66{left:66.66666667%} +.mobile-pull-66{left:-66.66666667%} +.mobile-grid-33{float:left;width:33.33333333%} +.mobile-prefix-33{margin-left:33.33333333%} +.mobile-suffix-33{margin-right:33.33333333%} +.mobile-push-33{left:33.33333333%} +.mobile-pull-33{left:-33.33333333%} +.grid-100[class*="app-grid-"]{clear:none} +.grid-100[class*="app-grid-"]:after{clear:none} +.app-push-0,.app-pull-0{left:0} +.app-prefix-0{margin-left:0} +.app-suffix-0{margin-right:0} +} +html:lang(ja) i,html:lang(ko) i,html:lang(zh) i,html:lang(ja) em,html:lang(ko) em,html:lang(zh) em,html:lang(ja) dfn,html:lang(ko) dfn,html:lang(zh) dfn{font-style:normal;font-weight:700} +html:lang(de) q{quotes:"???" "???" "???" "???"} +html:lang(en-GB) q{quotes:"???" "???" "???" "???"} +html:lang(fr) q{quotes:"????" "????" "?????" "?????"} +html:lang(it) q{quotes:"??" "??" "???" "???"} +html:lang(pl) q{quotes:"???" "???" "??" "??"} +html:lang(ru) q{quotes:"??" "??" "???" "???"} +html:lang(zh-TW) q{quotes:"???" "???" "???" "???"} +html:lang(zh) html,html:lang(ja) html,html:lang(zh) body,html:lang(ja) body{word-break:normal} +html:lang(ko) html,html:lang(ko) body{word-break:keep-all} +html:lang(ko) .word-break-all{word-break:break-all} +html.ko-kr i,html.zh-cn i,html.zh-tw i,html.ko-kr em,html.zh-cn em,html.zh-tw em,html.ko-kr dfn,html.zh-cn dfn,html.zh-tw dfn{font-style:normal;font-weight:700} +html.de-de q{quotes:"???" "???" "???" "???"} +html.en-gb q{quotes:"???" "???" "???" "???"} +html.fr-fr q{quotes:"????" "????" "?????" "?????"} +html.it-it q{quotes:"??" "??" "???" "???"} +html.pl-pl q{quotes:"???" "???" "??" "??"} +html.ru-ru q{quotes:"??" "??" "???" "???"} +html.zh-tw q{quotes:"???" "???" "???" "???"} +html.zh-cn html,html.zh-tw html,html.zh-cn body,html.zh-tw body{word-break:normal} +html.ko-kr html,html.ko-kr body{word-break:keep-all} +html.ko-kr .word-break-all{word-break:break-all} +.modal-background-properties{background-repeat:no-repeat;background-size:contain;background-position:center bottom,center top,center -100px;background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-webkit-linear-gradient(top,#263145 0,#1d222c 70%),-webkit-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-moz-linear-gradient(top,#263145 0,#1d222c 70%),-moz-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),linear-gradient(top,#263145 0,#1d222c 70%),radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-clip:padding-box} +@font-face{font-family:"Blizzard";font-style:normal;font-weight:300;src:local("Blizzard Light"),local("Blizzard-Light"),url("fonts/blizzard-light.woff") format("woff")} +@font-face{font-family:"Blizzard";font-style:normal;font-weight:400;src:local("Blizzard"),local("Blizzard"),url("fonts/blizzard-regular.woff") format("woff")} +@font-face{font-family:"Blizzard";font-style:italic;font-weight:400;src:local("Blizzard Italic"),local("Blizzard-Italic"),url("fonts/blizzard-regular-italic.woff") format("woff")} +@font-face{font-family:"Blizzard";font-style:normal;font-weight:700;src:local("Blizzard Bold"),local("Blizzard-Bold"),url("fonts/blizzard-bold.woff") format("woff")} +.accordion{margin-bottom:20px} +.accordion-group{margin-bottom:2px;border:1px solid #272727;border-radius:2px} +.accordion-heading{border-bottom:0} +.accordion-heading .accordion-toggle{padding:5px 10px} +.accordion-toggle{background:0;cursor:pointer;color:#fff} +.accordion-toggle:focus,.accordion-toggle:hover{color:#fff} +.accordion-toggle:before{display:inline-block;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-16px -224px;content:"";margin-right:5px;margin-top:2px;width:16px;height:16px;line-height:16px;vertical-align:top} +.accordion-toggle.collapsed:before{background-position:-32px -112px} +.accordion-inner{padding:5px 10px;border-top:1px solid #272727} +.modal.agegate{width:358px;margin-left:-179px;height:216px;-webkit-transition:height,200ms;transition:height 200ms} +.modal.agegate.agegate-failed{height:125px} +.modal.agegate .modal-body .close{right:7px;top:-5px} +.modal.agegate .modal-body form{margin:0} +.modal.agegate .modal-body h1,.modal.agegate .modal-body .heading-1{color:#fff;font-size:15px;line-height:20px;margin:0 0 20px 0;padding:0;font-weight:400} +.modal.agegate .modal-body .notice{margin:20px 0 0 0;line-height:15px;font-size:13px} +.modal.agegate .modal-body .control-group{margin-bottom:12px;margin-top:-3px} +.modal.agegate .modal-body .btn{margin:0} +.modal.agegate .modal-body .btn-primary{min-width:110px} +.modal.agegate .modal-body .agegate-month{width:110px} +.modal.agegate .modal-body .agegate-day{width:88px} +.modal.agegate .modal-body .agegate-year{width:110px} +.modal.agegate .modal-body .agegate-field{padding-right:10px} +.modal.agegate .modal-body .agegate-field:last-of-type{padding-right:0} +.interceptor-agegate{text-align:center} +.interceptor-agegate .js-enabled .select-box,.interceptor-agegate select{text-align:left} +.interceptor-agegate .notice{margin-top:40px} +.alert{-moz-box-sizing:border-box;box-sizing:border-box;padding:4px 20px 4px 20px;font-size:13px;line-height:20px;margin-bottom:40px;text-shadow:none;position:relative;background-color:#272e3b;color:#fff;border:1px solid #000;box-shadow:0 0 0 1px #363d49 inset,0 5px 10px #000} +.alert p,.alert ul,.alert ol{font-size:13px;line-height:20px;margin:0} +.alert p:last-child,.alert ul:last-child,.alert ol:last-child{margin-bottom:0} +.alert .close{position:relative;top:0;right:-10px} +.alert-block{padding:20px 45px 20px 20px} +.alert-icon{padding:20px 45px 20px 59px} +.alert-icon:before{content:"";display:block;position:absolute;top:18px;left:20px;width:24px;height:24px;overflow:hidden;line-height:24px;vertical-align:top;text-indent:-9999px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-blue.png");background-repeat:no-repeat;background-position:-96px -360px} +.alert-block .close,.alert-icon .close{top:-10px;right:-34px} +.alert-block h2,.alert-icon h2,.alert-block h3,.alert-icon h3,.alert-block h4,.alert-icon h4,.alert-block h5,.alert-icon h5,.alert-block h6,.alert-icon h6,.alert-block .heading-2,.alert-icon .heading-2,.alert-block .heading-3,.alert-icon .heading-3,.alert-block .heading-4,.alert-icon .heading-4,.alert-block .heading-5,.alert-icon .heading-5,.alert-block .heading-6,.alert-icon .heading-6{font-size:17px;line-height:20px;margin-bottom:10px;color:#fff} +.alert-block p,.alert-icon p{margin-bottom:20px} +.alert-block p:last-child,.alert-icon p:last-child{margin-bottom:0} +.alert-block ul,.alert-icon ul,.alert-block ol,.alert-icon ol{margin:0 0 20px 30px} +.alert-block ul:last-child,.alert-icon ul:last-child,.alert-block ol:last-child,.alert-icon ol:last-child{margin-bottom:0} +.alert-block li,.alert-icon li{margin-bottom:10px} +.alert-block li:last-of-type,.alert-icon li:last-of-type{margin-bottom:0} +.alert-block li p,.alert-icon li p{margin-bottom:10px} +.alert+.heading-1,.alert-block+.heading-1,.alert-icon+.heading-1,.alert+.heading-2,.alert-block+.heading-2,.alert-icon+.heading-2,.alert+.heading-3,.alert-block+.heading-3,.alert-icon+.heading-3,.alert+.heading-4,.alert-block+.heading-4,.alert-icon+.heading-4,.alert+.heading-5+.heading-6,.alert-block+.heading-5+.heading-6,.alert-icon+.heading-5+.heading-6{margin-top:80px} +.alert-success{background-color:#132a14;box-shadow:0 0 0 1px #24392a inset,0 5px 10px #000} +.alert-icon.alert-success:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-green.png");background-position:-216px -120px} +.alert-warning{background-color:#5d3200;box-shadow:0 0 0 1px #834b00 inset,0 5px 10px #000} +.alert-icon.alert-warning:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-orange.png");background-position:-192px -120px} +.alert-error{background-color:#360e10;box-shadow:0 0 0 1px #551e21 inset,0 5px 10px #000} +.alert-icon.alert-error:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-red.png");background-position:-24px 0} +.alert-info{background-color:#272e3b;box-shadow:0 0 0 1px #363d49 inset,0 5px 10px #000} +.alert-icon.alert-info:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-blue.png");background-position:-96px -360px} +html,body{background:#202020 no-repeat center top} +body{background:#202020 no-repeat center top;color:#fff} +.body-content{background:#202020;padding-bottom:100px} +::-moz-selection{background:#19547c} +::selection{background:#19547c} +input::-moz-selection{background:#037db6} +input::selection{background:#037db6} +.breadcrumb{margin:0;padding:0;font-size:13px;line-height:20px;list-style:none} +.breadcrumb>li{margin:0;padding:0;display:inline-block} +.breadcrumb>li>a{color:#fff} +.breadcrumb>li>a:focus,.breadcrumb>li>a:hover{color:#fff} +.breadcrumb>li>.divider{padding:0 5px;opacity:.25} +.breadcrumb>li .icon-home{margin-right:10px} +.breadcrumb>.active{color:#fff} +.btn{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;margin:3px 0;padding:6px 20px;font-size:15px;line-height:20px;height:34px;background-color:#d9d9d9;color:#00aeff;border:1px solid #ccc;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn.active,.btn:active{padding:7px 19px 5px 21px} +.btn.disabled:active,.btn[disabled]:active,.btn.disabled.active,.btn[disabled].active{padding:6px 20px!important} +.btn:hover,.btn:focus{background-color:#bfbfbf;color:#fff;border-color:#ccc;box-shadow:0 0 #000} +.btn:active,.btn.active{background-color:#d9d9d9;color:#fff;border-color:#ccc;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn.disabled,.btn[disabled],.btn.disabled:hover,.btn.disabled:focus,.btn.disabled:active,.btn.disabled.active{background-color:#e6e6e6!important;color:#fff!important;border-color:#ccc!important;box-shadow:0 0 #000!important} +.btn.disabled.loading,.btn[disabled].loading,.btn.disabled:hover.loading,.btn.disabled:focus.loading,.btn.disabled:active.loading,.btn.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn.btn-wide{margin:3px 0;padding:6px 40px;font-size:15px;line-height:20px;height:34px} +.btn.btn-wide.active,.btn.btn-wide:active{padding:7px 39px 5px 41px} +.btn.btn-wide.disabled:active,.btn.btn-wide[disabled]:active,.btn.btn-wide.disabled.active,.btn.btn-wide[disabled].active{padding:6px 40px!important} +.btn-inverse{background-color:#d9d9d9;color:#fff;border:1px solid #ccc;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-inverse:hover,.btn-inverse:focus{background-color:#bfbfbf;color:#fff;border-color:#ccc;box-shadow:0 0 #000} +.btn-inverse:active,.btn-inverse.active{background-color:#d9d9d9;color:#fff;border-color:#ccc;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn-inverse.disabled,.btn-inverse[disabled],.btn-inverse.disabled:hover,.btn-inverse.disabled:focus,.btn-inverse.disabled:active,.btn-inverse.disabled.active{background-color:#e6e6e6!important;color:#fff!important;border-color:#ccc!important;box-shadow:0 0 #000!important} +.btn-inverse.disabled.loading,.btn-inverse[disabled].loading,.btn-inverse.disabled:hover.loading,.btn-inverse.disabled:focus.loading,.btn-inverse.disabled:active.loading,.btn-inverse.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-info{background-color:#d9d9d9;color:#fff;border:1px solid #09567b;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-info:hover,.btn-info:focus{background-color:#bfbfbf;color:#fff;border-color:#09567b;box-shadow:0 0 #000} +.btn-info:active,.btn-info.active{background-color:#d9d9d9;color:#fff;border-color:#09567b;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn-info.disabled,.btn-info[disabled],.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled:active,.btn-info.disabled.active{background-color:#e6e6e6!important;color:#fff!important;border-color:#ccc!important;box-shadow:0 0 #000!important} +.btn-info.disabled.loading,.btn-info[disabled].loading,.btn-info.disabled:hover.loading,.btn-info.disabled:focus.loading,.btn-info.disabled:active.loading,.btn-info.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-success{background-color:#d9d9d9;color:#fff;border:1px solid #0a5b28;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-success:hover,.btn-success:focus{background-color:#bfbfbf;color:#fff;border-color:#0a5b28;box-shadow:0 0 #000} +.btn-success:active,.btn-success.active{background-color:#d9d9d9;color:#fff;border-color:#0a5b28;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn-success.disabled,.btn-success[disabled],.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled:active,.btn-success.disabled.active{background-color:#e6e6e6!important;color:#fff!important;border-color:#ccc!important;box-shadow:0 0 #000!important} +.btn-success.disabled.loading,.btn-success[disabled].loading,.btn-success.disabled:hover.loading,.btn-success.disabled:focus.loading,.btn-success.disabled:active.loading,.btn-success.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-warning{background-color:#d9d9d9;color:#fff;border:1px solid #625604;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-warning:hover,.btn-warning:focus{background-color:#bfbfbf;color:#fff;border-color:#625604;box-shadow:0 0 #000} +.btn-warning:active,.btn-warning.active{background-color:#d9d9d9;color:#fff;border-color:#625604;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn-warning.disabled,.btn-warning[disabled],.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled:active,.btn-warning.disabled.active{background-color:#e6e6e6!important;color:#fff!important;border-color:#ccc!important;box-shadow:0 0 #000!important} +.btn-warning.disabled.loading,.btn-warning[disabled].loading,.btn-warning.disabled:hover.loading,.btn-warning.disabled:focus.loading,.btn-warning.disabled:active.loading,.btn-warning.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-danger,.btn-error{background-color:#d9d9d9;color:#fff;border:1px solid #ccc;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-danger:hover,.btn-error:hover,.btn-danger:focus,.btn-error:focus{background-color:#bfbfbf;color:#fff;border-color:#7b1315;box-shadow:0 0 #000} +.btn-danger:active,.btn-error:active,.btn-danger.active,.btn-error.active{background-color:#d9d9d9;color:#fff;border-color:#ccc;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn-danger.disabled,.btn-error.disabled,.btn-danger[disabled],.btn-error[disabled],.btn-danger.disabled:hover,.btn-error.disabled:hover,.btn-danger.disabled:focus,.btn-error.disabled:focus,.btn-danger.disabled:active,.btn-error.disabled:active,.btn-danger.disabled.active,.btn-error.disabled.active{background-color:#e6e6e6!important;color:#fff!important;border-color:#ccc!important;box-shadow:0 0 #000!important} +.btn-danger.disabled.loading,.btn-error.disabled.loading,.btn-danger[disabled].loading,.btn-error[disabled].loading,.btn-danger.disabled:hover.loading,.btn-error.disabled:hover.loading,.btn-danger.disabled:focus.loading,.btn-error.disabled:focus.loading,.btn-danger.disabled:active.loading,.btn-error.disabled:active.loading,.btn-danger.disabled.active.loading,.btn-error.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-link{background-color:transparent;color:#00aeff;border:1px solid transparent;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-link:hover,.btn-link:focus{background-color:transparent;color:#fff;border-color:transparent;box-shadow:0 0 #000} +.btn-link:active,.btn-link.active{background-color:transparent;color:#fff;border-color:transparent;box-shadow:0 0 #000} +.btn-link.disabled,.btn-link[disabled],.btn-link.disabled:hover,.btn-link.disabled:focus,.btn-link.disabled:active,.btn-link.disabled.active{background-color:transparent!important;color:#fff!important;border-color:transparent!important;box-shadow:0 0 #000!important} +.btn-link.disabled.loading,.btn-link[disabled].loading,.btn-link.disabled:hover.loading,.btn-link.disabled:focus.loading,.btn-link.disabled:active.loading,.btn-link.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-primary{background-color:#098cc8;color:#fff;border:1px solid #fff;box-shadow:0 0 #000;border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;background-image:-webkit-linear-gradient(top,#0f9ada,#0076ad);background-image:linear-gradient(to bottom,#0f9ada,#0076ad);border:0;box-shadow:0 1px 1px #b3b3b3,0 0 0 1px #ccc inset} +.btn-primary:hover,.btn-primary:focus{background-color:#21b0f1;color:#fff;border-color:#fff;box-shadow:0 0 #000} +.btn-primary:active,.btn-primary.active{background-color:#006899;color:#fff;border-color:#fff;box-shadow:inset 1.5px 1.5px 3px #303030} +.btn-primary.disabled,.btn-primary[disabled],.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled:active,.btn-primary.disabled.active{background-color:#272727!important;color:#ccc!important;border-color:#fff!important;box-shadow:0 0 #000!important} +.btn-primary.disabled.loading,.btn-primary[disabled].loading,.btn-primary.disabled:hover.loading,.btn-primary.disabled:focus.loading,.btn-primary.disabled:active.loading,.btn-primary.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-primary:hover,.btn-primary:focus{background-image:-webkit-linear-gradient(top,#37c0ff,#0097dd);background-image:linear-gradient(to bottom,#37c0ff,#0097dd)} +.btn-primary:active,.btn-primary.active{background-image:-webkit-linear-gradient(top,#006ea1,#00608d);background-image:linear-gradient(to bottom,#006ea1,#00608d);box-shadow:1px 1px 2px #666 inset,0 0 0 1px #ccc inset} +.btn-primary.disabled,.btn-primary[disabled],.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled:active,.btn-primary.disabled.active{background-image:-webkit-linear-gradient(top,rgba(15,154,218,0.1),rgba(0,118,173,0.1));background-image:linear-gradient(to bottom,rgba(15,154,218,0.1),rgba(0,118,173,0.1));box-shadow:0 1px 1px rgba(0,0,0,0.03),0 0 0 1px rgba(255,255,255,0.016) inset} +.btn-large{margin:0;padding:9px 30px;font-size:17px;line-height:20px;height:40px} +.btn-large.active,.btn-large:active{padding:10px 29px 8px 31px} +.btn-large.disabled:active,.btn-large[disabled]:active,.btn-large.disabled.active,.btn-large[disabled].active{padding:9px 30px!important} +.btn-small{margin:2px 0;padding:2px 10px;font-size:13px;line-height:20px;height:26px} +.btn-small.active,.btn-small:active{padding:3px 9px 1px 11px} +.btn-small.disabled:active,.btn-small[disabled]:active,.btn-small.disabled.active,.btn-small[disabled].active{padding:2px 10px!important} +.btn-mini{margin:0;padding:1px 10px;font-size:12px;line-height:16px;height:20px} +.btn-mini.active,.btn-mini:active{padding:2px 9px 0 11px} +.btn-mini.disabled:active,.btn-mini[disabled]:active,.btn-mini.disabled.active,.btn-mini[disabled].active{padding:1px 10px!important} +.btn-block+.btn-block{margin-top:10px} +.btn [class^="icon-"],.btn [class*=" icon-"]{margin-top:2px;margin-left:-4px;margin-right:5px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");opacity:.8} +.btn:hover [class^="icon-"],.btn:focus [class^="icon-"],.btn:hover [class*=" icon-"],.btn:focus [class*=" icon-"]{opacity:1} +.btn:active [class^="icon-"],.btn.active [class^="icon-"],.btn:active [class*=" icon-"],.btn.active [class*=" icon-"]{opacity:.8} +.btn-inverse [class^="icon-"],.btn-inverse [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.btn-info [class^="icon-"],.btn-info [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.btn-success [class^="icon-"],.btn-success [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png")} +.btn-warning [class^="icon-"],.btn-warning [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png")} +.btn-danger [class^="icon-"],.btn-error [class^="icon-"],.btn-danger [class*=" icon-"],.btn-error [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-red.png")} +.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-left:-2px;margin-right:3px} +.btn-small.btn-icon [class^="icon-"],.btn-small.btn-icon [class*=" icon-"]{margin-left:0;margin-right:0} +.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:0} +.btn-icon [class^="icon-"],.btn-icon [class*=" icon-"]{margin-left:0;margin-right:0} +.btn.disabled [class^="icon-"],.btn[disabled] [class^="icon-"],.btn.disabled [class*=" icon-"],.btn[disabled] [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")!important;opacity:.15!important} +.btn.disabled:active [class^="icon-"],.btn[disabled]:active [class^="icon-"],.btn.disabled.active [class^="icon-"],.btn[disabled].active [class^="icon-"],.btn.disabled:active [class*=" icon-"],.btn[disabled]:active [class*=" icon-"],.btn.disabled.active [class*=" icon-"],.btn[disabled].active [class*=" icon-"]{opacity:.15!important} +.btn.disabled.loading [class^="icon-"],.btn[disabled].loading [class^="icon-"],.btn.disabled.loading [class*=" icon-"],.btn[disabled].loading [class*=" icon-"]{opacity:0!important} +.btn-primary [class^="icon-"],.btn-primary [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:1} +.btn-primary:active [class^="icon-"],.btn-primary.active [class*=" icon-"]{opacity:.7} +.btn-primary.disabled [class^="icon-"],.btn-primary[disabled] [class^="icon-"],.btn-primary.disabled [class*=" icon-"],.btn-primary[disabled] [class*=" icon-"]{opacity:.15} +.btn-primary.disabled:active [class^="icon-"],.btn-primary[disabled]:active [class^="icon-"],.btn-primary.disabled.active [class^="icon-"],.btn-primary[disabled].active [class^="icon-"],.btn-primary.disabled:active [class*=" icon-"],.btn-primary[disabled]:active [class*=" icon-"],.btn-primary.disabled.active [class*=" icon-"],.btn-primary[disabled].active [class*=" icon-"]{opacity:.15} +.btn.loading:before{content:"";width:20px;height:20px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png");background-position:-140px 0;display:inline-block;position:absolute;z-index:1060;left:50%;top:50%;margin-top:-10px;margin-left:-10px;-webkit-animation:keyframes-loading .8s steps(21) infinite;-moz-animation:keyframes-loading .8s steps(21) infinite;-ms-animation:keyframes-loading .8s steps(21) infinite;animation:keyframes-loading .8s steps(21) infinite} +.btn.btn-link.loading:before{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png")} +.btn.disabled-loading{height:34px} +.btn-large.disabled-loading{height:40px} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.btn.loading:before{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-size:420px 20px} +.btn.btn-primary.loading:before{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-size:420px 20px} +} +.carousel{margin-bottom:20px;line-height:1;border:1px solid #000;box-shadow:0 5px 10px rgba(0,0,0,0.4);-moz-box-sizing:border-box;box-sizing:border-box} +.carousel .carousel-inner{border:0;-moz-box-sizing:border-box;box-sizing:border-box} +.carousel .carousel-inner .cover{background-color:rgba(255,255,255,0);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.1);-webkit-transition:background-color,0.2s;transition:background-color .2s} +.carousel .carousel-inner .carousel-caption{background-color:transparent;-moz-box-sizing:border-box;box-sizing:border-box;padding:10px 14px 30px 15px;color:#fff;-webkit-transition:opacity 1.25s,-webkit-transform .2s;transition:opacity 1.25s,transform .2s} +.carousel .carousel-inner .carousel-caption .bg-layer{background-color:#666;-webkit-transition:-webkit-transform,0.2s;transition:transform .2s} +.carousel .carousel-inner .carousel-caption h4,.carousel .carousel-inner .carousel-caption .heading-4{margin-bottom:6px;font-size:23px;line-height:1.2;font-weight:300;white-space:nowrap;overflow:hidden;color:#fff;text-overflow:ellipsis} +.carousel .carousel-inner .carousel-caption .summary{color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} +.carousel .carousel-inner>.item{-webkit-transition:.6s,ease-in-out,left;transition:.6s ease-in-out left} +.carousel:hover .cover{background-color:rgba(255,255,255,0.05);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.2)} +.carousel:hover .carousel-controls{opacity:1} +.carousel:hover .more .carousel-caption{-webkit-transform:translate(0,-47px);-ms-transform:translate(0,-47px);transform:translate(0,-47px)} +.carousel:hover .more .bg-layer{-webkit-transform:translate(0,-63px);-ms-transform:translate(0,-63px);transform:translate(0,-63px)} +.carousel.crossfade .carousel-inner{background-color:#000;border:0;-moz-box-sizing:border-box;box-sizing:border-box} +.carousel.crossfade .carousel-inner>.item{-webkit-transition:.2s,ease-in-out,opacity;transition:.2s ease-in-out opacity} +.carousel .carousel-controls{background-color:#ccc;top:10px;right:10px;width:51px;height:26px;border:1px solid rgba(255,255,255,0.5);border-radius:3px;opacity:0;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.carousel .carousel-controls button{background-color:rgba(255,255,255,0.3);padding:0;width:26px;height:26px;top:0;border:0} +.carousel .carousel-controls button span{background-image:url("../../images/toolkit/defaults/carousels/sprite-carousel-control.png");background-repeat:no-repeat;margin:0 0 0 7px;padding:0;width:8px;height:14px;opacity:.6} +.carousel .carousel-controls button:hover{background-color:rgba(255,255,255,0.4)} +.carousel .carousel-controls button:hover span{opacity:1} +.carousel .carousel-controls button:active{background-color:rgba(255,255,255,0.4);border-color:rgba(255,255,255,0.6)} +.carousel .carousel-controls button:active span{opacity:.8} +.carousel .carousel-controls .left{border-right:1px solid rgba(255,255,255,0.1);left:0} +.carousel .carousel-controls .left span{background-position:-32px -80px} +.carousel .carousel-controls .left:active{border-right:rgba(255,255,255,0.1)} +.carousel .carousel-controls .left:active span{left:1px;top:1px} +.carousel .carousel-controls .right{border-left:1px solid rgba(255,255,255,0.1);left:25px} +.carousel .carousel-controls .right span{background-position:-40px -80px;margin-left:10px} +.carousel .carousel-controls .right:active{border-left:1px solid rgba(255,255,255,0.1)} +.carousel .carousel-controls .right:active span{left:1px;top:1px} +.close{float:right;display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");background-repeat:no-repeat;background-position:-112px -96px;text-indent:-9999px;margin:2px 2px 0 0;cursor:pointer;opacity:.2;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.close:focus,.close:hover{text-decoration:none;opacity:.4} +button.close{padding:0;border:0;background:transparent;-webkit-appearance:none} +code,pre{font-size:13px;line-height:20px;border-radius:2px} +code{padding:0 .25em;background-color:#f7f7f7;border:1px solid #272727} +pre{margin:0 0 40px;font-size:13px;line-height:20px;padding:10px;background:#f7f7f7;border:1px solid #272727} +.dropdown-toggle{padding-right:30px} +.caret{content:"";margin:2px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-repeat:no-repeat;text-indent:-9999px;-webkit-transition:opacity,0.2s;transition:opacity .2s;background-position:-64px -256px} +.navbar .caret{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")} +.dropdown-toggle>.caret{position:absolute;right:5px;top:0;opacity:.3;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.dropdown-toggle:focus>.caret,.dropdown-toggle:hover>.caret{opacity:.5} +.nav-tabs .dropdown-toggle>.caret,.nav-pills .dropdown-toggle>.caret{top:5px} +.dropdown-menu{left:-2px;z-index:1000;padding:4px 0;background-color:#272e3b;box-shadow:0 0 0 1px #3d434f inset,0 5px 10px rgba(0,0,0,0.75);border:solid #000;border-width:1px} +.dropdown-menu .divider{height:1px;margin:10px 1px 10px;overflow:hidden;border-bottom:1px solid #3d434f;background-color:transparent;margin:2px 0 3px 0} +.dropdown-menu li{margin:0 1px;padding:0} +.dropdown-menu li>a{padding:4px 30px;font-size:13px;font-weight:normal;line-height:20px;color:#fff;-webkit-transition:background-color .2s,border-color .2s,color .2s;transition:background-color .2s,border-color .2s,color .2s} +.dropdown-menu li>span{padding:4px 30px;font-size:13px;font-weight:normal;line-height:20px} +.dropdown-menu [class^="icon-"],.dropdown-menu [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.dropdown-menu [class^="icon-"]:not(.icon-external-link),.dropdown-menu [class*=" icon-"]:not(.icon-external-link){position:absolute;left:5px} +.dropdown-menu .icon-external-link{position:absolute;right:5px} +.navbar .dropdown-menu{margin-top:9px} +.navbar .pull-right .dropdown-menu li:first-child:before{content:"";border-bottom:6px solid #3d434f;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);display:inline-block;position:absolute;right:8px;top:-6px} +.navbar .pull-right .dropdown-menu li:first-child:after{content:"";border-top:1px solid #272e3b;display:inline-block;position:absolute;right:9px;top:0;width:10px} +.navbar .pull-right .dropdown-menu:before{content:"";border-bottom:7px solid #000;border-left:7px solid rgba(0,0,0,0);border-right:7px solid rgba(0,0,0,0);display:inline-block;position:absolute;right:7px;top:-7px} +.navbar .pull-right .dropdown-menu:after{content:"";border-bottom:4px solid #272e3b;border-left:4px solid rgba(0,0,0,0);border-right:4px solid rgba(0,0,0,0);display:inline-block;position:absolute;right:10px;top:-4px} +.navbar .pull-right .dropdown-menu li:first-child:before{right:8px} +.navbar .pull-right .dropdown-menu li:first-child:after{right:9px} +.navbar .pull-right .dropdown-menu:before{right:7px} +.navbar .pull-right .dropdown-menu:after{right:10px} +.nav-tabs .dropdown-menu{left:28px;margin-top:0} +.nav-pills .dropdown-menu{left:-1px;margin-top:-1px} +.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{color:#fff;background-color:#ccc} +.dropdown-menu .active>a,.dropdown-menu .active>a:hover,.dropdown-menu .active>a:focus{color:#fff} +.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover,.dropdown-menu .disabled>a:focus{color:#fff} +.dropdown-menu>.disabled>a>[class^="icon-"],.dropdown-menu>.disabled>a>[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.2} +.dropdown-submenu{position:relative} +.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:0} +.dropdown-submenu:hover>.dropdown-menu{display:block} +.dropdown-submenu>a:after{content:"";margin:2px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-repeat:no-repeat;text-indent:-9999px;background-position:0 -48px;position:absolute;right:5px;top:4px;opacity:.3;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.dropdown-submenu:focus>a:after,.dropdown-submenu:hover>a:after{opacity:.5} +.dropdown .dropdown-menu .nav-header{padding:4px 30px;margin:3px 0;border:solid #3d434f;border-width:1px 0;color:#fff} +.dropdown .dropdown-menu .nav-header:first-child{border-top:0;margin-top:0} +.error-template .error-heading{margin:100px 0 40px 0;text-align:center;font-size:40px;line-height:50px} +.error-template .error-message{margin:0 0 40px 0;text-align:center;font-size:20px;line-height:25px;font-weight:300;color:#ccc} +.error-template .error-home-button{text-align:center;margin:0 0 40px 0} +.error-template .error-support{background-color:#bfbfbf;margin:40px 0 0 0;padding:20px 0;text-align:center;border-top:1px solid #ccc;border-bottom:1px solid #ccc} +.error-template .error-support p{margin:0;color:#ccc} +.error-template .error-support:empty{background:0;border:0;height:0;overflow:hidden;margin:0;padding:0} +.footer{background:0} +.footer-content{border-top:1px solid #272727;padding:30px 0;font-size:13px;line-height:20px} +.footer-content:before,.footer-content:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.footer-content:after{clear:both} +.footer-content .legal{color:#fff} +.footer-content .copyright{color:#fff;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em} +.footer-content .supplemental{display:block} +.footer-content .links{display:block} +.footer-content .links a{display:inline-block;margin-right:20px} +.footer-content .links a:last-of-type{margin-right:0} +.footer-content .blizzard{display:block;width:102px;height:52px;overflow:hidden;float:right;background:transparent url("../../images/toolkit/defaults/logos/blizzard/footer.png") no-repeat 0 -104px;text-indent:-9999px} +form{margin:0} +fieldset{padding:0;margin:0 0 30px 0;border:0} +fieldset p:last-child,fieldset ul:last-child,fieldset ol:last-child{margin-bottom:0} +legend{display:block;width:100%;padding:0;margin-bottom:40px;color:#fff;font-size:23px;line-height:30px;font-weight:300} +legend small{font-size:12px;color:#fff} +label,input,button,select,textarea{font-size:15px;font-weight:400;line-height:20px} +input,button,select,select optgroup,select option,textarea{font-family:"Blizzard","Arial","Helvetica",sans-serif} +input:lang(zh-CN),button:lang(zh-CN),select:lang(zh-CN),select optgroup:lang(zh-CN),select option:lang(zh-CN),textarea:lang(zh-CN){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft YaHei","Hei SC",sans-serif} +input:lang(zh-TW),button:lang(zh-TW),select:lang(zh-TW),select optgroup:lang(zh-TW),select option:lang(zh-TW),textarea:lang(zh-TW){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft JhengHei","Tei TC",sans-serif} +input:lang(ko),button:lang(ko),select:lang(ko),select optgroup:lang(ko),select option:lang(ko),textarea:lang(ko){font-family:"Blizzard","Arial","Helvetica","?????? ??????","Malgun Gothic","????????????????????????","AppleSDGothicNeo","????????????","AppleGothic","??????","Dotum",sans-serif} +input:lang(ja),button:lang(ja),select:lang(ja),select optgroup:lang(ja),select option:lang(ja),textarea:lang(ja){font-family:"Blizzard","Arial","Helvetica","????????????","Meiryo","?????????????????? Pro","Hiragino Kaku Gothic Pro","???????????????","Yu Gothic",sans-serif} +input:lang(th),button:lang(th),select:lang(th),select optgroup:lang(th),select option:lang(th),textarea:lang(th){font-family:"Blizzard","Tahoma","Arial","Helvetica",sans-serif} +*::-ms-clear{width:0;height:0} +label{display:block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:0} +.uneditable-input,select,textarea,input[type="color"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="email"],input[type="month"],input[type="number"],input[type="password"],input[type="search"],input[type="tel"],input[type="text"],input[type="time"],input[type="url"],input[type="week"]{display:inline-block;vertical-align:middle;height:34px;padding:0 10px;margin-top:3px;margin-bottom:3px;font-size:15px;line-height:20px;border:1px solid #ccc;background-color:#808080;color:#fff;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:2px} +.uneditable-input.input-block,select.input-block,textarea.input-block,input[type="color"].input-block,input[type="date"].input-block,input[type="datetime"].input-block,input[type="datetime-local"].input-block,input[type="email"].input-block,input[type="month"].input-block,input[type="number"].input-block,input[type="password"].input-block,input[type="search"].input-block,input[type="tel"].input-block,input[type="text"].input-block,input[type="time"].input-block,input[type="url"].input-block,input[type="week"].input-block{width:100%} +.uneditable-input[class^="grid-"],select[class^="grid-"],textarea[class^="grid-"],input[type="color"][class^="grid-"],input[type="date"][class^="grid-"],input[type="datetime"][class^="grid-"],input[type="datetime-local"][class^="grid-"],input[type="email"][class^="grid-"],input[type="month"][class^="grid-"],input[type="number"][class^="grid-"],input[type="password"][class^="grid-"],input[type="search"][class^="grid-"],input[type="tel"][class^="grid-"],input[type="text"][class^="grid-"],input[type="time"][class^="grid-"],input[type="url"][class^="grid-"],input[type="week"][class^="grid-"],.uneditable-input[class*=" grid-"],select[class*=" grid-"],textarea[class*=" grid-"],input[type="color"][class*=" grid-"],input[type="date"][class*=" grid-"],input[type="datetime"][class*=" grid-"],input[type="datetime-local"][class*=" grid-"],input[type="email"][class*=" grid-"],input[type="month"][class*=" grid-"],input[type="number"][class*=" grid-"],input[type="password"][class*=" grid-"],input[type="search"][class*=" grid-"],input[type="tel"][class*=" grid-"],input[type="text"][class*=" grid-"],input[type="time"][class*=" grid-"],input[type="url"][class*=" grid-"],input[type="week"][class*=" grid-"]{padding-left:10px;padding-right:10px} +.uneditable-input{padding-top:6px;padding-bottom:6px;height:auto} +.uneditable-input,input[readonly]{border-color:#ccc!important;background-color:#272727!important;color:#fff!important} +select,textarea,input[type="color"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="email"],input[type="month"],input[type="number"],input[type="password"],input[type="search"],input[type="tel"],input[type="text"],input[type="time"],input[type="url"],input[type="week"]{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;-webkit-transition:background-position .2s,background-color .2s,border-color .2s,box-shadow .2s;transition:background-position .2s,background-color .2s,border-color .2s,box-shadow .2s} +select:hover,textarea:hover,input[type="color"]:hover,input[type="date"]:hover,input[type="datetime"]:hover,input[type="datetime-local"]:hover,input[type="email"]:hover,input[type="month"]:hover,input[type="number"]:hover,input[type="password"]:hover,input[type="search"]:hover,input[type="tel"]:hover,input[type="text"]:hover,input[type="time"]:hover,input[type="url"]:hover,input[type="week"]:hover{border-color:#ccc;background-color:#808080;color:#fff} +select:focus,textarea:focus,input[type="color"]:focus,input[type="date"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="email"]:focus,input[type="month"]:focus,input[type="number"]:focus,input[type="password"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="text"]:focus,input[type="time"]:focus,input[type="url"]:focus,input[type="week"]:focus{border-color:#1e5f99;background-color:#808080;color:#fff} +select[disabled],textarea[disabled],input[type="color"][disabled],input[type="date"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="email"][disabled],input[type="month"][disabled],input[type="number"][disabled],input[type="password"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="text"][disabled],input[type="time"][disabled],input[type="url"][disabled],input[type="week"][disabled],select.disabled,textarea.disabled,input[type="color"].disabled,input[type="date"].disabled,input[type="datetime"].disabled,input[type="datetime-local"].disabled,input[type="email"].disabled,input[type="month"].disabled,input[type="number"].disabled,input[type="password"].disabled,input[type="search"].disabled,input[type="tel"].disabled,input[type="text"].disabled,input[type="time"].disabled,input[type="url"].disabled,input[type="week"].disabled{border-color:#ccc!important;background-color:#272727!important;color:#3f3f3f!important;cursor:default!important} +select[disabled]:-moz-placeholder,textarea[disabled]:-moz-placeholder,input[type="color"][disabled]:-moz-placeholder,input[type="date"][disabled]:-moz-placeholder,input[type="datetime"][disabled]:-moz-placeholder,input[type="datetime-local"][disabled]:-moz-placeholder,input[type="email"][disabled]:-moz-placeholder,input[type="month"][disabled]:-moz-placeholder,input[type="number"][disabled]:-moz-placeholder,input[type="password"][disabled]:-moz-placeholder,input[type="search"][disabled]:-moz-placeholder,input[type="tel"][disabled]:-moz-placeholder,input[type="text"][disabled]:-moz-placeholder,input[type="time"][disabled]:-moz-placeholder,input[type="url"][disabled]:-moz-placeholder,input[type="week"][disabled]:-moz-placeholder,select.disabled:-moz-placeholder,textarea.disabled:-moz-placeholder,input[type="color"].disabled:-moz-placeholder,input[type="date"].disabled:-moz-placeholder,input[type="datetime"].disabled:-moz-placeholder,input[type="datetime-local"].disabled:-moz-placeholder,input[type="email"].disabled:-moz-placeholder,input[type="month"].disabled:-moz-placeholder,input[type="number"].disabled:-moz-placeholder,input[type="password"].disabled:-moz-placeholder,input[type="search"].disabled:-moz-placeholder,input[type="tel"].disabled:-moz-placeholder,input[type="text"].disabled:-moz-placeholder,input[type="time"].disabled:-moz-placeholder,input[type="url"].disabled:-moz-placeholder,input[type="week"].disabled:-moz-placeholder{color:#3f3f3f} +select[disabled]:-ms-input-placeholder,textarea[disabled]:-ms-input-placeholder,input[type="color"][disabled]:-ms-input-placeholder,input[type="date"][disabled]:-ms-input-placeholder,input[type="datetime"][disabled]:-ms-input-placeholder,input[type="datetime-local"][disabled]:-ms-input-placeholder,input[type="email"][disabled]:-ms-input-placeholder,input[type="month"][disabled]:-ms-input-placeholder,input[type="number"][disabled]:-ms-input-placeholder,input[type="password"][disabled]:-ms-input-placeholder,input[type="search"][disabled]:-ms-input-placeholder,input[type="tel"][disabled]:-ms-input-placeholder,input[type="text"][disabled]:-ms-input-placeholder,input[type="time"][disabled]:-ms-input-placeholder,input[type="url"][disabled]:-ms-input-placeholder,input[type="week"][disabled]:-ms-input-placeholder,select.disabled:-ms-input-placeholder,textarea.disabled:-ms-input-placeholder,input[type="color"].disabled:-ms-input-placeholder,input[type="date"].disabled:-ms-input-placeholder,input[type="datetime"].disabled:-ms-input-placeholder,input[type="datetime-local"].disabled:-ms-input-placeholder,input[type="email"].disabled:-ms-input-placeholder,input[type="month"].disabled:-ms-input-placeholder,input[type="number"].disabled:-ms-input-placeholder,input[type="password"].disabled:-ms-input-placeholder,input[type="search"].disabled:-ms-input-placeholder,input[type="tel"].disabled:-ms-input-placeholder,input[type="text"].disabled:-ms-input-placeholder,input[type="time"].disabled:-ms-input-placeholder,input[type="url"].disabled:-ms-input-placeholder,input[type="week"].disabled:-ms-input-placeholder{color:#3f3f3f} +select[disabled]::-webkit-input-placeholder,textarea[disabled]::-webkit-input-placeholder,input[type="color"][disabled]::-webkit-input-placeholder,input[type="date"][disabled]::-webkit-input-placeholder,input[type="datetime"][disabled]::-webkit-input-placeholder,input[type="datetime-local"][disabled]::-webkit-input-placeholder,input[type="email"][disabled]::-webkit-input-placeholder,input[type="month"][disabled]::-webkit-input-placeholder,input[type="number"][disabled]::-webkit-input-placeholder,input[type="password"][disabled]::-webkit-input-placeholder,input[type="search"][disabled]::-webkit-input-placeholder,input[type="tel"][disabled]::-webkit-input-placeholder,input[type="text"][disabled]::-webkit-input-placeholder,input[type="time"][disabled]::-webkit-input-placeholder,input[type="url"][disabled]::-webkit-input-placeholder,input[type="week"][disabled]::-webkit-input-placeholder,select.disabled::-webkit-input-placeholder,textarea.disabled::-webkit-input-placeholder,input[type="color"].disabled::-webkit-input-placeholder,input[type="date"].disabled::-webkit-input-placeholder,input[type="datetime"].disabled::-webkit-input-placeholder,input[type="datetime-local"].disabled::-webkit-input-placeholder,input[type="email"].disabled::-webkit-input-placeholder,input[type="month"].disabled::-webkit-input-placeholder,input[type="number"].disabled::-webkit-input-placeholder,input[type="password"].disabled::-webkit-input-placeholder,input[type="search"].disabled::-webkit-input-placeholder,input[type="tel"].disabled::-webkit-input-placeholder,input[type="text"].disabled::-webkit-input-placeholder,input[type="time"].disabled::-webkit-input-placeholder,input[type="url"].disabled::-webkit-input-placeholder,input[type="week"].disabled::-webkit-input-placeholder{color:#3f3f3f} +select[disabled]::-moz-placeholder,textarea[disabled]::-moz-placeholder,input[type="color"][disabled]::-moz-placeholder,input[type="date"][disabled]::-moz-placeholder,input[type="datetime"][disabled]::-moz-placeholder,input[type="datetime-local"][disabled]::-moz-placeholder,input[type="email"][disabled]::-moz-placeholder,input[type="month"][disabled]::-moz-placeholder,input[type="number"][disabled]::-moz-placeholder,input[type="password"][disabled]::-moz-placeholder,input[type="search"][disabled]::-moz-placeholder,input[type="tel"][disabled]::-moz-placeholder,input[type="text"][disabled]::-moz-placeholder,input[type="time"][disabled]::-moz-placeholder,input[type="url"][disabled]::-moz-placeholder,input[type="week"][disabled]::-moz-placeholder,select.disabled::-moz-placeholder,textarea.disabled::-moz-placeholder,input[type="color"].disabled::-moz-placeholder,input[type="date"].disabled::-moz-placeholder,input[type="datetime"].disabled::-moz-placeholder,input[type="datetime-local"].disabled::-moz-placeholder,input[type="email"].disabled::-moz-placeholder,input[type="month"].disabled::-moz-placeholder,input[type="number"].disabled::-moz-placeholder,input[type="password"].disabled::-moz-placeholder,input[type="search"].disabled::-moz-placeholder,input[type="tel"].disabled::-moz-placeholder,input[type="text"].disabled::-moz-placeholder,input[type="time"].disabled::-moz-placeholder,input[type="url"].disabled::-moz-placeholder,input[type="week"].disabled::-moz-placeholder{color:#3f3f3f!important;opacity:1} +select:-moz-placeholder,textarea:-moz-placeholder,input[type="color"]:-moz-placeholder,input[type="date"]:-moz-placeholder,input[type="datetime"]:-moz-placeholder,input[type="datetime-local"]:-moz-placeholder,input[type="email"]:-moz-placeholder,input[type="month"]:-moz-placeholder,input[type="number"]:-moz-placeholder,input[type="password"]:-moz-placeholder,input[type="search"]:-moz-placeholder,input[type="tel"]:-moz-placeholder,input[type="text"]:-moz-placeholder,input[type="time"]:-moz-placeholder,input[type="url"]:-moz-placeholder,input[type="week"]:-moz-placeholder{color:#fff} +select:-ms-input-placeholder,textarea:-ms-input-placeholder,input[type="color"]:-ms-input-placeholder,input[type="date"]:-ms-input-placeholder,input[type="datetime"]:-ms-input-placeholder,input[type="datetime-local"]:-ms-input-placeholder,input[type="email"]:-ms-input-placeholder,input[type="month"]:-ms-input-placeholder,input[type="number"]:-ms-input-placeholder,input[type="password"]:-ms-input-placeholder,input[type="search"]:-ms-input-placeholder,input[type="tel"]:-ms-input-placeholder,input[type="text"]:-ms-input-placeholder,input[type="time"]:-ms-input-placeholder,input[type="url"]:-ms-input-placeholder,input[type="week"]:-ms-input-placeholder{color:#fff} +select::-webkit-input-placeholder,textarea::-webkit-input-placeholder,input[type="color"]::-webkit-input-placeholder,input[type="date"]::-webkit-input-placeholder,input[type="datetime"]::-webkit-input-placeholder,input[type="datetime-local"]::-webkit-input-placeholder,input[type="email"]::-webkit-input-placeholder,input[type="month"]::-webkit-input-placeholder,input[type="number"]::-webkit-input-placeholder,input[type="password"]::-webkit-input-placeholder,input[type="search"]::-webkit-input-placeholder,input[type="tel"]::-webkit-input-placeholder,input[type="text"]::-webkit-input-placeholder,input[type="time"]::-webkit-input-placeholder,input[type="url"]::-webkit-input-placeholder,input[type="week"]::-webkit-input-placeholder{color:#fff} +select:focus:-moz-placeholder,textarea:focus:-moz-placeholder,input[type="color"]:focus:-moz-placeholder,input[type="date"]:focus:-moz-placeholder,input[type="datetime"]:focus:-moz-placeholder,input[type="datetime-local"]:focus:-moz-placeholder,input[type="email"]:focus:-moz-placeholder,input[type="month"]:focus:-moz-placeholder,input[type="number"]:focus:-moz-placeholder,input[type="password"]:focus:-moz-placeholder,input[type="search"]:focus:-moz-placeholder,input[type="tel"]:focus:-moz-placeholder,input[type="text"]:focus:-moz-placeholder,input[type="time"]:focus:-moz-placeholder,input[type="url"]:focus:-moz-placeholder,input[type="week"]:focus:-moz-placeholder{color:#fff} +select:focus:-ms-input-placeholder,textarea:focus:-ms-input-placeholder,input[type="color"]:focus:-ms-input-placeholder,input[type="date"]:focus:-ms-input-placeholder,input[type="datetime"]:focus:-ms-input-placeholder,input[type="datetime-local"]:focus:-ms-input-placeholder,input[type="email"]:focus:-ms-input-placeholder,input[type="month"]:focus:-ms-input-placeholder,input[type="number"]:focus:-ms-input-placeholder,input[type="password"]:focus:-ms-input-placeholder,input[type="search"]:focus:-ms-input-placeholder,input[type="tel"]:focus:-ms-input-placeholder,input[type="text"]:focus:-ms-input-placeholder,input[type="time"]:focus:-ms-input-placeholder,input[type="url"]:focus:-ms-input-placeholder,input[type="week"]:focus:-ms-input-placeholder{color:#fff} +select:focus::-webkit-input-placeholder,textarea:focus::-webkit-input-placeholder,input[type="color"]:focus::-webkit-input-placeholder,input[type="date"]:focus::-webkit-input-placeholder,input[type="datetime"]:focus::-webkit-input-placeholder,input[type="datetime-local"]:focus::-webkit-input-placeholder,input[type="email"]:focus::-webkit-input-placeholder,input[type="month"]:focus::-webkit-input-placeholder,input[type="number"]:focus::-webkit-input-placeholder,input[type="password"]:focus::-webkit-input-placeholder,input[type="search"]:focus::-webkit-input-placeholder,input[type="tel"]:focus::-webkit-input-placeholder,input[type="text"]:focus::-webkit-input-placeholder,input[type="time"]:focus::-webkit-input-placeholder,input[type="url"]:focus::-webkit-input-placeholder,input[type="week"]:focus::-webkit-input-placeholder{color:#fff} +input[type="number"]{-moz-appearance:textfield} +select{background-image:url("../../images/toolkit/themes/bnet/forms/sprite-22-select.png");background-repeat:no-repeat;background-position:right 0} +select::-ms-expand{display:none} +textarea,input,.uneditable-input{outline:0} +textarea{overflow:auto;height:auto;resize:vertical;min-height:34px;padding:6px 4px 4px 10px} +select{padding:6px 18px 6px 5px} +select:focus{outline:0} +select optgroup{border:solid #3d434f;border-width:1px 0;margin:0;background:#272e3b;color:#fff;font-style:normal;font-weight:400;font-size:12px;line-height:13px;letter-spacing:.075em;text-transform:uppercase;text-indent:10px;padding-top:5px} +select option{background:#272e3b;color:#fff;font-size:15px;line-height:20px;padding:4px 10px;letter-spacing:normal;text-transform:none} +select optgroup{font-size:15px;text-transform:none} +label.radio-label,label.checkbox-label{min-height:20px;padding-left:30px;position:relative;margin-bottom:20px} +label.radio-label[disabled],label.checkbox-label[disabled],label.radio-label.disabled,label.checkbox-label.disabled{opacity:.3} +label.radio-label input[type="radio"],label.checkbox-label input[type="checkbox"]{position:absolute;left:0;top:0;width:20px;height:20px;opacity:.3} +input.input-large{margin:5px 0;padding:0 10px;font-size:17px;line-height:20px;height:40px} +input.input-large.active,input.input-large:active{padding:1 9px -1 11px} +input.input-large.disabled:active,input.input-large[disabled]:active,input.input-large.disabled.active,input.input-large[disabled].active{padding:0 10px!important} +.form-actions{margin-top:40px;margin-bottom:40px} +.form-actions:before,.form-actions:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.form-actions:after{clear:both} +.form-actions .btn{float:left} +.form-actions .btn+.btn{margin-left:10px} +.control-group{margin-bottom:10px} +.control-group:before,.control-group:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.control-group:after{clear:both} +.control-group.control-info .control-label{color:#00aeff} +.control-group.control-info select,.control-group.control-info textarea,.control-group.control-info input[type="color"],.control-group.control-info input[type="date"],.control-group.control-info input[type="datetime"],.control-group.control-info input[type="datetime-local"],.control-group.control-info input[type="email"],.control-group.control-info input[type="month"],.control-group.control-info input[type="number"],.control-group.control-info input[type="password"],.control-group.control-info input[type="search"],.control-group.control-info input[type="tel"],.control-group.control-info input[type="text"],.control-group.control-info input[type="time"],.control-group.control-info input[type="url"],.control-group.control-info input[type="week"]{border-color:#00aeff} +.control-group.control-info select:hover:not(:disabled),.control-group.control-info textarea:hover:not(:disabled),.control-group.control-info input[type="color"]:hover:not(:disabled),.control-group.control-info input[type="date"]:hover:not(:disabled),.control-group.control-info input[type="datetime"]:hover:not(:disabled),.control-group.control-info input[type="datetime-local"]:hover:not(:disabled),.control-group.control-info input[type="email"]:hover:not(:disabled),.control-group.control-info input[type="month"]:hover:not(:disabled),.control-group.control-info input[type="number"]:hover:not(:disabled),.control-group.control-info input[type="password"]:hover:not(:disabled),.control-group.control-info input[type="search"]:hover:not(:disabled),.control-group.control-info input[type="tel"]:hover:not(:disabled),.control-group.control-info input[type="text"]:hover:not(:disabled),.control-group.control-info input[type="time"]:hover:not(:disabled),.control-group.control-info input[type="url"]:hover:not(:disabled),.control-group.control-info input[type="week"]:hover:not(:disabled){border-color:#00aeff} +.control-group.control-info select:focus,.control-group.control-info textarea:focus,.control-group.control-info input[type="color"]:focus,.control-group.control-info input[type="date"]:focus,.control-group.control-info input[type="datetime"]:focus,.control-group.control-info input[type="datetime-local"]:focus,.control-group.control-info input[type="email"]:focus,.control-group.control-info input[type="month"]:focus,.control-group.control-info input[type="number"]:focus,.control-group.control-info input[type="password"]:focus,.control-group.control-info input[type="search"]:focus,.control-group.control-info input[type="tel"]:focus,.control-group.control-info input[type="text"]:focus,.control-group.control-info input[type="time"]:focus,.control-group.control-info input[type="url"]:focus,.control-group.control-info input[type="week"]:focus{border-color:#00aeff} +.control-group.control-success .control-label{color:#00a83c} +.control-group.control-success select,.control-group.control-success textarea,.control-group.control-success input[type="color"],.control-group.control-success input[type="date"],.control-group.control-success input[type="datetime"],.control-group.control-success input[type="datetime-local"],.control-group.control-success input[type="email"],.control-group.control-success input[type="month"],.control-group.control-success input[type="number"],.control-group.control-success input[type="password"],.control-group.control-success input[type="search"],.control-group.control-success input[type="tel"],.control-group.control-success input[type="text"],.control-group.control-success input[type="time"],.control-group.control-success input[type="url"],.control-group.control-success input[type="week"]{border-color:#00a83c} +.control-group.control-success select:hover:not(:disabled),.control-group.control-success textarea:hover:not(:disabled),.control-group.control-success input[type="color"]:hover:not(:disabled),.control-group.control-success input[type="date"]:hover:not(:disabled),.control-group.control-success input[type="datetime"]:hover:not(:disabled),.control-group.control-success input[type="datetime-local"]:hover:not(:disabled),.control-group.control-success input[type="email"]:hover:not(:disabled),.control-group.control-success input[type="month"]:hover:not(:disabled),.control-group.control-success input[type="number"]:hover:not(:disabled),.control-group.control-success input[type="password"]:hover:not(:disabled),.control-group.control-success input[type="search"]:hover:not(:disabled),.control-group.control-success input[type="tel"]:hover:not(:disabled),.control-group.control-success input[type="text"]:hover:not(:disabled),.control-group.control-success input[type="time"]:hover:not(:disabled),.control-group.control-success input[type="url"]:hover:not(:disabled),.control-group.control-success input[type="week"]:hover:not(:disabled){border-color:#00a83c} +.control-group.control-success select:focus,.control-group.control-success textarea:focus,.control-group.control-success input[type="color"]:focus,.control-group.control-success input[type="date"]:focus,.control-group.control-success input[type="datetime"]:focus,.control-group.control-success input[type="datetime-local"]:focus,.control-group.control-success input[type="email"]:focus,.control-group.control-success input[type="month"]:focus,.control-group.control-success input[type="number"]:focus,.control-group.control-success input[type="password"]:focus,.control-group.control-success input[type="search"]:focus,.control-group.control-success input[type="tel"]:focus,.control-group.control-success input[type="text"]:focus,.control-group.control-success input[type="time"]:focus,.control-group.control-success input[type="url"]:focus,.control-group.control-success input[type="week"]:focus{border-color:#00a83c} +.control-group.control-warning .control-label{color:#d8ac15} +.control-group.control-warning select,.control-group.control-warning textarea,.control-group.control-warning input[type="color"],.control-group.control-warning input[type="date"],.control-group.control-warning input[type="datetime"],.control-group.control-warning input[type="datetime-local"],.control-group.control-warning input[type="email"],.control-group.control-warning input[type="month"],.control-group.control-warning input[type="number"],.control-group.control-warning input[type="password"],.control-group.control-warning input[type="search"],.control-group.control-warning input[type="tel"],.control-group.control-warning input[type="text"],.control-group.control-warning input[type="time"],.control-group.control-warning input[type="url"],.control-group.control-warning input[type="week"]{border-color:#d8ac15} +.control-group.control-warning select:hover:not(:disabled),.control-group.control-warning textarea:hover:not(:disabled),.control-group.control-warning input[type="color"]:hover:not(:disabled),.control-group.control-warning input[type="date"]:hover:not(:disabled),.control-group.control-warning input[type="datetime"]:hover:not(:disabled),.control-group.control-warning input[type="datetime-local"]:hover:not(:disabled),.control-group.control-warning input[type="email"]:hover:not(:disabled),.control-group.control-warning input[type="month"]:hover:not(:disabled),.control-group.control-warning input[type="number"]:hover:not(:disabled),.control-group.control-warning input[type="password"]:hover:not(:disabled),.control-group.control-warning input[type="search"]:hover:not(:disabled),.control-group.control-warning input[type="tel"]:hover:not(:disabled),.control-group.control-warning input[type="text"]:hover:not(:disabled),.control-group.control-warning input[type="time"]:hover:not(:disabled),.control-group.control-warning input[type="url"]:hover:not(:disabled),.control-group.control-warning input[type="week"]:hover:not(:disabled){border-color:#d8ac15} +.control-group.control-warning select:focus,.control-group.control-warning textarea:focus,.control-group.control-warning input[type="color"]:focus,.control-group.control-warning input[type="date"]:focus,.control-group.control-warning input[type="datetime"]:focus,.control-group.control-warning input[type="datetime-local"]:focus,.control-group.control-warning input[type="email"]:focus,.control-group.control-warning input[type="month"]:focus,.control-group.control-warning input[type="number"]:focus,.control-group.control-warning input[type="password"]:focus,.control-group.control-warning input[type="search"]:focus,.control-group.control-warning input[type="tel"]:focus,.control-group.control-warning input[type="text"]:focus,.control-group.control-warning input[type="time"]:focus,.control-group.control-warning input[type="url"]:focus,.control-group.control-warning input[type="week"]:focus{border-color:#d8ac15} +.control-group.control-error .control-label,.control-group.control-danger .control-label,.control-group.control-important .control-label{color:#cd0606} +.control-group.control-error select,.control-group.control-danger select,.control-group.control-important select,.control-group.control-error textarea,.control-group.control-danger textarea,.control-group.control-important textarea,.control-group.control-error input[type="color"],.control-group.control-danger input[type="color"],.control-group.control-important input[type="color"],.control-group.control-error input[type="date"],.control-group.control-danger input[type="date"],.control-group.control-important input[type="date"],.control-group.control-error input[type="datetime"],.control-group.control-danger input[type="datetime"],.control-group.control-important input[type="datetime"],.control-group.control-error input[type="datetime-local"],.control-group.control-danger input[type="datetime-local"],.control-group.control-important input[type="datetime-local"],.control-group.control-error input[type="email"],.control-group.control-danger input[type="email"],.control-group.control-important input[type="email"],.control-group.control-error input[type="month"],.control-group.control-danger input[type="month"],.control-group.control-important input[type="month"],.control-group.control-error input[type="number"],.control-group.control-danger input[type="number"],.control-group.control-important input[type="number"],.control-group.control-error input[type="password"],.control-group.control-danger input[type="password"],.control-group.control-important input[type="password"],.control-group.control-error input[type="search"],.control-group.control-danger input[type="search"],.control-group.control-important input[type="search"],.control-group.control-error input[type="tel"],.control-group.control-danger input[type="tel"],.control-group.control-important input[type="tel"],.control-group.control-error input[type="text"],.control-group.control-danger input[type="text"],.control-group.control-important input[type="text"],.control-group.control-error input[type="time"],.control-group.control-danger input[type="time"],.control-group.control-important input[type="time"],.control-group.control-error input[type="url"],.control-group.control-danger input[type="url"],.control-group.control-important input[type="url"],.control-group.control-error input[type="week"],.control-group.control-danger input[type="week"],.control-group.control-important input[type="week"]{border-color:#cd0606} +.control-group.control-error select:hover:not(:disabled),.control-group.control-danger select:hover:not(:disabled),.control-group.control-important select:hover:not(:disabled),.control-group.control-error textarea:hover:not(:disabled),.control-group.control-danger textarea:hover:not(:disabled),.control-group.control-important textarea:hover:not(:disabled),.control-group.control-error input[type="color"]:hover:not(:disabled),.control-group.control-danger input[type="color"]:hover:not(:disabled),.control-group.control-important input[type="color"]:hover:not(:disabled),.control-group.control-error input[type="date"]:hover:not(:disabled),.control-group.control-danger input[type="date"]:hover:not(:disabled),.control-group.control-important input[type="date"]:hover:not(:disabled),.control-group.control-error input[type="datetime"]:hover:not(:disabled),.control-group.control-danger input[type="datetime"]:hover:not(:disabled),.control-group.control-important input[type="datetime"]:hover:not(:disabled),.control-group.control-error input[type="datetime-local"]:hover:not(:disabled),.control-group.control-danger input[type="datetime-local"]:hover:not(:disabled),.control-group.control-important input[type="datetime-local"]:hover:not(:disabled),.control-group.control-error input[type="email"]:hover:not(:disabled),.control-group.control-danger input[type="email"]:hover:not(:disabled),.control-group.control-important input[type="email"]:hover:not(:disabled),.control-group.control-error input[type="month"]:hover:not(:disabled),.control-group.control-danger input[type="month"]:hover:not(:disabled),.control-group.control-important input[type="month"]:hover:not(:disabled),.control-group.control-error input[type="number"]:hover:not(:disabled),.control-group.control-danger input[type="number"]:hover:not(:disabled),.control-group.control-important input[type="number"]:hover:not(:disabled),.control-group.control-error input[type="password"]:hover:not(:disabled),.control-group.control-danger input[type="password"]:hover:not(:disabled),.control-group.control-important input[type="password"]:hover:not(:disabled),.control-group.control-error input[type="search"]:hover:not(:disabled),.control-group.control-danger input[type="search"]:hover:not(:disabled),.control-group.control-important input[type="search"]:hover:not(:disabled),.control-group.control-error input[type="tel"]:hover:not(:disabled),.control-group.control-danger input[type="tel"]:hover:not(:disabled),.control-group.control-important input[type="tel"]:hover:not(:disabled),.control-group.control-error input[type="text"]:hover:not(:disabled),.control-group.control-danger input[type="text"]:hover:not(:disabled),.control-group.control-important input[type="text"]:hover:not(:disabled),.control-group.control-error input[type="time"]:hover:not(:disabled),.control-group.control-danger input[type="time"]:hover:not(:disabled),.control-group.control-important input[type="time"]:hover:not(:disabled),.control-group.control-error input[type="url"]:hover:not(:disabled),.control-group.control-danger input[type="url"]:hover:not(:disabled),.control-group.control-important input[type="url"]:hover:not(:disabled),.control-group.control-error input[type="week"]:hover:not(:disabled),.control-group.control-danger input[type="week"]:hover:not(:disabled),.control-group.control-important input[type="week"]:hover:not(:disabled){border-color:#cd0606} +.control-group.control-error select:focus,.control-group.control-danger select:focus,.control-group.control-important select:focus,.control-group.control-error textarea:focus,.control-group.control-danger textarea:focus,.control-group.control-important textarea:focus,.control-group.control-error input[type="color"]:focus,.control-group.control-danger input[type="color"]:focus,.control-group.control-important input[type="color"]:focus,.control-group.control-error input[type="date"]:focus,.control-group.control-danger input[type="date"]:focus,.control-group.control-important input[type="date"]:focus,.control-group.control-error input[type="datetime"]:focus,.control-group.control-danger input[type="datetime"]:focus,.control-group.control-important input[type="datetime"]:focus,.control-group.control-error input[type="datetime-local"]:focus,.control-group.control-danger input[type="datetime-local"]:focus,.control-group.control-important input[type="datetime-local"]:focus,.control-group.control-error input[type="email"]:focus,.control-group.control-danger input[type="email"]:focus,.control-group.control-important input[type="email"]:focus,.control-group.control-error input[type="month"]:focus,.control-group.control-danger input[type="month"]:focus,.control-group.control-important input[type="month"]:focus,.control-group.control-error input[type="number"]:focus,.control-group.control-danger input[type="number"]:focus,.control-group.control-important input[type="number"]:focus,.control-group.control-error input[type="password"]:focus,.control-group.control-danger input[type="password"]:focus,.control-group.control-important input[type="password"]:focus,.control-group.control-error input[type="search"]:focus,.control-group.control-danger input[type="search"]:focus,.control-group.control-important input[type="search"]:focus,.control-group.control-error input[type="tel"]:focus,.control-group.control-danger input[type="tel"]:focus,.control-group.control-important input[type="tel"]:focus,.control-group.control-error input[type="text"]:focus,.control-group.control-danger input[type="text"]:focus,.control-group.control-important input[type="text"]:focus,.control-group.control-error input[type="time"]:focus,.control-group.control-danger input[type="time"]:focus,.control-group.control-important input[type="time"]:focus,.control-group.control-error input[type="url"]:focus,.control-group.control-danger input[type="url"]:focus,.control-group.control-important input[type="url"]:focus,.control-group.control-error input[type="week"]:focus,.control-group.control-danger input[type="week"]:focus,.control-group.control-important input[type="week"]:focus{border-color:#cd0606} +.control-group .checkbox-label:last-of-type,.control-group .radio-label:last-of-type{margin-bottom:0} +.control-label{font-size:12px;font-weight:400;line-height:20px;letter-spacing:.075em;display:block;text-transform:uppercase;color:#fff} +.help-inline,.help-block,.help-icon{color:#fff;line-height:20px;font-size:13px;min-height:20px} +.help-inline:empty,.help-block:empty,.help-icon:empty{display:none} +.help-inline.help-info,.help-block.help-info,.help-icon.help-info{color:#fff} +.help-inline.help-info [class^="icon-"],.help-block.help-info [class^="icon-"],.help-icon.help-info [class^="icon-"],.help-inline.help-info [class*=" icon-"],.help-block.help-info [class*=" icon-"],.help-icon.help-info [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.help-inline.help-success,.help-block.help-success,.help-icon.help-success{color:#fff} +.help-inline.help-success [class^="icon-"],.help-block.help-success [class^="icon-"],.help-icon.help-success [class^="icon-"],.help-inline.help-success [class*=" icon-"],.help-block.help-success [class*=" icon-"],.help-icon.help-success [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png")} +.help-inline.help-warning,.help-block.help-warning,.help-icon.help-warning{color:#fff} +.help-inline.help-warning [class^="icon-"],.help-block.help-warning [class^="icon-"],.help-icon.help-warning [class^="icon-"],.help-inline.help-warning [class*=" icon-"],.help-block.help-warning [class*=" icon-"],.help-icon.help-warning [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png")} +.help-inline.help-error,.help-block.help-error,.help-icon.help-error,.help-inline.help-danger,.help-block.help-danger,.help-icon.help-danger,.help-inline.help-important,.help-block.help-important,.help-icon.help-important{color:#cd0606} +.help-inline{display:inline-block;margin-left:10px;padding-top:10px;vertical-align:top} +.help-block,.help-icon{clear:both;display:block;margin-bottom:10px} +.help-icon:after{content:"";display:block;position:absolute;top:2px;left:0;width:16px;height:16px;overflow:hidden;line-height:20px;vertical-align:top;text-indent:-9999px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-repeat:no-repeat;background-position:-32px -224px} +.help-icon{position:relative;padding-left:20px} +.help-icon.help-info:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-32px -224px} +.help-icon.help-success:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png");background-position:-144px -80px} +.help-icon.help-warning:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png");background-position:-128px -80px} +.help-icon.help-error:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-red.png");background-position:-112px -96px} +.input-append,.input-prepend{margin:3px 0;font-size:0;white-space:nowrap} +.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{font-size:15px} +.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;vertical-align:top;border-radius:0 2px 2px 0} +.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2} +.input-append .add-on,.input-prepend .add-on{display:inline-block;height:34px;min-width:10px;padding:7px;font-size:15px;font-weight:400;line-height:20px;text-align:center;vertical-align:middle;background-color:#808080;border:1px solid #ccc;margin:3px 0;-moz-box-sizing:border-box;box-sizing:border-box} +.input-append .add-on [class^="icon-"],.input-prepend .add-on [class^="icon-"],.input-append .add-on [class*=" icon-"],.input-prepend .add-on [class*=" icon-"]{margin-left:0;margin-right:0} +.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggl,.input-prepend .btn-group>.dropdown-toggl{vertical-align:top;border-radius:0} +.input-append .active,.input-prepend .active{background-color:#5cf847;border-color:#18a006} +.input-prepend .add-on,.input-prepend .btn{margin-right:-1px} +.input-prepend .add-on:first-child,.input-prepend .btn:first-child{border-radius:2px 0 0 2px} +.input-append input,.input-append select,.input-append .uneditable-input{border-radius:2px 0 0 2px} +.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{border-radius:0 2px 2px 0} +.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px} +.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggl{border-radius:0 2px 2px 0} +.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{border-radius:0} +.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{border-radius:0 2px 2px 0} +.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;margin-left:0;border-radius:2px 0 0 2px} +.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;border-radius:0 2px 2px 0} +.input-prepend.input-append .btn-group:first-child{margin-left:0} +input:invalid,input:valid,input:required{box-shadow:inherit} +input:-webkit-autofill{background:#808080;color:#fff} +input::-webkit-color-swatch-wrapper{border:0;padding:5px 0} +input::-webkit-color-swatch{border:1px solid #ccc;padding:0} +input::-webkit-inner-spin-button{-webkit-appearance:none;width:0;overflow:hidden} +input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;width:0;overflow:hidden} +input::-webkit-calendar-picker-indicator{background:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");background-position:-16px -256px;opacity:.3;width:16px;height:16px;padding:0;color:rgba(255,255,255,0);-webkit-transition:opacity,200ms;transition:opacity 200ms} +input:hover::-webkit-calendar-picker-indicator{opacity:.5} +input:focus::-webkit-calendar-picker-indicator{opacity:.5} +input::-webkit-clear-button{-webkit-appearance:none;background:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");background-position:-112px -96px;opacity:.3;width:16px;height:16px} +input:hover::-webkit-clear-button{opacity:.5} +input:focus::-webkit-clear-button{opacity:.5} +input::-webkit-datetime-edit{padding:0} +input::-webkit-datetime-edit-fields-wrapper{background:0} +input::-webkit-datetime-edit-text{color:#fff} +input::-webkit-datetime-edit-year-field,input::-webkit-datetime-edit-month-field,input::-webkit-datetime-edit-week-field,input::-webkit-datetime-edit-day-field,input::-webkit-datetime-edit-hour-field,input::-webkit-datetime-edit-minute-field,input::-webkit-datetime-edit-second-field,input::-webkit-datetime-edit-millisecond-field,input::-webkit-datetime-edit-ampm-field{color:#fff} +input::-webkit-datetime-edit-year-field:focus,input::-webkit-datetime-edit-month-field:focus,input::-webkit-datetime-edit-week-field:focus,input::-webkit-datetime-edit-day-field:focus,input::-webkit-datetime-edit-hour-field:focus,input::-webkit-datetime-edit-minute-field:focus,input::-webkit-datetime-edit-second-field:focus,input::-webkit-datetime-edit-millisecond-field:focus,input::-webkit-datetime-edit-ampm-field:focus{background:#19547c;color:#fff} +input[disabled]::-webkit-datetime-edit-text,input.disabled::-webkit-datetime-edit-text,input[disabled]::-webkit-datetime-edit-year-field,input.disabled::-webkit-datetime-edit-year-field,input[disabled]::-webkit-datetime-edit-month-field,input.disabled::-webkit-datetime-edit-month-field,input[disabled]::-webkit-datetime-edit-week-field,input.disabled::-webkit-datetime-edit-week-field,input[disabled]::-webkit-datetime-edit-day-field,input.disabled::-webkit-datetime-edit-day-field,input[disabled]::-webkit-datetime-edit-hour-field,input.disabled::-webkit-datetime-edit-hour-field,input[disabled]::-webkit-datetime-edit-minute-field,input.disabled::-webkit-datetime-edit-minute-field,input[disabled]::-webkit-datetime-edit-second-field,input.disabled::-webkit-datetime-edit-second-field,input[disabled]::-webkit-datetime-edit-millisecond-field,input.disabled::-webkit-datetime-edit-millisecond-field,input[disabled]::-webkit-datetime-edit-ampm-field,input.disabled::-webkit-datetime-edit-ampm-field{color:#3f3f3f!important} +.js-enabled input[type="checkbox"]:not(.css-input),.js-enabled input[type="radio"]:not(.css-input){width:0;height:0;overflow:hidden;opacity:0!important} +.js-enabled label.checkbox-label:not(.css-label),.js-enabled label.radio-label:not(.css-label){cursor:pointer} +.js-enabled label.checkbox-label:not(.css-label):after,.js-enabled label.radio-label:not(.css-label):after{content:"";display:block;width:20px;height:20px;overflow:hidden;position:absolute;left:0;top:0;cursor:pointer;background:#808080 url("../../images/toolkit/themes/bnet/forms/sprite-18-inputs.png") no-repeat -64px -96px;border:1px solid #ccc;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +.js-enabled label.checkbox-label:not(.css-label).focus:after,.js-enabled label.radio-label:not(.css-label).focus:after{background-color:#808080;border-color:#1e5f99} +.js-enabled label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled label.radio-label:not(.css-label):hover:not(.disabled):after{background-color:#808080;border-color:#ccc} +.js-enabled label.checkbox-label:not(.css-label).disabled:after,.js-enabled label.radio-label:not(.css-label).disabled:after{background-color:#272727!important;border-color:#ccc!important;cursor:default!important} +.js-enabled label.checkbox-label:not(.css-label):after{border-radius:2px} +.js-enabled label.checkbox-label:not(.css-label).checked:after{background-position:0 0} +.js-enabled label.checkbox-label:not(.css-label).checked.disabled:after{background-position:0 -18px!important} +.js-enabled label.radio-label:not(.css-label):after{border-radius:10px} +.js-enabled label.radio-label:not(.css-label).checked:after{background-position:-18px 0} +.js-enabled label.radio-label:not(.css-label).checked.disabled:after{background-position:-18px -18px!important} +.js-enabled label.checkbox-label:not(.css-label):after{border-radius:2px} +.js-enabled label.checkbox-label:not(.css-label).partial:after{background-position:-36px 0} +.js-enabled label.checkbox-label:not(.css-label).partial.disabled:after{background-position:-36px -18px!important} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-info label.radio-label:not(.css-label):after{border-color:#00aeff} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-info label.radio-label:not(.css-label).focus:after{border-color:#00aeff} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-info label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:#00aeff} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label).checked:after{background-position:0 0} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label).partial:after{background-position:-36px 0} +.js-enabled .control-group.control-info label.radio-label:not(.css-label).checked:after{background-position:-18px 0} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-success label.radio-label:not(.css-label):after{border-color:#00a83c} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-success label.radio-label:not(.css-label).focus:after{border-color:#00a83c} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-success label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:#00a83c} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label).checked:after{background-position:0 -72px} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label).partial:after{background-position:-36px -72px} +.js-enabled .control-group.control-success label.radio-label:not(.css-label).checked:after{background-position:-18px -72px} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-warning label.radio-label:not(.css-label):after{border-color:#d8ac15} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-warning label.radio-label:not(.css-label).focus:after{border-color:#d8ac15} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-warning label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:#d8ac15} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label).checked:after{background-position:0 -36px} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label).partial:after{background-position:-36px -36px} +.js-enabled .control-group.control-warning label.radio-label:not(.css-label).checked:after{background-position:-18px -36px} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-error label.radio-label:not(.css-label):after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label):after,.js-enabled .control-group.control-important label.radio-label:not(.css-label):after{border-color:#cd0606} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-error label.radio-label:not(.css-label).focus:after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label).focus:after,.js-enabled .control-group.control-important label.radio-label:not(.css-label).focus:after{border-color:#cd0606} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-error label.radio-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-important label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:#cd0606} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label).checked:after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label).checked:after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label).checked:after{background-position:0 -54px} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label).partial:after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label).partial:after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label).partial:after{background-position:-36px -54px} +.js-enabled .control-group.control-error label.radio-label:not(.css-label).checked:after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label).checked:after,.js-enabled .control-group.control-important label.radio-label:not(.css-label).checked:after{background-position:-18px -54px} +label.checkbox-label.css-label,label.radio-label.css-label{cursor:pointer} +label.checkbox-label.css-label>input[type="checkbox"]:not(.css-input),label.radio-label.css-label>input[type="checkbox"]:not(.css-input),label.checkbox-label.css-label>input[type="radio"]:not(.css-input),label.radio-label.css-label>input[type="radio"]:not(.css-input){width:0;height:0;overflow:hidden;opacity:0} +label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]+.input-checkbox{border-radius:2px} +label.checkbox-label.css-label>input[type="radio"]+.input-radio,label.radio-label.css-label>input[type="radio"]+.input-radio{border-radius:10px} +label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]+.input-checkbox,label.checkbox-label.css-label>input[type="radio"]+.input-radio,label.radio-label.css-label>input[type="radio"]+.input-radio{display:block;width:20px;height:20px;overflow:hidden;position:absolute;left:0;top:0;cursor:pointer;background:#808080 url("../../images/toolkit/themes/bnet/forms/sprite-18-inputs.png") no-repeat -64px -96px;border:1px solid #ccc;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:focus+.input-checkbox,label.checkbox-label.css-label>input[type="radio"]:focus+.input-radio,label.radio-label.css-label>input[type="radio"]:focus+.input-radio{background-color:#808080;border-color:#1e5f99} +label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,label.radio-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,label.checkbox-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio,label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{background-color:#808080;border-color:#ccc} +label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 0} +label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox.partial,label.radio-label.css-label>input[type="checkbox"]:checked+.input-checkbox.partial{background-position:-36px 0!important} +label.checkbox-label.css-label>input[type="radio"]:checked+.input-radio,label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px 0} +label.checkbox-label.css-label>input[type="checkbox"]:disabled+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:disabled+.input-checkbox,label.checkbox-label.css-label>input[type="radio"]:disabled+.input-radio,label.radio-label.css-label>input[type="radio"]:disabled+.input-radio{background-color:#272727!important;border-color:#ccc!important;cursor:default!important} +label.checkbox-label.css-label>input[type="checkbox"]:checked:disabled+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:checked:disabled+.input-checkbox{background-position:0 -18px!important} +label.checkbox-label.css-label>input[type="checkbox"]:disabled.partial+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:disabled.partial+.input-checkbox{background-position:-36px -18px!important} +label.checkbox-label.css-label>input[type="radio"]:checked:disabled+.input-radio,label.radio-label.css-label>input[type="radio"]:checked:disabled+.input-radio{background-position:-18px -18px!important} +.js-enabled .control-group.info label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.info label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:#00aeff} +.js-enabled .control-group.info label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.info label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#00aeff} +.js-enabled .control-group.info label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.info label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:#00aeff} +.js-enabled .control-group.info label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 0} +.js-enabled .control-group.info label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px 0} +.js-enabled .control-group.success label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.success label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:#00a83c} +.js-enabled .control-group.success label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.success label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#00a83c} +.js-enabled .control-group.success label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.success label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:#00a83c} +.js-enabled .control-group.success label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 -72px} +.js-enabled .control-group.success label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px -72px} +.js-enabled .control-group.warning label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.warning label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:#d8ac15} +.js-enabled .control-group.warning label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.warning label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#d8ac15} +.js-enabled .control-group.warning label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.warning label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:#d8ac15} +.js-enabled .control-group.warning label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 -36px} +.js-enabled .control-group.warning label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px -36px} +.js-enabled .control-group.error label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.error label.radio-label.css-label>input[type="radio"]+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label>input[type="radio"]+.input-radio,.js-enabled .control-group.important label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:#cd0606} +.js-enabled .control-group.error label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.error label.radio-label.css-label>input[type="radio"]:focus+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label>input[type="radio"]:focus+.input-radio,.js-enabled .control-group.important label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#cd0606} +.js-enabled .control-group.error label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.error label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio,.js-enabled .control-group.important label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:#cd0606} +.js-enabled .control-group.error label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 -54px} +.js-enabled .control-group.error label.radio-label.css-label>input[type="radio"]:checked+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label>input[type="radio"]:checked+.input-radio,.js-enabled .control-group.important label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px -54px} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.js-enabled label.checkbox-label:not(.css-label):after,.js-enabled label.radio-label:not(.css-label):after{background:#808080 url("../../images/toolkit/themes/bnet/forms/sprite-36-inputs.png") no-repeat -64px -96px;background-size:54px 108px} +} +.js-enabled .select-box{cursor:default;position:relative;display:inline-block;height:34px;padding:0 22px 0 0;text-indent:10px;margin-top:3px;margin-bottom:3px;font-size:15px;line-height:20px;color:#fff;border:1px solid #ccc;border-radius:2px;background:#808080;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:background-color .2s,border-color .2s,box-shadow .2s;transition:background-color .2s,border-color .2s,box-shadow .2s} +.js-enabled .select-box .arrow{width:22px;height:100%;overflow:hidden;border-top-right-radius:2px;border-bottom-right-radius:2px;position:absolute;top:0;right:0;background:url("../../images/toolkit/themes/bnet/forms/sprite-22-select.png") no-repeat 0 0} +.js-enabled .select-box.input-block{width:100%} +.js-enabled .select-box:hover{border-color:#ccc;background:#808080} +.js-enabled .select-box:hover>.current{color:#fff} +.js-enabled .select-box:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.js-enabled .select-box:focus>.current{color:#fff} +.js-enabled .select-box.expanded{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#1e5f99;background:#808080} +.js-enabled .select-box.expanded .options{z-index:1000;display:block} +.js-enabled .select-box>.current{height:32px;width:100%;line-height:32px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.js-enabled .select-box>.current.placeholder{color:#fff} +.js-enabled .text-indent [class^="icon-"],.js-enabled .select-box>.current [class*=" icon-"]{margin-top:8px;margin-right:7px;margin-left:-3px} +.js-enabled .select-box>.current [class^="icon-payment-"],.js-enabled .select-box>.current [class*=" icon-payment-"]{margin-right:8px;margin-left:-2px} +.js-enabled .select-box .options{font-size:13px;line-height:20px;border:solid #3d434f;border-width:0 1px 1px 1px;position:absolute;display:none;top:33px;left:-1px;right:-1px;max-height:200px;background-color:#272e3b;overflow:hidden;border-bottom-left-radius:2px;border-bottom-right-radius:2px;z-index:0} +.js-enabled .select-box .options .option{text-shadow:none;line-height:26px;height:26px;text-indent:10px;color:#fff;width:100%;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.js-enabled .select-box .options .option:hover{color:#fff;background-color:#ccc} +.js-enabled .select-box .options .option.selected,.js-enabled .select-box .options .option.selected:hover{color:#fff;background-color:#0069e1} +.js-enabled .select-box .options .option.placeholder,.js-enabled .select-box .options .option.placeholder:hover{color:#fff} +.js-enabled .select-box .options .option-group{border:solid #3d434f;border-width:1px 0;margin:-1px 0} +.js-enabled .select-box .options .option-group .option-group-label{text-shadow:none;font-size:12px;line-height:20px;height:20px;text-indent:10px;text-transform:uppercase;color:#fff;width:100%;display:block;padding-top:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.js-enabled .select-box .options .option-group:first-of-type{border-top-color:transparent} +.js-enabled .select-box .options .option-group:last-of-type{border-bottom-color:transparent} +.js-enabled .select-box .options [class^="icon-"],.js-enabled .select-box .options [class*=" icon-"]{margin-top:4px;margin-right:7px;margin-left:-3px} +.js-enabled .select-box .options [class^="icon-payment-"],.js-enabled .select-box .options [class*=" icon-payment-"]{margin-right:8px;margin-left:-2px} +.js-enabled .select-box .options>.option:last-of-type{border-bottom-left-radius:2px;border-bottom-right-radius:2px} +.js-enabled .select-box.disabled,.js-enabled .select-box.disabled:focus,.js-enabled .select-box.disabled:hover{background-color:#272727!important;border-color:#ccc!important;cursor:default!important} +.js-enabled .select-box.disabled .current{color:#3f3f3f!important} +.js-enabled .select-box.disabled .current [class^="icon-"]:not([class*="icon-payment-"]),.js-enabled .select-box.disabled .current [class*=" icon-"]:not([class*="icon-payment-"]){background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.15!important} +.js-enabled .select-box.disabled .current [class^="icon-payment-"],.js-enabled .select-box.disabled .current [class*=" icon-payment-"]{opacity:.15!important} +.js-enabled .select-box.disabled .arrow{opacity:.15!important;background-position:0 -32px!important} +.js-enabled .control-group.control-info .select-box{border-color:#00aeff} +.js-enabled .control-group.control-info .select-box:focus{border-color:#00aeff} +.js-enabled .control-group.control-info .select-box:hover{border-color:#00aeff} +.js-enabled .control-group.control-success .select-box{border-color:#00a83c} +.js-enabled .control-group.control-success .select-box:focus{border-color:#00a83c} +.js-enabled .control-group.control-success .select-box:hover{border-color:#00a83c} +.js-enabled .control-group.control-warning .select-box{border-color:#d8ac15} +.js-enabled .control-group.control-warning .select-box:focus{border-color:#d8ac15} +.js-enabled .control-group.control-warning .select-box:hover{border-color:#d8ac15} +.js-enabled .control-group.control-error .select-box,.js-enabled .control-group.control-danger .select-box,.js-enabled .control-group.control-important .select-box{border-color:#cd0606} +.js-enabled .control-group.control-error .select-box:focus,.js-enabled .control-group.control-danger .select-box:focus,.js-enabled .control-group.control-important .select-box:focus{border-color:#cd0606} +.js-enabled .control-group.control-error .select-box:hover,.js-enabled .control-group.control-danger .select-box:hover,.js-enabled .control-group.control-important .select-box:hover{border-color:#cd0606} +.js-enabled .select-box .scrollbar-content{overflow:hidden} +.js-enabled .select-box .scrollbar-content .overview{position:relative} +.js-enabled .form-search .select-box,.js-enabled .form-inline .select-box{display:inline-block;vertical-align:middle} +.js-enabled .input-append,.js-enabled .input-prepend{margin:3px 0;font-size:0;white-space:nowrap} +.js-enabled .input-append .select-box,.js-enabled .input-prepend .select-box{font-size:15px} +.js-enabled .input-append .select-box,.js-enabled .input-prepend .select-box{position:relative;margin-bottom:0;vertical-align:top;font-size:15px;border-radius:0 2px 2px 0} +.js-enabled .input-append .select-box:focus,.js-enabled .input-prepend .select-box:focus{z-index:2} +.js-enabled .input-append .select-box{border-radius:2px 0 0 2px} +.js-enabled .input-append .select-box+.btn-group .btn:last-child{border-radius:0 2px 2px 0} +.js-enabled .input-prepend.input-append .select-box{border-radius:0} +.js-enabled .input-prepend.input-append .select-box+.btn-group .btn{border-radius:0 2px 2px 0} +.js-enabled .form-horizontal .select-box+.help-block{margin-top:10px} +.js-enabled .select-box.input-large{margin:5px 0;padding:0;font-size:17px;line-height:20px;height:40px} +.js-enabled .select-box.input-large.active,.js-enabled .select-box.input-large:active{padding:1 -1 -1 1} +.js-enabled .select-box.input-large.disabled:active,.js-enabled .select-box.input-large[disabled]:active,.js-enabled .select-box.input-large.disabled.active,.js-enabled .select-box.input-large[disabled].active{padding:0 0!important} +.js-enabled .select-box.input-large .options{top:38px} +.js-enabled .select-box.input-large .options .option{height:30px;line-height:30px} +.js-enabled .select-box.input-large>.current{height:40px;line-height:40px} +.js-enabled .select-box.input-large>.arrow{background-position:0 2px} +.control-group .select2-container{width:100%!important} +.select2-container{-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle} +.select2-container .select2-selection{-webkit-transition:background-color .2s,border-color .2s;transition:background-color .2s,border-color .2s} +.select2-container .select2-selection--single{-moz-box-sizing:border-box;box-sizing:border-box;cursor:default;display:block;height:34px;user-select:none;-webkit-user-select:none} +.select2-container .select2-selection--single .select2-selection__rendered{display:block;text-indent:10px;margin-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px} +.select2-container .select2-selection--multiple{-moz-box-sizing:border-box;box-sizing:border-box;cursor:default;display:block;min-height:34px;user-select:none;-webkit-user-select:none} +.select2-container .select2-selection--multiple .select2-selection__rendered{overflow:hidden;margin-right:20px;text-overflow:ellipsis;white-space:nowrap} +.select2-container .select2-search--inline{float:left;height:34px;padding-left:0} +.select2-container .select2-search--inline .select2-search__field{margin:0;float:left;-moz-box-sizing:border-box;box-sizing:border-box;text-indent:10px;border:0;font-size:13px;padding:0} +.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none} +.select2-dropdown{background-color:#272e3b;border:1px solid #ccc;border-radius:2px;-moz-box-sizing:border-box;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051} +.select2-results{display:block} +.select2-results__options{list-style:none;margin:0;padding:0} +.select2-results__options[aria-multiselectable] .select2-results__option .option-checkbox-label{display:block;float:left;width:18px;height:18px;border:1px solid #ccc;border-radius:2px;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 4px 0 0;background:#808080 url("../../images/toolkit/themes/bnet/forms/sprite-18-inputs.png") no-repeat -64px -96px;background-size:54px 108px} +.select2-results__options[aria-multiselectable] .select2-results__option[aria-selected=true] .option-checkbox-label{background-position:-1px -1px} +.select2-results__option{user-select:none;-webkit-user-select:none;margin:0;padding:0 0 0 10px;-webkit-transition:background-color .2s;transition:background-color .2s;word-break:break-all} +.select2-results__option[aria-selected]{cursor:default} +.select2-container--open .select2-dropdown{left:0} +.select2-container--open .select2-dropdown--above{border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0} +.select2-container--open .select2-dropdown--below{border-top:0;border-top-left-radius:0;border-top-right-radius:0} +.select2-search--dropdown{display:block;padding:7px 10px} +.select2-search--dropdown .select2-search__field{width:100%;position:relative;-moz-box-sizing:border-box;box-sizing:border-box} +.select2-search--dropdown .select2-search__field:after{content:" ";position:absolute;top:19px;right:16px;width:16px;height:16px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-80px -16px} +.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none} +.select2-search--dropdown.select2-search--hide{display:none} +.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;z-index:99;background-color:#272e3b;opacity:0} +.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important} +.select2-container--default.select2-container--focus .select2-selection{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-selection--single{background-color:#808080;border:1px solid #ccc;border-radius:2px} +.select2-container--default .select2-selection--single:hover{border-color:#ccc;background:#808080} +.select2-container--default .select2-selection--single:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-selection--single .select2-selection__rendered{color:#fff;line-height:34px} +.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold} +.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#fff} +.select2-container--default .select2-selection--single .select2-selection__arrow{height:32px;position:absolute;top:1px;right:1px;width:20px} +.select2-container--default .select2-selection--single .select2-selection__arrow b{position:absolute;top:0;left:-2px;width:20px;height:100%;overflow:hidden;background:url("../../images/toolkit/themes/bnet/forms/sprite-22-select.png") no-repeat 0 0} +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left} +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto} +.select2-container--default.select2-container--disabled .select2-selection--single{border-color:#ccc!important;background-color:#272727!important;cursor:default} +.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__rendered{color:#3f3f3f!important} +.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none} +.select2-container--default .select2-selection--multiple{background-color:#808080;border:1px solid #ccc;border-radius:2px} +.select2-container--default .select2-selection--multiple:hover{border-color:#ccc;background:#808080} +.select2-container--default .select2-selection--multiple:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-selection--multiple .select2-selection__rendered{-moz-box-sizing:border-box;box-sizing:border-box;list-style:none;margin:0;padding:0;width:100%} +.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#fff;float:left} +.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;text-indent:10px} +.select2-container--default .select2-selection--multiple .select2-selection__choice{float:left;text-indent:5px;line-height:30px;margin:0;padding:0} +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#fff;cursor:pointer;display:inline-block;padding-right:4px;font-size:13px} +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right} +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto} +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto} +.select2-container--default.select2-container--focus .select2-selection--multiple{border:1px solid #1e5f99;outline:0} +.select2-container--default.select2-container--disabled .select2-selection--multiple{border-color:#ccc!important;background-color:#272727!important;cursor:default} +.select2-container--default.select2-container--disabled .select2-selection--multiple .select2-selection__rendered{color:#3f3f3f!important} +.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__choice__remove{display:none} +.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0} +.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0} +.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #ccc} +.select2-container--default .select2-search--dropdown .select2-search__field:hover{border-color:#ccc} +.select2-container--default .select2-search--dropdown .select2-search__field:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:0;outline:0;box-shadow:none} +.select2-container--default .select2-results>.select2-results__options{font-size:13px;overflow-y:auto;max-height:200px} +.select2-container--default .select2-results__option{line-height:15px;padding:4px 0 7px 10px} +.select2-container--default .select2-results__option[role=group]{padding:0} +.select2-container--default .select2-results__option[aria-disabled=true]{color:#3f3f3f} +.select2-container--default .select2-results__option[aria-selected=true]{color:#fff;background-color:#0069e1} +.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#ccc} +.select2-container--default .select2-results__option--highlighted[aria-selected][aria-selected=false]{color:#fff} +.select2-container--default .select2-results__group{text-shadow:none;font-size:12px;line-height:25px;height:25px;text-indent:10px;text-transform:uppercase;color:#fff;width:100%;display:block;padding-top:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.multiselect.select-box{margin:0!important;width:100%;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.multiselect.select-box:focus{outline:0} +.multiselect-container{position:absolute;left:0;border-color:#3d434f;border-radius:0 0 2px 2px;border-top:0;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:none;list-style-type:none;margin:0;padding:0;width:100%} +.multiselect-container>li{padding:0;margin:0;line-height:20px} +.multiselect-container>li.active,.multiselect-container>li.active:hover{color:#fff;background-color:#0069e1} +.multiselect-container>li.active,.multiselect-container>li.active:hover{color:#fff} +.multiselect-container>li.multiselect-all{border-bottom:1px solid #3d434f} +.multiselect-container>li.multiselect-all.active{background-color:transparent!important} +.multiselect-container>li.filter{padding:7px 10px 3px} +.multiselect-container>li.filter .input-group .multiselect-search{font-size:13px;width:100%} +.multiselect-container>li.filter .input-group:not(.filtered):after{content:"";display:inline-block;position:absolute;top:19px;right:16px;width:16px;height:16px;line-height:16px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-80px -16px} +.multiselect-container>li.filter .input-group .multiselect-clear-filter{display:none;cursor:pointer;position:absolute;top:11px;right:11px;width:32px;height:32px;border:0;background-color:transparent} +.multiselect-container>li.filter .input-group .multiselect-clear-filter .icon-remove{top:5px;left:10px} +.multiselect-container>li.filter .input-group.filtered .multiselect-clear-filter{display:inline-block} +.multiselect-container>li>a.multiselect-all label{-webkit-transition:background-color .2s,border-color .2s,box-shadow .2s;transition:background-color .2s,border-color .2s,box-shadow .2s} +.multiselect-container>li>label.multiselect-group{text-shadow:none;font-size:12px;line-height:20px;height:20px;text-indent:10px;text-transform:uppercase;color:#fff;width:100%;display:block;padding-top:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.multiselect-container>li>a{padding:3px 0;cursor:default} +.multiselect-container>li>a>label{margin:0;height:100%;cursor:pointer;font-weight:400;padding:0 20px 3px 30px;font-size:13px;left:10px;top:2px} +.multiselect-container>li>a>label.radio,.multiselect-container>li>a>label.checkbox{margin:0} +.multiselect-container>li>a>label>input[type="checkbox"]{margin-bottom:5px;width:20px!important} +.multiselect-container>li>a>label.checkbox-label:not(.css-label),.multiselect-container>li>a>label.radio-label:not(.css-label){cursor:default!important} +.btn-group-multiselect{position:relative} +.hero-unit{padding:40px;margin-bottom:40px;color:inherit;background-color:#0e0e0e;border-radius:2px} +.hero-unit:before,.hero-unit:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.hero-unit:after{clear:both} +.hero-unit p{font-size:17px;font-weight:300;line-height:25px} +.hero-unit li{font-size:17px;font-weight:300;line-height:20px;margin-bottom:25px} +.hero-unit p,.hero-unit ul,.hero-unit ol{margin-bottom:40px} +.hero-unit p:last-child,.hero-unit ul:last-child,.hero-unit ol:last-child{margin-bottom:0} +.hero-unit .btn{float:left} +.hero-unit .btn+.btn{margin-left:10px} +.label,.badge{height:20px;color:#fff;background:#272e3b;margin:-2px 0;border:1px solid #363d49;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color 200ms,background-color 200ms;transition:border-color 200ms,background-color 200ms} +.label{font-size:15px;line-height:18px;padding:0 10px;border-radius:2px} +.badge{font-size:13px;line-height:18px;min-width:20px;min-height:20px;padding:0 4px;border-radius:10px} +.label[href]:focus,.badge[href]:focus,.label[href]:hover,.badge[href]:hover{color:#fff;background-color:#3b465a} +.label-important,.badge-important,.label-danger,.badge-danger,.label-error,.badge-error{background-color:#360e10;border-color:#551e21} +.label-important[href]:focus,.badge-important[href]:focus,.label-important[href]:hover,.badge-important[href]:hover{background-color:#5f181c} +.label-warning,.badge-warning{background-color:#5d3200;border-color:#834b00} +.label-warning[href]:focus,.badge-warning[href]:focus,.label-warning[href]:hover,.badge-warning[href]:hover{background-color:#904d00} +.label-success,.badge-success{background-color:#132a14;border-color:#24392a} +.label-success[href]:focus,.badge-success[href]:focus,.label-success[href]:hover,.badge-success[href]:hover{background-color:#234d25} +.label-info,.badge-info{background-color:#272e3b;border-color:#363d49} +.label-info[href]:focus,.badge-info[href]:focus,.label-info[href]:hover,.badge-info[href]:hover{background-color:#3b465a} +.label-inverse,.badge-inverse{color:#fff;background-color:#ccc;border-color:#ccc} +.label-inverse[href]:focus,.badge-inverse[href]:focus,.label-inverse[href]:hover,.badge-inverse[href]:hover{background-color:#e6e6e6} +.btn .label,.btn .badge{position:relative;top:-1px} +.btn-mini .label,.btn-mini .badge{top:0} +.acb-rating{font-size:12px;line-height:15px;color:#fff} +.acb-rating a{color:#fff} +.acb-logo{display:block;float:left} +.acb-descriptor,.acb-disclaimer{display:block;margin-left:75px} +.bbfc-rating{font-size:12px;line-height:15px;color:#fff;float:left} +.bbfc-rating a{float:left;color:#fff} +.bbfc-logo{display:block} +.csrr-rating{font-size:12px;line-height:15px;color:#fff} +.csrr-rating a{display:inline-block;color:#fff} +.csrr-logo{display:block} +.dejus-rating{font-size:12px;line-height:15px;color:#fff} +.dejus-rating a{color:#fff} +.dejus-logo{display:block;float:left} +.dejus-descriptor{display:block;margin-left:75px} +.dejus-provisional{text-transform:uppercase} +.esrb-rating{font-size:12px;line-height:15px;color:#fff} +.esrb-rating a{color:#fff} +.esrb-logo{display:block;float:left} +.esrb-descriptor,.esrb-disclaimer{display:block;margin-left:80px;-moz-transition:color .2s;-webkit-transition:color .2s;transition:color .2s} +.esrb-disclaimer{display:block;margin-left:80px} +.esrb-descriptor-label{-webkit-transition:color .2s;transition:color .2s} +.esrb-descriptor-label:hover{color:#fff;cursor:default} +.fpb-rating{font-size:12px;line-height:15px;color:#fff} +.fpb-rating a{color:#fff} +.fpb-logo{display:block;float:left} +.fpb-descriptor{display:block;margin-left:75px} +.grb-rating{font-size:12px;line-height:15px;color:#fff} +.grb-rating a{color:#fff} +.grb-rating+.grb-rating{clear:right} +.grb-logo,.grb-descriptor-image{display:block;float:left;margin-right:5px} +.grb-descriptor{display:block;margin-left:75px} +.nzoflc-rating{font-size:12px;line-height:15px;color:#fff} +.nzoflc-rating a{color:#fff} +.nzoflc-logo{display:block;float:left} +.nzoflc-descriptor{display:block;margin-left:75px} +.pegi-rating{font-size:12px;line-height:15px;color:#fff} +.pegi-rating a{color:#fff} +.pegi-logo,.pegi-descriptor-image{display:block;float:left;margin-right:5px} +.pegi-descriptor{display:block;margin-left:70px} +.pegi-descriptor-label{-webkit-transition:color .2s;transition:color .2s} +.pegi-descriptor-label:hover{color:#fff;cursor:default} +.pegi-provisional{padding:5px 5px 5px 0;font-size:10px;text-align:left;text-transform:uppercase;width:100%;clear:left} +.usk-rating{font-size:12px;line-height:15px;color:#fff} +.usk-rating a{display:inline-block;color:#fff} +.usk-logo{display:block} +a{color:#00aeff;-webkit-transition:color,0.2s;transition:color .2s} +a:focus,a:hover{color:#fff} +a.inverse{color:#fff} +a.inverse:focus,a.inverse:hover{color:#fff} +.logo{width:300px;height:70px;text-indent:-9999px;background:url("../../images/toolkit/defaults/logos/bnet/default.png") -5px 0;margin:0 auto} +:lang(zh-CN) .logo{background:url("../../images/toolkit/defaults/logos/bnet/china-default.png")} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.logo{background:url("../../images/toolkit/defaults/logos/bnet/default-2x.png");background-size:300px 70px} +:lang(zh-CN) .logo{background:url("../../images/toolkit/defaults/logos/bnet/china-default-2x.png");background-size:300px 70px} +} +.media{padding:20px 0;border:solid #272727;border-width:1px 0} +.media.blizzard{background-color:#004288} +.media+.media{border-top-width:0} +.media .img{margin-right:20px;width:82px;height:82px;padding:6px;overflow:hidden;position:relative;background-image:url("../../images/toolkit/themes/bnet/media/media-org.png")} +.media .img:after{content:"";position:absolute;top:6px;left:6px;z-index:10;display:block;width:82px;height:82px;box-shadow:inset 0 0 0 1px rgba(0,0,0,0.7),inset 0 0 0 2px rgba(255,255,255,0.1)} +.media.blizzard .img{background-position:-94px 0;padding-bottom:84px} +.media .img img{width:82px;height:82px;background-color:#000} +.media .p-author{margin-bottom:5px} +.media .p-name{font-size:17px;line-height:20px;color:#82c5ff} +.media .p-role{font-weight:400;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;margin-left:.5em} +.media.blizzard .p-role{color:#fff} +.media.vip .p-role{color:#18a006} +.media .bd p,.media .bd ul,.media .bd ol{margin-bottom:20px} +.media.blizzard .bd{color:#00aeff} +.media.vip .bd{color:#18a006} +.media .dt-published{font-size:13px;line-height:20px} +.modal-backdrop{z-index:1040} +.modal-backdrop,.modal-backdrop.fade.in{opacity:.8} +.modal{padding-top:10px;position:fixed;top:10%;left:50%;z-index:1050;overflow:visible;width:560px;margin-left:-280px;border-style:solid;border-width:1px;border-color:#000;box-shadow:0 5px 10px rgba(0,0,0,.75),inset 0 0 0 1px rgba(255,255,255,.07);background:#1d222c;background-repeat:no-repeat;background-size:contain;background-position:center bottom,center top,center -100px;background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-webkit-linear-gradient(top,#263145 0,#1d222c 70%),-webkit-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-moz-linear-gradient(top,#263145 0,#1d222c 70%),-moz-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),linear-gradient(top,#263145 0,#1d222c 70%),radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-clip:padding-box;outline:0} +.modal .close{z-index:1051;position:absolute;margin:0;top:5px;right:7px} +.modal .close [class^="icon-"],.modal .close [class*=" icon-"]{display:block;margin:0} +.modal:before{content:"";position:absolute;top:1px;left:75px;right:75px;display:block;height:0;border-top:10px solid rgba(255,255,255,0.14);border-left:10px solid transparent;border-right:10px solid transparent} +.modal:after{content:"";position:absolute;top:1px;left:76px;right:76px;display:block;height:0;border-top:9px solid rgba(32,39,52,0.5);border-left:9px solid transparent;border-right:9px solid transparent} +.modal-header{padding:19px 20px 0 20px} +.modal-header h1,.modal-header h2,.modal-header h3,.modal-header h4,.modal-header h5,.modal-header h6,.modal-header .heading-1{margin-bottom:0;font-size:23px;line-height:30px} +.modal-error{border:1px solid #313845;padding:10px 20px;background:#270a0c;color:#fe0000;font-size:13px;line-height:20px;position:relative;-moz-box-sizing:border-box;box-sizing:border-box} +.modal-error:before{content:"";border-top:7px solid #313845;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);display:block;position:absolute;left:273px;bottom:-7px} +.modal-error:after{content:"";border-top:6px solid #270a0c;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);display:block;position:absolute;left:274px;bottom:-6px} +.modal-error p{margin-bottom:15px} +.modal-error p:last-child{margin-bottom:0} +.modal-body{position:relative;overflow:visible;max-height:400px;padding:20px;font-size:13px;line-height:20px} +.modal-body h1,.modal-body h2,.modal-body h3,.modal-body h4,.modal-body h5,.modal-body h6,.modal-body .heading-1,.modal-body .heading-2{margin-bottom:20px;font-size:17px;line-height:20px} +.modal-body p,.modal-body ul,.modal-body ol,.modal-body dl{font-size:13px;line-height:20px;margin-bottom:20px} +.modal-body p:last-child,.modal-body ul:last-child,.modal-body ol:last-child,.modal-body dl:last-child{margin:0} +.modal-body .modal-actions:before,.modal-body .modal-actions:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.modal-body .modal-actions:after{clear:both} +.modal-body .modal-actions .btn{margin-bottom:0} +.modal-body .modal-actions .btn+.btn{margin-left:10px} +.modal-body .modal-actions .btn-group .btn+.btn{margin-left:-1px} +.modal-body .modal-actions .btn-block+.btn-block{margin-left:0} +.modal-body .modal-actions{margin-top:30px} +.modal-body .modal-actions:only-child{margin-top:0} +.modal-body p+.modal-actions,.modal-body ul+.modal-actions,.modal-body ol+.modal-actions,.modal-body dl+.modal-actions{margin-top:20px} +.modal-scrollable{height:400px;overflow:hidden} +.modal-scrollable .scrollbar{top:20px} +.modal-scrollable .scrollbar .thumb{padding-top:0;padding-bottom:0} +.modal-form{margin-bottom:0} +.modal-footer{color:#fff;background:#171b23;padding:19px 20px 20px;margin:1px;border-top:1px solid #2d323b;font-size:13px;line-height:20px} +.modal-footer h1,.modal-footer h2,.modal-footer h3,.modal-footer h4,.modal-footer h5,.modal-footer h6,.modal-footer .heading-1,.modal-footer .heading-2,.modal-footer .heading-3{margin-bottom:0;font-size:15px;line-height:20px} +.modal-footer p,.modal-footer ul,.modal-footer ol,.modal-footer dl{font-size:13px;line-height:20px;margin-bottom:20px} +.modal-footer p:last-child,.modal-footer ul:last-child,.modal-footer ol:last-child,.modal-footer dl:last-child{margin-bottom:0} +.nav>li{font-size:13px;line-height:20px} +.navbar:not(.header) .nav>li{font-size:13px;line-height:20px;margin:0 20px 0 0} +.navbar:not(.header) .nav>li.pull-right{margin:0 0 0 20px} +.navbar:not(.header) .nav>li>a{color:#fff} +.navbar:not(.header) .nav>li>a:hover,.navbar:not(.header) .nav>li>a:focus{color:#fff} +.navbar:not(.header) .nav>li.disabled>a{color:#fff} +.navbar:not(.header) .nav>li.active>a{color:#fff} +.navbar.header .nav{height:30px;padding:25px 0} +.navbar.header .nav>li{font-weight:300;font-size:23px;line-height:30px;margin:0 40px 0 0} +.navbar.header .nav>li>a{color:#fff} +.navbar.header .nav>li>a:hover,.navbar.header .nav>li>a:focus{color:#fff} +.navbar.header .nav>li.disabled>a{color:#fff} +.navbar.header .nav>li.active>a{color:#fff;text-shadow:0 0 10px #ccc,0 0 10px #ccc} +.nav-list>li{margin:0 0 10px 0} +.nav-list>li>a{color:#fff} +.nav-list>li>a:hover,.nav-list>li>a:focus{color:#fff} +.nav-list>li.disabled>a{color:#fff} +.nav-list>li.active>a{color:#fff} +.nav-list>li:last-child{margin-bottom:40px} +.nav-list.icons>li:not(.nav-header){padding-left:30px} +.nav-list.icons>li:not(.nav-header) [class^="icon-"]:not(.icon-external-link),.nav-list.icons>li:not(.nav-header) [class*="icon-"]:not(.icon-external-link){left:5px} +.nav-list.icons>li:not(.nav-header).disabled [class^="icon-"]:not(.icon-external-link),.nav-list.icons>li:not(.nav-header).disabled [class*="icon-"]:not(.icon-external-link){background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.15} +.nav .nav-header{margin:0 0 10px 0;padding:0;font-size:12px;font-weight:400;line-height:20px;color:#fff;text-transform:uppercase;letter-spacing:.075em} +.nav.nav-tabs:after{border-bottom:3px solid #272727;height:30px} +.nav-tabs>li{border-bottom:3px solid #272727;padding:0} +.nav-tabs>li>a{padding-right:30px;padding-left:30px;color:#fff;background:0;padding-top:5px;padding-bottom:5px;margin-bottom:-2px;border:1px solid transparent} +.nav-tabs>li>a:focus,.nav-tabs>li>a:hover{color:#fff;background:0} +.nav-tabs>li.active>a{color:#fff;background:0;border:1px solid #272727;border-bottom:0;padding-bottom:7px} +.nav-tabs>li.disabled>a{color:#fff;background:0} +.nav-pills>li>a{padding:5px 30px;margin:0 10px 0 0;background-color:#d9d9d9;border:1px solid #272727;border-radius:2px;color:#fff} +.nav-pills>li>a:focus,.nav-pills>li>a:hover{background:#bfbfbf;color:#fff;border-color:#303030} +.nav-pills>li>a:active{color:#fff;background-color:#d9d9d9;border-color:#272727;padding:6px 29px 4px 31px;box-shadow:inset 1.5px 1.5px 3px #b3b3b3} +.nav-pills>li.active>a{color:#fff;background:#ccc;border-color:#272727} +.nav-pills>li.active>a:active{padding:5px 30px;box-shadow:none} +.nav-pills>li.disabled>a{color:#fff;background:#e6e6e6;border-color:#272727} +.nav-pills>li.disabled>a:active{padding:5px 30px;box-shadow:none} +.tab-content,.pill-content{border:1px solid #272727;margin-bottom:40px;padding:20px} +.pill-content{margin-top:10px} +.tab-content{border-width:0 1px 1px} +.tab-content>.active p,.pill-content>.active p,.tab-content>.active ul,.pill-content>.active ul,.tab-content>.active ol,.pill-content>.active ol,.tab-content>.active dl,.pill-content>.active dl{margin-bottom:20px} +.tab-content>.active p:last-child,.pill-content>.active p:last-child,.tab-content>.active ul:last-child,.pill-content>.active ul:last-child,.tab-content>.active ol:last-child,.pill-content>.active ol:last-child,.tab-content>.active dl:last-child,.pill-content>.active dl:last-child{margin-bottom:0} +.navbar-static,.navbar-fixed{background:0;border-bottom:1px solid #ccc;line-height:40px;white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box} +.navbar-static .navbar,.navbar-fixed .navbar{height:40px;padding:10px 0;background:transparent;-moz-box-sizing:border-box;box-sizing:border-box} +.navbar-static .navbar.header,.navbar-fixed .navbar.header{height:80px;padding:0;background:transparent} +.navbar-static .navbar.header+.navbar,.navbar-fixed .navbar.header+.navbar{border-top:1px solid #ccc} +.navbar-fixed{width:100%;position:fixed;z-index:1030} +.navbar.header .brand{float:left;display:block;text-transform:uppercase;font-weight:300;font-size:23px;line-height:30px;height:30px;padding:25px 0;color:#fff} +.navbar.header .brand.mark{background:transparent url("../../images/toolkit/defaults/logos/bnet/mark.png") no-repeat left 18px;display:inline-block;padding-left:60px} +.navbar.header a.brand{-webkit-transition:text-shadow .2s,color .2s;transition:text-shadow .2s,color .2s} +.navbar.header a.brand:hover,.navbar.header a.brand:focus{color:#fff;text-shadow:0 0 10px #ccc,0 0 10px #ccc} +.navbar.header .brand .tag{color:#fff;display:inline-block;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;padding:1px 0 0 3px;vertical-align:text-top} +.navbar.header .user{float:right;display:block;font-size:15px;font-weight:400;line-height:20px;color:#fff;padding:20px 0} +.navbar.header .status{display:block;float:left;width:32px;height:32px;padding:2px;margin:1px 10px 1px 0;border:1px solid #000;background-image:-webkit-linear-gradient(top,#00a4dc,#0f72c5);background-image:linear-gradient(to bottom,#00a4dc,#0f72c5)} +.navbar.header .status.offline{background-image:-webkit-linear-gradient(top,rgba(120,120,120,0.3),rgba(101,101,101,0.3));background-image:linear-gradient(to bottom,rgba(120,120,120,0.3),rgba(101,101,101,0.3))} +.navbar.header .status.online{background-image:-webkit-linear-gradient(top,#6ddc00,#4e9d00);background-image:linear-gradient(to bottom,#6ddc00,#4e9d00)} +.navbar.header .status.away{background-image:-webkit-linear-gradient(top,#f8d90a,#e9af12);background-image:linear-gradient(to bottom,#f8d90a,#e9af12)} +.navbar.header .status.busy{background-image:-webkit-linear-gradient(top,#ec1919,#cf0d0d);background-image:linear-gradient(to bottom,#ec1919,#cf0d0d)} +.navbar.header .avatar{float:right;display:block;width:32px;height:32px;overflow:hidden;background-color:#222;background-size:cover} +.navbar.header .avatar img{display:block;width:100%;height:100%} +.navbar.header .name{float:left;display:block;margin:10px 0} +.navbar.header .battletag{display:block;color:#fff} +.navbar.header .battletag .code{color:#fff} +.navbar.header a.battletag{color:#fff} +.navbar.header a.battletag:hover,.navbar.header a.battletag:focus{color:#fff} +.navbar.header a.battletag .code{color:#fff} +.navbar.header a.battletag .code:hover,.navbar.header a.battletag .code:focus{color:#fff} +.navbar.header .ldap{float:left;display:block} +.navbar.header .ldap .email{display:block;color:#fff} +.navbar.header .ldap .role{display:block;color:#fff} +.pager{height:30px;margin:0} +.pager>li{margin-top:2px;margin-bottom:2px;margin-right:10px} +.pager>li:last-child{margin-right:0} +.pager>li>a,.pager>li>span{font-size:13px} +.pager>li>a{padding:1px 8px;line-height:22px;height:26px;text-decoration:none;background-color:#d9d9d9;border-radius:2px;border:1px solid #ccc;min-width:26px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +.pager>li>span{line-height:26px;height:26px;min-width:18px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box} +.pager>li>a:focus,.pager>li>a:hover{background:#bfbfbf;color:#fff} +.pager>li>a:active{padding:2px 7px 0 9px;color:#fff;background-color:#d9d9d9;box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.3)} +.pager>.active>a{color:#fff!important;background:#ccc!important;cursor:default!important;padding:1px!important;box-shadow:none!important} +.pager>.disabled>a,.pager>.disabled>a:focus,.pager>.disabled>a:hover,.pager>.disabled>a:active{color:#fff!important;background:#e6e6e6!important;cursor:default!important;padding:1px 8px!important;box-shadow:none!important} +.pager>.disabled>span{color:#fff!important} +.pager>li>a [class^="icon-"],.pager>li>span [class^="icon-"],.pager>li>a [class*=" icon-"],.pager>li>span [class*=" icon-"]{margin-top:3px;margin-right:-6px;margin-left:-6px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pager>li>a:active [class^="icon-"],.pager>li>a:active [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pager>.disabled>span [class^="icon-"],.pager>.disabled>a [class^="icon-"],.pager>.disabled>span [class*=" icon-"],.pager>.disabled>a [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")!important;opacity:.15!important} +.pagination{height:30px;margin:0} +.pagination ul>li{margin-top:2px;margin-bottom:2px;margin-right:4px} +.pagination ul>li:last-child{margin-right:0} +.pagination ul>li>a,.pagination ul>li>span{font-size:13px} +.pagination ul>li>a{padding:1px 8px;line-height:22px;height:26px;text-decoration:none;background-color:#d9d9d9;border-radius:2px;border:1px solid #ccc;min-width:26px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +.pagination ul>li>span{line-height:26px;height:26px;min-width:18px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box} +.pagination ul>li>a:focus,.pagination ul>li>a:hover{background:#bfbfbf;color:#fff} +.pagination ul>li>a:active{padding:2px 7px 0 9px;color:#fff;background-color:#d9d9d9;box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.3)} +.pagination ul>.active>a{color:#fff!important;background:#ccc!important;cursor:default!important;padding:1px!important;box-shadow:none!important} +.pagination ul>.disabled>a,.pagination ul>.disabled>a:focus,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:active{color:#fff!important;background:#e6e6e6!important;cursor:default!important;padding:1px 8px!important;box-shadow:none!important} +.pagination ul>.disabled>span{color:#fff!important} +.pagination ul>li>a [class^="icon-"],.pagination ul>li>span [class^="icon-"],.pagination ul>li>a [class*=" icon-"],.pagination ul>li>span [class*=" icon-"]{margin-top:3px;margin-right:-6px;margin-left:-6px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pagination ul>li>a:active [class^="icon-"],.pagination ul>li>a:active [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pagination ul>.disabled>span [class^="icon-"],.pagination ul>.disabled>a [class^="icon-"],.pagination ul>.disabled>span [class*=" icon-"],.pagination ul>.disabled>a [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")!important;opacity:.15!important} +.results-counter{font-size:13px;line-height:26px;height:26px;margin:2px 0} +.pagination-group:before,.pagination-group:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.pagination-group:after{clear:both} +.pagination-inline.results-counter{margin-right:1em} +.pagination select.view-per-page{height:26px;font-size:13px;padding:0 16px 0 2px;margin:2px 6px 0 0;background-position:right -4px} +.popover{z-index:1060;width:236px;padding:1px;background-color:#272e3b;border:1px solid #3d434f;background-clip:padding-box;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:0 0 10px 1px rgba(0,0,0,0.75)} +.popover.top{margin-top:-10px} +.popover.right{margin-left:10px} +.popover.bottom{margin-top:10px} +.popover.left{margin-left:-10px} +.popover-title{margin:0;padding:19px 19px 10px 19px} +.popover-content{padding:19px} +.popover-title+.popover-content{padding-top:0} +.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;z-index:0} +.popover .arrow{border-width:8px} +.popover .arrow:after{content:"";border-width:7px;display:block;z-index:1} +.popover.top .arrow{left:50%;margin-left:-8px;border-bottom-width:0;border-top-color:#3d434f;bottom:-8px} +.popover.top .arrow:after{bottom:1px;margin-left:-7px;border-bottom-width:0;border-top-color:#272e3b} +.popover.right .arrow{top:50%;left:-8px;margin-top:-8px;border-left-width:0;border-right-color:#3d434f} +.popover.right .arrow:after{left:1px;bottom:-7px;border-left-width:0;border-right-color:#272e3b} +.popover.bottom .arrow{left:50%;margin-left:-8px;border-top-width:0;border-bottom-color:#3d434f;top:-8px} +.popover.bottom .arrow:after{top:1px;margin-left:-7px;border-top-width:0;border-bottom-color:#272e3b} +.popover.left .arrow{top:50%;right:-8px;margin-top:-8px;border-right-width:0;border-left-color:#3d434f} +.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#272e3b;bottom:-7px} +.progress{height:22px;padding:14px 0} +.progress:after{height:22px;top:14px;background:rgba(117,117,117,0.1);box-shadow:inset 0 0 0 1px #ccc;border-radius:2px} +.progress .bar{height:22px;font-size:13px;line-height:22px;background-image:-webkit-linear-gradient(top,#474a4e,#414447 50%,#474a4e);background-image:linear-gradient(to bottom,#474a4e,#414447 50%,#474a4e);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.01),inset 0 0 14px rgba(255,255,255,0.1);-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width,0.6s,ease;transition:width .6s ease;-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px} +.progress .bar+.bar{-webkit-border-top-left-radius:0;-moz-border-radius-topleft:0;border-top-left-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0} +.progress .bar[style*="100%"]{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px} +.progress.active .bar:after{height:50px;overflow:hidden;background:url("../../images/toolkit/themes/bnet/progress-bars/progress-pulse.png") repeat-y;top:-14px;width:92px;right:-8px} +.progress-striped .bar:before{height:50px;background:url("../../images/toolkit/themes/bnet/progress-bars/progress-stripes.png") no-repeat 0 0;top:-14px;-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px} +@-webkit-keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +@-moz-keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +@-ms-keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +@keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +.progress.active .bar:before{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite} +@-webkit-keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +@-moz-keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +@-ms-keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +@keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +.progress.active .bar:after{-webkit-animation:progress-bar-pulse 1s linear infinite;-moz-animation:progress-bar-pulse 1s linear infinite;-ms-animation:progress-bar-pulse 1s linear infinite;animation:progress-bar-pulse 1s linear infinite} +.progress .description{left:9px;top:14px;line-height:22px;font-size:13px;color:#fff} +.progress-danger .bar,.progress .bar-danger{background-image:-webkit-linear-gradient(top,#e01212,#b70707 50%,#e01212);background-image:linear-gradient(to bottom,#e01212,#b70707 50%,#e01212);opacity:.8} +.progress-success .bar,.progress .bar-success{background-image:-webkit-linear-gradient(top,#17b326,#108328 50%,#17b326);background-image:linear-gradient(to bottom,#17b326,#108328 50%,#17b326);opacity:.8} +.progress-info .bar,.progress .bar-info{background-image:-webkit-linear-gradient(top,#0072d2,#005e9b 50%,#0072d2);background-image:linear-gradient(to bottom,#0072d2,#005e9b 50%,#0072d2);opacity:.8} +.progress-warning .bar,.progress .bar-warning{background-image:-webkit-linear-gradient(top,#ffa800,#f08a19 50%,#ffa800);background-image:linear-gradient(to bottom,#ffa800,#f08a19 50%,#ffa800);opacity:.8} +.progress-tracker{height:20px} +.progress-tracker li{padding:0 20px;font-size:13px;line-height:20px;color:#fff} +.progress-tracker li [class^="icon-"],.progress-tracker li [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.15} +.progress-tracker li.active{color:#fff} +.progress-tracker li.active [class^="icon-"],.progress-tracker li.active [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.5} +.scrollbar-content .scrollbar{width:22px} +.scrollbar-content .track{width:22px} +.scrollbar-content .thumb{cursor:pointer;height:22px;width:22px;padding:5px 7px} +.scrollbar-content .thumb .end{background-color:rgba(255,255,255,0.1);width:8px;border-radius:4px;-webkit-transition:background-color .2s;transition:background-color .2s} +.scrollbar-content:hover .thumb .end{background-color:rgba(255,255,255,0.1)} +.spinner-loading{width:20px;height:20px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png");background-position:-140px 0;display:inline-block} +.spinner-loading.spinner-loading-white{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet-white.png")} +.spinner-40-loading{width:40px;height:40px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-position:-280px 0;display:inline-block} +.spinner-40-loading.spinner-40-loading-white{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet-white.png")} +.spinner-patching{width:20px;height:20px;background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-white.png");display:inline-block} +.spinner-patching.spinner-danger{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-red.png")} +.spinner-patching.spinner-warning{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-orange.png")} +.spinner-patching.spinner-success{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-green.png")} +.spinner-patching.spinner-info{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-blue.png")} +.spinner-patching.spinner-inverse{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-gray.png")} +@-webkit-keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +@-moz-keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +@-ms-keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +@keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +.spinner-loading{-webkit-animation:keyframes-loading .8s steps(21) infinite;-moz-animation:keyframes-loading .8s steps(21) infinite;-ms-animation:keyframes-loading .8s steps(21) infinite;animation:keyframes-loading .8s steps(21) infinite} +@-webkit-keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +@-moz-keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +@-ms-keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +@keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +.spinner-patching{-webkit-animation:keyframes-patching .4s steps(8) infinite;-moz-animation:keyframes-patching .4s steps(8) infinite;-ms-animation:keyframes-patching .4s steps(8) infinite;animation:keyframes-patching .4s steps(8) infinite} +@-webkit-keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +@-moz-keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +@-ms-keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +@keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +.spinner-40-loading{-webkit-animation:keyframes-40-loading .8s steps(21) infinite;-moz-animation:keyframes-40-loading .8s steps(21) infinite;-ms-animation:keyframes-40-loading .8s steps(21) infinite;animation:keyframes-40-loading .8s steps(21) infinite} +.spinner-battlenet{width:20px;height:20px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png");background-position:-140px 0;display:inline-block;-webkit-animation:keyframes-loading .8s steps(21) infinite;-moz-animation:keyframes-loading .8s steps(21) infinite;-ms-animation:keyframes-loading .8s steps(21) infinite;animation:keyframes-loading .8s steps(21) infinite} +.spinner-40-battlenet{width:40px;height:40px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-position:-280px 0;display:inline-block;-webkit-animation:keyframes-40-loading .8s steps(21) infinite;-moz-animation:keyframes-40-loading .8s steps(21) infinite;-ms-animation:keyframes-40-loading .8s steps(21) infinite;animation:keyframes-40-loading .8s steps(21) infinite} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.spinner-battlenet{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-size:420px 20px} +.spinner-40-battlenet{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-80-battlenet.png");background-size:840px 40px} +} +[class^="icon-"],[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");margin:2px} +[class^="icon-24-"],[class*=" icon-24-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-blue.png")} +[class^="icon-payment-"],[class*=" icon-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-16-payment.png")} +[class^="icon-24-payment-"],[class*=" icon-24-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-24-payment.png")} +[class^="icon-48-"],[class*=" icon-48-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-blue.png")} +[class^="icon-128-"],[class*=" icon-128-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-128-blue.png")} +.icon-white{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")} +.icon-24-white{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-white.png")} +.icon-gray{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-gray.png")} +.icon-24-gray{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-gray.png")} +.icon-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png")} +.icon-24-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-orange.png")} +.icon-128-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-128-orange.png")} +.icon-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-red.png")} +.icon-24-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-red.png")} +.icon-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png")} +.icon-24-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-green.png")} +.icon-128-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-128-green.png")} +.icon-purple{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-purple.png")} +.icon-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-fullcolor.png")} +.icon-24-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-fullcolor.png")} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){[class^="icon-"],[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-blue.png");background-size:160px 480px} +[class^="icon-payment-"],[class*=" icon-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-32-payment.png");background-size:192px 208px} +.icon-gray,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-gray.png")} +.icon-white,.dropdown-menu>.disabled>a>[class^="icon-"],.dropdown-menu>.disabled>a>[class*=" icon-"],.btn-primary [class^="icon-"],.btn-primary [class*=" icon-"],.btn.disabled [class^="icon-"],.btn.disabled [class*=" icon-"],.btn[disabled] [class^="icon-"],.btn[disabled] [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-white.png");background-size:160px 480px} +.icon-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-orange.png")} +.icon-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-red.png")} +.icon-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-green.png")} +.icon-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-fullcolor.png")} +[class^="icon-24-"],[class*=" icon-24-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-blue.png");background-size:240px 720px} +.icon-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-orange.png")} +.icon-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-red.png")} +.icon-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-green.png")} +.icon-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-fullcolor.png")} +[class^="icon-24-payment-"],[class*=" icon-24-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-48-payment.png");background-size:288px 312px} +} +.table{margin-bottom:40px} +.table th,.table td{font-weight:400;padding:10px;line-height:20px;border-top:1px solid #ccc} +.table thead th{background:transparent;color:#fff} +.table thead th a.table-sort,.table thead th a.table-sorting{color:#fff} +.table thead th a.table-sort .icon-sort,.table thead th a.table-sorting .icon-sort{opacity:.3} +.table thead th a.table-sort:hover,.table thead th a.table-sorting:hover,.table thead th a.table-sort:focus,.table thead th a.table-sorting:focus{color:#fff} +.table thead th a.table-sort:hover .icon-sort,.table thead th a.table-sorting:hover .icon-sort,.table thead th a.table-sort:focus .icon-sort,.table thead th a.table-sorting:focus .icon-sort{opacity:1} +.table thead th a.table-sort.sort-disabled,.table thead th a.table-sorting.sort-disabled,.table thead th a.table-sort.sort-disabled:hover,.table thead th a.table-sorting.sort-disabled:hover,.table thead th a.table-sort.sort-disabled:focus,.table thead th a.table-sorting.sort-disabled:focus{color:#fff} +.table thead th a.table-sort.sort-disabled .icon-sort-disabled,.table thead th a.table-sorting.sort-disabled .icon-sort-disabled,.table thead th a.table-sort.sort-disabled:hover .icon-sort-disabled,.table thead th a.table-sorting.sort-disabled:hover .icon-sort-disabled,.table thead th a.table-sort.sort-disabled:focus .icon-sort-disabled,.table thead th a.table-sorting.sort-disabled:focus .icon-sort-disabled{opacity:.3} +.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0} +.table tbody+tbody{border-top:2px solid #ccc} +.table .table{background-color:#202020} +.table-bordered{border:1px solid #ccc;border-collapse:separate;border-left:0;border-radius:2px} +.table-bordered th,.table-bordered td{padding:10px;border-left:1px solid #ccc} +.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0} +.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px} +.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px} +.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child{-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px} +.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child{-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px} +.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0} +.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0} +.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px} +.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px} +.table-condensed th,.table-condensed td{padding:5px 10px;font-size:13px;line-height:20px} +.table-striped thead tr>th,.table-striped tbody tr:nth-child(even)>td,.table-striped tbody tr:nth-child(even)>th{background-color:#ccc} +.table-hover tbody tr td,.table-hover tbody tr th{-webkit-transition:background-color,0.2s;transition:background-color .2s} +.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:rgba(255,255,255,0.025)} +.table tbody tr.success td{background-color:#132a14;color:#fff} +.table tbody tr.error td{background-color:#360e10;color:#fff} +.table tbody tr.warning td{background-color:#5d3200;color:#fff} +.table tbody tr.info td{background-color:#272e3b;color:#fff} +.table-hover tbody tr.success:hover td{background-color:#1b3c1c} +.table-hover tbody tr.error:hover td{background-color:#4a1316} +.table-hover tbody tr.warning:hover td{background-color:#774000} +.table-hover tbody tr.info:hover td{background-color:#313a4a} +ul.thumbnails{margin:0;padding:0;list-style:none} +ul.thumbnails:before,ul.thumbnails:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +ul.thumbnails:after{clear:both} +ul.thumbnails>li{float:left;padding-left:0;margin-bottom:40px} +a.thumbnail,div.thumbnail{position:relative;display:block;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:0 0 12px #303030;-webkit-transition:box-shadow,0.2s,ease-in-out;transition:box-shadow .2s ease-in-out} +a.thumbnail:after,div.thumbnail:after{content:"";position:absolute;top:0;left:0;z-index:10;display:block;width:100%;height:100%;box-shadow:inset 0 0 0 1px rgba(0,0,0,0.7),inset 0 0 0 2px rgba(255,255,255,0.1);-webkit-transition:box-shadow,0.2s,ease-in-out;transition:box-shadow .2s ease-in-out} +a.thumbnail:hover:after{box-shadow:inset 0 0 0 1px rgba(0,0,0,0.7),inset 0 0 0 2px rgba(255,255,255,0.25)} +a.thumbnail>img,div.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;position:relative;z-index:10} +a.thumbnail .caption,div.thumbnail .caption{padding:10px;position:relative;z-index:13} +a.thumbnail>img+.caption,div.thumbnail>img+.caption{border-top:1px solid #272727;padding-top:9px} +a.thumbnail .caption p:last-child,div.thumbnail .caption p:last-child,a.thumbnail .caption ul:last-child,div.thumbnail .caption ul:last-child,a.thumbnail .caption ol:last-child,div.thumbnail .caption ol:last-child,a.thumbnail .caption dl:last-child,div.thumbnail .caption dl:last-child{margin-bottom:0} +.tooltip{z-index:1070;padding:5px;font-size:11px} +.tooltip.top{margin-top:-3px} +.tooltip.right{margin-left:3px} +.tooltip.bottom{margin-top:3px} +.tooltip.left{margin-left:-3px} +.tooltip-inner{max-width:250px;padding:3px 8px;color:#bfc1c5;text-align:left;text-decoration:none;background-color:#272e3b;border:1px solid #3d434f;border-radius:1px;box-shadow:0 0 10px 1px rgba(0,0,0,0.75)} +.tooltip-inner p,.tooltip-inner ul,.tooltip-inner ol{margin-bottom:20px;line-height:20px} +.tooltip-inner p:last-child,.tooltip-inner ul:last-child,.tooltip-inner ol:last-child{margin-bottom:0} +.tooltip-arrow,.tooltip-arrow:after{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;z-index:0} +.tooltip-arrow:after{content:"";display:block;z-index:1} +.tooltip.top .tooltip-arrow{bottom:-1px;left:50%;margin-left:-5px;border-width:6px 6px 0;border-top-color:#3d434f} +.tooltip.top .tooltip-arrow:after{bottom:2px;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#272e3b} +.tooltip.right .tooltip-arrow{top:50%;left:-1px;margin-top:-5px;border-width:6px 6px 6px 0;border-right-color:#3d434f} +.tooltip.right .tooltip-arrow:after{top:50%;left:2px;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#272e3b} +.tooltip.left .tooltip-arrow{top:50%;right:-1px;margin-top:-5px;border-width:6px 0 6px 6px;border-left-color:#3d434f} +.tooltip.left .tooltip-arrow:after{top:50%;right:2px;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#272e3b} +.tooltip.bottom .tooltip-arrow{top:-1px;left:50%;margin-left:-5px;border-width:0 6px 6px;border-bottom-color:#3d434f} +.tooltip.bottom .tooltip-arrow:after{top:2px;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#272e3b} +.tooltipster-base{padding:5px;font-size:15px;line-height:20px;position:absolute;left:0;top:0;pointer-events:none;width:auto;overflow:visible} +.tooltipster-default{border-radius:1px;border:1px solid #3d434f;background:#272e3b;color:#bfc1c5;max-width:250px;z-index:1070} +.tooltipster-default .tooltipster-content{font-family:"Blizzard","Arial","Helvetica",sans-serif;font-size:11px;line-height:13px;padding:8px 10px;overflow:hidden} +.tooltipster-arrow-top span,.tooltipster-arrow-top-right span,.tooltipster-arrow-top-left span{border-left:5px solid transparent!important;border-right:5px solid transparent!important;border-top:5px solid;bottom:-4px} +.tooltipster-arrow-top .tooltipster-arrow-border,.tooltipster-arrow-top-right .tooltipster-arrow-border,.tooltipster-arrow-top-left .tooltipster-arrow-border{border-left:6px solid transparent!important;border-right:6px solid transparent!important;border-top:6px solid;bottom:-5px} +.tooltipster-arrow-bottom span,.tooltipster-arrow-bottom-right span,.tooltipster-arrow-bottom-left span{border-left:5px solid transparent!important;border-right:5px solid transparent!important;border-bottom:5px solid;top:-4px} +.tooltipster-arrow-bottom .tooltipster-arrow-border,.tooltipster-arrow-bottom-right .tooltipster-arrow-border,.tooltipster-arrow-bottom-left .tooltipster-arrow-border{border-left:6px solid transparent!important;border-right:6px solid transparent!important;border-bottom:6px solid;top:-5px} +.tooltipster-arrow-top span,.tooltipster-arrow-top .tooltipster-arrow-border,.tooltipster-arrow-bottom span,.tooltipster-arrow-bottom .tooltipster-arrow-border{left:0;right:0;margin:0 auto} +.tooltipster-arrow-top-left span,.tooltipster-arrow-bottom-left span{left:3px} +.tooltipster-arrow-top-left .tooltipster-arrow-border,.tooltipster-arrow-bottom-left .tooltipster-arrow-border{left:2px} +.tooltipster-arrow-top-right span,.tooltipster-arrow-bottom-right span{right:3px} +.tooltipster-arrow-top-right .tooltipster-arrow-border,.tooltipster-arrow-bottom-right .tooltipster-arrow-border{right:2px} +.tooltipster-arrow-left span,.tooltipster-arrow-left .tooltipster-arrow-border{border-top:5px solid transparent!important;border-bottom:5px solid transparent!important;border-left:5px solid;top:50%;margin-top:-4px;right:-5px} +.tooltipster-arrow-left .tooltipster-arrow-border{border-top:6px solid transparent!important;border-bottom:6px solid transparent!important;border-left:6px solid;margin-top:-5px} +.tooltipster-arrow-right span,.tooltipster-arrow-right .tooltipster-arrow-border{border-top:5px solid transparent!important;border-bottom:5px solid transparent!important;border-right:5px solid;top:50%;margin-top:-5px;left:-5px} +.tooltipster-arrow-right .tooltipster-arrow-border{border-top:6px solid transparent!important;border-bottom:6px solid transparent!important;border-right:6px solid;margin-top:-6px} +.tooltipster-icon{cursor:help;margin-left:4px} +body{font-family:"Blizzard","Arial","Helvetica",sans-serif;font-size:15px;line-height:20px} +body:lang(zh-CN){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft YaHei","Hei SC",sans-serif} +body:lang(zh-TW){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft JhengHei","Tei TC",sans-serif} +body:lang(ko){font-family:"Blizzard","Arial","Helvetica","?????? ??????","Malgun Gothic","????????????????????????","AppleSDGothicNeo","????????????","AppleGothic","??????","Dotum",sans-serif} +body:lang(ja){font-family:"Blizzard","Arial","Helvetica","????????????","Meiryo","?????????????????? Pro","Hiragino Kaku Gothic Pro","???????????????","Yu Gothic",sans-serif} +body:lang(th){font-family:"Blizzard","Tahoma","Arial","Helvetica",sans-serif} +h1,h2,h3,h4,h5,h6,.heading-1,.heading-2,.heading-3,.heading-4,.heading-5,.heading-6{margin:0 0 33px 0} +h1 strong,h2 strong,h3 strong,h4 strong,h5 strong,h6 strong,.heading-1 strong,.heading-2 strong,.heading-3 strong,.heading-4 strong,.heading-5 strong,.heading-6 strong{font-weight:400} +h1,.heading-1{font-weight:300;font-size:35px;line-height:40px;color:#fff} +h1 strong,.heading-1 strong,h1 b,.heading-1 b{font-weight:300} +h2,.heading-2{font-weight:300;font-size:23px;line-height:30px;color:#fff} +h3,.heading-3{font-weight:400;font-size:17px;line-height:20px;color:#fff} +h4,.heading-4{font-weight:400;font-size:15px;line-height:20px;color:#fff} +h5,.heading-5{font-weight:400;font-size:13px;line-height:20px;margin:0 0 8.25px 0;color:#fff} +h6,.heading-6{font-weight:400;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;color:#fff;margin:0 0 8.25px 0} +.heading-6+.heading-1,.heading-6+.heading-2,.heading-6+.heading-3{margin-top:-8.25px} +.heading-1+.heading-6,.heading-2+.heading-6,.heading-3+.heading-6{margin-top:-33px;margin-bottom:33px} +p+.heading-1,ul+.heading-1,ol+.heading-1,dl+.heading-1,pre+.heading-1,blockquote+.heading-1,p+.heading-2,ul+.heading-2,ol+.heading-2,dl+.heading-2,pre+.heading-2,blockquote+.heading-2,p+.heading-3,ul+.heading-3,ol+.heading-3,dl+.heading-3,pre+.heading-3,blockquote+.heading-3,p+.heading-4,ul+.heading-4,ol+.heading-4,dl+.heading-4,pre+.heading-4,blockquote+.heading-4,p+.heading-5+.heading-6,ul+.heading-5+.heading-6,ol+.heading-5+.heading-6,dl+.heading-5+.heading-6,pre+.heading-5+.heading-6,blockquote+.heading-5+.heading-6{margin-top:66px} +h1 small,h2 small,h3 small,h4 small,.heading-1 .subheading,.heading-2 .subheading,.heading-3 .subheading,.heading-4 .subheading{color:#fff} +h1 small,.heading-1 .subheading{font-size:17px;line-height:20px} +h2 small,.heading-2 .subheading{font-size:15px;line-height:20px} +.title{font-size:15px;line-height:20px;font-weight:400;text-transform:uppercase;letter-spacing:.075em;color:#fff} +.title .subtitle{color:#fff} +.title a{color:#fff} +.title a:focus,.title a:hover{color:#fff} +.title [class^="icon-24-"],.title [class*=" icon-24-"]{margin-top:-2px} +.muted{color:#fff} +.muted a{color:rgba(0,174,255,0.7)} +.muted a:hover{color:#fff} +a.muted:hover{color:#fff} +.text-warning{color:#d8ac15} +a.text-warning:hover{color:#fff} +.text-error{color:#cd0606} +a.text-error:hover{color:#fff} +.text-info{color:#00aeff} +a.text-info:hover{color:#fff} +.text-success{color:#00a83c} +a.text-success:hover{color:#fff} +b{color:#fff;font-weight:400} +strong{color:#fff;font-weight:400} +s{color:#fff} +del{color:#fff} +ins{color:#fff} +code{color:#fff} +samp{color:#fff} +kbd{color:#fff;font-weight:700} +var{color:#fff} +code,kbd,pre,samp{font-family:"Consolas","Monaco","Menlo","Courier New",monospace} +abbr[title],abbr[data-original-title]{border-color:#272727} +.initialism{font-size:14px} +small{font-size:86.66666667%;color:#fff} +p{margin:0 0 33px 0;line-height:25px} +ul,ol{padding:0;margin:0 0 33px 30px;line-height:25px} +ul ul,ol ul,ul ol,ol ol{margin-top:20.625px} +li{line-height:20px;margin:0 0 20.625px 0;padding-left:10px} +li:last-of-type{margin-bottom:0} +li p{margin-bottom:20.625px} +ul.icons li,ol.icons li{padding-left:40px} +ul.icons li [class^="icon-"],ol.icons li [class^="icon-"],ul.icons li [class*=" icon-"],ol.icons li [class*=" icon-"]{left:12px} +ul.inline>li,ol.inline>li{padding-left:10px} +dl{margin:0 0 33px 0} +dl dt{font-weight:400;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;color:#fff} +dl dd{margin:0 0 20.625px 40px} +.dl-horizontal{margin-bottom:20px} +blockquote{padding:0 0 0 20px;margin:0 0 33px 0;border-left:5px solid #272727} +blockquote p{color:#fff} +blockquote .attribution{font-size:13px;line-height:20px;margin-top:20px;color:#fff} +blockquote.pull-right{padding-right:20px;border-right:5px solid #272727} +address{margin-bottom:20px;line-height:20px} +hr{margin:66px 0 20.625px;border-bottom:1px solid #272727} +.documentation-section h1,.documentation-section h2,.documentation-section h3,.documentation-section h4,.documentation-section h5,.documentation-section h6,.documentation-section .heading-1,.documentation-section .heading-2,.documentation-section .heading-3,.documentation-section .heading-4,.documentation-section .heading-5,.documentation-section .heading-6{max-width:800px} +.documentation-section>p,.documentation-section>ul.unstyled,.documentation-section>ol.unstyled{max-width:800px} +.documentation-section>p:last-child,.documentation-section>ul.unstyled:last-child,.documentation-section>ol.unstyled:last-child{margin-bottom:0} +.documentation-section>ul:not(.nav):not(.pager):not(.thumbnails),.documentation-section>ol{max-width:760px} +.documentation-section>blockquote>p{max-width:775px} +.news-article .article-content *:not(a){color:#fff} +.news-article>p,.news-article>ul:not(.nav),.news-article>ol{margin-bottom:25px} +.news-article>p:last-child,.news-article>ul:not(.nav):last-child,.news-article>ol:last-child{margin-bottom:0} +.news-article>.heading-2,.news-article>.heading-3,.news-article>.heading-4,.news-article>.heading-5{margin-bottom:25px} +.news-article p{margin-bottom:25px} +.news-article p+.heading-1,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-1,.news-article ol+.heading-1,.news-article dl+.heading-1,.news-article p+.heading-2,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-2,.news-article ol+.heading-2,.news-article dl+.heading-2,.news-article p+.heading-3,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-3,.news-article ol+.heading-3,.news-article dl+.heading-3,.news-article p+.heading-4,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-4,.news-article ol+.heading-4,.news-article dl+.heading-4,.news-article p+.heading-5+.heading-6,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-5+.heading-6,.news-article ol+.heading-5+.heading-6,.news-article dl+.heading-5+.heading-6{margin-top:40px} +.news-article hr{margin-top:25px} +.well{font-size:13px;min-height:20px;border:1px solid #000;padding:20px;margin-bottom:40px;background-color:#272727;box-shadow:0 0 0 1px #ccc inset,0 5px 10px rgba(0,0,0,0.75);-moz-box-sizing:border-box;box-sizing:border-box} +.well blockquote{border-color:#ccc} +.well p,.well ul,.well ol,.well dl{font-size:13px;line-height:20px;margin-bottom:20px} +.well p:last-child,.well ul:last-child,.well ol:last-child,.well dl:last-child{margin-bottom:0} +.well-large{padding:40px 20px} +.well-small{padding:5px 20px} +@media screen and (max-width:767px){.btn,.btn.btn-wide{font-size:17px;width:100%} +.form-actions .btn{float:inherit} +.form-actions .btn+.btn{margin-left:0;margin-top:20px} +select optgroup{font-size:15px} +select option{font-size:15px} +.modal{width:90%;margin-left:-45%} +} \ No newline at end of file diff --git a/v2.18.0/toolkit/css/toolkit/bnet-responsive.min.css b/v2.18.0/toolkit/css/toolkit/bnet-responsive.min.css new file mode 100644 index 00000000..4fb0d748 --- /dev/null +++ b/v2.18.0/toolkit/css/toolkit/bnet-responsive.min.css @@ -0,0 +1,2807 @@ +/** + * Battle.net Front end Toolkit + * + * @copyright ©2013 Blizzard Entertainment, Inc. All rights reserved. + * + * Twitter Bootstrap + * + * @see http://twitter.github.com/bootstrap/ + * @copyright ©2011 Twitter, Inc. All rights reserved. + * @license http://www.apache.org/licenses/LICENSE-2.0 + * + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Twitter typeahead.js + * + * @see https://github.com/twitter/typeahead.js + * @copyright ©2013 Twitter, Inc. All rights reserved. + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) 2013 Twitter, Inc + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Normalize.css + * + * @see http://git.io/normalize + * @copyright Nicolas Gallagher and Jonathan Neal + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) Nicolas Gallagher and Jonathan Neal + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Normalize.css + * + * @see http://scobo.github.io/lodestone/ + * @copyright D Scott Boyce + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) D Scott Boyce + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Unsemantic + * + * @see http://unsemantic.com + * @copyright Nathan Smith + * @license http://opensource.org/licenses/mit-license.php + * @license http://www.gnu.org/licenses/gpl.html + */ +/*! Lodestone v2.0.1 | MIT License | http://scobo.github.io/lodestone/ */.affix{position:fixed} +.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.clearfix:before,.clearfix:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.clearfix:after{clear:both} +.pull-right{float:right} +.pull-left{float:left} +.icon-spacer{background-image:none!important} +body .body-content{-webkit-transition:opacity,0.4s;transition:opacity .4s} +body.preload .body-content{opacity:0} +.fade{opacity:0;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.fade.in{opacity:1} +.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height,0.4s;transition:height .4s} +.collapse.in{height:auto} +.invisible{visibility:hidden!important} +.hide{display:none!important} +.show{display:block!important} +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} +audio,canvas,video{display:inline-block} +audio:not([controls]){display:none;height:0} +[hidden],template{display:none} +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;height:auto} +body{margin:0;height:auto} +a{text-decoration:none;background:transparent} +a:focus{outline:0} +a:active,a:hover{outline:0} +h1{font-size:2em;margin:.67em 0} +abbr[title]{border-bottom:1px dotted} +b,strong{font-weight:700} +dfn{font-style:italic} +hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} +mark{background:#ff0;color:#000} +code,kbd,pre,samp{font-family:monospace,serif;font-size:1em} +pre{white-space:pre-wrap} +q{quotes:"???" "???" "???" "???"} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-0.5em} +sub{bottom:-0.25em} +img{border:0} +svg:not(:root){overflow:hidden} +figure{margin:0} +fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em} +legend{border:0;padding:0} +button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +button,input{line-height:normal} +button,select{text-transform:none} +button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} +input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box} +input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +textarea{overflow:auto;vertical-align:top} +table{border-collapse:collapse;border-spacing:0} +.accordion-heading .accordion-toggle{display:block} +.modal.agegate{overflow:visible} +.modal.agegate .modal-body{overflow:visible} +.btn{display:inline-block;text-align:center;vertical-align:middle;cursor:pointer;-moz-box-sizing:border-box;box-sizing:border-box} +.btn:focus{outline:0} +.btn.active,.btn:active{outline:0} +.btn.loading{position:relative;overflow:hidden} +.btn.disabled,.btn[disabled]{cursor:default!important} +.btn.disabled-loading{overflow:hidden;position:relative} +.btn-block{display:block;width:100%;padding-left:0;padding-right:0} +input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%} +.carousel{position:relative} +.carousel .carousel-inner{overflow:hidden;width:100%;height:100%;position:relative} +.carousel .carousel-inner .cover{width:100%;height:100%;position:absolute;z-index:1} +.carousel .carousel-inner .carousel-caption{width:100%;height:100px;position:absolute;bottom:-55px;z-index:0} +.carousel .carousel-inner .carousel-caption .bg-layer{width:100%;height:100%;position:absolute;top:60px;left:0;z-index:-1} +.carousel .carousel-inner .carousel-caption .summary{height:32px} +.carousel .carousel-inner>.item{display:none;position:relative} +.carousel .carousel-inner>.item img{display:block;line-height:1;width:100%;height:auto} +.carousel .carousel-inner>.active,.carousel .carousel-inner>.next,.carousel .carousel-inner>.prev{display:block} +.carousel .carousel-inner>.active{left:0} +.carousel .carousel-inner>.next,.carousel .carousel-inner>.prev{position:absolute;top:0;width:100%} +.carousel .carousel-inner>.next{left:100%} +.carousel .carousel-inner>.prev{left:-100%} +.carousel .carousel-inner>.next.left,.carousel .carousel-inner>.prev.right{left:0} +.carousel .carousel-inner>.active.left{left:-100%} +.carousel .carousel-inner>.active.right{left:100%} +.carousel.crossfade .carousel-inner{overflow:hidden;width:100%;height:100%;position:relative} +.carousel.crossfade .carousel-inner>.item{display:none;position:relative;opacity:0} +.carousel.crossfade .carousel-inner>.item img{display:block;line-height:1;width:100%;height:auto} +.carousel.crossfade .carousel-inner>.active,.carousel.crossfade .carousel-inner>.next,.carousel.crossfade .carousel-inner>.prev{display:block} +.carousel.crossfade .carousel-inner>.active{opacity:1} +.carousel.crossfade .carousel-inner>.next,.carousel.crossfade .carousel-inner>.prev{position:absolute;top:0;left:0;opacity:0} +.carousel.crossfade .carousel-inner>.active.left,.carousel.crossfade .carousel-inner>.active.right{left:0;opacity:0} +.carousel .carousel-controls{position:absolute;z-index:100} +.carousel .carousel-controls button{position:absolute} +.carousel .carousel-controls button span{display:block;position:relative;z-index:-1} +code{white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box} +pre{display:block;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;-moz-box-sizing:border-box;box-sizing:border-box} +pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0} +.pre-scrollable{max-height:340px;overflow-y:scroll} +.dropdown{position:relative} +.dropdown-toggle{display:inline-block;position:relative} +.dropdown-toggle:active,.open .dropdown-toggle{outline:0} +.dropdown-menu{position:absolute;top:100%;display:none;float:left;min-width:160px;margin:0;list-style:none} +.dropdown-menu.pull-right{right:0;left:auto} +.dropdown-menu li>a{display:block;clear:both;white-space:nowrap} +.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{text-decoration:none} +.dropdown-menu .active>a,.dropdown-menu .active>a:hover,.dropdown-menu .active>a:focus{text-decoration:none} +.dropdown-menu .disabled>a:hover,.dropdown-menu .disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;cursor:default} +.open>.dropdown-menu{display:block} +.pull-right>.dropdown-menu{right:0;left:auto} +.dropdown-submenu{position:relative} +.dropdown .dropdown-menu .nav-header{overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.label,.badge{display:inline-block;vertical-align:baseline;white-space:nowrap} +.badge{text-align:center} +.label:empty,.badge:empty{display:none} +a.label:focus,a.label:hover,a.badge:focus,a.badge:hover{cursor:pointer} +.media{overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box} +.media .img{float:left} +.media .img img{display:block} +.media .bd{overflow:hidden} +.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000} +.modal-backdrop.fade{opacity:0} +.modal-backdrop,.modal-backdrop.fade.in{opacity:.8} +.nav{margin:0;list-style:none} +.nav>li{padding:0;margin:0;float:left} +.nav>li>a{display:block} +.nav>li:last-child{margin-right:0} +.nav>li.pull-right{float:right} +.navbar .nav:before,.navbar .nav:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.navbar .nav:after{clear:both} +.navbar .nav>li:last-child{margin-right:0} +.navbar:not(.header) .nav>li:last-child,.navbar:not(.header) .nav>li.pull-right{margin-right:0} +.nav-list>li{float:none} +.nav-list>li>a{display:inline-block} +.nav-list>li.disabled>a{cursor:default} +.nav-list.icons>li{position:relative} +.nav-list.icons>li [class^="icon-"]:not(.icon-external-link),.nav-list.icons>li [class*="icon-"]:not(.icon-external-link){position:absolute} +.nav-tabs:before{content:"";display:table;line-height:0;visibility:hidden} +.nav.nav-tabs:after{content:"\00A0\00A0\00A0";display:table-cell;clear:both;width:1%;overflow:hidden;visibility:visible} +.nav-tabs>li{float:left} +.nav-tabs>li:first-child{padding-left:0} +.nav-tabs>li>a{-webkit-transition:background-color .2s,color .2s;transition:background-color .2s,color .2s} +.nav-tabs>li.active{border-bottom:0} +.nav-tabs>li.active>a{border-bottom-color:transparent;cursor:default} +.nav-tabs>li.disabled>a{cursor:default} +.nav-pills:before,.nav-pills:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.nav-pills:after{clear:both} +.nav-pills>li{float:left} +.nav-pills>li>a{text-decoration:none;-webkit-transition:box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.nav-pills>li>a:active{outline:0} +.nav-pills>li:last-child>a{margin:0} +.nav-pills>li.disabled>a{cursor:default} +.nav-header{display:block} +.tabbable:before,.tabbable:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.tabbable:after{clear:both} +.tab-content{overflow:auto} +.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;overflow:hidden} +.tab-content>.active,.pill-content>.active{display:block} +.pager{display:inline-block;margin-left:0;margin-bottom:0} +.pager:before,.pager:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.pager:after{clear:both} +.pager>li{padding-left:0;display:block;float:left} +.pager>li>a,.pager>li>span{display:block;text-align:center} +.pager>li>a:focus{outline:0} +.pager.aligned{display:block} +.pager.aligned>.next{float:right} +.pagination ul{display:inline-block;margin-left:0;margin-bottom:0} +.pagination ul>li{padding-left:0;display:block;float:left} +.pagination ul>li>a,.pagination ul>li>span{display:block;text-align:center} +.pagination ul>li>a:active{outline:0} +.pagination-group{overflow:hidden} +.pagination-group .pagination-left{float:left} +.pagination-group .pagination-right{float:right} +.pagination-group .pagination-right-absolute{position:absolute;right:0} +.pagination-left{text-align:right} +.pagination-centered{text-align:center} +.pagination-right{text-align:right} +.pagination-inline{display:inline-block;vertical-align:middle} +.pagination select.view-per-page{float:left;margin:0 6px 0 0} +.popover{position:absolute;top:0;left:0;display:none;text-align:left;white-space:normal} +.popover-content p:last-child,.popover-content ul:last-child,.popover-content ol:last-child{margin-bottom:0} +.progress{overflow:hidden;position:relative} +.progress:after{content:"";display:block;position:absolute;width:100%} +.progress .bar{position:relative;float:left;top:0;width:0;text-align:left;padding:0;z-index:1} +.progress.active .bar:after{content:"";display:block;overflow:hidden;position:absolute} +.progress-striped .bar:before{content:"";display:block;width:100%;overflow:hidden;position:absolute;left:0} +.progress .description{position:absolute;display:block;z-index:2} +.progress-tracker{overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.progress-tracker:before,.progress-tracker:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.progress-tracker:after{clear:both} +.progress-tracker li{display:block;float:left} +.progress-tracker li:first-of-type{padding-left:0} +.progress-tracker li:last-of-type{padding-right:0} +.scrollbar-content{position:relative} +.scrollbar-content .viewport{overflow:hidden;position:relative} +.scrollbar-content .overview{list-style:none;position:absolute;left:0;top:0;padding:0;margin:0} +.scrollbar-content .scrollbar{position:absolute;right:0;top:0} +.scrollbar-content .track{position:relative;height:100%} +.scrollbar-content .thumb{overflow:hidden;position:absolute;top:0;left:0;-moz-box-sizing:border-box;box-sizing:border-box} +.scrollbar-content .thumb .end{overflow:hidden;display:block;height:100%} +.scrollbar-content .disable{display:none} +.no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +[class^="icon-"],[class*=" icon-"]{display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-repeat:no-repeat;text-indent:-9999px;-webkit-transition:opacity,0.2s;transition:opacity .2s} +[class^="icon-24-"],[class*=" icon-24-"]{width:24px;height:24px} +[class^="icon-32-"],[class*=" icon-32-"]{width:32px;height:32px} +[class^="icon-48-"],[class*=" icon-48-"]{width:48px;height:48px} +[class^="icon-64-"],[class*=" icon-64-"]{width:64px;height:64px} +[class^="icon-128-"],[class*=" icon-128-"]{width:128px;height:128px} +[class^="icon-payment-"],[class*=" icon-payment-"]{width:24px} +[class^="icon-24-payment-"],[class*=" icon-24-payment-"]{width:36px} +.icon-placeholder{background-position:0 0} +.icon-ban-circle{background-position:-16px 0} +.icon-time{background-position:-32px 0} +.icon-add-time{background-position:-48px 0} +.icon-question-circle{background-position:-64px 0} +.icon-balance{background-position:-80px 0} +.icon-remove-circle{background-position:-96px 0} +.icon-mouse{background-position:-112px 0} +.icon-mouse-delete{background-position:-128px 0} +.icon-envelope{background-position:-144px 0} +.icon-open-envelope{background-position:0 -16px} +.icon-home{background-position:-16px -16px} +.icon-play{background-position:-32px -16px} +.icon-pause{background-position:-48px -16px} +.icon-file{background-position:-64px -16px} +.icon-search{background-position:-80px -16px} +.icon-edit{background-position:-96px -16px} +.icon-shopping-cart{background-position:-112px -16px} +.icon-download-alt{background-position:-128px -16px} +.icon-achievement{background-position:-144px -16px} +.icon-heart{background-position:0 -32px} +.icon-heart-broken{background-position:-16px -32px} +.icon-comment{background-position:-32px -32px} +.icon-gavel{background-position:-48px -32px} +.icon-broadcast{background-position:-64px -32px} +.icon-service{background-position:-80px -32px} +.icon-headphones-alt{background-position:-96px -32px} +.icon-user{background-position:-112px -32px} +.icon-flask{background-position:-128px -32px} +.icon-chevron-left{background-position:-144px -32px} +.icon-chevron-right{background-position:0 -48px} +.icon-share{background-position:-16px -48px} +.icon-bookmarks{background-position:-32px -48px} +.icon-cog{background-position:-48px -48px} +.icon-mobile{background-position:-64px -48px} +.icon-download-square{background-position:-80px -48px} +.icon-upload{background-position:-96px -48px} +.icon-group{background-position:-112px -48px} +.icon-crown{background-position:-128px -48px} +.icon-globe-alt{background-position:-144px -48px} +.icon-series{background-position:0 -64px} +.icon-paw{background-position:-16px -64px} +.icon-trash{background-position:-32px -64px} +.icon-windows{background-position:-48px -64px} +.icon-apple{background-position:-64px -64px} +.icon-gift{background-position:-80px -64px} +.icon-refresh{background-position:-96px -64px} +.icon-reset{background-position:-112px -64px} +.icon-check{background-position:-128px -64px} +.icon-external-link{background-position:-144px -64px} +.icon-character{background-position:0 -80px} +.icon-character-add{background-position:-16px -80px} +.icon-character-search{background-position:-32px -80px} +.icon-character-remove{background-position:-48px -80px} +.icon-character-cog{background-position:-64px -80px} +.icon-download-alt-cog{background-position:-80px -80px} +.icon-download-alt-search{background-position:-96px -80px} +.icon-lock{background-position:-112px -80px} +.icon-warning-sign{background-position:-128px -80px} +.icon-ok{background-position:-144px -80px} +.icon-speaker{background-position:0 -96px} +.icon-wow{background-position:-16px -96px} +.icon-warcraft{background-position:-32px -96px} +.icon-starcraft{background-position:-48px -96px} +.icon-starcraft-2{background-position:-64px -96px} +.icon-diablo-3{background-position:-80px -96px} +.icon-battlenet{background-position:-96px -96px} +.icon-remove{background-position:-112px -96px} +.icon-repeat{background-position:-128px -96px} +.icon-dropdown{background-position:-144px -96px} +.icon-shortcut{background-position:0 -112px} +.icon-wrench{background-position:-16px -112px} +.icon-plus{background-position:-32px -112px} +.icon-fullscreen{background-position:-48px -112px} +.icon-glass{background-position:-64px -112px} +.icon-music-alt{background-position:-80px -112px} +.icon-music{background-position:-96px -112px} +.icon-star-empty{background-position:-112px -112px} +.icon-star{background-position:-128px -112px} +.icon-film{background-position:-144px -112px} +.icon-th-large{background-position:0 -128px} +.icon-th{background-position:-16px -128px} +.icon-th-list{background-position:-32px -128px} +.icon-zoom-in{background-position:-48px -128px} +.icon-zoom-out{background-position:-64px -128px} +.icon-off{background-position:-80px -128px} +.icon-signal{background-position:-96px -128px} +.icon-road{background-position:-112px -128px} +.icon-upload-square{background-position:-128px -128px} +.icon-download{background-position:-144px -128px} +.icon-inbox{background-position:0 -144px} +.icon-play-circle{background-position:-16px -144px} +.icon-list-alt{background-position:-32px -144px} +.icon-flag{background-position:-48px -144px} +.icon-headphones{background-position:-64px -144px} +.icon-volume{background-position:-80px -144px} +.icon-volume-off{background-position:-96px -144px} +.icon-volume-down{background-position:-112px -144px} +.icon-volume-up{background-position:-128px -144px} +.icon-qrcode{background-position:-144px -144px} +.icon-barcode{background-position:0 -160px} +.icon-tag{background-position:-16px -160px} +.icon-tags{background-position:-32px -160px} +.icon-book{background-position:-48px -160px} +.icon-bookmark{background-position:-64px -160px} +.icon-print{background-position:-80px -160px} +.icon-camera{background-position:-96px -160px} +.icon-font{background-position:-112px -160px} +.icon-bold{background-position:-128px -160px} +.icon-italic{background-position:-144px -160px} +.icon-text-height{background-position:0 -176px} +.icon-text-width{background-position:-16px -176px} +.icon-align-left{background-position:-32px -176px} +.icon-align-center{background-position:-48px -176px} +.icon-align-right{background-position:-64px -176px} +.icon-align-justify{background-position:-80px -176px} +.icon-list{background-position:-96px -176px} +.icon-indent-left{background-position:-112px -176px} +.icon-indent-right{background-position:-128px -176px} +.icon-facetime-video{background-position:-144px -176px} +.icon-picture{background-position:0 -192px} +.icon-pencil{background-position:-16px -192px} +.icon-map-marker{background-position:-32px -192px} +.icon-adjust{background-position:-48px -192px} +.icon-tint{background-position:-64px -192px} +.icon-move{background-position:-80px -192px} +.icon-step-backward{background-position:-96px -192px} +.icon-fast-backward{background-position:-112px -192px} +.icon-backward{background-position:-128px -192px} +.icon-step-forward{background-position:-144px -192px} +.icon-fast-forward{background-position:0 -208px} +.icon-forward{background-position:-16px -208px} +.icon-eject{background-position:-32px -208px} +.icon-square{background-position:-48px -208px} +.icon-plus-circle{background-position:-64px -208px} +.icon-minus-circle{background-position:-80px -208px} +.icon-plus-sign{background-position:-96px -208px} +.icon-minus-sign{background-position:-112px -208px} +.icon-remove-sign{background-position:-128px -208px} +.icon-ok-circle{background-position:-144px -208px} +.icon-ok-sign{background-position:0 -224px} +.icon-minus{background-position:-16px -224px} +.icon-info-circle{background-position:-32px -224px} +.icon-info-sign{background-position:-48px -224px} +.icon-question-sign{background-position:-64px -224px} +.icon-screenshot{background-position:-80px -224px} +.icon-arrow-right{background-position:-96px -224px} +.icon-arrow-left{background-position:-112px -224px} +.icon-arrow-up{background-position:-128px -224px} +.icon-arrow-down{background-position:-144px -224px} +.icon-share-alt{background-position:0 -240px} +.icon-resize-full{background-position:-16px -240px} +.icon-resize-small{background-position:-32px -240px} +.icon-asterisk{background-position:-48px -240px} +.icon-exclamation-circle{background-position:-64px -240px} +.icon-exclamation-sign{background-position:-80px -240px} +.icon-leaf{background-position:-96px -240px} +.icon-fire{background-position:-112px -240px} +.icon-eye-open{background-position:-128px -240px} +.icon-eye-close{background-position:-144px -240px} +.icon-plane{background-position:0 -256px} +.icon-calendar{background-position:-16px -256px} +.icon-random{background-position:-32px -256px} +.icon-magnet{background-position:-48px -256px} +.icon-chevron-down{background-position:-64px -256px} +.icon-chevron-up{background-position:-80px -256px} +.icon-folder-close{background-position:-96px -256px} +.icon-folder-open{background-position:-112px -256px} +.icon-resize-vertical{background-position:-128px -256px} +.icon-resize-horizontal{background-position:-144px -256px} +.icon-hdd{background-position:0 -272px} +.icon-bullhorn{background-position:-16px -272px} +.icon-bell{background-position:-32px -272px} +.icon-certificate-empty{background-position:-48px -272px} +.icon-certificate{background-position:-64px -272px} +.icon-thumbs-up{background-position:-80px -272px} +.icon-thumbs-down{background-position:-96px -272px} +.icon-hand-right{background-position:-112px -272px} +.icon-hand-left{background-position:-128px -272px} +.icon-hand-up{background-position:-144px -272px} +.icon-hand-down{background-position:0 -288px} +.icon-arrow-right-square{background-position:-16px -288px} +.icon-arrow-left-square{background-position:-32px -288px} +.icon-arrow-right-circle{background-position:-48px -288px} +.icon-arrow-left-circle{background-position:-64px -288px} +.icon-globe{background-position:-80px -288px} +.icon-tasks{background-position:-96px -288px} +.icon-filter{background-position:-112px -288px} +.icon-briefcase{background-position:-128px -288px} +.icon-underline{background-position:-144px -288px} +.icon-sort{background-position:0 -304px} +.icon-sort-descending{background-position:-16px -304px} +.icon-sort-ascending{background-position:-32px -304px} +.icon-sort-disabled{background-position:-48px -304px} +.icon-arrow-down-solid{background-position:-64px -304px} +.icon-arrow-up-solid{background-position:-80px -304px} +.icon-arrow-left-solid{background-position:-96px -304px} +.icon-arrow-right-solid{background-position:-112px -304px} +.icon-0-sign{background-position:-128px -304px} +.icon-1-sign{background-position:-144px -304px} +.icon-2-sign{background-position:0 -320px} +.icon-3-sign{background-position:-16px -320px} +.icon-4-sign{background-position:-32px -320px} +.icon-5-sign{background-position:-48px -320px} +.icon-6-sign{background-position:-64px -320px} +.icon-7-sign{background-position:-80px -320px} +.icon-8-sign{background-position:-96px -320px} +.icon-9-sign{background-position:-112px -320px} +.icon-secure{background-position:-128px -320px} +.icon-not-secure{background-position:-144px -320px} +.icon-add-wow{background-position:0 -336px} +.icon-add-warcraft{background-position:-16px -336px} +.icon-add-starcraft{background-position:-32px -336px} +.icon-add-starcraft-2{background-position:-48px -336px} +.icon-add-diablo-3{background-position:-64px -336px} +.icon-add-battlenet{background-position:-80px -336px} +.icon-free-game-services{background-position:-96px -336px} +.icon-character-services{background-position:-112px -336px} +.icon-facebook{background-position:-128px -336px} +.icon-twitter{background-position:-144px -336px} +.icon-hearthstone{background-position:0 -352px} +.icon-add-hearthstone{background-position:-16px -352px} +.icon-heroes{background-position:-32px -352px} +.icon-add-heroes{background-position:-48px -352px} +.icon-friends-wow{background-position:-64px -352px} +.icon-friends-warcraft{background-position:-80px -352px} +.icon-friends-starcraft{background-position:-96px -352px} +.icon-friends-starcraft-2{background-position:-112px -352px} +.icon-friends-diablo-3{background-position:-128px -352px} +.icon-friends-battlenet{background-position:-144px -352px} +.icon-friends-hearthstone{background-position:0 -368px} +.icon-friends-heroes{background-position:-16px -368px} +.icon-news-wow{background-position:-32px -368px} +.icon-news-warcraft{background-position:-48px -368px} +.icon-news-starcraft{background-position:-64px -368px} +.icon-news-starcraft-2{background-position:-80px -368px} +.icon-news-diablo-3{background-position:-96px -368px} +.icon-news-battlenet{background-position:-112px -368px} +.icon-news-hearthstone{background-position:-128px -368px} +.icon-news-heroes{background-position:-144px -368px} +.icon-git{background-position:0 -384px} +.icon-bootstrap{background-position:-16px -384px} +.icon-maven{background-position:-32px -384px} +.icon-twitch{background-position:-48px -384px} +.icon-youtube{background-position:-64px -384px} +.icon-popout{background-position:-80px -384px} +.icon-share-opts{background-position:-96px -384px} +.icon-logout{background-position:-112px -384px} +.icon-signup{background-position:-128px -384px} +.icon-queue{background-position:-144px -384px} +.icon-maintenance{background-position:0 -400px} +.icon-security{background-position:-16px -400px} +.icon-authenticator-unknown{background-position:-32px -400px} +.icon-authenticator-present{background-position:-48px -400px} +.icon-account-forgot{background-position:-64px -400px} +.icon-account-locked{background-position:-80px -400px} +.icon-email-forgot{background-position:-96px -400px} +.icon-remove-authenticator{background-position:-112px -400px} +.icon-authenticator-mobile{background-position:-128px -400px} +.icon-ipin{background-position:-144px -400px} +.icon-overwatch{background-position:0 -416px} +.icon-add-overwatch{background-position:-16px -416px} +.icon-friends-overwatch{background-position:-32px -416px} +.icon-news-overwatch{background-position:-48px -416px} +.icon-disk{background-position:-64px -416px} +.icon-confirm{background-position:-80px -416px} +.icon-decline{background-position:-96px -416px} +.icon-android{background-position:-112px -416px} +.icon-xbone{background-position:-128px -416px} +.icon-x360{background-position:-144px -416px} +.icon-ps3{background-position:0 -432px} +.icon-ps4{background-position:-16px -432px} +.icon-48-placeholder{background-position:0 0} +.icon-48-ban-circle{background-position:-48px 0} +.icon-48-time{background-position:-96px 0} +.icon-48-add-time{background-position:-144px 0} +.icon-48-question-circle{background-position:-192px 0} +.icon-48-balance{background-position:-240px 0} +.icon-48-remove-circle{background-position:-288px 0} +.icon-48-mouse{background-position:-336px 0} +.icon-48-mouse-delete{background-position:-384px 0} +.icon-48-envelope{background-position:-432px 0} +.icon-48-open-envelope{background-position:0 -48px} +.icon-48-home{background-position:-48px -48px} +.icon-48-play{background-position:-96px -48px} +.icon-48-pause{background-position:-144px -48px} +.icon-48-file{background-position:-192px -48px} +.icon-48-search{background-position:-240px -48px} +.icon-48-edit{background-position:-288px -48px} +.icon-48-shopping-cart{background-position:-336px -48px} +.icon-48-download-alt{background-position:-384px -48px} +.icon-48-achievement{background-position:-432px -48px} +.icon-48-heart{background-position:0 -96px} +.icon-48-heart-broken{background-position:-48px -96px} +.icon-48-comment{background-position:-96px -96px} +.icon-48-gavel{background-position:-144px -96px} +.icon-48-broadcast{background-position:-192px -96px} +.icon-48-service{background-position:-240px -96px} +.icon-48-headphones-alt{background-position:-288px -96px} +.icon-48-user{background-position:-336px -96px} +.icon-48-flask{background-position:-384px -96px} +.icon-48-chevron-left{background-position:-432px -96px} +.icon-48-chevron-right{background-position:0 -144px} +.icon-48-share{background-position:-48px -144px} +.icon-48-bookmarks{background-position:-96px -144px} +.icon-48-cog{background-position:-144px -144px} +.icon-48-mobile{background-position:-192px -144px} +.icon-48-download-square{background-position:-240px -144px} +.icon-48-upload{background-position:-288px -144px} +.icon-48-group{background-position:-336px -144px} +.icon-48-crown{background-position:-384px -144px} +.icon-48-globe-alt{background-position:-432px -144px} +.icon-48-series{background-position:0 -192px} +.icon-48-paw{background-position:-48px -192px} +.icon-48-trash{background-position:-96px -192px} +.icon-48-windows{background-position:-144px -192px} +.icon-48-apple{background-position:-192px -192px} +.icon-48-gift{background-position:-240px -192px} +.icon-48-refresh{background-position:-288px -192px} +.icon-48-reset{background-position:-336px -192px} +.icon-48-check{background-position:-384px -192px} +.icon-48-external-link{background-position:-432px -192px} +.icon-48-character{background-position:0 -240px} +.icon-48-character-add{background-position:-48px -240px} +.icon-48-character-search{background-position:-96px -240px} +.icon-48-character-remove{background-position:-144px -240px} +.icon-48-character-cog{background-position:-192px -240px} +.icon-48-download-alt-cog{background-position:-240px -240px} +.icon-48-download-alt-search{background-position:-288px -240px} +.icon-48-lock{background-position:-336px -240px} +.icon-48-warning-sign{background-position:-384px -240px} +.icon-48-ok{background-position:-432px -240px} +.icon-48-speaker{background-position:0 -288px} +.icon-48-wow{background-position:-48px -288px} +.icon-48-warcraft{background-position:-96px -288px} +.icon-48-starcraft{background-position:-144px -288px} +.icon-48-starcraft-2{background-position:-192px -288px} +.icon-48-diablo-3{background-position:-240px -288px} +.icon-48-battlenet{background-position:-288px -288px} +.icon-48-remove{background-position:-336px -288px} +.icon-48-repeat{background-position:-384px -288px} +.icon-48-dropdown{background-position:-432px -288px} +.icon-48-shortcut{background-position:0 -336px} +.icon-48-wrench{background-position:-48px -336px} +.icon-48-plus{background-position:-96px -336px} +.icon-48-fullscreen{background-position:-144px -336px} +.icon-48-glass{background-position:-192px -336px} +.icon-48-music-alt{background-position:-240px -336px} +.icon-48-music{background-position:-288px -336px} +.icon-48-star-empty{background-position:-336px -336px} +.icon-48-star{background-position:-384px -336px} +.icon-48-film{background-position:-432px -336px} +.icon-48-th-large{background-position:0 -384px} +.icon-48-th{background-position:-48px -384px} +.icon-48-th-list{background-position:-96px -384px} +.icon-48-zoom-in{background-position:-144px -384px} +.icon-48-zoom-out{background-position:-192px -384px} +.icon-48-off{background-position:-240px -384px} +.icon-48-signal{background-position:-288px -384px} +.icon-48-road{background-position:-336px -384px} +.icon-48-upload-square{background-position:-384px -384px} +.icon-48-download{background-position:-432px -384px} +.icon-48-inbox{background-position:0 -432px} +.icon-48-play-circle{background-position:-48px -432px} +.icon-48-list-alt{background-position:-96px -432px} +.icon-48-flag{background-position:-144px -432px} +.icon-48-headphones{background-position:-192px -432px} +.icon-48-volume{background-position:-240px -432px} +.icon-48-volume-off{background-position:-288px -432px} +.icon-48-volume-down{background-position:-336px -432px} +.icon-48-volume-up{background-position:-384px -432px} +.icon-48-qrcode{background-position:-432px -432px} +.icon-48-barcode{background-position:0 -480px} +.icon-48-tag{background-position:-48px -480px} +.icon-48-tags{background-position:-96px -480px} +.icon-48-book{background-position:-144px -480px} +.icon-48-bookmark{background-position:-192px -480px} +.icon-48-print{background-position:-240px -480px} +.icon-48-camera{background-position:-288px -480px} +.icon-48-font{background-position:-336px -480px} +.icon-48-bold{background-position:-384px -480px} +.icon-48-italic{background-position:-432px -480px} +.icon-48-text-height{background-position:0 -528px} +.icon-48-text-width{background-position:-48px -528px} +.icon-48-align-left{background-position:-96px -528px} +.icon-48-align-right{background-position:-192px -528px} +.icon-48-align-justify{background-position:-240px -528px} +.icon-48-list{background-position:-288px -528px} +.icon-48-indent-left{background-position:-336px -528px} +.icon-48-indent-right{background-position:-384px -528px} +.icon-48-facetime-video{background-position:-432px -528px} +.icon-48-picture{background-position:0 -576px} +.icon-48-pencil{background-position:-48px -576px} +.icon-48-map-marker{background-position:-96px -576px} +.icon-48-adjust{background-position:-144px -576px} +.icon-48-tint{background-position:-192px -576px} +.icon-48-move{background-position:-240px -576px} +.icon-48-step-backward{background-position:-288px -576px} +.icon-48-fast-backward{background-position:-336px -576px} +.icon-48-backward{background-position:-384px -576px} +.icon-48-step-forward{background-position:-432px -576px} +.icon-48-fast-forward{background-position:0 -624px} +.icon-48-forward{background-position:-48px -624px} +.icon-48-eject{background-position:-96px -624px} +.icon-48-square{background-position:-144px -624px} +.icon-48-plus-circle{background-position:-192px -624px} +.icon-48-minus-circle{background-position:-240px -624px} +.icon-48-plus-sign{background-position:-288px -624px} +.icon-48-minus-sign{background-position:-336px -624px} +.icon-48-remove-sign{background-position:-384px -624px} +.icon-48-ok-circle{background-position:-432px -624px} +.icon-48-ok-sign{background-position:0 -672px} +.icon-48-minus{background-position:-48px -672px} +.icon-48-info-circle{background-position:-96px -672px} +.icon-48-info-sign{background-position:-144px -672px} +.icon-48-question-sign{background-position:-192px -672px} +.icon-48-screenshot{background-position:-240px -672px} +.icon-48-arrow-right{background-position:-288px -672px} +.icon-48-arrow-left{background-position:-336px -672px} +.icon-48-arrow-up{background-position:-384px -672px} +.icon-48-arrow-down{background-position:-432px -672px} +.icon-48-share-alt{background-position:0 -720px} +.icon-48-resize-full{background-position:-48px -720px} +.icon-48-resize-small{background-position:-96px -720px} +.icon-48-asterisk{background-position:-144px -720px} +.icon-48-exclamation-circle{background-position:-192px -720px} +.icon-48-exclamation-sign{background-position:-240px -720px} +.icon-48-leaf{background-position:-288px -720px} +.icon-48-fire{background-position:-336px -720px} +.icon-48-eye-open{background-position:-384px -720px} +.icon-48-eye-close{background-position:-432px -720px} +.icon-48-plane{background-position:0 -768px} +.icon-48-calendar{background-position:-48px -768px} +.icon-48-random{background-position:-96px -768px} +.icon-48-magnet{background-position:-144px -768px} +.icon-48-chevron-down{background-position:-192px -768px} +.icon-48-folder-close{background-position:-288px -768px} +.icon-48-folder-open{background-position:-336px -768px} +.icon-48-resize-vertical{background-position:-384px -768px} +.icon-48-resize-horizontal{background-position:-432px -768px} +.icon-48-hdd{background-position:0 -816px} +.icon-48-bullhorn{background-position:-48px -816px} +.icon-48-bell{background-position:-96px -816px} +.icon-48-certificate-empty{background-position:-144px -816px} +.icon-48-certificate{background-position:-192px -816px} +.icon-48-thumbs-up{background-position:-240px -816px} +.icon-48-thumbs-down{background-position:-288px -816px} +.icon-48-hand-right{background-position:-336px -816px} +.icon-48-hand-left{background-position:-384px -816px} +.icon-48-hand-up{background-position:-432px -816px} +.icon-48-hand-down{background-position:0 -864px} +.icon-48-arrow-right-square{background-position:-48px -864px} +.icon-48-arrow-left-square{background-position:-96px -864px} +.icon-48-arrow-right-circle{background-position:-144px -864px} +.icon-48-arrow-left-circle{background-position:-192px -864px} +.icon-48-globe{background-position:-240px -864px} +.icon-48-tasks{background-position:-288px -864px} +.icon-48-filter{background-position:-336px -864px} +.icon-48-briefcase{background-position:-384px -864px} +.icon-48-underline{background-position:-432px -864px} +.icon-48-sort{background-position:0 -912px} +.icon-48-sort-descending{background-position:-48px -912px} +.icon-48-sort-ascending{background-position:-96px -912px} +.icon-48-sort-disabled{background-position:-144px -912px} +.icon-48-arrow-down-solid{background-position:-192px -912px} +.icon-48-arrow-up-solid{background-position:-240px -912px} +.icon-48-arrow-left-solid{background-position:-288px -912px} +.icon-48-arrow-right-solid{background-position:-336px -912px} +.icon-48-0-sign{background-position:-384px -912px} +.icon-48-1-sign{background-position:-432px -912px} +.icon-48-2-sign{background-position:0 -960px} +.icon-48-3-sign{background-position:-48px -960px} +.icon-48-4-sign{background-position:-96px -960px} +.icon-48-5-sign{background-position:-144px -960px} +.icon-48-6-sign{background-position:-192px -960px} +.icon-48-7-sign{background-position:-240px -960px} +.icon-48-8-sign{background-position:-288px -960px} +.icon-48-9-sign{background-position:-336px -960px} +.icon-48-secure{background-position:-384px -960px} +.icon-48-not-secure{background-position:-432px -960px} +.icon-48-add-wow{background-position:0 -1008px} +.icon-48-add-warcraft{background-position:-48px -1008px} +.icon-48-add-starcraft{background-position:-96px -1008px} +.icon-48-add-starcraft-2{background-position:-144px -1008px} +.icon-48-add-diablo-3{background-position:-192px -1008px} +.icon-48-add-battlenet{background-position:-240px -1008px} +.icon-48-free-game-services{background-position:-288px -1008px} +.icon-48-character-services{background-position:-336px -1008px} +.icon-48-facebook{background-position:-384px -1008px} +.icon-48-twitter{background-position:-432px -1008px} +.icon-48-hearthstone{background-position:0 -1056px} +.icon-48-add-hearthstone{background-position:-48px -1056px} +.icon-48-heroes{background-position:-96px -1056px} +.icon-48-add-heroes{background-position:-144px -1056px} +.icon-48-friends-wow{background-position:-192px -1056px} +.icon-48-friends-warcraft{background-position:-240px -1056px} +.icon-48-friends-starcraft{background-position:-288px -1056px} +.icon-48-friends-starcraft-2{background-position:-336px -1056px} +.icon-48-friends-diablo-3{background-position:-384px -1056px} +.icon-48-friends-battlenet{background-position:-432px -1056px} +.icon-48-friends-hearthstone{background-position:0 -1104px} +.icon-48-friends-heroes{background-position:-48px -1104px} +.icon-48-news-wow{background-position:-96px -1104px} +.icon-48-news-warcraft{background-position:-144px -1104px} +.icon-48-news-starcraft{background-position:-192px -1104px} +.icon-48-news-starcraft-2{background-position:-240px -1104px} +.icon-48-news-diablo-3{background-position:-288px -1104px} +.icon-48-news-battlenet{background-position:-336px -1104px} +.icon-48-news-hearthstone{background-position:-384px -1104px} +.icon-48-news-heroes{background-position:-432px -1104px} +.icon-48-git{background-position:0 -1152px} +.icon-48-bootstrap{background-position:-48px -1152px} +.icon-48-maven{background-position:-96px -1152px} +.icon-48-twitch{background-position:-144px -1152px} +.icon-48-youtube{background-position:-192px -1152px} +.icon-48-popout{background-position:-240px -1152px} +.icon-48-share-opts{background-position:-288px -1152px} +.icon-48-logout{background-position:-336px -1152px} +.icon-48-signup{background-position:-384px -1152px} +.icon-48-queue{background-position:-432px -1152px} +.icon-48-maintenance{background-position:0 -1200px} +.icon-48-security{background-position:-48px -1200px} +.icon-48-authenticator-unknown{background-position:-96px -1200px} +.icon-48-authenticator-present{background-position:-144px -1200px} +.icon-48-account-forgot{background-position:-192px -1200px} +.icon-48-account-locked{background-position:-240px -1200px} +.icon-48-email-forgot{background-position:-288px -1200px} +.icon-48-remove-authenticator{background-position:-336px -1200px} +.icon-48-authenticator-mobile{background-position:-384px -1200px} +.icon-48-ipin{background-position:-432px -1200px} +.icon-48-overwatch{background-position:0 -1248px} +.icon-48-add-overwatch{background-position:-48px -1248px} +.icon-48-friends-overwatch{background-position:-96px -1248px} +.icon-48-news-overwatch{background-position:-144px -1248px} +.icon-128-placeholder{background-position:0 0} +.icon-128-ban-circle{background-position:-128px 0} +.icon-128-time{background-position:-256px 0} +.icon-128-add-time{background-position:-384px 0} +.icon-128-question-circle{background-position:-512px 0} +.icon-128-balance{background-position:-640px 0} +.icon-128-remove-circle{background-position:-768px 0} +.icon-128-mouse{background-position:-896px 0} +.icon-128-mouse-delete{background-position:-1024px 0} +.icon-128-envelope{background-position:-1152px 0} +.icon-128-open-envelope{background-position:0 -128px} +.icon-128-home{background-position:-128px -128px} +.icon-128-play{background-position:-256px -128px} +.icon-128-pause{background-position:-384px -128px} +.icon-128-file{background-position:-512px -128px} +.icon-128-search{background-position:-640px -128px} +.icon-128-edit{background-position:-768px -128px} +.icon-128-shopping-cart{background-position:-896px -128px} +.icon-128-download-alt{background-position:-1024px -128px} +.icon-128-achievement{background-position:-1152px -128px} +.icon-128-heart{background-position:0 -256px} +.icon-128-heart-broken{background-position:-128px -256px} +.icon-128-comment{background-position:-256px -256px} +.icon-128-gavel{background-position:-384px -256px} +.icon-128-broadcast{background-position:-512px -256px} +.icon-128-service{background-position:-640px -256px} +.icon-128-headphones-alt{background-position:-768px -256px} +.icon-128-user{background-position:-896px -256px} +.icon-128-flask{background-position:-1024px -256px} +.icon-128-chevron-left{background-position:-1152px -256px} +.icon-128-chevron-right{background-position:0 -384px} +.icon-128-share{background-position:-128px -384px} +.icon-128-bookmarks{background-position:-256px -384px} +.icon-128-cog{background-position:-384px -384px} +.icon-128-mobile{background-position:-512px -384px} +.icon-128-download-square{background-position:-640px -384px} +.icon-128-upload{background-position:-768px -384px} +.icon-128-group{background-position:-896px -384px} +.icon-128-crown{background-position:-1024px -384px} +.icon-128-globe-alt{background-position:-1152px -384px} +.icon-128-series{background-position:0 -512px} +.icon-128-paw{background-position:-128px -512px} +.icon-128-trash{background-position:-256px -512px} +.icon-128-windows{background-position:-384px -512px} +.icon-128-apple{background-position:-512px -512px} +.icon-128-gift{background-position:-640px -512px} +.icon-128-refresh{background-position:-768px -512px} +.icon-128-reset{background-position:-896px -512px} +.icon-128-check{background-position:-1024px -512px} +.icon-128-external-link{background-position:-1152px -512px} +.icon-128-character{background-position:0 -640px} +.icon-128-character-add{background-position:-128px -640px} +.icon-128-character-search{background-position:-256px -640px} +.icon-128-character-remove{background-position:-384px -640px} +.icon-128-character-cog{background-position:-512px -640px} +.icon-128-download-alt-cog{background-position:-640px -640px} +.icon-128-download-alt-search{background-position:-768px -640px} +.icon-128-lock{background-position:-896px -640px} +.icon-128-warning-sign{background-position:-1024px -640px} +.icon-128-ok{background-position:-1152px -640px} +.icon-128-speaker{background-position:0 -768px} +.icon-128-wow{background-position:-128px -768px} +.icon-128-warcraft{background-position:-256px -768px} +.icon-128-starcraft{background-position:-384px -768px} +.icon-128-starcraft-2{background-position:-512px -768px} +.icon-128-diablo-3{background-position:-640px -768px} +.icon-128-battlenet{background-position:-768px -768px} +.icon-128-remove{background-position:-896px -768px} +.icon-128-repeat{background-position:-1024px -768px} +.icon-128-dropdown{background-position:-1152px -768px} +.icon-128-shortcut{background-position:0 -896px} +.icon-128-wrench{background-position:-128px -896px} +.icon-128-plus{background-position:-256px -896px} +.icon-128-fullscreen{background-position:-384px -896px} +.icon-128-glass{background-position:-512px -896px} +.icon-128-music-alt{background-position:-640px -896px} +.icon-128-music{background-position:-768px -896px} +.icon-128-star-empty{background-position:-896px -896px} +.icon-128-star{background-position:-1024px -896px} +.icon-128-film{background-position:-1152px -896px} +.icon-128-th-large{background-position:0 -1024px} +.icon-128-th{background-position:-128px -1024px} +.icon-128-th-list{background-position:-256px -1024px} +.icon-128-zoom-in{background-position:-384px -1024px} +.icon-128-zoom-out{background-position:-512px -1024px} +.icon-128-off{background-position:-640px -1024px} +.icon-128-signal{background-position:-768px -1024px} +.icon-128-road{background-position:-896px -1024px} +.icon-128-upload-square{background-position:-1024px -1024px} +.icon-128-download{background-position:-1152px -1024px} +.icon-128-inbox{background-position:0 -1152px} +.icon-128-play-circle{background-position:-128px -1152px} +.icon-128-list-alt{background-position:-256px -1152px} +.icon-128-flag{background-position:-384px -1152px} +.icon-128-headphones{background-position:-512px -1152px} +.icon-128-volume{background-position:-640px -1152px} +.icon-128-volume-off{background-position:-768px -1152px} +.icon-128-volume-down{background-position:-896px -1152px} +.icon-128-volume-up{background-position:-1024px -1152px} +.icon-128-qrcode{background-position:-1152px -1152px} +.icon-128-barcode{background-position:0 -1280px} +.icon-128-tag{background-position:-128px -1280px} +.icon-128-tags{background-position:-256px -1280px} +.icon-128-book{background-position:-384px -1280px} +.icon-128-bookmark{background-position:-512px -1280px} +.icon-128-print{background-position:-640px -1280px} +.icon-128-camera{background-position:-768px -1280px} +.icon-128-font{background-position:-896px -1280px} +.icon-128-bold{background-position:-1024px -1280px} +.icon-128-italic{background-position:-1152px -1280px} +.icon-128-text-height{background-position:0 -1408px} +.icon-128-text-width{background-position:-128px -1408px} +.icon-128-align-left{background-position:-256px -1408px} +.icon-128-align-right{background-position:-512px -1408px} +.icon-128-align-justify{background-position:-640px -1408px} +.icon-128-list{background-position:-768px -1408px} +.icon-128-indent-left{background-position:-896px -1408px} +.icon-128-indent-right{background-position:-1024px -1408px} +.icon-128-facetime-video{background-position:-1152px -1408px} +.icon-128-picture{background-position:0 -1536px} +.icon-128-pencil{background-position:-128px -1536px} +.icon-128-map-marker{background-position:-256px -1536px} +.icon-128-adjust{background-position:-384px -1536px} +.icon-128-tint{background-position:-512px -1536px} +.icon-128-move{background-position:-640px -1536px} +.icon-128-step-backward{background-position:-768px -1536px} +.icon-128-fast-backward{background-position:-896px -1536px} +.icon-128-backward{background-position:-1024px -1536px} +.icon-128-step-forward{background-position:-1152px -1536px} +.icon-128-fast-forward{background-position:0 -1664px} +.icon-128-forward{background-position:-128px -1664px} +.icon-128-eject{background-position:-256px -1664px} +.icon-128-square{background-position:-384px -1664px} +.icon-128-plus-circle{background-position:-512px -1664px} +.icon-128-minus-circle{background-position:-640px -1664px} +.icon-128-plus-sign{background-position:-768px -1664px} +.icon-128-minus-sign{background-position:-896px -1664px} +.icon-128-remove-sign{background-position:-1024px -1664px} +.icon-128-ok-circle{background-position:-1152px -1664px} +.icon-128-ok-sign{background-position:0 -1792px} +.icon-128-minus{background-position:-128px -1792px} +.icon-128-info-circle{background-position:-256px -1792px} +.icon-128-info-sign{background-position:-384px -1792px} +.icon-128-question-sign{background-position:-512px -1792px} +.icon-128-screenshot{background-position:-640px -1792px} +.icon-128-arrow-right{background-position:-768px -1792px} +.icon-128-arrow-left{background-position:-896px -1792px} +.icon-128-arrow-up{background-position:-1024px -1792px} +.icon-128-arrow-down{background-position:-1152px -1792px} +.icon-128-share-alt{background-position:0 -1920px} +.icon-128-resize-full{background-position:-128px -1920px} +.icon-128-resize-small{background-position:-256px -1920px} +.icon-128-asterisk{background-position:-384px -1920px} +.icon-128-exclamation-circle{background-position:-512px -1920px} +.icon-128-exclamation-sign{background-position:-640px -1920px} +.icon-128-leaf{background-position:-768px -1920px} +.icon-128-fire{background-position:-896px -1920px} +.icon-128-eye-open{background-position:-1024px -1920px} +.icon-128-eye-close{background-position:-1152px -1920px} +.icon-128-plane{background-position:0 -2048px} +.icon-128-calendar{background-position:-128px -2048px} +.icon-128-random{background-position:-256px -2048px} +.icon-128-magnet{background-position:-384px -2048px} +.icon-128-chevron-down{background-position:-512px -2048px} +.icon-128-folder-close{background-position:-768px -2048px} +.icon-128-folder-open{background-position:-896px -2048px} +.icon-128-resize-vertical{background-position:-1024px -2048px} +.icon-128-resize-horizontal{background-position:-1152px -2048px} +.icon-128-hdd{background-position:0 -2176px} +.icon-128-bullhorn{background-position:-128px -2176px} +.icon-128-bell{background-position:-256px -2176px} +.icon-128-certificate-empty{background-position:-384px -2176px} +.icon-128-certificate{background-position:-512px -2176px} +.icon-128-thumbs-up{background-position:-640px -2176px} +.icon-128-thumbs-down{background-position:-768px -2176px} +.icon-128-hand-right{background-position:-896px -2176px} +.icon-128-hand-left{background-position:-1024px -2176px} +.icon-128-hand-up{background-position:-1152px -2176px} +.icon-128-hand-down{background-position:0 -2304px} +.icon-128-arrow-right-square{background-position:-128px -2304px} +.icon-128-arrow-left-square{background-position:-256px -2304px} +.icon-128-arrow-right-circle{background-position:-384px -2304px} +.icon-128-arrow-left-circle{background-position:-512px -2304px} +.icon-128-globe{background-position:-640px -2304px} +.icon-128-tasks{background-position:-768px -2304px} +.icon-128-filter{background-position:-896px -2304px} +.icon-128-briefcase{background-position:-1024px -2304px} +.icon-128-underline{background-position:-1152px -2304px} +.icon-128-sort{background-position:0 -2432px} +.icon-128-sort-descending{background-position:-128px -2432px} +.icon-128-sort-ascending{background-position:-256px -2432px} +.icon-128-sort-disabled{background-position:-384px -2432px} +.icon-128-arrow-down-solid{background-position:-512px -2432px} +.icon-128-arrow-up-solid{background-position:-640px -2432px} +.icon-128-arrow-left-solid{background-position:-768px -2432px} +.icon-128-arrow-right-solid{background-position:-896px -2432px} +.icon-128-0-sign{background-position:-1024px -2432px} +.icon-128-1-sign{background-position:-1152px -2432px} +.icon-128-2-sign{background-position:0 -2560px} +.icon-128-3-sign{background-position:-128px -2560px} +.icon-128-4-sign{background-position:-256px -2560px} +.icon-128-5-sign{background-position:-384px -2560px} +.icon-128-6-sign{background-position:-512px -2560px} +.icon-128-7-sign{background-position:-640px -2560px} +.icon-128-8-sign{background-position:-768px -2560px} +.icon-128-9-sign{background-position:-896px -2560px} +.icon-128-secure{background-position:-1024px -2560px} +.icon-128-not-secure{background-position:-1152px -2560px} +.icon-128-add-wow{background-position:0 -2688px} +.icon-128-add-warcraft{background-position:-128px -2688px} +.icon-128-add-starcraft{background-position:-256px -2688px} +.icon-128-add-starcraft-2{background-position:-384px -2688px} +.icon-128-add-diablo-3{background-position:-512px -2688px} +.icon-128-add-battlenet{background-position:-640px -2688px} +.icon-128-free-game-services{background-position:-768px -2688px} +.icon-128-character-services{background-position:-896px -2688px} +.icon-128-facebook{background-position:-1024px -2688px} +.icon-128-twitter{background-position:-1152px -2688px} +.icon-128-hearthstone{background-position:0 -2816px} +.icon-128-add-hearthstone{background-position:-128px -2816px} +.icon-128-heroes{background-position:-256px -2816px} +.icon-128-add-heroes{background-position:-384px -2816px} +.icon-128-friends-wow{background-position:-512px -2816px} +.icon-128-friends-warcraft{background-position:-640px -2816px} +.icon-128-friends-starcraft{background-position:-768px -2816px} +.icon-128-friends-starcraft-2{background-position:-896px -2816px} +.icon-128-friends-diablo-3{background-position:-1024px -2816px} +.icon-128-friends-battlenet{background-position:-1152px -2816px} +.icon-128-friends-hearthstone{background-position:0 -2944px} +.icon-128-friends-heroes{background-position:-128px -2944px} +.icon-128-news-wow{background-position:-256px -2944px} +.icon-128-news-warcraft{background-position:-384px -2944px} +.icon-128-news-starcraft{background-position:-512px -2944px} +.icon-128-news-starcraft-2{background-position:-640px -2944px} +.icon-128-news-diablo-3{background-position:-768px -2944px} +.icon-128-news-battlenet{background-position:-896px -2944px} +.icon-128-news-hearthstone{background-position:-1024px -2944px} +.icon-128-news-heroes{background-position:-1152px -2944px} +.icon-128-git{background-position:0 -3072px} +.icon-128-bootstrap{background-position:-128px -3072px} +.icon-128-maven{background-position:-256px -3072px} +.icon-128-twitch{background-position:-384px -3072px} +.icon-128-youtube{background-position:-512px -3072px} +.icon-128-popout{background-position:-640px -3072px} +.icon-128-share-opts{background-position:-768px -3072px} +.icon-128-logout{background-position:-896px -3072px} +.icon-128-signup{background-position:-1024px -3072px} +.icon-128-queue{background-position:-1152px -3072px} +.icon-128-maintenance{background-position:0 -3200px} +.icon-128-security{background-position:-128px -3200px} +.icon-128-authenticator-unknown{background-position:-256px -3200px} +.icon-128-authenticator-present{background-position:-384px -3200px} +.icon-128-account-forgot{background-position:-512px -3200px} +.icon-128-account-locked{background-position:-640px -3200px} +.icon-128-email-forgot{background-position:-768px -3200px} +.icon-128-remove-authenticator{background-position:-896px -3200px} +.icon-128-authenticator-mobile{background-position:-1024px -3200px} +.icon-128-ipin{background-position:-1152px -3200px} +.icon-128-overwatch{background-position:0 -3328px} +.icon-128-add-overwatch{background-position:-128px -3328px} +.icon-128-friends-overwatch{background-position:-256px -3328px} +.icon-128-news-overwatch{background-position:-384px -3328px} +.icon-payment-placeholder{background-position:0 0} +.icon-payment-visa{background-position:-24px 0} +.icon-payment-visa-electron{background-position:-48px 0} +.icon-payment-visa-debit{background-position:-72px 0} +.icon-payment-mastercard{background-position:-96px 0} +.icon-payment-maestro{background-position:-120px 0} +.icon-payment-american-express{background-position:-144px 0} +.icon-payment-discover{background-position:-168px 0} +.icon-payment-diners-club{background-position:0 -16px} +.icon-payment-jcb{background-position:-24px -16px} +.icon-payment-carte-bleue{background-position:-48px -16px} +.icon-payment-giropay{background-position:-72px -16px} +.icon-payment-webmoney{background-position:-96px -16px} +.icon-payment-ideal{background-position:-120px -16px} +.icon-payment-solo{background-position:-144px -16px} +.icon-payment-oxxo{background-position:-168px -16px} +.icon-payment-seven-eleven{background-position:0 -32px} +.icon-payment-santander{background-position:-24px -32px} +.icon-payment-bbva-bancomer{background-position:-48px -32px} +.icon-payment-ixe{background-position:-72px -32px} +.icon-payment-hsbc{background-position:-96px -32px} +.icon-payment-scotiabank{background-position:-120px -32px} +.icon-payment-t-online{background-position:-144px -32px} +.icon-payment-qiwi{background-position:-168px -32px} +.icon-payment-dineromail{background-position:0 -48px} +.icon-payment-dinheiromail{background-position:-24px -48px} +.icon-payment-pago-facil{background-position:-48px -48px} +.icon-payment-magna{background-position:-72px -48px} +.icon-payment-italcred{background-position:-96px -48px} +.icon-payment-hipercard{background-position:-120px -48px} +.icon-payment-cobro-express{background-position:-144px -48px} +.icon-payment-cabal{background-position:-168px -48px} +.icon-payment-bapro{background-position:0 -64px} +.icon-payment-banamex{background-position:-24px -64px} +.icon-payment-servipag{background-position:-48px -64px} +.icon-payment-rapipago{background-position:-72px -64px} +.icon-payment-presto{background-position:-96px -64px} +.icon-payment-payone{background-position:-120px -64px} +.icon-payment-tarjeta-shopping{background-position:-144px -64px} +.icon-payment-aura{background-position:-168px -64px} +.icon-payment-banco-de-chile{background-position:0 -80px} +.icon-payment-miscuentas{background-position:-24px -80px} +.icon-payment-argencard{background-position:-48px -80px} +.icon-payment-paggo{background-position:-72px -80px} +.icon-payment-banco-de-brasil{background-position:-96px -80px} +.icon-payment-bradesco{background-position:-120px -80px} +.icon-payment-todito-card{background-position:-144px -80px} +.icon-payment-todito-cash{background-position:-168px -80px} +.icon-payment-elv{background-position:0 -96px} +.icon-payment-automatische-incasso{background-position:-24px -96px} +.icon-payment-lastschriftverfahren{background-position:-48px -96px} +.icon-payment-domiciliacion-bancaria{background-position:-72px -96px} +.icon-payment-boleto-bancario{background-position:-96px -96px} +.icon-payment-paypal{background-position:-120px -96px} +.icon-payment-battlenet-balance{background-position:-144px -96px} +.icon-payment-chase-paymentech{background-position:-168px -96px} +.icon-payment-global-collect{background-position:0 -112px} +.icon-payment-netease{background-position:-24px -112px} +.icon-payment-credit-card,.icon-payment-neweb-credit-card{background-position:-48px -112px} +.icon-payment-lguplus-ars{background-position:-72px -112px} +.icon-payment-lguplus-wire-transfer{background-position:-96px -112px} +.icon-payment-danal-mobile{background-position:-120px -112px} +.icon-payment-inicis-credit-card{background-position:-144px -112px} +.icon-payment-kr-gift-card{background-position:-168px -112px} +.icon-payment-gift-card{background-position:0 -128px} +.icon-payment-tarjeta-naranja{background-position:-24px -128px} +.icon-payment-ripsa-pagos{background-position:-48px -128px} +.icon-payment-provincia-pagos{background-position:-72px -128px} +.icon-payment-elo{background-position:-96px -128px} +.icon-payment-banrisul{background-position:-120px -128px} +.icon-payment-bci{background-position:-144px -128px} +.icon-payment-sencillito{background-position:-168px -128px} +.icon-payment-ripley{background-position:0 -144px} +.icon-payment-banbajio{background-position:-24px -144px} +.icon-payment-visa-virtual{background-position:-48px -144px} +.icon-payment-money-online{background-position:-72px -144px} +.icon-payment-mycard{background-position:-96px -144px} +.icon-payment-neweb-alipay{background-position:-120px -144px} +.icon-payment-neweb-virtualatm{background-position:-144px -144px} +.icon-payment-neweb-atm{background-position:-168px -144px} +.icon-payment-kr-cvs{background-position:0 -160px} +.icon-payment-lguplus-gift-cert-b{background-position:-48px -160px} +.icon-payment-lguplus-gift-cert-c{background-position:-72px -160px} +.icon-payment-cencosud{background-position:-96px -160px} +.icon-payment-netease-wallet{background-position:-120px -160px} +.icon-payment-payu{background-position:-144px -160px} +.icon-payment-banco-de-bogota{background-position:-168px -160px} +.icon-payment-bancolombia{background-position:0 -176px} +.icon-payment-efecty{background-position:-24px -176px} +.icon-payment-pse{background-position:-48px -176px} +.icon-payment-via-baloto{background-position:-72px -176px} +.icon-payment-diestel{background-position:-96px -176px} +.icon-payment-bcp-agente-bcp{background-position:-120px -176px} +.icon-payment-internet-via-bcp{background-position:-144px -176px} +.icon-payment-bcp-ventanilla-agencias{background-position:-168px -176px} +.icon-payment-debito-automatico{background-position:-24px -192px} +.icon-payment-itau{background-position:-48px -192px} +.icon-payment-cash-on-delivery{background-position:-72px -192px} +.icon-24-payment-placeholder{background-position:0 0} +.icon-24-payment-visa{background-position:-36px 0} +.icon-24-payment-visa-electron{background-position:-72px 0} +.icon-24-payment-visa-debit{background-position:-108px 0} +.icon-24-payment-mastercard{background-position:-144px 0} +.icon-24-payment-maestro{background-position:-180px 0} +.icon-24-payment-american-express{background-position:-216px 0} +.icon-24-payment-discover{background-position:-252px 0} +.icon-24-payment-diners-club{background-position:0 -24px} +.icon-24-payment-jcb{background-position:-36px -24px} +.icon-24-payment-carte-bleue{background-position:-72px -24px} +.icon-24-payment-giropay{background-position:-108px -24px} +.icon-24-payment-webmoney{background-position:-144px -24px} +.icon-24-payment-ideal{background-position:-180px -24px} +.icon-24-payment-solo{background-position:-216px -24px} +.icon-24-payment-oxxo{background-position:-252px -24px} +.icon-24-payment-seven-eleven{background-position:0 -48px} +.icon-24-payment-santander{background-position:-36px -48px} +.icon-24-payment-bbva-bancomer{background-position:-72px -48px} +.icon-24-payment-ixe{background-position:-108px -48px} +.icon-24-payment-hsbc{background-position:-144px -48px} +.icon-24-payment-scotiabank{background-position:-180px -48px} +.icon-24-payment-t-online{background-position:-216px -48px} +.icon-24-payment-qiwi{background-position:-252px -48px} +.icon-24-payment-dineromail{background-position:0 -72px} +.icon-24-payment-dinheiromail{background-position:-36px -72px} +.icon-24-payment-pago-facil{background-position:-72px -72px} +.icon-24-payment-magna{background-position:-108px -72px} +.icon-24-payment-italcred{background-position:-144px -72px} +.icon-24-payment-hipercard{background-position:-180px -72px} +.icon-24-payment-cobro-express{background-position:-216px -72px} +.icon-24-payment-cabal{background-position:-252px -72px} +.icon-24-payment-bapro{background-position:0 -96px} +.icon-24-payment-banamex{background-position:-36px -96px} +.icon-24-payment-servipag{background-position:-72px -96px} +.icon-24-payment-rapipago{background-position:-108px -96px} +.icon-24-payment-presto{background-position:-144px -96px} +.icon-24-payment-payone{background-position:-180px -96px} +.icon-24-payment-tarjeta-shopping{background-position:-216px -96px} +.icon-24-payment-aura{background-position:-252px -96px} +.icon-24-payment-banco-de-chile{background-position:0 -120px} +.icon-24-payment-miscuentas{background-position:-36px -120px} +.icon-24-payment-argencard{background-position:-72px -120px} +.icon-24-payment-paggo{background-position:-108px -120px} +.icon-24-payment-banco-de-brasil{background-position:-144px -120px} +.icon-24-payment-bradesco{background-position:-180px -120px} +.icon-24-payment-todito-card{background-position:-216px -120px} +.icon-24-payment-todito-cash{background-position:-252px -120px} +.icon-24-payment-elv{background-position:0 -144px} +.icon-24-payment-automatische-incasso{background-position:-36px -144px} +.icon-24-payment-lastschriftverfahren{background-position:-72px -144px} +.icon-24-payment-domiciliacion-bancaria{background-position:-108px -144px} +.icon-24-payment-boleto-bancario{background-position:-144px -144px} +.icon-24-payment-paypal{background-position:-180px -144px} +.icon-24-payment-battlenet-balance{background-position:-216px -144px} +.icon-24-payment-chase-paymentech{background-position:-252px -144px} +.icon-24-payment-global-collect{background-position:0 -168px} +.icon-24-payment-netease{background-position:-36px -168px} +.icon-24-payment-credit-card,.icon-24-payment-neweb-credit-card{background-position:-72px -168px} +.icon-24-payment-lguplus-ars{background-position:-108px -168px} +.icon-24-payment-lguplus-wire-transfer{background-position:-144px -168px} +.icon-24-payment-danal-mobile{background-position:-180px -168px} +.icon-24-payment-inicis-credit-card{background-position:-216px -168px} +.icon-24-payment-kr-gift-card{background-position:-252px -168px} +.icon-24-payment-gift-card{background-position:0 -192px} +.icon-24-payment-tarjeta-naranja{background-position:-36px -192px} +.icon-24-payment-ripsa-pagos{background-position:-72px -192px} +.icon-24-payment-provincia-pagos{background-position:-108px -192px} +.icon-24-payment-elo{background-position:-144px -192px} +.icon-24-payment-banrisul{background-position:-180px -192px} +.icon-24-payment-bci{background-position:-216px -192px} +.icon-24-payment-sencillito{background-position:-252px -192px} +.icon-24-payment-ripley{background-position:0 -216px} +.icon-24-payment-banbajio{background-position:-36px -216px} +.icon-24-payment-visa-virtual{background-position:-72px -216px} +.icon-24-payment-money-online{background-position:-108px -216px} +.icon-24-payment-mycard{background-position:-144px -216px} +.icon-24-payment-neweb-alipay{background-position:-180px -216px} +.icon-24-payment-neweb-virtualatm{background-position:-216px -216px} +.icon-24-payment-neweb-atm{background-position:-252px -216px} +.icon-24-payment-kr-cvs{background-position:0 -240px} +.icon-24-payment-kr-posa{background-position:-144px -288px} +.icon-24-payment-sepa{background-position:-36px -240px} +.icon-24-payment-lguplus-gift-cert-b{background-position:-72px -240px} +.icon-24-payment-lguplus-gift-cert-c{background-position:-108px -240px} +.icon-24-payment-cencosud{background-position:-144px -240px} +.icon-24-payment-netease-wallet{background-position:-180px -240px} +.icon-24-payment-payu{background-position:-216px -240px} +.icon-24-payment-banco-de-bogota{background-position:-252px -240px} +.icon-24-payment-bancolombia{background-position:0 -264px} +.icon-24-payment-efecty{background-position:-36px -264px} +.icon-24-payment-pse{background-position:-72px -264px} +.icon-24-payment-via-baloto{background-position:-108px -264px} +.icon-24-payment-diestel{background-position:-144px -264px} +.icon-24-payment-bcp-agente-bcp{background-position:-180px -264px} +.icon-24-payment-internet-via-bcp{background-position:-216px -264px} +.icon-24-payment-bcp-ventanilla-agencias{background-position:-252px -264px} +.icon-24-payment-debito-automatico{background-position:-36px -288px} +.icon-24-payment-itau{background-position:-72px -288px} +.icon-24-payment-cash-on-delivery{background-position:-108px -288px} +table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0} +.table{width:100%} +.table th,.table td{text-align:left;vertical-align:top} +.table thead th{vertical-align:bottom;position:relative} +.table thead th a.table-sort.sort-disabled,.table thead th a.table-sort.sort-disabled:hover,.table thead th a.table-sort.sort-disabled:focus{cursor:default} +.tooltip{position:absolute;display:block;visibility:visible;opacity:0} +.tooltip.in{opacity:1} +.tooltip-fixed{position:fixed} +.tooltip-inner{text-decoration:none} +.tooltip.left .tooltip-inner{text-align:left} +.tooltip.right .tooltip-inner{text-align:left} +.tooltipster-base{padding:0;font-size:0;line-height:0;position:absolute;left:0;top:0;pointer-events:none;width:auto;overflow:visible} +.tooltipster-base .tooltipster-content{overflow:hidden} +.tooltipster-arrow{display:block;text-align:center;width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1} +.tooltipster-arrow span,.tooltipster-arrow-border{display:block;width:0;height:0;position:absolute} +.tooltipster-fade{opacity:0;-webkit-transition-property:opacity;transition-property:opacity} +.tooltipster-fade-show{opacity:1} +.tooltipster-grow{-webkit-transform:scale(0,0);-ms-transform:scale(0,0);transform:scale(0,0);-webkit-transition-property:-webkit-transform;-webkit-transition-property:transform;transition-property:transform;-webkit-backface-visibility:hidden} +.tooltipster-grow-show{-webkit-transform:scale(1,1);-ms-transform:scale(1,1);transform:scale(1,1);-webkit-transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15);transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15)} +.tooltipster-swing{opacity:0;-webkit-transform:rotateZ(4deg);-ms-transform:rotateZ(4deg);transform:rotateZ(4deg);-webkit-transition-property:-webkit-transform;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-property:-webkit-transform,opacity} +.tooltipster-swing-show{opacity:1;-webkit-transform:rotateZ(0deg);-ms-transform:rotateZ(0deg);transform:rotateZ(0deg);-webkit-transition-timing-function:cubic-bezier(0.23,0.635,0.495,2.4);transition-timing-function:cubic-bezier(0.23,0.635,0.495,2.4)} +.tooltipster-fall{top:0;-webkit-transition-property:top;transition-property:top;-webkit-transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15);transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15)} +.tooltipster-fall.tooltipster-dying{-webkit-transition-property:all;transition-property:all;top:0!important;opacity:0} +.tooltipster-slide{left:-40px;-webkit-transition-property:left;transition-property:left;-webkit-transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15);transition-timing-function:cubic-bezier(0.175,0.885,0.32,1.15)} +.tooltipster-slide.tooltipster-dying{-webkit-transition-property:all;transition-property:all;left:0!important;opacity:0} +.tooltipster-content-changing{opacity:.5;-webkit-transform:scale(1.1,1.1);-ms-transform:scale(1.1,1.1);transform:scale(1.1,1.1)} +body{font-size-adjust:auto;-webkit-font-feature-settings:"kern" 1,"liga" 1;-ms-font-feature-settings:"kern" 1,"liga" 1;-moz-font-feature-settings:"kern" 1,"liga" 1;font-feature-settings:"kern" 1,"liga" 1} +h1,h2,h3,h4,h5,h6,.heading-1,.heading-2,.heading-3,.heading-4,.heading-5,.heading-6{display:block} +.title{-webkit-transition:color .2s;transition:color .2s} +.title .subtitle{text-transform:none;letter-spacing:normal;-webkit-transition:color .2s;transition:color .2s} +.fraction{-webkit-font-feature-settings:"frac" 1,"kern" 1,"liga" 1;-ms-font-feature-settings:"frac" 1,"kern" 1,"liga" 1;-moz-font-feature-settings:"frac" 1,"kern" 1,"liga" 1;font-feature-settings:"frac" 1,"kern" 1,"liga" 1} +i{font-style:italic} +em{font-style:italic} +s{text-decoration:line-through} +del{text-decoration:line-through} +abbr[title],abbr[data-original-title]{cursor:help} +.initialism{text-transform:uppercase} +cite{font-style:normal} +ul,ol{padding:0} +ul ul,ul ol,ol ol,ol ul{margin-bottom:0} +ul{list-style:disc} +ul ul{list-style:square} +ul ul ul{list-style:circle} +ol{list-style:decimal} +li:last-of-type{margin-bottom:0} +ul.unstyled,ol.unstyled{margin:0;list-style:none} +ul.unstyled li,ol.unstyled li{padding-left:0;margin-bottom:0} +ul.icons,ol.icons{margin-left:0;list-style:none} +ul.icons li,ol.icons li{position:relative} +ul.icons li [class^="icon-"],ol.icons li [class^="icon-"],ul.icons li [class*=" icon-"],ol.icons li [class*=" icon-"]{position:absolute} +ul.icons li a [class*="icon-external-link"],ol.icons li a [class*="icon-external-link"]{position:static;left:auto} +ul.inline,ol.inline{margin-left:0;list-style:none} +ul.inline>li,ol.inline>li{display:inline-block} +ul.inline>li:first-of-type,ol.inline>li:first-of-type{padding-left:0} +dl{overflow:auto} +dl dd:last-of-type{margin-bottom:0} +dl dd.inline,dl dd.enumerated{margin-left:0;margin-top:0;display:inline-block} +dl dd.inline:after{content:"";display:inline-block;width:1em} +dl dd.inline.omega:after{width:0} +dl dd.enumerated:after{content:"???"} +:lang(zh) dl dd.enumerated:after{content:"???"} +dl dd.enumerated.omega:after{content:""} +.dl-horizontal:before,.dl-horizontal:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.dl-horizontal:after{clear:both} +.dl-horizontal dt{float:left;width:20%;clear:left;text-align:right;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.dl-horizontal dd{margin-left:25%} +blockquote p:last-of-type{margin-bottom:0} +blockquote small{display:block} +blockquote small:before{content:"\002014\0000A0"} +blockquote.pull-right{float:right;padding-left:0;border-left:0} +blockquote.pull-right p,blockquote.pull-right small{text-align:right} +q:before,blockquote:before{content:""} +q:after,blockquote:after{content:""} +address{display:block;font-style:normal} +hr{-moz-box-sizing:border-box;box-sizing:border-box;border:0} +@media screen and (max-width:400px){@-ms-viewport{width:320px} +} +.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.grid-container:before,.grid-container:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.grid-container:after{clear:both} +body{min-width:960px} +.grid-container{-moz-box-sizing:border-box;box-sizing:border-box;margin-left:auto;margin-right:auto;max-width:1200px;padding-left:40px;padding-right:40px} +.grid-parent{padding-left:0;padding-right:0} +.grid-0{-moz-box-sizing:border-box;box-sizing:border-box;padding-left:0;padding-right:0} +.push-0,.pull-0{position:relative} +@media screen and (min-width:768px){.grid-100:before,.grid-100:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.hide-on-web{display:none!important} +.grid-0,.grid-95,.grid-90,.grid-85,.grid-80,.grid-75,.grid-70,.grid-65,.grid-60,.grid-55,.grid-50,.grid-45,.grid-40,.grid-35,.grid-30,.grid-25,.grid-20,.grid-15,.grid-10,.grid-5,.grid-100,.grid-66,.grid-33{-moz-box-sizing:border-box;box-sizing:border-box;padding-left:0;padding-right:0} +.push-0,.pull-0,.push-95,.pull-95,.push-90,.pull-90,.push-85,.pull-85,.push-80,.pull-80,.push-75,.pull-75,.push-70,.pull-70,.push-65,.pull-65,.push-60,.pull-60,.push-55,.pull-55,.push-50,.pull-50,.push-45,.pull-45,.push-40,.pull-40,.push-35,.pull-35,.push-30,.pull-30,.push-25,.pull-25,.push-20,.pull-20,.push-15,.pull-15,.push-10,.pull-10,.push-5,.pull-5,.push-66,.pull-66,.push-33,.pull-33{position:relative} +.grid-95{float:left;width:95%} +.prefix-95{margin-left:95%} +.suffix-95{margin-right:95%} +.push-95{left:95%} +.pull-95{left:-95%} +.grid-90{float:left;width:90%} +.prefix-90{margin-left:90%} +.suffix-90{margin-right:90%} +.push-90{left:90%} +.pull-90{left:-90%} +.grid-85{float:left;width:85%} +.prefix-85{margin-left:85%} +.suffix-85{margin-right:85%} +.push-85{left:85%} +.pull-85{left:-85%} +.grid-80{float:left;width:80%} +.prefix-80{margin-left:80%} +.suffix-80{margin-right:80%} +.push-80{left:80%} +.pull-80{left:-80%} +.grid-75{float:left;width:75%} +.prefix-75{margin-left:75%} +.suffix-75{margin-right:75%} +.push-75{left:75%} +.pull-75{left:-75%} +.grid-70{float:left;width:70%} +.prefix-70{margin-left:70%} +.suffix-70{margin-right:70%} +.push-70{left:70%} +.pull-70{left:-70%} +.grid-65{float:left;width:65%} +.prefix-65{margin-left:65%} +.suffix-65{margin-right:65%} +.push-65{left:65%} +.pull-65{left:-65%} +.grid-60{float:left;width:60%} +.prefix-60{margin-left:60%} +.suffix-60{margin-right:60%} +.push-60{left:60%} +.pull-60{left:-60%} +.grid-55{float:left;width:55%} +.prefix-55{margin-left:55%} +.suffix-55{margin-right:55%} +.push-55{left:55%} +.pull-55{left:-55%} +.grid-50{float:left;width:50%} +.prefix-50{margin-left:50%} +.suffix-50{margin-right:50%} +.push-50{left:50%} +.pull-50{left:-50%} +.grid-45{float:left;width:45%} +.prefix-45{margin-left:45%} +.suffix-45{margin-right:45%} +.push-45{left:45%} +.pull-45{left:-45%} +.grid-40{float:left;width:40%} +.prefix-40{margin-left:40%} +.suffix-40{margin-right:40%} +.push-40{left:40%} +.pull-40{left:-40%} +.grid-35{float:left;width:35%} +.prefix-35{margin-left:35%} +.suffix-35{margin-right:35%} +.push-35{left:35%} +.pull-35{left:-35%} +.grid-30{float:left;width:30%} +.prefix-30{margin-left:30%} +.suffix-30{margin-right:30%} +.push-30{left:30%} +.pull-30{left:-30%} +.grid-25{float:left;width:25%} +.prefix-25{margin-left:25%} +.suffix-25{margin-right:25%} +.push-25{left:25%} +.pull-25{left:-25%} +.grid-20{float:left;width:20%} +.prefix-20{margin-left:20%} +.suffix-20{margin-right:20%} +.push-20{left:20%} +.pull-20{left:-20%} +.grid-15{float:left;width:15%} +.prefix-15{margin-left:15%} +.suffix-15{margin-right:15%} +.push-15{left:15%} +.pull-15{left:-15%} +.grid-10{float:left;width:10%} +.prefix-10{margin-left:10%} +.suffix-10{margin-right:10%} +.push-10{left:10%} +.pull-10{left:-10%} +.grid-5{float:left;width:5%} +.prefix-5{margin-left:5%} +.suffix-5{margin-right:5%} +.push-5{left:5%} +.pull-5{left:-5%} +.grid-100{clear:both;width:100%} +.grid-100:before,.grid-100:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.grid-100:after{clear:both} +.grid-66{float:left;width:66.66666667%} +.prefix-66{margin-left:66.66666667%} +.suffix-66{margin-right:66.66666667%} +.push-66{left:66.66666667%} +.pull-66{left:-66.66666667%} +.grid-33{float:left;width:33.33333333%} +.prefix-33{margin-left:33.33333333%} +.suffix-33{margin-right:33.33333333%} +.push-33{left:33.33333333%} +.pull-33{left:-33.33333333%} +} +@media screen and (max-width:767px){body{min-width:0} +.grid-container{max-width:none;padding-left:10px;padding-right:10px} +.hide-on-mobile{display:none!important} +.grid-0,.mobile-grid-95,.mobile-grid-90,.mobile-grid-85,.mobile-grid-80,.mobile-grid-75,.mobile-grid-70,.mobile-grid-65,.mobile-grid-60,.mobile-grid-55,.mobile-grid-50,.mobile-grid-45,.mobile-grid-40,.mobile-grid-35,.mobile-grid-30,.mobile-grid-25,.mobile-grid-20,.mobile-grid-15,.mobile-grid-10,.mobile-grid-5,.mobile-grid-100,.mobile-grid-66,.mobile-grid-33{-moz-box-sizing:border-box;box-sizing:border-box;padding-left:0;padding-right:0} +.push-0,.pull-0,.mobile-push-95,.mobile-pull-95,.mobile-push-90,.mobile-pull-90,.mobile-push-85,.mobile-pull-85,.mobile-push-80,.mobile-pull-80,.mobile-push-75,.mobile-pull-75,.mobile-push-70,.mobile-pull-70,.mobile-push-65,.mobile-pull-65,.mobile-push-60,.mobile-pull-60,.mobile-push-55,.mobile-pull-55,.mobile-push-50,.mobile-pull-50,.mobile-push-45,.mobile-pull-45,.mobile-push-40,.mobile-pull-40,.mobile-push-35,.mobile-pull-35,.mobile-push-30,.mobile-pull-30,.mobile-push-25,.mobile-pull-25,.mobile-push-20,.mobile-pull-20,.mobile-push-15,.mobile-pull-15,.mobile-push-10,.mobile-pull-10,.mobile-push-5,.mobile-pull-5,.mobile-push-66,.mobile-pull-66,.mobile-push-33,.mobile-pull-33{position:relative} +.mobile-grid-95{float:left;width:95%} +.mobile-prefix-95{margin-left:95%} +.mobile-suffix-95{margin-right:95%} +.mobile-push-95{left:95%} +.mobile-pull-95{left:-95%} +.mobile-grid-90{float:left;width:90%} +.mobile-prefix-90{margin-left:90%} +.mobile-suffix-90{margin-right:90%} +.mobile-push-90{left:90%} +.mobile-pull-90{left:-90%} +.mobile-grid-85{float:left;width:85%} +.mobile-prefix-85{margin-left:85%} +.mobile-suffix-85{margin-right:85%} +.mobile-push-85{left:85%} +.mobile-pull-85{left:-85%} +.mobile-grid-80{float:left;width:80%} +.mobile-prefix-80{margin-left:80%} +.mobile-suffix-80{margin-right:80%} +.mobile-push-80{left:80%} +.mobile-pull-80{left:-80%} +.mobile-grid-75{float:left;width:75%} +.mobile-prefix-75{margin-left:75%} +.mobile-suffix-75{margin-right:75%} +.mobile-push-75{left:75%} +.mobile-pull-75{left:-75%} +.mobile-grid-70{float:left;width:70%} +.mobile-prefix-70{margin-left:70%} +.mobile-suffix-70{margin-right:70%} +.mobile-push-70{left:70%} +.mobile-pull-70{left:-70%} +.mobile-grid-65{float:left;width:65%} +.mobile-prefix-65{margin-left:65%} +.mobile-suffix-65{margin-right:65%} +.mobile-push-65{left:65%} +.mobile-pull-65{left:-65%} +.mobile-grid-60{float:left;width:60%} +.mobile-prefix-60{margin-left:60%} +.mobile-suffix-60{margin-right:60%} +.mobile-push-60{left:60%} +.mobile-pull-60{left:-60%} +.mobile-grid-55{float:left;width:55%} +.mobile-prefix-55{margin-left:55%} +.mobile-suffix-55{margin-right:55%} +.mobile-push-55{left:55%} +.mobile-pull-55{left:-55%} +.mobile-grid-50{float:left;width:50%} +.mobile-prefix-50{margin-left:50%} +.mobile-suffix-50{margin-right:50%} +.mobile-push-50{left:50%} +.mobile-pull-50{left:-50%} +.mobile-grid-45{float:left;width:45%} +.mobile-prefix-45{margin-left:45%} +.mobile-suffix-45{margin-right:45%} +.mobile-push-45{left:45%} +.mobile-pull-45{left:-45%} +.mobile-grid-40{float:left;width:40%} +.mobile-prefix-40{margin-left:40%} +.mobile-suffix-40{margin-right:40%} +.mobile-push-40{left:40%} +.mobile-pull-40{left:-40%} +.mobile-grid-35{float:left;width:35%} +.mobile-prefix-35{margin-left:35%} +.mobile-suffix-35{margin-right:35%} +.mobile-push-35{left:35%} +.mobile-pull-35{left:-35%} +.mobile-grid-30{float:left;width:30%} +.mobile-prefix-30{margin-left:30%} +.mobile-suffix-30{margin-right:30%} +.mobile-push-30{left:30%} +.mobile-pull-30{left:-30%} +.mobile-grid-25{float:left;width:25%} +.mobile-prefix-25{margin-left:25%} +.mobile-suffix-25{margin-right:25%} +.mobile-push-25{left:25%} +.mobile-pull-25{left:-25%} +.mobile-grid-20{float:left;width:20%} +.mobile-prefix-20{margin-left:20%} +.mobile-suffix-20{margin-right:20%} +.mobile-push-20{left:20%} +.mobile-pull-20{left:-20%} +.mobile-grid-15{float:left;width:15%} +.mobile-prefix-15{margin-left:15%} +.mobile-suffix-15{margin-right:15%} +.mobile-push-15{left:15%} +.mobile-pull-15{left:-15%} +.mobile-grid-10{float:left;width:10%} +.mobile-prefix-10{margin-left:10%} +.mobile-suffix-10{margin-right:10%} +.mobile-push-10{left:10%} +.mobile-pull-10{left:-10%} +.mobile-grid-5{float:left;width:5%} +.mobile-prefix-5{margin-left:5%} +.mobile-suffix-5{margin-right:5%} +.mobile-push-5{left:5%} +.mobile-pull-5{left:-5%} +.mobile-grid-100{clear:both;width:100%} +.mobile-grid-100:before,.mobile-grid-100:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.mobile-grid-100:after{clear:both} +.mobile-grid-66{float:left;width:66.66666667%} +.mobile-prefix-66{margin-left:66.66666667%} +.mobile-suffix-66{margin-right:66.66666667%} +.mobile-push-66{left:66.66666667%} +.mobile-pull-66{left:-66.66666667%} +.mobile-grid-33{float:left;width:33.33333333%} +.mobile-prefix-33{margin-left:33.33333333%} +.mobile-suffix-33{margin-right:33.33333333%} +.mobile-push-33{left:33.33333333%} +.mobile-pull-33{left:-33.33333333%} +.grid-100[class*="app-grid-"]{clear:none} +.grid-100[class*="app-grid-"]:after{clear:none} +.app-push-0,.app-pull-0{left:0} +.app-prefix-0{margin-left:0} +.app-suffix-0{margin-right:0} +} +html:lang(ja) i,html:lang(ko) i,html:lang(zh) i,html:lang(ja) em,html:lang(ko) em,html:lang(zh) em,html:lang(ja) dfn,html:lang(ko) dfn,html:lang(zh) dfn{font-style:normal;font-weight:700} +html:lang(de) q{quotes:"???" "???" "???" "???"} +html:lang(en-GB) q{quotes:"???" "???" "???" "???"} +html:lang(fr) q{quotes:"????" "????" "?????" "?????"} +html:lang(it) q{quotes:"??" "??" "???" "???"} +html:lang(pl) q{quotes:"???" "???" "??" "??"} +html:lang(ru) q{quotes:"??" "??" "???" "???"} +html:lang(zh-TW) q{quotes:"???" "???" "???" "???"} +html:lang(zh) html,html:lang(ja) html,html:lang(zh) body,html:lang(ja) body{word-break:normal} +html:lang(ko) html,html:lang(ko) body{word-break:keep-all} +html:lang(ko) .word-break-all{word-break:break-all} +.modal-background-properties{background-repeat:no-repeat;background-size:contain;background-position:center bottom,center top,center -100px;background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-webkit-linear-gradient(top,#263145 0,#1d222c 70%),-webkit-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-moz-linear-gradient(top,#263145 0,#1d222c 70%),-moz-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),linear-gradient(top,#263145 0,#1d222c 70%),radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-clip:padding-box} +@font-face{font-family:"Blizzard";font-style:normal;font-weight:300;src:local("Blizzard Light"),local("Blizzard-Light"),url("fonts/blizzard-light.woff") format("woff")} +@font-face{font-family:"Blizzard";font-style:normal;font-weight:400;src:local("Blizzard"),local("Blizzard"),url("fonts/blizzard-regular.woff") format("woff")} +@font-face{font-family:"Blizzard";font-style:italic;font-weight:400;src:local("Blizzard Italic"),local("Blizzard-Italic"),url("fonts/blizzard-regular-italic.woff") format("woff")} +@font-face{font-family:"Blizzard";font-style:normal;font-weight:700;src:local("Blizzard Bold"),local("Blizzard-Bold"),url("fonts/blizzard-bold.woff") format("woff")} +.accordion{margin-bottom:20px} +.accordion-group{margin-bottom:2px;border:1px solid rgba(255,255,255,0.15);border-radius:2px} +.accordion-heading{border-bottom:0} +.accordion-heading .accordion-toggle{padding:5px 10px} +.accordion-toggle{background:0;cursor:pointer;color:rgba(255,255,255,0.7)} +.accordion-toggle:focus,.accordion-toggle:hover{color:#fff} +.accordion-toggle:before{display:inline-block;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-16px -224px;content:"";margin-right:5px;margin-top:2px;width:16px;height:16px;line-height:16px;vertical-align:top} +.accordion-toggle.collapsed:before{background-position:-32px -112px} +.accordion-inner{padding:5px 10px;border-top:1px solid rgba(255,255,255,0.15)} +.modal.agegate{width:358px;margin-left:-179px;height:216px;-webkit-transition:height,200ms;transition:height 200ms} +.modal.agegate.agegate-failed{height:125px} +.modal.agegate .modal-body .close{right:7px;top:-5px} +.modal.agegate .modal-body form{margin:0} +.modal.agegate .modal-body h1,.modal.agegate .modal-body .heading-1{color:rgba(255,255,255,0.7);font-size:15px;line-height:20px;margin:0 0 20px 0;padding:0;font-weight:400} +.modal.agegate .modal-body .notice{margin:20px 0 0 0;line-height:15px;font-size:13px} +.modal.agegate .modal-body .control-group{margin-bottom:12px;margin-top:-3px} +.modal.agegate .modal-body .btn{margin:0} +.modal.agegate .modal-body .btn-primary{min-width:110px} +.modal.agegate .modal-body .agegate-month{width:110px} +.modal.agegate .modal-body .agegate-day{width:88px} +.modal.agegate .modal-body .agegate-year{width:110px} +.modal.agegate .modal-body .agegate-field{padding-right:10px} +.modal.agegate .modal-body .agegate-field:last-of-type{padding-right:0} +.interceptor-agegate{text-align:center} +.interceptor-agegate .js-enabled .select-box,.interceptor-agegate select{text-align:left} +.interceptor-agegate .notice{margin-top:40px} +.alert{-moz-box-sizing:border-box;box-sizing:border-box;padding:4px 20px 4px 20px;font-size:13px;line-height:20px;margin-bottom:40px;text-shadow:none;position:relative;background-color:#272e3b;color:rgba(255,255,255,0.7);border:1px solid #000;box-shadow:0 0 0 1px #363d49 inset,0 5px 10px rgba(0,0,0,0.75)} +.alert p,.alert ul,.alert ol{font-size:13px;line-height:20px;margin:0} +.alert p:last-child,.alert ul:last-child,.alert ol:last-child{margin-bottom:0} +.alert .close{position:relative;top:0;right:-10px} +.alert-block{padding:20px 45px 20px 20px} +.alert-icon{padding:20px 45px 20px 59px} +.alert-icon:before{content:"";display:block;position:absolute;top:18px;left:20px;width:24px;height:24px;overflow:hidden;line-height:24px;vertical-align:top;text-indent:-9999px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-blue.png");background-repeat:no-repeat;background-position:-96px -360px} +.alert-block .close,.alert-icon .close{top:-10px;right:-34px} +.alert-block h2,.alert-icon h2,.alert-block h3,.alert-icon h3,.alert-block h4,.alert-icon h4,.alert-block h5,.alert-icon h5,.alert-block h6,.alert-icon h6,.alert-block .heading-2,.alert-icon .heading-2,.alert-block .heading-3,.alert-icon .heading-3,.alert-block .heading-4,.alert-icon .heading-4,.alert-block .heading-5,.alert-icon .heading-5,.alert-block .heading-6,.alert-icon .heading-6{font-size:17px;line-height:20px;margin-bottom:10px;color:#fff} +.alert-block p,.alert-icon p{margin-bottom:20px} +.alert-block p:last-child,.alert-icon p:last-child{margin-bottom:0} +.alert-block ul,.alert-icon ul,.alert-block ol,.alert-icon ol{margin:0 0 20px 30px} +.alert-block ul:last-child,.alert-icon ul:last-child,.alert-block ol:last-child,.alert-icon ol:last-child{margin-bottom:0} +.alert-block li,.alert-icon li{margin-bottom:10px} +.alert-block li:last-of-type,.alert-icon li:last-of-type{margin-bottom:0} +.alert-block li p,.alert-icon li p{margin-bottom:10px} +.alert+.heading-1,.alert-block+.heading-1,.alert-icon+.heading-1,.alert+.heading-2,.alert-block+.heading-2,.alert-icon+.heading-2,.alert+.heading-3,.alert-block+.heading-3,.alert-icon+.heading-3,.alert+.heading-4,.alert-block+.heading-4,.alert-icon+.heading-4,.alert+.heading-5+.heading-6,.alert-block+.heading-5+.heading-6,.alert-icon+.heading-5+.heading-6{margin-top:80px} +.alert-success{background-color:#132a14;box-shadow:0 0 0 1px #24392a inset,0 5px 10px rgba(0,0,0,0.75)} +.alert-icon.alert-success:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-green.png");background-position:-216px -120px} +.alert-warning{background-color:#5d3200;box-shadow:0 0 0 1px #834b00 inset,0 5px 10px rgba(0,0,0,0.75)} +.alert-icon.alert-warning:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-orange.png");background-position:-192px -120px} +.alert-error{background-color:#360e10;box-shadow:0 0 0 1px #551e21 inset,0 5px 10px rgba(0,0,0,0.75)} +.alert-icon.alert-error:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-red.png");background-position:-24px 0} +.alert-info{background-color:#272e3b;box-shadow:0 0 0 1px #363d49 inset,0 5px 10px rgba(0,0,0,0.75)} +.alert-icon.alert-info:before{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-blue.png");background-position:-96px -360px} +html,body{background:#202020 no-repeat center top} +body{background:#202020 no-repeat center top;color:rgba(255,255,255,0.7)} +.body-content{background:#202020;padding-bottom:100px} +::-moz-selection{background:#19547c} +::selection{background:#19547c} +input::-moz-selection{background:#037db6} +input::selection{background:#037db6} +.breadcrumb{margin:0;padding:0;font-size:13px;line-height:20px;list-style:none} +.breadcrumb>li{margin:0;padding:0;display:inline-block} +.breadcrumb>li>a{color:rgba(255,255,255,0.7)} +.breadcrumb>li>a:focus,.breadcrumb>li>a:hover{color:#fff} +.breadcrumb>li>.divider{padding:0 5px;opacity:.25} +.breadcrumb>li .icon-home{margin-right:10px} +.breadcrumb>.active{color:#fff} +.btn{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;margin:3px 0;padding:6px 20px;font-size:15px;line-height:20px;height:34px;background-color:rgba(0,0,0,0.15);color:#00aeff;border:1px solid rgba(255,255,255,0.15);box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn.active,.btn:active{padding:7px 19px 5px 21px} +.btn.disabled:active,.btn[disabled]:active,.btn.disabled.active,.btn[disabled].active{padding:6px 20px!important} +.btn:hover,.btn:focus{background-color:rgba(0,0,0,0.25);color:#fff;border-color:rgba(255,255,255,0.3);box-shadow:0 0 rgba(0,0,0,0)} +.btn:active,.btn.active{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.07);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn.disabled,.btn[disabled],.btn.disabled:hover,.btn.disabled:focus,.btn.disabled:active,.btn.disabled.active{background-color:rgba(0,0,0,0.1)!important;color:rgba(255,255,255,0.3)!important;border-color:rgba(255,255,255,0.08)!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn.disabled.loading,.btn[disabled].loading,.btn.disabled:hover.loading,.btn.disabled:focus.loading,.btn.disabled:active.loading,.btn.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn.btn-wide{margin:3px 0;padding:6px 40px;font-size:15px;line-height:20px;height:34px} +.btn.btn-wide.active,.btn.btn-wide:active{padding:7px 39px 5px 41px} +.btn.btn-wide.disabled:active,.btn.btn-wide[disabled]:active,.btn.btn-wide.disabled.active,.btn.btn-wide[disabled].active{padding:6px 40px!important} +.btn-inverse{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.7);border:1px solid rgba(255,255,255,0.15);box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-inverse:hover,.btn-inverse:focus{background-color:rgba(0,0,0,0.25);color:#fff;border-color:rgba(255,255,255,0.3);box-shadow:0 0 rgba(0,0,0,0)} +.btn-inverse:active,.btn-inverse.active{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.07);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn-inverse.disabled,.btn-inverse[disabled],.btn-inverse.disabled:hover,.btn-inverse.disabled:focus,.btn-inverse.disabled:active,.btn-inverse.disabled.active{background-color:rgba(0,0,0,0.1)!important;color:rgba(255,255,255,0.3)!important;border-color:rgba(255,255,255,0.08)!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-inverse.disabled.loading,.btn-inverse[disabled].loading,.btn-inverse.disabled:hover.loading,.btn-inverse.disabled:focus.loading,.btn-inverse.disabled:active.loading,.btn-inverse.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-info{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.7);border:1px solid rgba(9,86,123,0.7);box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-info:hover,.btn-info:focus{background-color:rgba(0,0,0,0.25);color:#fff;border-color:#09567b;box-shadow:0 0 rgba(0,0,0,0)} +.btn-info:active,.btn-info.active{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.8);border-color:rgba(9,86,123,0.7);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn-info.disabled,.btn-info[disabled],.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled:active,.btn-info.disabled.active{background-color:rgba(0,0,0,0.1)!important;color:rgba(255,255,255,0.3)!important;border-color:rgba(255,255,255,0.08)!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-info.disabled.loading,.btn-info[disabled].loading,.btn-info.disabled:hover.loading,.btn-info.disabled:focus.loading,.btn-info.disabled:active.loading,.btn-info.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-success{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.7);border:1px solid rgba(10,91,40,0.7);box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-success:hover,.btn-success:focus{background-color:rgba(0,0,0,0.25);color:#fff;border-color:#0a5b28;box-shadow:0 0 rgba(0,0,0,0)} +.btn-success:active,.btn-success.active{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.8);border-color:rgba(10,91,40,0.7);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn-success.disabled,.btn-success[disabled],.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled:active,.btn-success.disabled.active{background-color:rgba(0,0,0,0.1)!important;color:rgba(255,255,255,0.3)!important;border-color:rgba(255,255,255,0.08)!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-success.disabled.loading,.btn-success[disabled].loading,.btn-success.disabled:hover.loading,.btn-success.disabled:focus.loading,.btn-success.disabled:active.loading,.btn-success.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-warning{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.7);border:1px solid rgba(98,86,4,0.7);box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-warning:hover,.btn-warning:focus{background-color:rgba(0,0,0,0.25);color:#fff;border-color:#625604;box-shadow:0 0 rgba(0,0,0,0)} +.btn-warning:active,.btn-warning.active{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.8);border-color:rgba(98,86,4,0.7);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn-warning.disabled,.btn-warning[disabled],.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled:active,.btn-warning.disabled.active{background-color:rgba(0,0,0,0.1)!important;color:rgba(255,255,255,0.3)!important;border-color:rgba(255,255,255,0.08)!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-warning.disabled.loading,.btn-warning[disabled].loading,.btn-warning.disabled:hover.loading,.btn-warning.disabled:focus.loading,.btn-warning.disabled:active.loading,.btn-warning.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-danger,.btn-error{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.7);border:1px solid rgba(255,255,255,0.07);box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-danger:hover,.btn-error:hover,.btn-danger:focus,.btn-error:focus{background-color:rgba(0,0,0,0.25);color:#fff;border-color:#7b1315;box-shadow:0 0 rgba(0,0,0,0)} +.btn-danger:active,.btn-error:active,.btn-danger.active,.btn-error.active{background-color:rgba(0,0,0,0.15);color:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.07);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn-danger.disabled,.btn-error.disabled,.btn-danger[disabled],.btn-error[disabled],.btn-danger.disabled:hover,.btn-error.disabled:hover,.btn-danger.disabled:focus,.btn-error.disabled:focus,.btn-danger.disabled:active,.btn-error.disabled:active,.btn-danger.disabled.active,.btn-error.disabled.active{background-color:rgba(0,0,0,0.1)!important;color:rgba(255,255,255,0.3)!important;border-color:rgba(255,255,255,0.08)!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-danger.disabled.loading,.btn-error.disabled.loading,.btn-danger[disabled].loading,.btn-error[disabled].loading,.btn-danger.disabled:hover.loading,.btn-error.disabled:hover.loading,.btn-danger.disabled:focus.loading,.btn-error.disabled:focus.loading,.btn-danger.disabled:active.loading,.btn-error.disabled:active.loading,.btn-danger.disabled.active.loading,.btn-error.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-link{background-color:transparent;color:#00aeff;border:1px solid transparent;box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s} +.btn-link:hover,.btn-link:focus{background-color:transparent;color:#fff;border-color:transparent;box-shadow:0 0 rgba(0,0,0,0)} +.btn-link:active,.btn-link.active{background-color:transparent;color:#fff;border-color:transparent;box-shadow:0 0 rgba(0,0,0,0)} +.btn-link.disabled,.btn-link[disabled],.btn-link.disabled:hover,.btn-link.disabled:focus,.btn-link.disabled:active,.btn-link.disabled.active{background-color:transparent!important;color:rgba(255,255,255,0.3)!important;border-color:transparent!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-link.disabled.loading,.btn-link[disabled].loading,.btn-link.disabled:hover.loading,.btn-link.disabled:focus.loading,.btn-link.disabled:active.loading,.btn-link.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-primary{background-color:#098cc8;color:#fff;border:1px solid transparent;box-shadow:0 0 rgba(0,0,0,0);border-radius:2px;-webkit-transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;transition:background-color .2s,box-shadow .2s,background-color .2s,border-color .2s,color .2s;background-image:-webkit-linear-gradient(top,#0f9ada,#0076ad);background-image:linear-gradient(to bottom,#0f9ada,#0076ad);border:0;box-shadow:0 1px 1px rgba(0,0,0,0.3),0 0 0 1px rgba(255,255,255,0.15) inset} +.btn-primary:hover,.btn-primary:focus{background-color:#21b0f1;color:#fff;border-color:transparent;box-shadow:0 0 rgba(0,0,0,0)} +.btn-primary:active,.btn-primary.active{background-color:#006899;color:rgba(255,255,255,0.7);border-color:transparent;box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.5)} +.btn-primary.disabled,.btn-primary[disabled],.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled:active,.btn-primary.disabled.active{background-color:transparent!important;color:rgba(255,255,255,0.15)!important;border-color:transparent!important;box-shadow:0 0 rgba(0,0,0,0)!important} +.btn-primary.disabled.loading,.btn-primary[disabled].loading,.btn-primary.disabled:hover.loading,.btn-primary.disabled:focus.loading,.btn-primary.disabled:active.loading,.btn-primary.disabled.active.loading{color:rgba(255,255,255,0)!important} +.btn-primary:hover,.btn-primary:focus{background-image:-webkit-linear-gradient(top,#37c0ff,#0097dd);background-image:linear-gradient(to bottom,#37c0ff,#0097dd)} +.btn-primary:active,.btn-primary.active{background-image:-webkit-linear-gradient(top,#006ea1,#00608d);background-image:linear-gradient(to bottom,#006ea1,#00608d);box-shadow:1px 1px 2px rgba(0,0,0,0.6) inset,0 0 0 1px rgba(255,255,255,0.07) inset} +.btn-primary.disabled,.btn-primary[disabled],.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled:active,.btn-primary.disabled.active{background-image:-webkit-linear-gradient(top,rgba(15,154,218,0.1),rgba(0,118,173,0.1));background-image:linear-gradient(to bottom,rgba(15,154,218,0.1),rgba(0,118,173,0.1));box-shadow:0 1px 1px rgba(0,0,0,0.03),0 0 0 1px rgba(255,255,255,0.016) inset} +.btn-large{margin:0;padding:9px 30px;font-size:17px;line-height:20px;height:40px} +.btn-large.active,.btn-large:active{padding:10px 29px 8px 31px} +.btn-large.disabled:active,.btn-large[disabled]:active,.btn-large.disabled.active,.btn-large[disabled].active{padding:9px 30px!important} +.btn-small{margin:2px 0;padding:2px 10px;font-size:13px;line-height:20px;height:26px} +.btn-small.active,.btn-small:active{padding:3px 9px 1px 11px} +.btn-small.disabled:active,.btn-small[disabled]:active,.btn-small.disabled.active,.btn-small[disabled].active{padding:2px 10px!important} +.btn-mini{margin:0;padding:1px 10px;font-size:12px;line-height:16px;height:20px} +.btn-mini.active,.btn-mini:active{padding:2px 9px 0 11px} +.btn-mini.disabled:active,.btn-mini[disabled]:active,.btn-mini.disabled.active,.btn-mini[disabled].active{padding:1px 10px!important} +.btn-block+.btn-block{margin-top:10px} +.btn [class^="icon-"],.btn [class*=" icon-"]{margin-top:2px;margin-left:-4px;margin-right:5px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");opacity:.8} +.btn:hover [class^="icon-"],.btn:focus [class^="icon-"],.btn:hover [class*=" icon-"],.btn:focus [class*=" icon-"]{opacity:1} +.btn:active [class^="icon-"],.btn.active [class^="icon-"],.btn:active [class*=" icon-"],.btn.active [class*=" icon-"]{opacity:.8} +.btn-inverse [class^="icon-"],.btn-inverse [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.btn-info [class^="icon-"],.btn-info [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.btn-success [class^="icon-"],.btn-success [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png")} +.btn-warning [class^="icon-"],.btn-warning [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png")} +.btn-danger [class^="icon-"],.btn-error [class^="icon-"],.btn-danger [class*=" icon-"],.btn-error [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-red.png")} +.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-left:-2px;margin-right:3px} +.btn-small.btn-icon [class^="icon-"],.btn-small.btn-icon [class*=" icon-"]{margin-left:0;margin-right:0} +.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:0} +.btn-icon [class^="icon-"],.btn-icon [class*=" icon-"]{margin-left:0;margin-right:0} +.btn.disabled [class^="icon-"],.btn[disabled] [class^="icon-"],.btn.disabled [class*=" icon-"],.btn[disabled] [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")!important;opacity:.15!important} +.btn.disabled:active [class^="icon-"],.btn[disabled]:active [class^="icon-"],.btn.disabled.active [class^="icon-"],.btn[disabled].active [class^="icon-"],.btn.disabled:active [class*=" icon-"],.btn[disabled]:active [class*=" icon-"],.btn.disabled.active [class*=" icon-"],.btn[disabled].active [class*=" icon-"]{opacity:.15!important} +.btn.disabled.loading [class^="icon-"],.btn[disabled].loading [class^="icon-"],.btn.disabled.loading [class*=" icon-"],.btn[disabled].loading [class*=" icon-"]{opacity:0!important} +.btn-primary [class^="icon-"],.btn-primary [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:1} +.btn-primary:active [class^="icon-"],.btn-primary.active [class*=" icon-"]{opacity:.7} +.btn-primary.disabled [class^="icon-"],.btn-primary[disabled] [class^="icon-"],.btn-primary.disabled [class*=" icon-"],.btn-primary[disabled] [class*=" icon-"]{opacity:.15} +.btn-primary.disabled:active [class^="icon-"],.btn-primary[disabled]:active [class^="icon-"],.btn-primary.disabled.active [class^="icon-"],.btn-primary[disabled].active [class^="icon-"],.btn-primary.disabled:active [class*=" icon-"],.btn-primary[disabled]:active [class*=" icon-"],.btn-primary.disabled.active [class*=" icon-"],.btn-primary[disabled].active [class*=" icon-"]{opacity:.15} +.btn.loading:before{content:"";width:20px;height:20px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png");background-position:-140px 0;display:inline-block;position:absolute;z-index:1060;left:50%;top:50%;margin-top:-10px;margin-left:-10px;-webkit-animation:keyframes-loading .8s steps(21) infinite;-moz-animation:keyframes-loading .8s steps(21) infinite;-ms-animation:keyframes-loading .8s steps(21) infinite;animation:keyframes-loading .8s steps(21) infinite} +.btn.btn-link.loading:before{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png")} +.btn.disabled-loading{height:34px} +.btn-large.disabled-loading{height:40px} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.btn.loading:before{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-size:420px 20px} +.btn.btn-primary.loading:before{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-size:420px 20px} +} +.carousel{margin-bottom:20px;line-height:1;border:1px solid #000;box-shadow:0 5px 10px rgba(0,0,0,0.4);-moz-box-sizing:border-box;box-sizing:border-box} +.carousel .carousel-inner{border:0;-moz-box-sizing:border-box;box-sizing:border-box} +.carousel .carousel-inner .cover{background-color:rgba(255,255,255,0);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.1);-webkit-transition:background-color,0.2s;transition:background-color .2s} +.carousel .carousel-inner .carousel-caption{background-color:transparent;-moz-box-sizing:border-box;box-sizing:border-box;padding:10px 14px 30px 15px;color:rgba(255,255,255,0.7);-webkit-transition:opacity 1.25s,-webkit-transform .2s;transition:opacity 1.25s,transform .2s} +.carousel .carousel-inner .carousel-caption .bg-layer{background-color:rgba(0,0,0,0.6);-webkit-transition:-webkit-transform,0.2s;transition:transform .2s} +.carousel .carousel-inner .carousel-caption h4,.carousel .carousel-inner .carousel-caption .heading-4{margin-bottom:6px;font-size:23px;line-height:1.2;font-weight:300;white-space:nowrap;overflow:hidden;color:rgba(255,255,255,0.7);text-overflow:ellipsis} +.carousel .carousel-inner .carousel-caption .summary{color:rgba(255,255,255,0.7);white-space:nowrap;overflow:hidden;text-overflow:ellipsis} +.carousel .carousel-inner>.item{-webkit-transition:.6s,ease-in-out,left;transition:.6s ease-in-out left} +.carousel:hover .cover{background-color:rgba(255,255,255,0.05);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.2)} +.carousel:hover .carousel-controls{opacity:1} +.carousel:hover .more .carousel-caption{-webkit-transform:translate(0,-47px);-ms-transform:translate(0,-47px);transform:translate(0,-47px)} +.carousel:hover .more .bg-layer{-webkit-transform:translate(0,-63px);-ms-transform:translate(0,-63px);transform:translate(0,-63px)} +.carousel.crossfade .carousel-inner{background-color:#000;border:0;-moz-box-sizing:border-box;box-sizing:border-box} +.carousel.crossfade .carousel-inner>.item{-webkit-transition:.2s,ease-in-out,opacity;transition:.2s ease-in-out opacity} +.carousel .carousel-controls{background-color:rgba(255,255,255,0.2);top:10px;right:10px;width:51px;height:26px;border:1px solid rgba(255,255,255,0.5);border-radius:3px;opacity:0;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.carousel .carousel-controls button{background-color:rgba(255,255,255,0.3);padding:0;width:26px;height:26px;top:0;border:0} +.carousel .carousel-controls button span{background-image:url("../../images/toolkit/defaults/carousels/sprite-carousel-control.png");background-repeat:no-repeat;margin:0 0 0 7px;padding:0;width:8px;height:14px;opacity:.6} +.carousel .carousel-controls button:hover{background-color:rgba(255,255,255,0.4)} +.carousel .carousel-controls button:hover span{opacity:1} +.carousel .carousel-controls button:active{background-color:rgba(255,255,255,0.4);border-color:rgba(255,255,255,0.6)} +.carousel .carousel-controls button:active span{opacity:.8} +.carousel .carousel-controls .left{border-right:1px solid rgba(255,255,255,0.1);left:0} +.carousel .carousel-controls .left span{background-position:-32px -80px} +.carousel .carousel-controls .left:active{border-right:rgba(255,255,255,0.1)} +.carousel .carousel-controls .left:active span{left:1px;top:1px} +.carousel .carousel-controls .right{border-left:1px solid rgba(255,255,255,0.1);left:25px} +.carousel .carousel-controls .right span{background-position:-40px -80px;margin-left:10px} +.carousel .carousel-controls .right:active{border-left:1px solid rgba(255,255,255,0.1)} +.carousel .carousel-controls .right:active span{left:1px;top:1px} +.close{float:right;display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");background-repeat:no-repeat;background-position:-112px -96px;text-indent:-9999px;margin:2px 2px 0 0;cursor:pointer;opacity:.2;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.close:focus,.close:hover{text-decoration:none;opacity:.4} +button.close{padding:0;border:0;background:transparent;-webkit-appearance:none} +code,pre{font-size:13px;line-height:20px;border-radius:2px} +code{padding:0 .25em;background-color:rgba(0,0,0,0.03);border:1px solid rgba(255,255,255,0.15)} +pre{margin:0 0 40px;font-size:13px;line-height:20px;padding:10px;background:rgba(0,0,0,0.03);border:1px solid rgba(255,255,255,0.15)} +.dropdown-toggle{padding-right:30px} +.caret{content:"";margin:2px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-repeat:no-repeat;text-indent:-9999px;-webkit-transition:opacity,0.2s;transition:opacity .2s;background-position:-64px -256px} +.navbar .caret{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")} +.dropdown-toggle>.caret{position:absolute;right:5px;top:0;opacity:.3;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.dropdown-toggle:focus>.caret,.dropdown-toggle:hover>.caret{opacity:.5} +.nav-tabs .dropdown-toggle>.caret,.nav-pills .dropdown-toggle>.caret{top:5px} +.dropdown-menu{left:-2px;z-index:1000;padding:4px 0;background-color:#272e3b;box-shadow:0 0 0 1px #3d434f inset,0 5px 10px rgba(0,0,0,0.75);border:solid #000;border-width:1px} +.dropdown-menu .divider{height:1px;margin:10px 1px 10px;overflow:hidden;border-bottom:1px solid #3d434f;background-color:transparent;margin:2px 0 3px 0} +.dropdown-menu li{margin:0 1px;padding:0} +.dropdown-menu li>a{padding:4px 30px;font-size:13px;font-weight:normal;line-height:20px;color:rgba(255,255,255,0.7);-webkit-transition:background-color .2s,border-color .2s,color .2s;transition:background-color .2s,border-color .2s,color .2s} +.dropdown-menu li>span{padding:4px 30px;font-size:13px;font-weight:normal;line-height:20px} +.dropdown-menu [class^="icon-"],.dropdown-menu [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.dropdown-menu [class^="icon-"]:not(.icon-external-link),.dropdown-menu [class*=" icon-"]:not(.icon-external-link){position:absolute;left:5px} +.dropdown-menu .icon-external-link{position:absolute;right:5px} +.navbar .dropdown-menu{margin-top:9px} +.navbar .pull-right .dropdown-menu li:first-child:before{content:"";border-bottom:6px solid #3d434f;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);display:inline-block;position:absolute;right:8px;top:-6px} +.navbar .pull-right .dropdown-menu li:first-child:after{content:"";border-top:1px solid #272e3b;display:inline-block;position:absolute;right:9px;top:0;width:10px} +.navbar .pull-right .dropdown-menu:before{content:"";border-bottom:7px solid #000;border-left:7px solid rgba(0,0,0,0);border-right:7px solid rgba(0,0,0,0);display:inline-block;position:absolute;right:7px;top:-7px} +.navbar .pull-right .dropdown-menu:after{content:"";border-bottom:4px solid #272e3b;border-left:4px solid rgba(0,0,0,0);border-right:4px solid rgba(0,0,0,0);display:inline-block;position:absolute;right:10px;top:-4px} +.navbar .pull-right .dropdown-menu li:first-child:before{right:8px} +.navbar .pull-right .dropdown-menu li:first-child:after{right:9px} +.navbar .pull-right .dropdown-menu:before{right:7px} +.navbar .pull-right .dropdown-menu:after{right:10px} +.nav-tabs .dropdown-menu{left:28px;margin-top:0} +.nav-pills .dropdown-menu{left:-1px;margin-top:-1px} +.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{color:#fff;background-color:rgba(255,255,255,0.07)} +.dropdown-menu .active>a,.dropdown-menu .active>a:hover,.dropdown-menu .active>a:focus{color:#fff} +.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover,.dropdown-menu .disabled>a:focus{color:rgba(255,255,255,0.3)} +.dropdown-menu>.disabled>a>[class^="icon-"],.dropdown-menu>.disabled>a>[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.2} +.dropdown-submenu{position:relative} +.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:0} +.dropdown-submenu:hover>.dropdown-menu{display:block} +.dropdown-submenu>a:after{content:"";margin:2px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");display:inline-block;width:16px;height:16px;overflow:hidden;line-height:16px;vertical-align:top;background-repeat:no-repeat;text-indent:-9999px;background-position:0 -48px;position:absolute;right:5px;top:4px;opacity:.3;-webkit-transition:opacity,0.2s;transition:opacity .2s} +.dropdown-submenu:focus>a:after,.dropdown-submenu:hover>a:after{opacity:.5} +.dropdown .dropdown-menu .nav-header{padding:4px 30px;margin:3px 0;border:solid #3d434f;border-width:1px 0;color:rgba(255,255,255,0.3)} +.dropdown .dropdown-menu .nav-header:first-child{border-top:0;margin-top:0} +.error-template .error-heading{margin:100px 0 40px 0;text-align:center;font-size:40px;line-height:50px} +.error-template .error-message{margin:0 0 40px 0;text-align:center;font-size:20px;line-height:25px;font-weight:300;color:rgba(255,255,255,0.8)} +.error-template .error-home-button{text-align:center;margin:0 0 40px 0} +.error-template .error-support{background-color:rgba(0,0,0,0.25);margin:40px 0 0 0;padding:20px 0;text-align:center;border-top:1px solid rgba(255,255,255,0.07);border-bottom:1px solid rgba(255,255,255,0.07)} +.error-template .error-support p{margin:0;color:rgba(255,255,255,0.8)} +.error-template .error-support:empty{background:0;border:0;height:0;overflow:hidden;margin:0;padding:0} +.footer{background:0} +.footer-content{border-top:1px solid rgba(255,255,255,0.1);padding:30px 0;font-size:13px;line-height:20px} +.footer-content:before,.footer-content:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.footer-content:after{clear:both} +.footer-content .legal{color:rgba(255,255,255,0.3)} +.footer-content .copyright{color:rgba(255,255,255,0.5);font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em} +.footer-content .supplemental{display:block} +.footer-content .links{display:block} +.footer-content .links a{display:inline-block;margin-right:20px} +.footer-content .links a:last-of-type{margin-right:0} +.footer-content .blizzard{display:block;width:102px;height:52px;overflow:hidden;float:right;background:transparent url("../../images/toolkit/defaults/logos/blizzard/footer.png") no-repeat 0 -104px;text-indent:-9999px} +form{margin:0} +fieldset{padding:0;margin:0 0 30px 0;border:0} +fieldset p:last-child,fieldset ul:last-child,fieldset ol:last-child{margin-bottom:0} +legend{display:block;width:100%;padding:0;margin-bottom:40px;color:#fff;font-size:23px;line-height:30px;font-weight:300} +legend small{font-size:12px;color:rgba(255,255,255,0.3)} +label,input,button,select,textarea{font-size:15px;font-weight:400;line-height:20px} +input,button,select,select optgroup,select option,textarea{font-family:"Blizzard","Arial","Helvetica",sans-serif} +input:lang(zh-CN),button:lang(zh-CN),select:lang(zh-CN),select optgroup:lang(zh-CN),select option:lang(zh-CN),textarea:lang(zh-CN){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft YaHei","Hei SC",sans-serif} +input:lang(zh-TW),button:lang(zh-TW),select:lang(zh-TW),select optgroup:lang(zh-TW),select option:lang(zh-TW),textarea:lang(zh-TW){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft JhengHei","Tei TC",sans-serif} +input:lang(ko),button:lang(ko),select:lang(ko),select optgroup:lang(ko),select option:lang(ko),textarea:lang(ko){font-family:"Blizzard","Arial","Helvetica","?????? ??????","Malgun Gothic","????????????????????????","AppleSDGothicNeo","????????????","AppleGothic","??????","Dotum",sans-serif} +input:lang(ja),button:lang(ja),select:lang(ja),select optgroup:lang(ja),select option:lang(ja),textarea:lang(ja){font-family:"Blizzard","Arial","Helvetica","????????????","Meiryo","?????????????????? Pro","Hiragino Kaku Gothic Pro","???????????????","Yu Gothic",sans-serif} +input:lang(th),button:lang(th),select:lang(th),select optgroup:lang(th),select option:lang(th),textarea:lang(th){font-family:"Blizzard","Tahoma","Arial","Helvetica",sans-serif} +*::-ms-clear{width:0;height:0} +label{display:block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:0} +.uneditable-input,select,textarea,input[type="color"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="email"],input[type="month"],input[type="number"],input[type="password"],input[type="search"],input[type="tel"],input[type="text"],input[type="time"],input[type="url"],input[type="week"]{display:inline-block;vertical-align:middle;height:34px;padding:0 10px;margin-top:3px;margin-bottom:3px;font-size:15px;line-height:20px;border:1px solid rgba(255,255,255,0.3);background-color:rgba(0,0,0,0.5);color:rgba(255,255,255,0.7);-moz-box-sizing:border-box;box-sizing:border-box;border-radius:2px} +.uneditable-input.input-block,select.input-block,textarea.input-block,input[type="color"].input-block,input[type="date"].input-block,input[type="datetime"].input-block,input[type="datetime-local"].input-block,input[type="email"].input-block,input[type="month"].input-block,input[type="number"].input-block,input[type="password"].input-block,input[type="search"].input-block,input[type="tel"].input-block,input[type="text"].input-block,input[type="time"].input-block,input[type="url"].input-block,input[type="week"].input-block{width:100%} +.uneditable-input[class^="grid-"],select[class^="grid-"],textarea[class^="grid-"],input[type="color"][class^="grid-"],input[type="date"][class^="grid-"],input[type="datetime"][class^="grid-"],input[type="datetime-local"][class^="grid-"],input[type="email"][class^="grid-"],input[type="month"][class^="grid-"],input[type="number"][class^="grid-"],input[type="password"][class^="grid-"],input[type="search"][class^="grid-"],input[type="tel"][class^="grid-"],input[type="text"][class^="grid-"],input[type="time"][class^="grid-"],input[type="url"][class^="grid-"],input[type="week"][class^="grid-"],.uneditable-input[class*=" grid-"],select[class*=" grid-"],textarea[class*=" grid-"],input[type="color"][class*=" grid-"],input[type="date"][class*=" grid-"],input[type="datetime"][class*=" grid-"],input[type="datetime-local"][class*=" grid-"],input[type="email"][class*=" grid-"],input[type="month"][class*=" grid-"],input[type="number"][class*=" grid-"],input[type="password"][class*=" grid-"],input[type="search"][class*=" grid-"],input[type="tel"][class*=" grid-"],input[type="text"][class*=" grid-"],input[type="time"][class*=" grid-"],input[type="url"][class*=" grid-"],input[type="week"][class*=" grid-"]{padding-left:10px;padding-right:10px} +.uneditable-input{padding-top:6px;padding-bottom:6px;height:auto} +.uneditable-input,input[readonly]{border-color:rgba(255,255,255,0.3)!important;background-color:rgba(20,20,23,0.5)!important;color:rgba(255,255,255,0.7)!important} +select,textarea,input[type="color"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="email"],input[type="month"],input[type="number"],input[type="password"],input[type="search"],input[type="tel"],input[type="text"],input[type="time"],input[type="url"],input[type="week"]{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;-webkit-transition:background-position .2s,background-color .2s,border-color .2s,box-shadow .2s;transition:background-position .2s,background-color .2s,border-color .2s,box-shadow .2s} +select:hover,textarea:hover,input[type="color"]:hover,input[type="date"]:hover,input[type="datetime"]:hover,input[type="datetime-local"]:hover,input[type="email"]:hover,input[type="month"]:hover,input[type="number"]:hover,input[type="password"]:hover,input[type="search"]:hover,input[type="tel"]:hover,input[type="text"]:hover,input[type="time"]:hover,input[type="url"]:hover,input[type="week"]:hover{border-color:rgba(255,255,255,0.5);background-color:rgba(0,0,0,0.5);color:rgba(255,255,255,0.7)} +select:focus,textarea:focus,input[type="color"]:focus,input[type="date"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="email"]:focus,input[type="month"]:focus,input[type="number"]:focus,input[type="password"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="text"]:focus,input[type="time"]:focus,input[type="url"]:focus,input[type="week"]:focus{border-color:#1e5f99;background-color:rgba(0,0,0,0.5);color:#fff} +select[disabled],textarea[disabled],input[type="color"][disabled],input[type="date"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="email"][disabled],input[type="month"][disabled],input[type="number"][disabled],input[type="password"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="text"][disabled],input[type="time"][disabled],input[type="url"][disabled],input[type="week"][disabled],select.disabled,textarea.disabled,input[type="color"].disabled,input[type="date"].disabled,input[type="datetime"].disabled,input[type="datetime-local"].disabled,input[type="email"].disabled,input[type="month"].disabled,input[type="number"].disabled,input[type="password"].disabled,input[type="search"].disabled,input[type="tel"].disabled,input[type="text"].disabled,input[type="time"].disabled,input[type="url"].disabled,input[type="week"].disabled{border-color:rgba(255,255,255,0.3)!important;background-color:rgba(20,20,23,0.5)!important;color:#3f3f3f!important;cursor:default!important} +select[disabled]:-moz-placeholder,textarea[disabled]:-moz-placeholder,input[type="color"][disabled]:-moz-placeholder,input[type="date"][disabled]:-moz-placeholder,input[type="datetime"][disabled]:-moz-placeholder,input[type="datetime-local"][disabled]:-moz-placeholder,input[type="email"][disabled]:-moz-placeholder,input[type="month"][disabled]:-moz-placeholder,input[type="number"][disabled]:-moz-placeholder,input[type="password"][disabled]:-moz-placeholder,input[type="search"][disabled]:-moz-placeholder,input[type="tel"][disabled]:-moz-placeholder,input[type="text"][disabled]:-moz-placeholder,input[type="time"][disabled]:-moz-placeholder,input[type="url"][disabled]:-moz-placeholder,input[type="week"][disabled]:-moz-placeholder,select.disabled:-moz-placeholder,textarea.disabled:-moz-placeholder,input[type="color"].disabled:-moz-placeholder,input[type="date"].disabled:-moz-placeholder,input[type="datetime"].disabled:-moz-placeholder,input[type="datetime-local"].disabled:-moz-placeholder,input[type="email"].disabled:-moz-placeholder,input[type="month"].disabled:-moz-placeholder,input[type="number"].disabled:-moz-placeholder,input[type="password"].disabled:-moz-placeholder,input[type="search"].disabled:-moz-placeholder,input[type="tel"].disabled:-moz-placeholder,input[type="text"].disabled:-moz-placeholder,input[type="time"].disabled:-moz-placeholder,input[type="url"].disabled:-moz-placeholder,input[type="week"].disabled:-moz-placeholder{color:#3f3f3f} +select[disabled]:-ms-input-placeholder,textarea[disabled]:-ms-input-placeholder,input[type="color"][disabled]:-ms-input-placeholder,input[type="date"][disabled]:-ms-input-placeholder,input[type="datetime"][disabled]:-ms-input-placeholder,input[type="datetime-local"][disabled]:-ms-input-placeholder,input[type="email"][disabled]:-ms-input-placeholder,input[type="month"][disabled]:-ms-input-placeholder,input[type="number"][disabled]:-ms-input-placeholder,input[type="password"][disabled]:-ms-input-placeholder,input[type="search"][disabled]:-ms-input-placeholder,input[type="tel"][disabled]:-ms-input-placeholder,input[type="text"][disabled]:-ms-input-placeholder,input[type="time"][disabled]:-ms-input-placeholder,input[type="url"][disabled]:-ms-input-placeholder,input[type="week"][disabled]:-ms-input-placeholder,select.disabled:-ms-input-placeholder,textarea.disabled:-ms-input-placeholder,input[type="color"].disabled:-ms-input-placeholder,input[type="date"].disabled:-ms-input-placeholder,input[type="datetime"].disabled:-ms-input-placeholder,input[type="datetime-local"].disabled:-ms-input-placeholder,input[type="email"].disabled:-ms-input-placeholder,input[type="month"].disabled:-ms-input-placeholder,input[type="number"].disabled:-ms-input-placeholder,input[type="password"].disabled:-ms-input-placeholder,input[type="search"].disabled:-ms-input-placeholder,input[type="tel"].disabled:-ms-input-placeholder,input[type="text"].disabled:-ms-input-placeholder,input[type="time"].disabled:-ms-input-placeholder,input[type="url"].disabled:-ms-input-placeholder,input[type="week"].disabled:-ms-input-placeholder{color:#3f3f3f} +select[disabled]::-webkit-input-placeholder,textarea[disabled]::-webkit-input-placeholder,input[type="color"][disabled]::-webkit-input-placeholder,input[type="date"][disabled]::-webkit-input-placeholder,input[type="datetime"][disabled]::-webkit-input-placeholder,input[type="datetime-local"][disabled]::-webkit-input-placeholder,input[type="email"][disabled]::-webkit-input-placeholder,input[type="month"][disabled]::-webkit-input-placeholder,input[type="number"][disabled]::-webkit-input-placeholder,input[type="password"][disabled]::-webkit-input-placeholder,input[type="search"][disabled]::-webkit-input-placeholder,input[type="tel"][disabled]::-webkit-input-placeholder,input[type="text"][disabled]::-webkit-input-placeholder,input[type="time"][disabled]::-webkit-input-placeholder,input[type="url"][disabled]::-webkit-input-placeholder,input[type="week"][disabled]::-webkit-input-placeholder,select.disabled::-webkit-input-placeholder,textarea.disabled::-webkit-input-placeholder,input[type="color"].disabled::-webkit-input-placeholder,input[type="date"].disabled::-webkit-input-placeholder,input[type="datetime"].disabled::-webkit-input-placeholder,input[type="datetime-local"].disabled::-webkit-input-placeholder,input[type="email"].disabled::-webkit-input-placeholder,input[type="month"].disabled::-webkit-input-placeholder,input[type="number"].disabled::-webkit-input-placeholder,input[type="password"].disabled::-webkit-input-placeholder,input[type="search"].disabled::-webkit-input-placeholder,input[type="tel"].disabled::-webkit-input-placeholder,input[type="text"].disabled::-webkit-input-placeholder,input[type="time"].disabled::-webkit-input-placeholder,input[type="url"].disabled::-webkit-input-placeholder,input[type="week"].disabled::-webkit-input-placeholder{color:#3f3f3f} +select[disabled]::-moz-placeholder,textarea[disabled]::-moz-placeholder,input[type="color"][disabled]::-moz-placeholder,input[type="date"][disabled]::-moz-placeholder,input[type="datetime"][disabled]::-moz-placeholder,input[type="datetime-local"][disabled]::-moz-placeholder,input[type="email"][disabled]::-moz-placeholder,input[type="month"][disabled]::-moz-placeholder,input[type="number"][disabled]::-moz-placeholder,input[type="password"][disabled]::-moz-placeholder,input[type="search"][disabled]::-moz-placeholder,input[type="tel"][disabled]::-moz-placeholder,input[type="text"][disabled]::-moz-placeholder,input[type="time"][disabled]::-moz-placeholder,input[type="url"][disabled]::-moz-placeholder,input[type="week"][disabled]::-moz-placeholder,select.disabled::-moz-placeholder,textarea.disabled::-moz-placeholder,input[type="color"].disabled::-moz-placeholder,input[type="date"].disabled::-moz-placeholder,input[type="datetime"].disabled::-moz-placeholder,input[type="datetime-local"].disabled::-moz-placeholder,input[type="email"].disabled::-moz-placeholder,input[type="month"].disabled::-moz-placeholder,input[type="number"].disabled::-moz-placeholder,input[type="password"].disabled::-moz-placeholder,input[type="search"].disabled::-moz-placeholder,input[type="tel"].disabled::-moz-placeholder,input[type="text"].disabled::-moz-placeholder,input[type="time"].disabled::-moz-placeholder,input[type="url"].disabled::-moz-placeholder,input[type="week"].disabled::-moz-placeholder{color:#3f3f3f!important;opacity:1} +select:-moz-placeholder,textarea:-moz-placeholder,input[type="color"]:-moz-placeholder,input[type="date"]:-moz-placeholder,input[type="datetime"]:-moz-placeholder,input[type="datetime-local"]:-moz-placeholder,input[type="email"]:-moz-placeholder,input[type="month"]:-moz-placeholder,input[type="number"]:-moz-placeholder,input[type="password"]:-moz-placeholder,input[type="search"]:-moz-placeholder,input[type="tel"]:-moz-placeholder,input[type="text"]:-moz-placeholder,input[type="time"]:-moz-placeholder,input[type="url"]:-moz-placeholder,input[type="week"]:-moz-placeholder{color:rgba(255,255,255,0.3)} +select:-ms-input-placeholder,textarea:-ms-input-placeholder,input[type="color"]:-ms-input-placeholder,input[type="date"]:-ms-input-placeholder,input[type="datetime"]:-ms-input-placeholder,input[type="datetime-local"]:-ms-input-placeholder,input[type="email"]:-ms-input-placeholder,input[type="month"]:-ms-input-placeholder,input[type="number"]:-ms-input-placeholder,input[type="password"]:-ms-input-placeholder,input[type="search"]:-ms-input-placeholder,input[type="tel"]:-ms-input-placeholder,input[type="text"]:-ms-input-placeholder,input[type="time"]:-ms-input-placeholder,input[type="url"]:-ms-input-placeholder,input[type="week"]:-ms-input-placeholder{color:rgba(255,255,255,0.3)} +select::-webkit-input-placeholder,textarea::-webkit-input-placeholder,input[type="color"]::-webkit-input-placeholder,input[type="date"]::-webkit-input-placeholder,input[type="datetime"]::-webkit-input-placeholder,input[type="datetime-local"]::-webkit-input-placeholder,input[type="email"]::-webkit-input-placeholder,input[type="month"]::-webkit-input-placeholder,input[type="number"]::-webkit-input-placeholder,input[type="password"]::-webkit-input-placeholder,input[type="search"]::-webkit-input-placeholder,input[type="tel"]::-webkit-input-placeholder,input[type="text"]::-webkit-input-placeholder,input[type="time"]::-webkit-input-placeholder,input[type="url"]::-webkit-input-placeholder,input[type="week"]::-webkit-input-placeholder{color:rgba(255,255,255,0.3)} +select:focus:-moz-placeholder,textarea:focus:-moz-placeholder,input[type="color"]:focus:-moz-placeholder,input[type="date"]:focus:-moz-placeholder,input[type="datetime"]:focus:-moz-placeholder,input[type="datetime-local"]:focus:-moz-placeholder,input[type="email"]:focus:-moz-placeholder,input[type="month"]:focus:-moz-placeholder,input[type="number"]:focus:-moz-placeholder,input[type="password"]:focus:-moz-placeholder,input[type="search"]:focus:-moz-placeholder,input[type="tel"]:focus:-moz-placeholder,input[type="text"]:focus:-moz-placeholder,input[type="time"]:focus:-moz-placeholder,input[type="url"]:focus:-moz-placeholder,input[type="week"]:focus:-moz-placeholder{color:rgba(255,255,255,0.3)} +select:focus:-ms-input-placeholder,textarea:focus:-ms-input-placeholder,input[type="color"]:focus:-ms-input-placeholder,input[type="date"]:focus:-ms-input-placeholder,input[type="datetime"]:focus:-ms-input-placeholder,input[type="datetime-local"]:focus:-ms-input-placeholder,input[type="email"]:focus:-ms-input-placeholder,input[type="month"]:focus:-ms-input-placeholder,input[type="number"]:focus:-ms-input-placeholder,input[type="password"]:focus:-ms-input-placeholder,input[type="search"]:focus:-ms-input-placeholder,input[type="tel"]:focus:-ms-input-placeholder,input[type="text"]:focus:-ms-input-placeholder,input[type="time"]:focus:-ms-input-placeholder,input[type="url"]:focus:-ms-input-placeholder,input[type="week"]:focus:-ms-input-placeholder{color:rgba(255,255,255,0.3)} +select:focus::-webkit-input-placeholder,textarea:focus::-webkit-input-placeholder,input[type="color"]:focus::-webkit-input-placeholder,input[type="date"]:focus::-webkit-input-placeholder,input[type="datetime"]:focus::-webkit-input-placeholder,input[type="datetime-local"]:focus::-webkit-input-placeholder,input[type="email"]:focus::-webkit-input-placeholder,input[type="month"]:focus::-webkit-input-placeholder,input[type="number"]:focus::-webkit-input-placeholder,input[type="password"]:focus::-webkit-input-placeholder,input[type="search"]:focus::-webkit-input-placeholder,input[type="tel"]:focus::-webkit-input-placeholder,input[type="text"]:focus::-webkit-input-placeholder,input[type="time"]:focus::-webkit-input-placeholder,input[type="url"]:focus::-webkit-input-placeholder,input[type="week"]:focus::-webkit-input-placeholder{color:rgba(255,255,255,0.3)} +input[type="number"]{-moz-appearance:textfield} +select{background-image:url("../../images/toolkit/themes/bnet/forms/sprite-22-select.png");background-repeat:no-repeat;background-position:right 0} +select::-ms-expand{display:none} +textarea,input,.uneditable-input{outline:0} +textarea{overflow:auto;height:auto;resize:vertical;min-height:34px;padding:6px 4px 4px 10px} +select{padding:6px 18px 6px 5px} +select:focus{outline:0} +select optgroup{border:solid #3d434f;border-width:1px 0;margin:0;background:#272e3b;color:rgba(255,255,255,0.3);font-style:normal;font-weight:400;font-size:12px;line-height:13px;letter-spacing:.075em;text-transform:uppercase;text-indent:10px;padding-top:5px} +select option{background:#272e3b;color:rgba(255,255,255,0.7);font-size:15px;line-height:20px;padding:4px 10px;letter-spacing:normal;text-transform:none} +select optgroup{font-size:15px;text-transform:none} +label.radio-label,label.checkbox-label{min-height:20px;padding-left:30px;position:relative;margin-bottom:20px} +label.radio-label[disabled],label.checkbox-label[disabled],label.radio-label.disabled,label.checkbox-label.disabled{opacity:.3} +label.radio-label input[type="radio"],label.checkbox-label input[type="checkbox"]{position:absolute;left:0;top:0;width:20px;height:20px;opacity:.3} +input.input-large{margin:5px 0;padding:0 10px;font-size:17px;line-height:20px;height:40px} +input.input-large.active,input.input-large:active{padding:1 9px -1 11px} +input.input-large.disabled:active,input.input-large[disabled]:active,input.input-large.disabled.active,input.input-large[disabled].active{padding:0 10px!important} +.form-actions{margin-top:40px;margin-bottom:40px} +.form-actions:before,.form-actions:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.form-actions:after{clear:both} +.form-actions .btn{float:left} +.form-actions .btn+.btn{margin-left:10px} +.control-group{margin-bottom:10px} +.control-group:before,.control-group:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.control-group:after{clear:both} +.control-group.control-info .control-label{color:#00aeff} +.control-group.control-info select,.control-group.control-info textarea,.control-group.control-info input[type="color"],.control-group.control-info input[type="date"],.control-group.control-info input[type="datetime"],.control-group.control-info input[type="datetime-local"],.control-group.control-info input[type="email"],.control-group.control-info input[type="month"],.control-group.control-info input[type="number"],.control-group.control-info input[type="password"],.control-group.control-info input[type="search"],.control-group.control-info input[type="tel"],.control-group.control-info input[type="text"],.control-group.control-info input[type="time"],.control-group.control-info input[type="url"],.control-group.control-info input[type="week"]{border-color:rgba(0,174,255,0.6)} +.control-group.control-info select:hover:not(:disabled),.control-group.control-info textarea:hover:not(:disabled),.control-group.control-info input[type="color"]:hover:not(:disabled),.control-group.control-info input[type="date"]:hover:not(:disabled),.control-group.control-info input[type="datetime"]:hover:not(:disabled),.control-group.control-info input[type="datetime-local"]:hover:not(:disabled),.control-group.control-info input[type="email"]:hover:not(:disabled),.control-group.control-info input[type="month"]:hover:not(:disabled),.control-group.control-info input[type="number"]:hover:not(:disabled),.control-group.control-info input[type="password"]:hover:not(:disabled),.control-group.control-info input[type="search"]:hover:not(:disabled),.control-group.control-info input[type="tel"]:hover:not(:disabled),.control-group.control-info input[type="text"]:hover:not(:disabled),.control-group.control-info input[type="time"]:hover:not(:disabled),.control-group.control-info input[type="url"]:hover:not(:disabled),.control-group.control-info input[type="week"]:hover:not(:disabled){border-color:rgba(0,174,255,0.8)} +.control-group.control-info select:focus,.control-group.control-info textarea:focus,.control-group.control-info input[type="color"]:focus,.control-group.control-info input[type="date"]:focus,.control-group.control-info input[type="datetime"]:focus,.control-group.control-info input[type="datetime-local"]:focus,.control-group.control-info input[type="email"]:focus,.control-group.control-info input[type="month"]:focus,.control-group.control-info input[type="number"]:focus,.control-group.control-info input[type="password"]:focus,.control-group.control-info input[type="search"]:focus,.control-group.control-info input[type="tel"]:focus,.control-group.control-info input[type="text"]:focus,.control-group.control-info input[type="time"]:focus,.control-group.control-info input[type="url"]:focus,.control-group.control-info input[type="week"]:focus{border-color:#00aeff} +.control-group.control-success .control-label{color:#00a83c} +.control-group.control-success select,.control-group.control-success textarea,.control-group.control-success input[type="color"],.control-group.control-success input[type="date"],.control-group.control-success input[type="datetime"],.control-group.control-success input[type="datetime-local"],.control-group.control-success input[type="email"],.control-group.control-success input[type="month"],.control-group.control-success input[type="number"],.control-group.control-success input[type="password"],.control-group.control-success input[type="search"],.control-group.control-success input[type="tel"],.control-group.control-success input[type="text"],.control-group.control-success input[type="time"],.control-group.control-success input[type="url"],.control-group.control-success input[type="week"]{border-color:rgba(0,168,60,0.6)} +.control-group.control-success select:hover:not(:disabled),.control-group.control-success textarea:hover:not(:disabled),.control-group.control-success input[type="color"]:hover:not(:disabled),.control-group.control-success input[type="date"]:hover:not(:disabled),.control-group.control-success input[type="datetime"]:hover:not(:disabled),.control-group.control-success input[type="datetime-local"]:hover:not(:disabled),.control-group.control-success input[type="email"]:hover:not(:disabled),.control-group.control-success input[type="month"]:hover:not(:disabled),.control-group.control-success input[type="number"]:hover:not(:disabled),.control-group.control-success input[type="password"]:hover:not(:disabled),.control-group.control-success input[type="search"]:hover:not(:disabled),.control-group.control-success input[type="tel"]:hover:not(:disabled),.control-group.control-success input[type="text"]:hover:not(:disabled),.control-group.control-success input[type="time"]:hover:not(:disabled),.control-group.control-success input[type="url"]:hover:not(:disabled),.control-group.control-success input[type="week"]:hover:not(:disabled){border-color:rgba(0,168,60,0.8)} +.control-group.control-success select:focus,.control-group.control-success textarea:focus,.control-group.control-success input[type="color"]:focus,.control-group.control-success input[type="date"]:focus,.control-group.control-success input[type="datetime"]:focus,.control-group.control-success input[type="datetime-local"]:focus,.control-group.control-success input[type="email"]:focus,.control-group.control-success input[type="month"]:focus,.control-group.control-success input[type="number"]:focus,.control-group.control-success input[type="password"]:focus,.control-group.control-success input[type="search"]:focus,.control-group.control-success input[type="tel"]:focus,.control-group.control-success input[type="text"]:focus,.control-group.control-success input[type="time"]:focus,.control-group.control-success input[type="url"]:focus,.control-group.control-success input[type="week"]:focus{border-color:#00a83c} +.control-group.control-warning .control-label{color:#d8ac15} +.control-group.control-warning select,.control-group.control-warning textarea,.control-group.control-warning input[type="color"],.control-group.control-warning input[type="date"],.control-group.control-warning input[type="datetime"],.control-group.control-warning input[type="datetime-local"],.control-group.control-warning input[type="email"],.control-group.control-warning input[type="month"],.control-group.control-warning input[type="number"],.control-group.control-warning input[type="password"],.control-group.control-warning input[type="search"],.control-group.control-warning input[type="tel"],.control-group.control-warning input[type="text"],.control-group.control-warning input[type="time"],.control-group.control-warning input[type="url"],.control-group.control-warning input[type="week"]{border-color:rgba(216,172,21,0.6)} +.control-group.control-warning select:hover:not(:disabled),.control-group.control-warning textarea:hover:not(:disabled),.control-group.control-warning input[type="color"]:hover:not(:disabled),.control-group.control-warning input[type="date"]:hover:not(:disabled),.control-group.control-warning input[type="datetime"]:hover:not(:disabled),.control-group.control-warning input[type="datetime-local"]:hover:not(:disabled),.control-group.control-warning input[type="email"]:hover:not(:disabled),.control-group.control-warning input[type="month"]:hover:not(:disabled),.control-group.control-warning input[type="number"]:hover:not(:disabled),.control-group.control-warning input[type="password"]:hover:not(:disabled),.control-group.control-warning input[type="search"]:hover:not(:disabled),.control-group.control-warning input[type="tel"]:hover:not(:disabled),.control-group.control-warning input[type="text"]:hover:not(:disabled),.control-group.control-warning input[type="time"]:hover:not(:disabled),.control-group.control-warning input[type="url"]:hover:not(:disabled),.control-group.control-warning input[type="week"]:hover:not(:disabled){border-color:rgba(216,172,21,0.8)} +.control-group.control-warning select:focus,.control-group.control-warning textarea:focus,.control-group.control-warning input[type="color"]:focus,.control-group.control-warning input[type="date"]:focus,.control-group.control-warning input[type="datetime"]:focus,.control-group.control-warning input[type="datetime-local"]:focus,.control-group.control-warning input[type="email"]:focus,.control-group.control-warning input[type="month"]:focus,.control-group.control-warning input[type="number"]:focus,.control-group.control-warning input[type="password"]:focus,.control-group.control-warning input[type="search"]:focus,.control-group.control-warning input[type="tel"]:focus,.control-group.control-warning input[type="text"]:focus,.control-group.control-warning input[type="time"]:focus,.control-group.control-warning input[type="url"]:focus,.control-group.control-warning input[type="week"]:focus{border-color:#d8ac15} +.control-group.control-error .control-label,.control-group.control-danger .control-label,.control-group.control-important .control-label{color:#cd0606} +.control-group.control-error select,.control-group.control-danger select,.control-group.control-important select,.control-group.control-error textarea,.control-group.control-danger textarea,.control-group.control-important textarea,.control-group.control-error input[type="color"],.control-group.control-danger input[type="color"],.control-group.control-important input[type="color"],.control-group.control-error input[type="date"],.control-group.control-danger input[type="date"],.control-group.control-important input[type="date"],.control-group.control-error input[type="datetime"],.control-group.control-danger input[type="datetime"],.control-group.control-important input[type="datetime"],.control-group.control-error input[type="datetime-local"],.control-group.control-danger input[type="datetime-local"],.control-group.control-important input[type="datetime-local"],.control-group.control-error input[type="email"],.control-group.control-danger input[type="email"],.control-group.control-important input[type="email"],.control-group.control-error input[type="month"],.control-group.control-danger input[type="month"],.control-group.control-important input[type="month"],.control-group.control-error input[type="number"],.control-group.control-danger input[type="number"],.control-group.control-important input[type="number"],.control-group.control-error input[type="password"],.control-group.control-danger input[type="password"],.control-group.control-important input[type="password"],.control-group.control-error input[type="search"],.control-group.control-danger input[type="search"],.control-group.control-important input[type="search"],.control-group.control-error input[type="tel"],.control-group.control-danger input[type="tel"],.control-group.control-important input[type="tel"],.control-group.control-error input[type="text"],.control-group.control-danger input[type="text"],.control-group.control-important input[type="text"],.control-group.control-error input[type="time"],.control-group.control-danger input[type="time"],.control-group.control-important input[type="time"],.control-group.control-error input[type="url"],.control-group.control-danger input[type="url"],.control-group.control-important input[type="url"],.control-group.control-error input[type="week"],.control-group.control-danger input[type="week"],.control-group.control-important input[type="week"]{border-color:rgba(205,6,6,0.6)} +.control-group.control-error select:hover:not(:disabled),.control-group.control-danger select:hover:not(:disabled),.control-group.control-important select:hover:not(:disabled),.control-group.control-error textarea:hover:not(:disabled),.control-group.control-danger textarea:hover:not(:disabled),.control-group.control-important textarea:hover:not(:disabled),.control-group.control-error input[type="color"]:hover:not(:disabled),.control-group.control-danger input[type="color"]:hover:not(:disabled),.control-group.control-important input[type="color"]:hover:not(:disabled),.control-group.control-error input[type="date"]:hover:not(:disabled),.control-group.control-danger input[type="date"]:hover:not(:disabled),.control-group.control-important input[type="date"]:hover:not(:disabled),.control-group.control-error input[type="datetime"]:hover:not(:disabled),.control-group.control-danger input[type="datetime"]:hover:not(:disabled),.control-group.control-important input[type="datetime"]:hover:not(:disabled),.control-group.control-error input[type="datetime-local"]:hover:not(:disabled),.control-group.control-danger input[type="datetime-local"]:hover:not(:disabled),.control-group.control-important input[type="datetime-local"]:hover:not(:disabled),.control-group.control-error input[type="email"]:hover:not(:disabled),.control-group.control-danger input[type="email"]:hover:not(:disabled),.control-group.control-important input[type="email"]:hover:not(:disabled),.control-group.control-error input[type="month"]:hover:not(:disabled),.control-group.control-danger input[type="month"]:hover:not(:disabled),.control-group.control-important input[type="month"]:hover:not(:disabled),.control-group.control-error input[type="number"]:hover:not(:disabled),.control-group.control-danger input[type="number"]:hover:not(:disabled),.control-group.control-important input[type="number"]:hover:not(:disabled),.control-group.control-error input[type="password"]:hover:not(:disabled),.control-group.control-danger input[type="password"]:hover:not(:disabled),.control-group.control-important input[type="password"]:hover:not(:disabled),.control-group.control-error input[type="search"]:hover:not(:disabled),.control-group.control-danger input[type="search"]:hover:not(:disabled),.control-group.control-important input[type="search"]:hover:not(:disabled),.control-group.control-error input[type="tel"]:hover:not(:disabled),.control-group.control-danger input[type="tel"]:hover:not(:disabled),.control-group.control-important input[type="tel"]:hover:not(:disabled),.control-group.control-error input[type="text"]:hover:not(:disabled),.control-group.control-danger input[type="text"]:hover:not(:disabled),.control-group.control-important input[type="text"]:hover:not(:disabled),.control-group.control-error input[type="time"]:hover:not(:disabled),.control-group.control-danger input[type="time"]:hover:not(:disabled),.control-group.control-important input[type="time"]:hover:not(:disabled),.control-group.control-error input[type="url"]:hover:not(:disabled),.control-group.control-danger input[type="url"]:hover:not(:disabled),.control-group.control-important input[type="url"]:hover:not(:disabled),.control-group.control-error input[type="week"]:hover:not(:disabled),.control-group.control-danger input[type="week"]:hover:not(:disabled),.control-group.control-important input[type="week"]:hover:not(:disabled){border-color:rgba(205,6,6,0.8)} +.control-group.control-error select:focus,.control-group.control-danger select:focus,.control-group.control-important select:focus,.control-group.control-error textarea:focus,.control-group.control-danger textarea:focus,.control-group.control-important textarea:focus,.control-group.control-error input[type="color"]:focus,.control-group.control-danger input[type="color"]:focus,.control-group.control-important input[type="color"]:focus,.control-group.control-error input[type="date"]:focus,.control-group.control-danger input[type="date"]:focus,.control-group.control-important input[type="date"]:focus,.control-group.control-error input[type="datetime"]:focus,.control-group.control-danger input[type="datetime"]:focus,.control-group.control-important input[type="datetime"]:focus,.control-group.control-error input[type="datetime-local"]:focus,.control-group.control-danger input[type="datetime-local"]:focus,.control-group.control-important input[type="datetime-local"]:focus,.control-group.control-error input[type="email"]:focus,.control-group.control-danger input[type="email"]:focus,.control-group.control-important input[type="email"]:focus,.control-group.control-error input[type="month"]:focus,.control-group.control-danger input[type="month"]:focus,.control-group.control-important input[type="month"]:focus,.control-group.control-error input[type="number"]:focus,.control-group.control-danger input[type="number"]:focus,.control-group.control-important input[type="number"]:focus,.control-group.control-error input[type="password"]:focus,.control-group.control-danger input[type="password"]:focus,.control-group.control-important input[type="password"]:focus,.control-group.control-error input[type="search"]:focus,.control-group.control-danger input[type="search"]:focus,.control-group.control-important input[type="search"]:focus,.control-group.control-error input[type="tel"]:focus,.control-group.control-danger input[type="tel"]:focus,.control-group.control-important input[type="tel"]:focus,.control-group.control-error input[type="text"]:focus,.control-group.control-danger input[type="text"]:focus,.control-group.control-important input[type="text"]:focus,.control-group.control-error input[type="time"]:focus,.control-group.control-danger input[type="time"]:focus,.control-group.control-important input[type="time"]:focus,.control-group.control-error input[type="url"]:focus,.control-group.control-danger input[type="url"]:focus,.control-group.control-important input[type="url"]:focus,.control-group.control-error input[type="week"]:focus,.control-group.control-danger input[type="week"]:focus,.control-group.control-important input[type="week"]:focus{border-color:#cd0606} +.control-group .checkbox-label:last-of-type,.control-group .radio-label:last-of-type{margin-bottom:0} +.control-label{font-size:12px;font-weight:400;line-height:20px;letter-spacing:.075em;display:block;text-transform:uppercase;color:rgba(255,255,255,0.3)} +.help-inline,.help-block,.help-icon{color:rgba(255,255,255,0.7);line-height:20px;font-size:13px;min-height:20px} +.help-inline:empty,.help-block:empty,.help-icon:empty{display:none} +.help-inline.help-info,.help-block.help-info,.help-icon.help-info{color:rgba(255,255,255,0.8)} +.help-inline.help-info [class^="icon-"],.help-block.help-info [class^="icon-"],.help-icon.help-info [class^="icon-"],.help-inline.help-info [class*=" icon-"],.help-block.help-info [class*=" icon-"],.help-icon.help-info [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.help-inline.help-success,.help-block.help-success,.help-icon.help-success{color:rgba(255,255,255,0.8)} +.help-inline.help-success [class^="icon-"],.help-block.help-success [class^="icon-"],.help-icon.help-success [class^="icon-"],.help-inline.help-success [class*=" icon-"],.help-block.help-success [class*=" icon-"],.help-icon.help-success [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png")} +.help-inline.help-warning,.help-block.help-warning,.help-icon.help-warning{color:rgba(255,255,255,0.8)} +.help-inline.help-warning [class^="icon-"],.help-block.help-warning [class^="icon-"],.help-icon.help-warning [class^="icon-"],.help-inline.help-warning [class*=" icon-"],.help-block.help-warning [class*=" icon-"],.help-icon.help-warning [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png")} +.help-inline.help-error,.help-block.help-error,.help-icon.help-error,.help-inline.help-danger,.help-block.help-danger,.help-icon.help-danger,.help-inline.help-important,.help-block.help-important,.help-icon.help-important{color:#cd0606} +.help-inline{display:inline-block;margin-left:10px;padding-top:10px;vertical-align:top} +.help-block,.help-icon{clear:both;display:block;margin-bottom:10px} +.help-icon:after{content:"";display:block;position:absolute;top:2px;left:0;width:16px;height:16px;overflow:hidden;line-height:20px;vertical-align:top;text-indent:-9999px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-repeat:no-repeat;background-position:-32px -224px} +.help-icon{position:relative;padding-left:20px} +.help-icon.help-info:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-32px -224px} +.help-icon.help-success:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png");background-position:-144px -80px} +.help-icon.help-warning:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png");background-position:-128px -80px} +.help-icon.help-error:after{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-red.png");background-position:-112px -96px} +.input-append,.input-prepend{margin:3px 0;font-size:0;white-space:nowrap} +.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{font-size:15px} +.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;vertical-align:top;border-radius:0 2px 2px 0} +.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2} +.input-append .add-on,.input-prepend .add-on{display:inline-block;height:34px;min-width:10px;padding:7px;font-size:15px;font-weight:400;line-height:20px;text-align:center;vertical-align:middle;background-color:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.3);margin:3px 0;-moz-box-sizing:border-box;box-sizing:border-box} +.input-append .add-on [class^="icon-"],.input-prepend .add-on [class^="icon-"],.input-append .add-on [class*=" icon-"],.input-prepend .add-on [class*=" icon-"]{margin-left:0;margin-right:0} +.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggl,.input-prepend .btn-group>.dropdown-toggl{vertical-align:top;border-radius:0} +.input-append .active,.input-prepend .active{background-color:#5cf847;border-color:#18a006} +.input-prepend .add-on,.input-prepend .btn{margin-right:-1px} +.input-prepend .add-on:first-child,.input-prepend .btn:first-child{border-radius:2px 0 0 2px} +.input-append input,.input-append select,.input-append .uneditable-input{border-radius:2px 0 0 2px} +.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{border-radius:0 2px 2px 0} +.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px} +.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggl{border-radius:0 2px 2px 0} +.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{border-radius:0} +.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{border-radius:0 2px 2px 0} +.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;margin-left:0;border-radius:2px 0 0 2px} +.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;border-radius:0 2px 2px 0} +.input-prepend.input-append .btn-group:first-child{margin-left:0} +input:invalid,input:valid,input:required{box-shadow:inherit} +input:-webkit-autofill{background:rgba(0,0,0,0.5);color:rgba(255,255,255,0.7)} +input::-webkit-color-swatch-wrapper{border:0;padding:5px 0} +input::-webkit-color-swatch{border:1px solid rgba(255,255,255,0.3);padding:0} +input::-webkit-inner-spin-button{-webkit-appearance:none;width:0;overflow:hidden} +input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;width:0;overflow:hidden} +input::-webkit-calendar-picker-indicator{background:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");background-position:-16px -256px;opacity:.3;width:16px;height:16px;padding:0;color:rgba(255,255,255,0);-webkit-transition:opacity,200ms;transition:opacity 200ms} +input:hover::-webkit-calendar-picker-indicator{opacity:.5} +input:focus::-webkit-calendar-picker-indicator{opacity:.5} +input::-webkit-clear-button{-webkit-appearance:none;background:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");background-position:-112px -96px;opacity:.3;width:16px;height:16px} +input:hover::-webkit-clear-button{opacity:.5} +input:focus::-webkit-clear-button{opacity:.5} +input::-webkit-datetime-edit{padding:0} +input::-webkit-datetime-edit-fields-wrapper{background:0} +input::-webkit-datetime-edit-text{color:rgba(255,255,255,0.3)} +input::-webkit-datetime-edit-year-field,input::-webkit-datetime-edit-month-field,input::-webkit-datetime-edit-week-field,input::-webkit-datetime-edit-day-field,input::-webkit-datetime-edit-hour-field,input::-webkit-datetime-edit-minute-field,input::-webkit-datetime-edit-second-field,input::-webkit-datetime-edit-millisecond-field,input::-webkit-datetime-edit-ampm-field{color:rgba(255,255,255,0.7)} +input::-webkit-datetime-edit-year-field:focus,input::-webkit-datetime-edit-month-field:focus,input::-webkit-datetime-edit-week-field:focus,input::-webkit-datetime-edit-day-field:focus,input::-webkit-datetime-edit-hour-field:focus,input::-webkit-datetime-edit-minute-field:focus,input::-webkit-datetime-edit-second-field:focus,input::-webkit-datetime-edit-millisecond-field:focus,input::-webkit-datetime-edit-ampm-field:focus{background:#19547c;color:#fff} +input[disabled]::-webkit-datetime-edit-text,input.disabled::-webkit-datetime-edit-text,input[disabled]::-webkit-datetime-edit-year-field,input.disabled::-webkit-datetime-edit-year-field,input[disabled]::-webkit-datetime-edit-month-field,input.disabled::-webkit-datetime-edit-month-field,input[disabled]::-webkit-datetime-edit-week-field,input.disabled::-webkit-datetime-edit-week-field,input[disabled]::-webkit-datetime-edit-day-field,input.disabled::-webkit-datetime-edit-day-field,input[disabled]::-webkit-datetime-edit-hour-field,input.disabled::-webkit-datetime-edit-hour-field,input[disabled]::-webkit-datetime-edit-minute-field,input.disabled::-webkit-datetime-edit-minute-field,input[disabled]::-webkit-datetime-edit-second-field,input.disabled::-webkit-datetime-edit-second-field,input[disabled]::-webkit-datetime-edit-millisecond-field,input.disabled::-webkit-datetime-edit-millisecond-field,input[disabled]::-webkit-datetime-edit-ampm-field,input.disabled::-webkit-datetime-edit-ampm-field{color:#3f3f3f!important} +.js-enabled input[type="checkbox"]:not(.css-input),.js-enabled input[type="radio"]:not(.css-input){width:0;height:0;overflow:hidden;opacity:0!important} +.js-enabled label.checkbox-label:not(.css-label),.js-enabled label.radio-label:not(.css-label){cursor:pointer} +.js-enabled label.checkbox-label:not(.css-label):after,.js-enabled label.radio-label:not(.css-label):after{content:"";display:block;width:20px;height:20px;overflow:hidden;position:absolute;left:0;top:0;cursor:pointer;background:rgba(0,0,0,0.5) url("../../images/toolkit/themes/bnet/forms/sprite-18-inputs.png") no-repeat -64px -96px;border:1px solid rgba(255,255,255,0.3);-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +.js-enabled label.checkbox-label:not(.css-label).focus:after,.js-enabled label.radio-label:not(.css-label).focus:after{background-color:rgba(0,0,0,0.5);border-color:#1e5f99} +.js-enabled label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled label.radio-label:not(.css-label):hover:not(.disabled):after{background-color:rgba(0,0,0,0.5);border-color:rgba(255,255,255,0.5)} +.js-enabled label.checkbox-label:not(.css-label).disabled:after,.js-enabled label.radio-label:not(.css-label).disabled:after{background-color:rgba(20,20,23,0.5)!important;border-color:rgba(255,255,255,0.3)!important;cursor:default!important} +.js-enabled label.checkbox-label:not(.css-label):after{border-radius:2px} +.js-enabled label.checkbox-label:not(.css-label).checked:after{background-position:0 0} +.js-enabled label.checkbox-label:not(.css-label).checked.disabled:after{background-position:0 -18px!important} +.js-enabled label.radio-label:not(.css-label):after{border-radius:10px} +.js-enabled label.radio-label:not(.css-label).checked:after{background-position:-18px 0} +.js-enabled label.radio-label:not(.css-label).checked.disabled:after{background-position:-18px -18px!important} +.js-enabled label.checkbox-label:not(.css-label):after{border-radius:2px} +.js-enabled label.checkbox-label:not(.css-label).partial:after{background-position:-36px 0} +.js-enabled label.checkbox-label:not(.css-label).partial.disabled:after{background-position:-36px -18px!important} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-info label.radio-label:not(.css-label):after{border-color:rgba(0,174,255,0.6)} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-info label.radio-label:not(.css-label).focus:after{border-color:#00aeff} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-info label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:rgba(0,174,255,0.8)} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label).checked:after{background-position:0 0} +.js-enabled .control-group.control-info label.checkbox-label:not(.css-label).partial:after{background-position:-36px 0} +.js-enabled .control-group.control-info label.radio-label:not(.css-label).checked:after{background-position:-18px 0} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-success label.radio-label:not(.css-label):after{border-color:rgba(0,168,60,0.6)} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-success label.radio-label:not(.css-label).focus:after{border-color:#00a83c} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-success label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:rgba(0,168,60,0.8)} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label).checked:after{background-position:0 -72px} +.js-enabled .control-group.control-success label.checkbox-label:not(.css-label).partial:after{background-position:-36px -72px} +.js-enabled .control-group.control-success label.radio-label:not(.css-label).checked:after{background-position:-18px -72px} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-warning label.radio-label:not(.css-label):after{border-color:rgba(216,172,21,0.6)} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-warning label.radio-label:not(.css-label).focus:after{border-color:#d8ac15} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-warning label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:rgba(216,172,21,0.8)} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label).checked:after{background-position:0 -36px} +.js-enabled .control-group.control-warning label.checkbox-label:not(.css-label).partial:after{background-position:-36px -36px} +.js-enabled .control-group.control-warning label.radio-label:not(.css-label).checked:after{background-position:-18px -36px} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label):after,.js-enabled .control-group.control-error label.radio-label:not(.css-label):after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label):after,.js-enabled .control-group.control-important label.radio-label:not(.css-label):after{border-color:rgba(205,6,6,0.6)} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label).focus:after,.js-enabled .control-group.control-error label.radio-label:not(.css-label).focus:after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label).focus:after,.js-enabled .control-group.control-important label.radio-label:not(.css-label).focus:after{border-color:#cd0606} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-error label.radio-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label):hover:not(.disabled):after,.js-enabled .control-group.control-important label.radio-label:not(.css-label):hover:not(.disabled):after{border-color:rgba(205,6,6,0.8)} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label).checked:after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label).checked:after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label).checked:after{background-position:0 -54px} +.js-enabled .control-group.control-error label.checkbox-label:not(.css-label).partial:after,.js-enabled .control-group.control-danger label.checkbox-label:not(.css-label).partial:after,.js-enabled .control-group.control-important label.checkbox-label:not(.css-label).partial:after{background-position:-36px -54px} +.js-enabled .control-group.control-error label.radio-label:not(.css-label).checked:after,.js-enabled .control-group.control-danger label.radio-label:not(.css-label).checked:after,.js-enabled .control-group.control-important label.radio-label:not(.css-label).checked:after{background-position:-18px -54px} +label.checkbox-label.css-label,label.radio-label.css-label{cursor:pointer} +label.checkbox-label.css-label>input[type="checkbox"]:not(.css-input),label.radio-label.css-label>input[type="checkbox"]:not(.css-input),label.checkbox-label.css-label>input[type="radio"]:not(.css-input),label.radio-label.css-label>input[type="radio"]:not(.css-input){width:0;height:0;overflow:hidden;opacity:0} +label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]+.input-checkbox{border-radius:2px} +label.checkbox-label.css-label>input[type="radio"]+.input-radio,label.radio-label.css-label>input[type="radio"]+.input-radio{border-radius:10px} +label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]+.input-checkbox,label.checkbox-label.css-label>input[type="radio"]+.input-radio,label.radio-label.css-label>input[type="radio"]+.input-radio{display:block;width:20px;height:20px;overflow:hidden;position:absolute;left:0;top:0;cursor:pointer;background:rgba(0,0,0,0.5) url("../../images/toolkit/themes/bnet/forms/sprite-18-inputs.png") no-repeat -64px -96px;border:1px solid rgba(255,255,255,0.3);-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:focus+.input-checkbox,label.checkbox-label.css-label>input[type="radio"]:focus+.input-radio,label.radio-label.css-label>input[type="radio"]:focus+.input-radio{background-color:rgba(0,0,0,0.5);border-color:#1e5f99} +label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,label.radio-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,label.checkbox-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio,label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{background-color:rgba(0,0,0,0.5);border-color:rgba(255,255,255,0.5)} +label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 0} +label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox.partial,label.radio-label.css-label>input[type="checkbox"]:checked+.input-checkbox.partial{background-position:-36px 0!important} +label.checkbox-label.css-label>input[type="radio"]:checked+.input-radio,label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px 0} +label.checkbox-label.css-label>input[type="checkbox"]:disabled+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:disabled+.input-checkbox,label.checkbox-label.css-label>input[type="radio"]:disabled+.input-radio,label.radio-label.css-label>input[type="radio"]:disabled+.input-radio{background-color:rgba(20,20,23,0.5)!important;border-color:rgba(255,255,255,0.3)!important;cursor:default!important} +label.checkbox-label.css-label>input[type="checkbox"]:checked:disabled+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:checked:disabled+.input-checkbox{background-position:0 -18px!important} +label.checkbox-label.css-label>input[type="checkbox"]:disabled.partial+.input-checkbox,label.radio-label.css-label>input[type="checkbox"]:disabled.partial+.input-checkbox{background-position:-36px -18px!important} +label.checkbox-label.css-label>input[type="radio"]:checked:disabled+.input-radio,label.radio-label.css-label>input[type="radio"]:checked:disabled+.input-radio{background-position:-18px -18px!important} +.js-enabled .control-group.info label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.info label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:rgba(0,174,255,0.6)} +.js-enabled .control-group.info label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.info label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#00aeff} +.js-enabled .control-group.info label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.info label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:rgba(0,174,255,0.8)} +.js-enabled .control-group.info label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 0} +.js-enabled .control-group.info label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px 0} +.js-enabled .control-group.success label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.success label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:rgba(0,168,60,0.6)} +.js-enabled .control-group.success label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.success label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#00a83c} +.js-enabled .control-group.success label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.success label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:rgba(0,168,60,0.8)} +.js-enabled .control-group.success label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 -72px} +.js-enabled .control-group.success label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px -72px} +.js-enabled .control-group.warning label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.warning label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:rgba(216,172,21,0.6)} +.js-enabled .control-group.warning label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.warning label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#d8ac15} +.js-enabled .control-group.warning label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.warning label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:rgba(216,172,21,0.8)} +.js-enabled .control-group.warning label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 -36px} +.js-enabled .control-group.warning label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px -36px} +.js-enabled .control-group.error label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label>input[type="checkbox"]+.input-checkbox,.js-enabled .control-group.error label.radio-label.css-label>input[type="radio"]+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label>input[type="radio"]+.input-radio,.js-enabled .control-group.important label.radio-label.css-label>input[type="radio"]+.input-radio{border-color:rgba(205,6,6,0.6)} +.js-enabled .control-group.error label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label>input[type="checkbox"]:focus+.input-checkbox,.js-enabled .control-group.error label.radio-label.css-label>input[type="radio"]:focus+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label>input[type="radio"]:focus+.input-radio,.js-enabled .control-group.important label.radio-label.css-label>input[type="radio"]:focus+.input-radio{border-color:#cd0606} +.js-enabled .control-group.error label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label:hover>input[type="checkbox"]:not(:disabled)+.input-checkbox,.js-enabled .control-group.error label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio,.js-enabled .control-group.important label.radio-label.css-label:hover>input[type="radio"]:not(:disabled)+.input-radio{border-color:rgba(205,6,6,0.8)} +.js-enabled .control-group.error label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox,.js-enabled .control-group.danger label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox,.js-enabled .control-group.important label.checkbox-label.css-label>input[type="checkbox"]:checked+.input-checkbox{background-position:0 -54px} +.js-enabled .control-group.error label.radio-label.css-label>input[type="radio"]:checked+.input-radio,.js-enabled .control-group.danger label.radio-label.css-label>input[type="radio"]:checked+.input-radio,.js-enabled .control-group.important label.radio-label.css-label>input[type="radio"]:checked+.input-radio{background-position:-18px -54px} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.js-enabled label.checkbox-label:not(.css-label):after,.js-enabled label.radio-label:not(.css-label):after{background:rgba(0,0,0,0.5) url("../../images/toolkit/themes/bnet/forms/sprite-36-inputs.png") no-repeat -64px -96px;background-size:54px 108px} +} +.js-enabled .select-box{cursor:default;position:relative;display:inline-block;height:34px;padding:0 22px 0 0;text-indent:10px;margin-top:3px;margin-bottom:3px;font-size:15px;line-height:20px;color:rgba(255,255,255,0.7);border:1px solid rgba(255,255,255,0.3);border-radius:2px;background:rgba(0,0,0,0.5);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:background-color .2s,border-color .2s,box-shadow .2s;transition:background-color .2s,border-color .2s,box-shadow .2s} +.js-enabled .select-box .arrow{width:22px;height:100%;overflow:hidden;border-top-right-radius:2px;border-bottom-right-radius:2px;position:absolute;top:0;right:0;background:url("../../images/toolkit/themes/bnet/forms/sprite-22-select.png") no-repeat 0 0} +.js-enabled .select-box.input-block{width:100%} +.js-enabled .select-box:hover{border-color:rgba(255,255,255,0.5);background:rgba(0,0,0,0.5)} +.js-enabled .select-box:hover>.current{color:rgba(255,255,255,0.7)} +.js-enabled .select-box:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.js-enabled .select-box:focus>.current{color:#fff} +.js-enabled .select-box.expanded{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#1e5f99;background:rgba(0,0,0,0.5)} +.js-enabled .select-box.expanded .options{z-index:1000;display:block} +.js-enabled .select-box>.current{height:32px;width:100%;line-height:32px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.js-enabled .select-box>.current.placeholder{color:rgba(255,255,255,0.3)} +.js-enabled .text-indent [class^="icon-"],.js-enabled .select-box>.current [class*=" icon-"]{margin-top:8px;margin-right:7px;margin-left:-3px} +.js-enabled .select-box>.current [class^="icon-payment-"],.js-enabled .select-box>.current [class*=" icon-payment-"]{margin-right:8px;margin-left:-2px} +.js-enabled .select-box .options{font-size:13px;line-height:20px;border:solid #3d434f;border-width:0 1px 1px 1px;position:absolute;display:none;top:33px;left:-1px;right:-1px;max-height:200px;background-color:#272e3b;overflow:hidden;border-bottom-left-radius:2px;border-bottom-right-radius:2px;z-index:0} +.js-enabled .select-box .options .option{text-shadow:none;line-height:26px;height:26px;text-indent:10px;color:rgba(255,255,255,0.7);width:100%;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.js-enabled .select-box .options .option:hover{color:#fff;background-color:rgba(255,255,255,0.07)} +.js-enabled .select-box .options .option.selected,.js-enabled .select-box .options .option.selected:hover{color:#fff;background-color:rgba(0,105,225,0.15)} +.js-enabled .select-box .options .option.placeholder,.js-enabled .select-box .options .option.placeholder:hover{color:rgba(255,255,255,0.3)} +.js-enabled .select-box .options .option-group{border:solid #3d434f;border-width:1px 0;margin:-1px 0} +.js-enabled .select-box .options .option-group .option-group-label{text-shadow:none;font-size:12px;line-height:20px;height:20px;text-indent:10px;text-transform:uppercase;color:rgba(255,255,255,0.3);width:100%;display:block;padding-top:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.js-enabled .select-box .options .option-group:first-of-type{border-top-color:transparent} +.js-enabled .select-box .options .option-group:last-of-type{border-bottom-color:transparent} +.js-enabled .select-box .options [class^="icon-"],.js-enabled .select-box .options [class*=" icon-"]{margin-top:4px;margin-right:7px;margin-left:-3px} +.js-enabled .select-box .options [class^="icon-payment-"],.js-enabled .select-box .options [class*=" icon-payment-"]{margin-right:8px;margin-left:-2px} +.js-enabled .select-box .options>.option:last-of-type{border-bottom-left-radius:2px;border-bottom-right-radius:2px} +.js-enabled .select-box.disabled,.js-enabled .select-box.disabled:focus,.js-enabled .select-box.disabled:hover{background-color:rgba(20,20,23,0.5)!important;border-color:rgba(255,255,255,0.3)!important;cursor:default!important} +.js-enabled .select-box.disabled .current{color:#3f3f3f!important} +.js-enabled .select-box.disabled .current [class^="icon-"]:not([class*="icon-payment-"]),.js-enabled .select-box.disabled .current [class*=" icon-"]:not([class*="icon-payment-"]){background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.15!important} +.js-enabled .select-box.disabled .current [class^="icon-payment-"],.js-enabled .select-box.disabled .current [class*=" icon-payment-"]{opacity:.15!important} +.js-enabled .select-box.disabled .arrow{opacity:.15!important;background-position:0 -32px!important} +.js-enabled .control-group.control-info .select-box{border-color:rgba(0,174,255,0.6)} +.js-enabled .control-group.control-info .select-box:focus{border-color:#00aeff} +.js-enabled .control-group.control-info .select-box:hover{border-color:rgba(0,174,255,0.8)} +.js-enabled .control-group.control-success .select-box{border-color:rgba(0,168,60,0.6)} +.js-enabled .control-group.control-success .select-box:focus{border-color:#00a83c} +.js-enabled .control-group.control-success .select-box:hover{border-color:rgba(0,168,60,0.8)} +.js-enabled .control-group.control-warning .select-box{border-color:rgba(216,172,21,0.6)} +.js-enabled .control-group.control-warning .select-box:focus{border-color:#d8ac15} +.js-enabled .control-group.control-warning .select-box:hover{border-color:rgba(216,172,21,0.8)} +.js-enabled .control-group.control-error .select-box,.js-enabled .control-group.control-danger .select-box,.js-enabled .control-group.control-important .select-box{border-color:rgba(205,6,6,0.6)} +.js-enabled .control-group.control-error .select-box:focus,.js-enabled .control-group.control-danger .select-box:focus,.js-enabled .control-group.control-important .select-box:focus{border-color:#cd0606} +.js-enabled .control-group.control-error .select-box:hover,.js-enabled .control-group.control-danger .select-box:hover,.js-enabled .control-group.control-important .select-box:hover{border-color:rgba(205,6,6,0.8)} +.js-enabled .select-box .scrollbar-content{overflow:hidden} +.js-enabled .select-box .scrollbar-content .overview{position:relative} +.js-enabled .form-search .select-box,.js-enabled .form-inline .select-box{display:inline-block;vertical-align:middle} +.js-enabled .input-append,.js-enabled .input-prepend{margin:3px 0;font-size:0;white-space:nowrap} +.js-enabled .input-append .select-box,.js-enabled .input-prepend .select-box{font-size:15px} +.js-enabled .input-append .select-box,.js-enabled .input-prepend .select-box{position:relative;margin-bottom:0;vertical-align:top;font-size:15px;border-radius:0 2px 2px 0} +.js-enabled .input-append .select-box:focus,.js-enabled .input-prepend .select-box:focus{z-index:2} +.js-enabled .input-append .select-box{border-radius:2px 0 0 2px} +.js-enabled .input-append .select-box+.btn-group .btn:last-child{border-radius:0 2px 2px 0} +.js-enabled .input-prepend.input-append .select-box{border-radius:0} +.js-enabled .input-prepend.input-append .select-box+.btn-group .btn{border-radius:0 2px 2px 0} +.js-enabled .form-horizontal .select-box+.help-block{margin-top:10px} +.js-enabled .select-box.input-large{margin:5px 0;padding:0;font-size:17px;line-height:20px;height:40px} +.js-enabled .select-box.input-large.active,.js-enabled .select-box.input-large:active{padding:1 -1 -1 1} +.js-enabled .select-box.input-large.disabled:active,.js-enabled .select-box.input-large[disabled]:active,.js-enabled .select-box.input-large.disabled.active,.js-enabled .select-box.input-large[disabled].active{padding:0 0!important} +.js-enabled .select-box.input-large .options{top:38px} +.js-enabled .select-box.input-large .options .option{height:30px;line-height:30px} +.js-enabled .select-box.input-large>.current{height:40px;line-height:40px} +.js-enabled .select-box.input-large>.arrow{background-position:0 2px} +.control-group .select2-container{width:100%!important} +.select2-container{-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle} +.select2-container .select2-selection{-webkit-transition:background-color .2s,border-color .2s;transition:background-color .2s,border-color .2s} +.select2-container .select2-selection--single{-moz-box-sizing:border-box;box-sizing:border-box;cursor:default;display:block;height:34px;user-select:none;-webkit-user-select:none} +.select2-container .select2-selection--single .select2-selection__rendered{display:block;text-indent:10px;margin-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px} +.select2-container .select2-selection--multiple{-moz-box-sizing:border-box;box-sizing:border-box;cursor:default;display:block;min-height:34px;user-select:none;-webkit-user-select:none} +.select2-container .select2-selection--multiple .select2-selection__rendered{overflow:hidden;margin-right:20px;text-overflow:ellipsis;white-space:nowrap} +.select2-container .select2-search--inline{float:left;height:34px;padding-left:0} +.select2-container .select2-search--inline .select2-search__field{margin:0;float:left;-moz-box-sizing:border-box;box-sizing:border-box;text-indent:10px;border:0;font-size:13px;padding:0} +.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none} +.select2-dropdown{background-color:#272e3b;border:1px solid rgba(255,255,255,0.3);border-radius:2px;-moz-box-sizing:border-box;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051} +.select2-results{display:block} +.select2-results__options{list-style:none;margin:0;padding:0} +.select2-results__options[aria-multiselectable] .select2-results__option .option-checkbox-label{display:block;float:left;width:18px;height:18px;border:1px solid rgba(255,255,255,0.3);border-radius:2px;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 4px 0 0;background:rgba(0,0,0,0.5) url("../../images/toolkit/themes/bnet/forms/sprite-18-inputs.png") no-repeat -64px -96px;background-size:54px 108px} +.select2-results__options[aria-multiselectable] .select2-results__option[aria-selected=true] .option-checkbox-label{background-position:-1px -1px} +.select2-results__option{user-select:none;-webkit-user-select:none;margin:0;padding:0 0 0 10px;-webkit-transition:background-color .2s;transition:background-color .2s;word-break:break-all} +.select2-results__option[aria-selected]{cursor:default} +.select2-container--open .select2-dropdown{left:0} +.select2-container--open .select2-dropdown--above{border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0} +.select2-container--open .select2-dropdown--below{border-top:0;border-top-left-radius:0;border-top-right-radius:0} +.select2-search--dropdown{display:block;padding:7px 10px} +.select2-search--dropdown .select2-search__field{width:100%;position:relative;-moz-box-sizing:border-box;box-sizing:border-box} +.select2-search--dropdown .select2-search__field:after{content:" ";position:absolute;top:19px;right:16px;width:16px;height:16px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-80px -16px} +.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none} +.select2-search--dropdown.select2-search--hide{display:none} +.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;z-index:99;background-color:#272e3b;opacity:0} +.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important} +.select2-container--default.select2-container--focus .select2-selection{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-selection--single{background-color:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.3);border-radius:2px} +.select2-container--default .select2-selection--single:hover{border-color:rgba(255,255,255,0.5);background:rgba(0,0,0,0.5)} +.select2-container--default .select2-selection--single:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-selection--single .select2-selection__rendered{color:rgba(255,255,255,0.7);line-height:34px} +.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold} +.select2-container--default .select2-selection--single .select2-selection__placeholder{color:rgba(255,255,255,0.3)} +.select2-container--default .select2-selection--single .select2-selection__arrow{height:32px;position:absolute;top:1px;right:1px;width:20px} +.select2-container--default .select2-selection--single .select2-selection__arrow b{position:absolute;top:0;left:-2px;width:20px;height:100%;overflow:hidden;background:url("../../images/toolkit/themes/bnet/forms/sprite-22-select.png") no-repeat 0 0} +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left} +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto} +.select2-container--default.select2-container--disabled .select2-selection--single{border-color:rgba(255,255,255,0.3)!important;background-color:rgba(20,20,23,0.5)!important;cursor:default} +.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__rendered{color:#3f3f3f!important} +.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none} +.select2-container--default .select2-selection--multiple{background-color:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.3);border-radius:2px} +.select2-container--default .select2-selection--multiple:hover{border-color:rgba(255,255,255,0.5);background:rgba(0,0,0,0.5)} +.select2-container--default .select2-selection--multiple:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-selection--multiple .select2-selection__rendered{-moz-box-sizing:border-box;box-sizing:border-box;list-style:none;margin:0;padding:0;width:100%} +.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:rgba(255,255,255,0.3);float:left} +.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;text-indent:10px} +.select2-container--default .select2-selection--multiple .select2-selection__choice{float:left;text-indent:5px;line-height:30px;margin:0;padding:0} +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(255,255,255,0.3);cursor:pointer;display:inline-block;padding-right:4px;font-size:13px} +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right} +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto} +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto} +.select2-container--default.select2-container--focus .select2-selection--multiple{border:1px solid #1e5f99;outline:0} +.select2-container--default.select2-container--disabled .select2-selection--multiple{border-color:rgba(255,255,255,0.3)!important;background-color:rgba(20,20,23,0.5)!important;cursor:default} +.select2-container--default.select2-container--disabled .select2-selection--multiple .select2-selection__rendered{color:#3f3f3f!important} +.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__choice__remove{display:none} +.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0} +.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0} +.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid rgba(255,255,255,0.3)} +.select2-container--default .select2-search--dropdown .select2-search__field:hover{border-color:rgba(255,255,255,0.5)} +.select2-container--default .select2-search--dropdown .select2-search__field:focus{border-color:#1e5f99;outline:0;outline:thin dotted \9} +.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:0;outline:0;box-shadow:none} +.select2-container--default .select2-results>.select2-results__options{font-size:13px;overflow-y:auto;max-height:200px} +.select2-container--default .select2-results__option{line-height:15px;padding:4px 0 7px 10px} +.select2-container--default .select2-results__option[role=group]{padding:0} +.select2-container--default .select2-results__option[aria-disabled=true]{color:#3f3f3f} +.select2-container--default .select2-results__option[aria-selected=true]{color:#fff;background-color:rgba(0,105,225,0.15)} +.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:rgba(255,255,255,0.07)} +.select2-container--default .select2-results__option--highlighted[aria-selected][aria-selected=false]{color:#fff} +.select2-container--default .select2-results__group{text-shadow:none;font-size:12px;line-height:25px;height:25px;text-indent:10px;text-transform:uppercase;color:rgba(255,255,255,0.3);width:100%;display:block;padding-top:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.multiselect.select-box{margin:0!important;width:100%;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.multiselect.select-box:focus{outline:0} +.multiselect-container{position:absolute;left:0;border-color:#3d434f;border-radius:0 0 2px 2px;border-top:0;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:none;list-style-type:none;margin:0;padding:0;width:100%} +.multiselect-container>li{padding:0;margin:0;line-height:20px} +.multiselect-container>li.active,.multiselect-container>li.active:hover{color:#fff;background-color:rgba(0,105,225,0.15)} +.multiselect-container>li.active,.multiselect-container>li.active:hover{color:rgba(255,255,255,0.3)} +.multiselect-container>li.multiselect-all{border-bottom:1px solid #3d434f} +.multiselect-container>li.multiselect-all.active{background-color:transparent!important} +.multiselect-container>li.filter{padding:7px 10px 3px} +.multiselect-container>li.filter .input-group .multiselect-search{font-size:13px;width:100%} +.multiselect-container>li.filter .input-group:not(.filtered):after{content:"";display:inline-block;position:absolute;top:19px;right:16px;width:16px;height:16px;line-height:16px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");background-position:-80px -16px} +.multiselect-container>li.filter .input-group .multiselect-clear-filter{display:none;cursor:pointer;position:absolute;top:11px;right:11px;width:32px;height:32px;border:0;background-color:transparent} +.multiselect-container>li.filter .input-group .multiselect-clear-filter .icon-remove{top:5px;left:10px} +.multiselect-container>li.filter .input-group.filtered .multiselect-clear-filter{display:inline-block} +.multiselect-container>li>a.multiselect-all label{-webkit-transition:background-color .2s,border-color .2s,box-shadow .2s;transition:background-color .2s,border-color .2s,box-shadow .2s} +.multiselect-container>li>label.multiselect-group{text-shadow:none;font-size:12px;line-height:20px;height:20px;text-indent:10px;text-transform:uppercase;color:rgba(255,255,255,0.3);width:100%;display:block;padding-top:5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.multiselect-container>li>a{padding:3px 0;cursor:default} +.multiselect-container>li>a>label{margin:0;height:100%;cursor:pointer;font-weight:400;padding:0 20px 3px 30px;font-size:13px;left:10px;top:2px} +.multiselect-container>li>a>label.radio,.multiselect-container>li>a>label.checkbox{margin:0} +.multiselect-container>li>a>label>input[type="checkbox"]{margin-bottom:5px;width:20px!important} +.multiselect-container>li>a>label.checkbox-label:not(.css-label),.multiselect-container>li>a>label.radio-label:not(.css-label){cursor:default!important} +.btn-group-multiselect{position:relative} +.hero-unit{padding:40px;margin-bottom:40px;color:inherit;background-color:#0e0e0e;border-radius:2px} +.hero-unit:before,.hero-unit:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.hero-unit:after{clear:both} +.hero-unit p{font-size:17px;font-weight:300;line-height:25px} +.hero-unit li{font-size:17px;font-weight:300;line-height:20px;margin-bottom:25px} +.hero-unit p,.hero-unit ul,.hero-unit ol{margin-bottom:40px} +.hero-unit p:last-child,.hero-unit ul:last-child,.hero-unit ol:last-child{margin-bottom:0} +.hero-unit .btn{float:left} +.hero-unit .btn+.btn{margin-left:10px} +.label,.badge{height:20px;color:rgba(255,255,255,0.7);background:#272e3b;margin:-2px 0;border:1px solid #363d49;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color 200ms,background-color 200ms;transition:border-color 200ms,background-color 200ms} +.label{font-size:15px;line-height:18px;padding:0 10px;border-radius:2px} +.badge{font-size:13px;line-height:18px;min-width:20px;min-height:20px;padding:0 4px;border-radius:10px} +.label[href]:focus,.badge[href]:focus,.label[href]:hover,.badge[href]:hover{color:rgba(255,255,255,0.7);background-color:#3b465a} +.label-important,.badge-important,.label-danger,.badge-danger,.label-error,.badge-error{background-color:#360e10;border-color:#551e21} +.label-important[href]:focus,.badge-important[href]:focus,.label-important[href]:hover,.badge-important[href]:hover{background-color:#5f181c} +.label-warning,.badge-warning{background-color:#5d3200;border-color:#834b00} +.label-warning[href]:focus,.badge-warning[href]:focus,.label-warning[href]:hover,.badge-warning[href]:hover{background-color:#904d00} +.label-success,.badge-success{background-color:#132a14;border-color:#24392a} +.label-success[href]:focus,.badge-success[href]:focus,.label-success[href]:hover,.badge-success[href]:hover{background-color:#234d25} +.label-info,.badge-info{background-color:#272e3b;border-color:#363d49} +.label-info[href]:focus,.badge-info[href]:focus,.label-info[href]:hover,.badge-info[href]:hover{background-color:#3b465a} +.label-inverse,.badge-inverse{color:#fff;background-color:rgba(255,255,255,0.2);border-color:rgba(255,255,255,0.5)} +.label-inverse[href]:focus,.badge-inverse[href]:focus,.label-inverse[href]:hover,.badge-inverse[href]:hover{background-color:rgba(255,255,255,0.2)} +.btn .label,.btn .badge{position:relative;top:-1px} +.btn-mini .label,.btn-mini .badge{top:0} +.acb-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.acb-rating a{color:rgba(255,255,255,0.5)} +.acb-logo{display:block;float:left} +.acb-descriptor,.acb-disclaimer{display:block;margin-left:75px} +.bbfc-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5);float:left} +.bbfc-rating a{float:left;color:rgba(255,255,255,0.5)} +.bbfc-logo{display:block} +.csrr-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.csrr-rating a{display:inline-block;color:rgba(255,255,255,0.5)} +.csrr-logo{display:block} +.dejus-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.dejus-rating a{color:rgba(255,255,255,0.5)} +.dejus-logo{display:block;float:left} +.dejus-descriptor{display:block;margin-left:75px} +.dejus-provisional{text-transform:uppercase} +.esrb-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.esrb-rating a{color:rgba(255,255,255,0.5)} +.esrb-logo{display:block;float:left} +.esrb-descriptor,.esrb-disclaimer{display:block;margin-left:80px;-moz-transition:color .2s;-webkit-transition:color .2s;transition:color .2s} +.esrb-disclaimer{display:block;margin-left:80px} +.esrb-descriptor-label{-webkit-transition:color .2s;transition:color .2s} +.esrb-descriptor-label:hover{color:rgba(255,255,255,0.7);cursor:default} +.fpb-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.fpb-rating a{color:rgba(255,255,255,0.5)} +.fpb-logo{display:block;float:left} +.fpb-descriptor{display:block;margin-left:75px} +.grb-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.grb-rating a{color:rgba(255,255,255,0.5)} +.grb-rating+.grb-rating{clear:right} +.grb-logo,.grb-descriptor-image{display:block;float:left;margin-right:5px} +.grb-descriptor{display:block;margin-left:75px} +.nzoflc-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.nzoflc-rating a{color:rgba(255,255,255,0.5)} +.nzoflc-logo{display:block;float:left} +.nzoflc-descriptor{display:block;margin-left:75px} +.pegi-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.pegi-rating a{color:rgba(255,255,255,0.5)} +.pegi-logo,.pegi-descriptor-image{display:block;float:left;margin-right:5px} +.pegi-descriptor{display:block;margin-left:70px} +.pegi-descriptor-label{-webkit-transition:color .2s;transition:color .2s} +.pegi-descriptor-label:hover{color:rgba(255,255,255,0.7);cursor:default} +.pegi-provisional{padding:5px 5px 5px 0;font-size:10px;text-align:left;text-transform:uppercase;width:100%;clear:left} +.usk-rating{font-size:12px;line-height:15px;color:rgba(255,255,255,0.5)} +.usk-rating a{display:inline-block;color:rgba(255,255,255,0.5)} +.usk-logo{display:block} +a{color:#00aeff;-webkit-transition:color,0.2s;transition:color .2s} +a:focus,a:hover{color:#fff} +a.inverse{color:rgba(255,255,255,0.7)} +a.inverse:focus,a.inverse:hover{color:#fff} +.logo{width:300px;height:70px;text-indent:-9999px;background:url("../../images/toolkit/defaults/logos/bnet/default.png") -5px 0;margin:0 auto} +:lang(zh-CN) .logo{background:url("../../images/toolkit/defaults/logos/bnet/china-default.png")} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.logo{background:url("../../images/toolkit/defaults/logos/bnet/default-2x.png");background-size:300px 70px} +:lang(zh-CN) .logo{background:url("../../images/toolkit/defaults/logos/bnet/china-default-2x.png");background-size:300px 70px} +} +.media{padding:20px 0;border:solid rgba(255,255,255,0.1);border-width:1px 0} +.media.blizzard{background-color:rgba(0,66,136,0.3)} +.media+.media{border-top-width:0} +.media .img{margin-right:20px;width:82px;height:82px;padding:6px;overflow:hidden;position:relative;background-image:url("../../images/toolkit/themes/bnet/media/media-org.png")} +.media .img:after{content:"";position:absolute;top:6px;left:6px;z-index:10;display:block;width:82px;height:82px;box-shadow:inset 0 0 0 1px rgba(0,0,0,0.7),inset 0 0 0 2px rgba(255,255,255,0.1)} +.media.blizzard .img{background-position:-94px 0;padding-bottom:84px} +.media .img img{width:82px;height:82px;background-color:#000} +.media .p-author{margin-bottom:5px} +.media .p-name{font-size:17px;line-height:20px;color:#82c5ff} +.media .p-role{font-weight:400;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;margin-left:.5em} +.media.blizzard .p-role{color:rgba(255,255,255,0.7)} +.media.vip .p-role{color:#18a006} +.media .bd p,.media .bd ul,.media .bd ol{margin-bottom:20px} +.media.blizzard .bd{color:#00aeff} +.media.vip .bd{color:#18a006} +.media .dt-published{font-size:13px;line-height:20px} +.modal-backdrop{z-index:1040} +.modal-backdrop,.modal-backdrop.fade.in{opacity:.8} +.modal{padding-top:10px;position:fixed;top:10%;left:50%;z-index:1050;overflow:visible;width:560px;margin-left:-280px;border-style:solid;border-width:1px;border-color:#000;box-shadow:0 5px 10px rgba(0,0,0,.75),inset 0 0 0 1px rgba(255,255,255,.07);background:#1d222c;background-repeat:no-repeat;background-size:contain;background-position:center bottom,center top,center -100px;background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-webkit-linear-gradient(top,#263145 0,#1d222c 70%),-webkit-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),-moz-linear-gradient(top,#263145 0,#1d222c 70%),-moz-radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-image:url("../../images/toolkit/defaults/modals/modal-gradient.png"),linear-gradient(top,#263145 0,#1d222c 70%),radial-gradient(50% 100px,closest-side,#263145,#1d222c);background-clip:padding-box;outline:0} +.modal .close{z-index:1051;position:absolute;margin:0;top:5px;right:7px} +.modal .close [class^="icon-"],.modal .close [class*=" icon-"]{display:block;margin:0} +.modal:before{content:"";position:absolute;top:1px;left:75px;right:75px;display:block;height:0;border-top:10px solid rgba(255,255,255,0.14);border-left:10px solid transparent;border-right:10px solid transparent} +.modal:after{content:"";position:absolute;top:1px;left:76px;right:76px;display:block;height:0;border-top:9px solid rgba(32,39,52,0.5);border-left:9px solid transparent;border-right:9px solid transparent} +.modal-header{padding:19px 20px 0 20px} +.modal-header h1,.modal-header h2,.modal-header h3,.modal-header h4,.modal-header h5,.modal-header h6,.modal-header .heading-1{margin-bottom:0;font-size:23px;line-height:30px} +.modal-error{border:1px solid #313845;padding:10px 20px;background:#270a0c;color:#fe0000;font-size:13px;line-height:20px;position:relative;-moz-box-sizing:border-box;box-sizing:border-box} +.modal-error:before{content:"";border-top:7px solid #313845;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);display:block;position:absolute;left:273px;bottom:-7px} +.modal-error:after{content:"";border-top:6px solid #270a0c;border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);display:block;position:absolute;left:274px;bottom:-6px} +.modal-error p{margin-bottom:15px} +.modal-error p:last-child{margin-bottom:0} +.modal-body{position:relative;overflow:visible;max-height:400px;padding:20px;font-size:13px;line-height:20px} +.modal-body h1,.modal-body h2,.modal-body h3,.modal-body h4,.modal-body h5,.modal-body h6,.modal-body .heading-1,.modal-body .heading-2{margin-bottom:20px;font-size:17px;line-height:20px} +.modal-body p,.modal-body ul,.modal-body ol,.modal-body dl{font-size:13px;line-height:20px;margin-bottom:20px} +.modal-body p:last-child,.modal-body ul:last-child,.modal-body ol:last-child,.modal-body dl:last-child{margin:0} +.modal-body .modal-actions:before,.modal-body .modal-actions:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.modal-body .modal-actions:after{clear:both} +.modal-body .modal-actions .btn{margin-bottom:0} +.modal-body .modal-actions .btn+.btn{margin-left:10px} +.modal-body .modal-actions .btn-group .btn+.btn{margin-left:-1px} +.modal-body .modal-actions .btn-block+.btn-block{margin-left:0} +.modal-body .modal-actions{margin-top:30px} +.modal-body .modal-actions:only-child{margin-top:0} +.modal-body p+.modal-actions,.modal-body ul+.modal-actions,.modal-body ol+.modal-actions,.modal-body dl+.modal-actions{margin-top:20px} +.modal-scrollable{height:400px;overflow:hidden} +.modal-scrollable .scrollbar{top:20px} +.modal-scrollable .scrollbar .thumb{padding-top:0;padding-bottom:0} +.modal-form{margin-bottom:0} +.modal-footer{color:rgba(255,255,255,0.5);background:#171b23;padding:19px 20px 20px;margin:1px;border-top:1px solid #2d323b;font-size:13px;line-height:20px} +.modal-footer h1,.modal-footer h2,.modal-footer h3,.modal-footer h4,.modal-footer h5,.modal-footer h6,.modal-footer .heading-1,.modal-footer .heading-2,.modal-footer .heading-3{margin-bottom:0;font-size:15px;line-height:20px} +.modal-footer p,.modal-footer ul,.modal-footer ol,.modal-footer dl{font-size:13px;line-height:20px;margin-bottom:20px} +.modal-footer p:last-child,.modal-footer ul:last-child,.modal-footer ol:last-child,.modal-footer dl:last-child{margin-bottom:0} +.nav>li{font-size:13px;line-height:20px} +.navbar:not(.header) .nav>li{font-size:13px;line-height:20px;margin:0 20px 0 0} +.navbar:not(.header) .nav>li.pull-right{margin:0 0 0 20px} +.navbar:not(.header) .nav>li>a{color:rgba(255,255,255,0.7)} +.navbar:not(.header) .nav>li>a:hover,.navbar:not(.header) .nav>li>a:focus{color:#fff} +.navbar:not(.header) .nav>li.disabled>a{color:rgba(255,255,255,0.3)} +.navbar:not(.header) .nav>li.active>a{color:#fff} +.navbar.header .nav{height:30px;padding:25px 0} +.navbar.header .nav>li{font-weight:300;font-size:23px;line-height:30px;margin:0 40px 0 0} +.navbar.header .nav>li>a{color:rgba(255,255,255,0.5)} +.navbar.header .nav>li>a:hover,.navbar.header .nav>li>a:focus{color:#fff} +.navbar.header .nav>li.disabled>a{color:rgba(255,255,255,0.15)} +.navbar.header .nav>li.active>a{color:#fff;text-shadow:0 0 10px rgba(255,255,255,0.3),0 0 10px rgba(255,255,255,0.3)} +.nav-list>li{margin:0 0 10px 0} +.nav-list>li>a{color:rgba(255,255,255,0.7)} +.nav-list>li>a:hover,.nav-list>li>a:focus{color:#fff} +.nav-list>li.disabled>a{color:rgba(255,255,255,0.3)} +.nav-list>li.active>a{color:#fff} +.nav-list>li:last-child{margin-bottom:40px} +.nav-list.icons>li:not(.nav-header){padding-left:30px} +.nav-list.icons>li:not(.nav-header) [class^="icon-"]:not(.icon-external-link),.nav-list.icons>li:not(.nav-header) [class*="icon-"]:not(.icon-external-link){left:5px} +.nav-list.icons>li:not(.nav-header).disabled [class^="icon-"]:not(.icon-external-link),.nav-list.icons>li:not(.nav-header).disabled [class*="icon-"]:not(.icon-external-link){background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.15} +.nav .nav-header{margin:0 0 10px 0;padding:0;font-size:12px;font-weight:400;line-height:20px;color:rgba(255,255,255,0.3);text-transform:uppercase;letter-spacing:.075em} +.nav.nav-tabs:after{border-bottom:3px solid rgba(255,255,255,0.15);height:30px} +.nav-tabs>li{border-bottom:3px solid rgba(255,255,255,0.15);padding:0} +.nav-tabs>li>a{padding-right:30px;padding-left:30px;color:rgba(255,255,255,0.7);background:0;padding-top:5px;padding-bottom:5px;margin-bottom:-2px;border:1px solid transparent} +.nav-tabs>li>a:focus,.nav-tabs>li>a:hover{color:#fff;background:0} +.nav-tabs>li.active>a{color:#fff;background:0;border:1px solid rgba(255,255,255,0.15);border-bottom:0;padding-bottom:7px} +.nav-tabs>li.disabled>a{color:rgba(255,255,255,0.3);background:0} +.nav-pills>li>a{padding:5px 30px;margin:0 10px 0 0;background-color:rgba(0,0,0,0.15);border:1px solid rgba(255,255,255,0.15);border-radius:2px;color:rgba(255,255,255,0.7)} +.nav-pills>li>a:focus,.nav-pills>li>a:hover{background:rgba(0,0,0,0.25);color:#fff;border-color:rgba(255,255,255,0.25)} +.nav-pills>li>a:active{color:#fff;background-color:rgba(0,0,0,0.15);border-color:rgba(255,255,255,0.1);padding:6px 29px 4px 31px;box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.3)} +.nav-pills>li.active>a{color:#fff;background:rgba(255,255,255,0.07);border-color:rgba(255,255,255,0.15)} +.nav-pills>li.active>a:active{padding:5px 30px;box-shadow:none} +.nav-pills>li.disabled>a{color:rgba(255,255,255,0.3);background:rgba(0,0,0,0.1);border-color:rgba(255,255,255,0.08)} +.nav-pills>li.disabled>a:active{padding:5px 30px;box-shadow:none} +.tab-content,.pill-content{border:1px solid rgba(255,255,255,0.15);margin-bottom:40px;padding:20px} +.pill-content{margin-top:10px} +.tab-content{border-width:0 1px 1px} +.tab-content>.active p,.pill-content>.active p,.tab-content>.active ul,.pill-content>.active ul,.tab-content>.active ol,.pill-content>.active ol,.tab-content>.active dl,.pill-content>.active dl{margin-bottom:20px} +.tab-content>.active p:last-child,.pill-content>.active p:last-child,.tab-content>.active ul:last-child,.pill-content>.active ul:last-child,.tab-content>.active ol:last-child,.pill-content>.active ol:last-child,.tab-content>.active dl:last-child,.pill-content>.active dl:last-child{margin-bottom:0} +.navbar-static,.navbar-fixed{background:0;border-bottom:1px solid rgba(255,255,255,0.07);line-height:40px;white-space:nowrap;-moz-box-sizing:border-box;box-sizing:border-box} +.navbar-static .navbar,.navbar-fixed .navbar{height:40px;padding:10px 0;background:rgba(255,255,255,0.05);-moz-box-sizing:border-box;box-sizing:border-box} +.navbar-static .navbar.header,.navbar-fixed .navbar.header{height:80px;padding:0;background:rgba(255,255,255,0.05)} +.navbar-static .navbar.header+.navbar,.navbar-fixed .navbar.header+.navbar{border-top:1px solid rgba(255,255,255,0.07)} +.navbar-fixed{width:100%;position:fixed;z-index:1030} +.navbar.header .brand{float:left;display:block;text-transform:uppercase;font-weight:300;font-size:23px;line-height:30px;height:30px;padding:25px 0;color:#fff} +.navbar.header .brand.mark{background:transparent url("../../images/toolkit/defaults/logos/bnet/mark.png") no-repeat left 18px;display:inline-block;padding-left:60px} +.navbar.header a.brand{-webkit-transition:text-shadow .2s,color .2s;transition:text-shadow .2s,color .2s} +.navbar.header a.brand:hover,.navbar.header a.brand:focus{color:#fff;text-shadow:0 0 10px rgba(255,255,255,0.3),0 0 10px rgba(255,255,255,0.3)} +.navbar.header .brand .tag{color:rgba(255,255,255,0.5);display:inline-block;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;padding:1px 0 0 3px;vertical-align:text-top} +.navbar.header .user{float:right;display:block;font-size:15px;font-weight:400;line-height:20px;color:rgba(255,255,255,0.7);padding:20px 0} +.navbar.header .status{display:block;float:left;width:32px;height:32px;padding:2px;margin:1px 10px 1px 0;border:1px solid #000;background-image:-webkit-linear-gradient(top,#00a4dc,#0f72c5);background-image:linear-gradient(to bottom,#00a4dc,#0f72c5)} +.navbar.header .status.offline{background-image:-webkit-linear-gradient(top,rgba(120,120,120,0.3),rgba(101,101,101,0.3));background-image:linear-gradient(to bottom,rgba(120,120,120,0.3),rgba(101,101,101,0.3))} +.navbar.header .status.online{background-image:-webkit-linear-gradient(top,#6ddc00,#4e9d00);background-image:linear-gradient(to bottom,#6ddc00,#4e9d00)} +.navbar.header .status.away{background-image:-webkit-linear-gradient(top,#f8d90a,#e9af12);background-image:linear-gradient(to bottom,#f8d90a,#e9af12)} +.navbar.header .status.busy{background-image:-webkit-linear-gradient(top,#ec1919,#cf0d0d);background-image:linear-gradient(to bottom,#ec1919,#cf0d0d)} +.navbar.header .avatar{float:right;display:block;width:32px;height:32px;overflow:hidden;background-color:#222;background-size:cover} +.navbar.header .avatar img{display:block;width:100%;height:100%} +.navbar.header .name{float:left;display:block;margin:10px 0} +.navbar.header .battletag{display:block;color:rgba(255,255,255,0.7)} +.navbar.header .battletag .code{color:rgba(255,255,255,0.3)} +.navbar.header a.battletag{color:rgba(255,255,255,0.7)} +.navbar.header a.battletag:hover,.navbar.header a.battletag:focus{color:#fff} +.navbar.header a.battletag .code{color:rgba(255,255,255,0.3)} +.navbar.header a.battletag .code:hover,.navbar.header a.battletag .code:focus{color:#fff} +.navbar.header .ldap{float:left;display:block} +.navbar.header .ldap .email{display:block;color:rgba(255,255,255,0.7)} +.navbar.header .ldap .role{display:block;color:rgba(255,255,255,0.3)} +.pager{height:30px;margin:0} +.pager>li{margin-top:2px;margin-bottom:2px;margin-right:10px} +.pager>li:last-child{margin-right:0} +.pager>li>a,.pager>li>span{font-size:13px} +.pager>li>a{padding:1px 8px;line-height:22px;height:26px;text-decoration:none;background-color:rgba(0,0,0,0.15);border-radius:2px;border:1px solid rgba(255,255,255,0.15);min-width:26px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +.pager>li>span{line-height:26px;height:26px;min-width:18px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box} +.pager>li>a:focus,.pager>li>a:hover{background:rgba(0,0,0,0.25);color:#fff} +.pager>li>a:active{padding:2px 7px 0 9px;color:#fff;background-color:rgba(0,0,0,0.15);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.3)} +.pager>.active>a{color:#fff!important;background:rgba(255,255,255,0.07)!important;cursor:default!important;padding:1px!important;box-shadow:none!important} +.pager>.disabled>a,.pager>.disabled>a:focus,.pager>.disabled>a:hover,.pager>.disabled>a:active{color:rgba(255,255,255,0.3)!important;background:rgba(0,0,0,0.1)!important;cursor:default!important;padding:1px 8px!important;box-shadow:none!important} +.pager>.disabled>span{color:rgba(255,255,255,0.3)!important} +.pager>li>a [class^="icon-"],.pager>li>span [class^="icon-"],.pager>li>a [class*=" icon-"],.pager>li>span [class*=" icon-"]{margin-top:3px;margin-right:-6px;margin-left:-6px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pager>li>a:active [class^="icon-"],.pager>li>a:active [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pager>.disabled>span [class^="icon-"],.pager>.disabled>a [class^="icon-"],.pager>.disabled>span [class*=" icon-"],.pager>.disabled>a [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")!important;opacity:.15!important} +.pagination{height:30px;margin:0} +.pagination ul>li{margin-top:2px;margin-bottom:2px;margin-right:4px} +.pagination ul>li:last-child{margin-right:0} +.pagination ul>li>a,.pagination ul>li>span{font-size:13px} +.pagination ul>li>a{padding:1px 8px;line-height:22px;height:26px;text-decoration:none;background-color:rgba(0,0,0,0.15);border-radius:2px;border:1px solid rgba(255,255,255,0.15);min-width:26px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms;transition:box-shadow 200ms,background-color 200ms,border-color 200ms,color 200ms} +.pagination ul>li>span{line-height:26px;height:26px;min-width:18px;color:#00aeff;-moz-box-sizing:border-box;box-sizing:border-box} +.pagination ul>li>a:focus,.pagination ul>li>a:hover{background:rgba(0,0,0,0.25);color:#fff} +.pagination ul>li>a:active{padding:2px 7px 0 9px;color:#fff;background-color:rgba(0,0,0,0.15);box-shadow:inset 1.5px 1.5px 3px rgba(0,0,0,0.3)} +.pagination ul>.active>a{color:#fff!important;background:rgba(255,255,255,0.07)!important;cursor:default!important;padding:1px!important;box-shadow:none!important} +.pagination ul>.disabled>a,.pagination ul>.disabled>a:focus,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:active{color:rgba(255,255,255,0.3)!important;background:rgba(0,0,0,0.1)!important;cursor:default!important;padding:1px 8px!important;box-shadow:none!important} +.pagination ul>.disabled>span{color:rgba(255,255,255,0.3)!important} +.pagination ul>li>a [class^="icon-"],.pagination ul>li>span [class^="icon-"],.pagination ul>li>a [class*=" icon-"],.pagination ul>li>span [class*=" icon-"]{margin-top:3px;margin-right:-6px;margin-left:-6px;background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pagination ul>li>a:active [class^="icon-"],.pagination ul>li>a:active [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png")} +.pagination ul>.disabled>span [class^="icon-"],.pagination ul>.disabled>a [class^="icon-"],.pagination ul>.disabled>span [class*=" icon-"],.pagination ul>.disabled>a [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")!important;opacity:.15!important} +.results-counter{font-size:13px;line-height:26px;height:26px;margin:2px 0} +.pagination-group:before,.pagination-group:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +.pagination-group:after{clear:both} +.pagination-inline.results-counter{margin-right:1em} +.pagination select.view-per-page{height:26px;font-size:13px;padding:0 16px 0 2px;margin:2px 6px 0 0;background-position:right -4px} +.popover{z-index:1060;width:236px;padding:1px;background-color:#272e3b;border:1px solid #3d434f;background-clip:padding-box;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:0 0 10px 1px rgba(0,0,0,0.75)} +.popover.top{margin-top:-10px} +.popover.right{margin-left:10px} +.popover.bottom{margin-top:10px} +.popover.left{margin-left:-10px} +.popover-title{margin:0;padding:19px 19px 10px 19px} +.popover-content{padding:19px} +.popover-title+.popover-content{padding-top:0} +.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;z-index:0} +.popover .arrow{border-width:8px} +.popover .arrow:after{content:"";border-width:7px;display:block;z-index:1} +.popover.top .arrow{left:50%;margin-left:-8px;border-bottom-width:0;border-top-color:#3d434f;bottom:-8px} +.popover.top .arrow:after{bottom:1px;margin-left:-7px;border-bottom-width:0;border-top-color:#272e3b} +.popover.right .arrow{top:50%;left:-8px;margin-top:-8px;border-left-width:0;border-right-color:#3d434f} +.popover.right .arrow:after{left:1px;bottom:-7px;border-left-width:0;border-right-color:#272e3b} +.popover.bottom .arrow{left:50%;margin-left:-8px;border-top-width:0;border-bottom-color:#3d434f;top:-8px} +.popover.bottom .arrow:after{top:1px;margin-left:-7px;border-top-width:0;border-bottom-color:#272e3b} +.popover.left .arrow{top:50%;right:-8px;margin-top:-8px;border-right-width:0;border-left-color:#3d434f} +.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#272e3b;bottom:-7px} +.progress{height:22px;padding:14px 0} +.progress:after{height:22px;top:14px;background:rgba(117,117,117,0.1);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.07);border-radius:2px} +.progress .bar{height:22px;font-size:13px;line-height:22px;background-image:-webkit-linear-gradient(top,#474a4e,#414447 50%,#474a4e);background-image:linear-gradient(to bottom,#474a4e,#414447 50%,#474a4e);box-shadow:inset 0 0 0 1px rgba(255,255,255,0.01),inset 0 0 14px rgba(255,255,255,0.1);-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width,0.6s,ease;transition:width .6s ease;-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px} +.progress .bar+.bar{-webkit-border-top-left-radius:0;-moz-border-radius-topleft:0;border-top-left-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0} +.progress .bar[style*="100%"]{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px} +.progress.active .bar:after{height:50px;overflow:hidden;background:url("../../images/toolkit/themes/bnet/progress-bars/progress-pulse.png") repeat-y;top:-14px;width:92px;right:-8px} +.progress-striped .bar:before{height:50px;background:url("../../images/toolkit/themes/bnet/progress-bars/progress-stripes.png") no-repeat 0 0;top:-14px;-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px} +@-webkit-keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +@-moz-keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +@-ms-keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +@keyframes progress-bar-stripes{from{background-position:-195px 0} +to{background-position:200% 0} +} +.progress.active .bar:before{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite} +@-webkit-keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +@-moz-keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +@-ms-keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +@keyframes progress-bar-pulse{0{opacity:1} +50%{opacity:.5} +100%{opacity:1} +} +.progress.active .bar:after{-webkit-animation:progress-bar-pulse 1s linear infinite;-moz-animation:progress-bar-pulse 1s linear infinite;-ms-animation:progress-bar-pulse 1s linear infinite;animation:progress-bar-pulse 1s linear infinite} +.progress .description{left:9px;top:14px;line-height:22px;font-size:13px;color:#fff} +.progress-danger .bar,.progress .bar-danger{background-image:-webkit-linear-gradient(top,#e01212,#b70707 50%,#e01212);background-image:linear-gradient(to bottom,#e01212,#b70707 50%,#e01212);opacity:.8} +.progress-success .bar,.progress .bar-success{background-image:-webkit-linear-gradient(top,#17b326,#108328 50%,#17b326);background-image:linear-gradient(to bottom,#17b326,#108328 50%,#17b326);opacity:.8} +.progress-info .bar,.progress .bar-info{background-image:-webkit-linear-gradient(top,#0072d2,#005e9b 50%,#0072d2);background-image:linear-gradient(to bottom,#0072d2,#005e9b 50%,#0072d2);opacity:.8} +.progress-warning .bar,.progress .bar-warning{background-image:-webkit-linear-gradient(top,#ffa800,#f08a19 50%,#ffa800);background-image:linear-gradient(to bottom,#ffa800,#f08a19 50%,#ffa800);opacity:.8} +.progress-tracker{height:20px} +.progress-tracker li{padding:0 20px;font-size:13px;line-height:20px;color:rgba(255,255,255,0.15)} +.progress-tracker li [class^="icon-"],.progress-tracker li [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.15} +.progress-tracker li.active{color:rgba(255,255,255,0.5)} +.progress-tracker li.active [class^="icon-"],.progress-tracker li.active [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png");opacity:.5} +.scrollbar-content .scrollbar{width:22px} +.scrollbar-content .track{width:22px} +.scrollbar-content .thumb{cursor:pointer;height:22px;width:22px;padding:5px 7px} +.scrollbar-content .thumb .end{background-color:rgba(255,255,255,0.1);width:8px;border-radius:4px;-webkit-transition:background-color .2s;transition:background-color .2s} +.scrollbar-content:hover .thumb .end{background-color:rgba(255,255,255,0.1)} +.spinner-loading{width:20px;height:20px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png");background-position:-140px 0;display:inline-block} +.spinner-loading.spinner-loading-white{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet-white.png")} +.spinner-40-loading{width:40px;height:40px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-position:-280px 0;display:inline-block} +.spinner-40-loading.spinner-40-loading-white{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet-white.png")} +.spinner-patching{width:20px;height:20px;background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-white.png");display:inline-block} +.spinner-patching.spinner-danger{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-red.png")} +.spinner-patching.spinner-warning{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-orange.png")} +.spinner-patching.spinner-success{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-green.png")} +.spinner-patching.spinner-info{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-blue.png")} +.spinner-patching.spinner-inverse{background-image:url("../../images/toolkit/defaults/spinners/spinner-patching-gray.png")} +@-webkit-keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +@-moz-keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +@-ms-keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +@keyframes keyframes-loading{from{background-position:0 0} +to{background-position:-420px} +} +.spinner-loading{-webkit-animation:keyframes-loading .8s steps(21) infinite;-moz-animation:keyframes-loading .8s steps(21) infinite;-ms-animation:keyframes-loading .8s steps(21) infinite;animation:keyframes-loading .8s steps(21) infinite} +@-webkit-keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +@-moz-keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +@-ms-keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +@keyframes keyframes-patching{from{background-position:0 0} +to{background-position:-160px} +} +.spinner-patching{-webkit-animation:keyframes-patching .4s steps(8) infinite;-moz-animation:keyframes-patching .4s steps(8) infinite;-ms-animation:keyframes-patching .4s steps(8) infinite;animation:keyframes-patching .4s steps(8) infinite} +@-webkit-keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +@-moz-keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +@-ms-keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +@keyframes keyframes-40-loading{from{background-position:0 0} +to{background-position:-840px} +} +.spinner-40-loading{-webkit-animation:keyframes-40-loading .8s steps(21) infinite;-moz-animation:keyframes-40-loading .8s steps(21) infinite;-ms-animation:keyframes-40-loading .8s steps(21) infinite;animation:keyframes-40-loading .8s steps(21) infinite} +.spinner-battlenet{width:20px;height:20px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-battlenet.png");background-position:-140px 0;display:inline-block;-webkit-animation:keyframes-loading .8s steps(21) infinite;-moz-animation:keyframes-loading .8s steps(21) infinite;-ms-animation:keyframes-loading .8s steps(21) infinite;animation:keyframes-loading .8s steps(21) infinite} +.spinner-40-battlenet{width:40px;height:40px;background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-position:-280px 0;display:inline-block;-webkit-animation:keyframes-40-loading .8s steps(21) infinite;-moz-animation:keyframes-40-loading .8s steps(21) infinite;-ms-animation:keyframes-40-loading .8s steps(21) infinite;animation:keyframes-40-loading .8s steps(21) infinite} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.spinner-battlenet{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png");background-size:420px 20px} +.spinner-40-battlenet{background-image:url("../../images/toolkit/themes/bnet/spinners/spinner-80-battlenet.png");background-size:840px 40px} +} +[class^="icon-"],[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-blue.png");margin:2px} +[class^="icon-24-"],[class*=" icon-24-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-blue.png")} +[class^="icon-payment-"],[class*=" icon-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-16-payment.png")} +[class^="icon-24-payment-"],[class*=" icon-24-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-24-payment.png")} +[class^="icon-48-"],[class*=" icon-48-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-blue.png")} +[class^="icon-128-"],[class*=" icon-128-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-128-blue.png")} +.icon-white{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-white.png")} +.icon-24-white{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-white.png")} +.icon-gray{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-gray.png")} +.icon-24-gray{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-gray.png")} +.icon-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-orange.png")} +.icon-24-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-orange.png")} +.icon-128-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-128-orange.png")} +.icon-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-red.png")} +.icon-24-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-red.png")} +.icon-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-green.png")} +.icon-24-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-green.png")} +.icon-128-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-128-green.png")} +.icon-purple{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-purple.png")} +.icon-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-16-fullcolor.png")} +.icon-24-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-24-fullcolor.png")} +@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){[class^="icon-"],[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-blue.png");background-size:160px 480px} +[class^="icon-payment-"],[class*=" icon-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-32-payment.png");background-size:192px 208px} +.icon-gray,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-gray.png")} +.icon-white,.dropdown-menu>.disabled>a>[class^="icon-"],.dropdown-menu>.disabled>a>[class*=" icon-"],.btn-primary [class^="icon-"],.btn-primary [class*=" icon-"],.btn.disabled [class^="icon-"],.btn.disabled [class*=" icon-"],.btn[disabled] [class^="icon-"],.btn[disabled] [class*=" icon-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-white.png");background-size:160px 480px} +.icon-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-orange.png")} +.icon-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-red.png")} +.icon-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-green.png")} +.icon-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-32-fullcolor.png")} +[class^="icon-24-"],[class*=" icon-24-"]{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-blue.png");background-size:240px 720px} +.icon-orange{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-orange.png")} +.icon-red{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-red.png")} +.icon-green{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-green.png")} +.icon-fullcolor{background-image:url("../../images/toolkit/themes/bnet/icons/sprite-48-fullcolor.png")} +[class^="icon-24-payment-"],[class*=" icon-24-payment-"]{background-image:url("../../images/toolkit/defaults/icons/sprite-48-payment.png");background-size:288px 312px} +} +.table{margin-bottom:40px} +.table th,.table td{font-weight:400;padding:10px;line-height:20px;border-top:1px solid rgba(255,255,255,0.07)} +.table thead th{background:transparent;color:rgba(255,255,255,0.3)} +.table thead th a.table-sort,.table thead th a.table-sorting{color:rgba(255,255,255,0.3)} +.table thead th a.table-sort .icon-sort,.table thead th a.table-sorting .icon-sort{opacity:.3} +.table thead th a.table-sort:hover,.table thead th a.table-sorting:hover,.table thead th a.table-sort:focus,.table thead th a.table-sorting:focus{color:#fff} +.table thead th a.table-sort:hover .icon-sort,.table thead th a.table-sorting:hover .icon-sort,.table thead th a.table-sort:focus .icon-sort,.table thead th a.table-sorting:focus .icon-sort{opacity:1} +.table thead th a.table-sort.sort-disabled,.table thead th a.table-sorting.sort-disabled,.table thead th a.table-sort.sort-disabled:hover,.table thead th a.table-sorting.sort-disabled:hover,.table thead th a.table-sort.sort-disabled:focus,.table thead th a.table-sorting.sort-disabled:focus{color:rgba(255,255,255,0.3)} +.table thead th a.table-sort.sort-disabled .icon-sort-disabled,.table thead th a.table-sorting.sort-disabled .icon-sort-disabled,.table thead th a.table-sort.sort-disabled:hover .icon-sort-disabled,.table thead th a.table-sorting.sort-disabled:hover .icon-sort-disabled,.table thead th a.table-sort.sort-disabled:focus .icon-sort-disabled,.table thead th a.table-sorting.sort-disabled:focus .icon-sort-disabled{opacity:.3} +.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0} +.table tbody+tbody{border-top:2px solid rgba(255,255,255,0.07)} +.table .table{background-color:#202020} +.table-bordered{border:1px solid rgba(255,255,255,0.07);border-collapse:separate;border-left:0;border-radius:2px} +.table-bordered th,.table-bordered td{padding:10px;border-left:1px solid rgba(255,255,255,0.07)} +.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0} +.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px} +.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px} +.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child{-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px} +.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child{-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px} +.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0} +.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0} +.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px} +.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px} +.table-condensed th,.table-condensed td{padding:5px 10px;font-size:13px;line-height:20px} +.table-striped thead tr>th,.table-striped tbody tr:nth-child(even)>td,.table-striped tbody tr:nth-child(even)>th{background-color:rgba(255,255,255,0.07)} +.table-hover tbody tr td,.table-hover tbody tr th{-webkit-transition:background-color,0.2s;transition:background-color .2s} +.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:rgba(255,255,255,0.025)} +.table tbody tr.success td{background-color:#132a14;color:rgba(255,255,255,0.7)} +.table tbody tr.error td{background-color:#360e10;color:rgba(255,255,255,0.7)} +.table tbody tr.warning td{background-color:#5d3200;color:rgba(255,255,255,0.7)} +.table tbody tr.info td{background-color:#272e3b;color:rgba(255,255,255,0.7)} +.table-hover tbody tr.success:hover td{background-color:#1b3c1c} +.table-hover tbody tr.error:hover td{background-color:#4a1316} +.table-hover tbody tr.warning:hover td{background-color:#774000} +.table-hover tbody tr.info:hover td{background-color:#313a4a} +ul.thumbnails{margin:0;padding:0;list-style:none} +ul.thumbnails:before,ul.thumbnails:after{content:".";font-size:0;line-height:0;display:block;overflow:hidden;visibility:hidden;width:0;height:0} +ul.thumbnails:after{clear:both} +ul.thumbnails>li{float:left;padding-left:0;margin-bottom:40px} +a.thumbnail,div.thumbnail{position:relative;display:block;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:0 0 12px rgba(0,0,0,0.4);-webkit-transition:box-shadow,0.2s,ease-in-out;transition:box-shadow .2s ease-in-out} +a.thumbnail:after,div.thumbnail:after{content:"";position:absolute;top:0;left:0;z-index:10;display:block;width:100%;height:100%;box-shadow:inset 0 0 0 1px rgba(0,0,0,0.7),inset 0 0 0 2px rgba(255,255,255,0.1);-webkit-transition:box-shadow,0.2s,ease-in-out;transition:box-shadow .2s ease-in-out} +a.thumbnail:hover:after{box-shadow:inset 0 0 0 1px rgba(0,0,0,0.7),inset 0 0 0 2px rgba(255,255,255,0.25)} +a.thumbnail>img,div.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;position:relative;z-index:10} +a.thumbnail .caption,div.thumbnail .caption{padding:10px;position:relative;z-index:13} +a.thumbnail>img+.caption,div.thumbnail>img+.caption{border-top:1px solid rgba(255,255,255,0.15);padding-top:9px} +a.thumbnail .caption p:last-child,div.thumbnail .caption p:last-child,a.thumbnail .caption ul:last-child,div.thumbnail .caption ul:last-child,a.thumbnail .caption ol:last-child,div.thumbnail .caption ol:last-child,a.thumbnail .caption dl:last-child,div.thumbnail .caption dl:last-child{margin-bottom:0} +.tooltip{z-index:1070;padding:5px;font-size:11px} +.tooltip.top{margin-top:-3px} +.tooltip.right{margin-left:3px} +.tooltip.bottom{margin-top:3px} +.tooltip.left{margin-left:-3px} +.tooltip-inner{max-width:250px;padding:3px 8px;color:#bfc1c5;text-align:left;text-decoration:none;background-color:#272e3b;border:1px solid #3d434f;border-radius:1px;box-shadow:0 0 10px 1px rgba(0,0,0,0.75)} +.tooltip-inner p,.tooltip-inner ul,.tooltip-inner ol{margin-bottom:20px;line-height:20px} +.tooltip-inner p:last-child,.tooltip-inner ul:last-child,.tooltip-inner ol:last-child{margin-bottom:0} +.tooltip-arrow,.tooltip-arrow:after{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;z-index:0} +.tooltip-arrow:after{content:"";display:block;z-index:1} +.tooltip.top .tooltip-arrow{bottom:-1px;left:50%;margin-left:-5px;border-width:6px 6px 0;border-top-color:#3d434f} +.tooltip.top .tooltip-arrow:after{bottom:2px;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#272e3b} +.tooltip.right .tooltip-arrow{top:50%;left:-1px;margin-top:-5px;border-width:6px 6px 6px 0;border-right-color:#3d434f} +.tooltip.right .tooltip-arrow:after{top:50%;left:2px;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#272e3b} +.tooltip.left .tooltip-arrow{top:50%;right:-1px;margin-top:-5px;border-width:6px 0 6px 6px;border-left-color:#3d434f} +.tooltip.left .tooltip-arrow:after{top:50%;right:2px;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#272e3b} +.tooltip.bottom .tooltip-arrow{top:-1px;left:50%;margin-left:-5px;border-width:0 6px 6px;border-bottom-color:#3d434f} +.tooltip.bottom .tooltip-arrow:after{top:2px;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#272e3b} +.tooltipster-base{padding:5px;font-size:15px;line-height:20px;position:absolute;left:0;top:0;pointer-events:none;width:auto;overflow:visible} +.tooltipster-default{border-radius:1px;border:1px solid #3d434f;background:#272e3b;color:#bfc1c5;max-width:250px;z-index:1070} +.tooltipster-default .tooltipster-content{font-family:"Blizzard","Arial","Helvetica",sans-serif;font-size:11px;line-height:13px;padding:8px 10px;overflow:hidden} +.tooltipster-arrow-top span,.tooltipster-arrow-top-right span,.tooltipster-arrow-top-left span{border-left:5px solid transparent!important;border-right:5px solid transparent!important;border-top:5px solid;bottom:-4px} +.tooltipster-arrow-top .tooltipster-arrow-border,.tooltipster-arrow-top-right .tooltipster-arrow-border,.tooltipster-arrow-top-left .tooltipster-arrow-border{border-left:6px solid transparent!important;border-right:6px solid transparent!important;border-top:6px solid;bottom:-5px} +.tooltipster-arrow-bottom span,.tooltipster-arrow-bottom-right span,.tooltipster-arrow-bottom-left span{border-left:5px solid transparent!important;border-right:5px solid transparent!important;border-bottom:5px solid;top:-4px} +.tooltipster-arrow-bottom .tooltipster-arrow-border,.tooltipster-arrow-bottom-right .tooltipster-arrow-border,.tooltipster-arrow-bottom-left .tooltipster-arrow-border{border-left:6px solid transparent!important;border-right:6px solid transparent!important;border-bottom:6px solid;top:-5px} +.tooltipster-arrow-top span,.tooltipster-arrow-top .tooltipster-arrow-border,.tooltipster-arrow-bottom span,.tooltipster-arrow-bottom .tooltipster-arrow-border{left:0;right:0;margin:0 auto} +.tooltipster-arrow-top-left span,.tooltipster-arrow-bottom-left span{left:3px} +.tooltipster-arrow-top-left .tooltipster-arrow-border,.tooltipster-arrow-bottom-left .tooltipster-arrow-border{left:2px} +.tooltipster-arrow-top-right span,.tooltipster-arrow-bottom-right span{right:3px} +.tooltipster-arrow-top-right .tooltipster-arrow-border,.tooltipster-arrow-bottom-right .tooltipster-arrow-border{right:2px} +.tooltipster-arrow-left span,.tooltipster-arrow-left .tooltipster-arrow-border{border-top:5px solid transparent!important;border-bottom:5px solid transparent!important;border-left:5px solid;top:50%;margin-top:-4px;right:-5px} +.tooltipster-arrow-left .tooltipster-arrow-border{border-top:6px solid transparent!important;border-bottom:6px solid transparent!important;border-left:6px solid;margin-top:-5px} +.tooltipster-arrow-right span,.tooltipster-arrow-right .tooltipster-arrow-border{border-top:5px solid transparent!important;border-bottom:5px solid transparent!important;border-right:5px solid;top:50%;margin-top:-5px;left:-5px} +.tooltipster-arrow-right .tooltipster-arrow-border{border-top:6px solid transparent!important;border-bottom:6px solid transparent!important;border-right:6px solid;margin-top:-6px} +.tooltipster-icon{cursor:help;margin-left:4px} +body{font-family:"Blizzard","Arial","Helvetica",sans-serif;font-size:15px;line-height:20px} +body:lang(zh-CN){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft YaHei","Hei SC",sans-serif} +body:lang(zh-TW){font-family:"Blizzard","Arial","Helvetica","????????????","Microsoft JhengHei","Tei TC",sans-serif} +body:lang(ko){font-family:"Blizzard","Arial","Helvetica","?????? ??????","Malgun Gothic","????????????????????????","AppleSDGothicNeo","????????????","AppleGothic","??????","Dotum",sans-serif} +body:lang(ja){font-family:"Blizzard","Arial","Helvetica","????????????","Meiryo","?????????????????? Pro","Hiragino Kaku Gothic Pro","???????????????","Yu Gothic",sans-serif} +body:lang(th){font-family:"Blizzard","Tahoma","Arial","Helvetica",sans-serif} +h1,h2,h3,h4,h5,h6,.heading-1,.heading-2,.heading-3,.heading-4,.heading-5,.heading-6{margin:0 0 33px 0} +h1 strong,h2 strong,h3 strong,h4 strong,h5 strong,h6 strong,.heading-1 strong,.heading-2 strong,.heading-3 strong,.heading-4 strong,.heading-5 strong,.heading-6 strong{font-weight:400} +h1,.heading-1{font-weight:300;font-size:35px;line-height:40px;color:#fff} +h1 strong,.heading-1 strong,h1 b,.heading-1 b{font-weight:300} +h2,.heading-2{font-weight:300;font-size:23px;line-height:30px;color:#fff} +h3,.heading-3{font-weight:400;font-size:17px;line-height:20px;color:#fff} +h4,.heading-4{font-weight:400;font-size:15px;line-height:20px;color:#fff} +h5,.heading-5{font-weight:400;font-size:13px;line-height:20px;margin:0 0 8.25px 0;color:#fff} +h6,.heading-6{font-weight:400;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;color:rgba(255,255,255,0.3);margin:0 0 8.25px 0} +.heading-6+.heading-1,.heading-6+.heading-2,.heading-6+.heading-3{margin-top:-8.25px} +.heading-1+.heading-6,.heading-2+.heading-6,.heading-3+.heading-6{margin-top:-33px;margin-bottom:33px} +p+.heading-1,ul+.heading-1,ol+.heading-1,dl+.heading-1,pre+.heading-1,blockquote+.heading-1,p+.heading-2,ul+.heading-2,ol+.heading-2,dl+.heading-2,pre+.heading-2,blockquote+.heading-2,p+.heading-3,ul+.heading-3,ol+.heading-3,dl+.heading-3,pre+.heading-3,blockquote+.heading-3,p+.heading-4,ul+.heading-4,ol+.heading-4,dl+.heading-4,pre+.heading-4,blockquote+.heading-4,p+.heading-5+.heading-6,ul+.heading-5+.heading-6,ol+.heading-5+.heading-6,dl+.heading-5+.heading-6,pre+.heading-5+.heading-6,blockquote+.heading-5+.heading-6{margin-top:66px} +h1 small,h2 small,h3 small,h4 small,.heading-1 .subheading,.heading-2 .subheading,.heading-3 .subheading,.heading-4 .subheading{color:rgba(255,255,255,0.5)} +h1 small,.heading-1 .subheading{font-size:17px;line-height:20px} +h2 small,.heading-2 .subheading{font-size:15px;line-height:20px} +.title{font-size:15px;line-height:20px;font-weight:400;text-transform:uppercase;letter-spacing:.075em;color:rgba(255,255,255,0.8)} +.title .subtitle{color:rgba(255,255,255,0.5)} +.title a{color:rgba(255,255,255,0.8)} +.title a:focus,.title a:hover{color:#fff} +.title [class^="icon-24-"],.title [class*=" icon-24-"]{margin-top:-2px} +.muted{color:rgba(255,255,255,0.3)} +.muted a{color:rgba(0,174,255,0.7)} +.muted a:hover{color:rgba(255,255,255,0.5)} +a.muted:hover{color:rgba(255,255,255,0.5)} +.text-warning{color:#d8ac15} +a.text-warning:hover{color:#fff} +.text-error{color:#cd0606} +a.text-error:hover{color:#fff} +.text-info{color:#00aeff} +a.text-info:hover{color:#fff} +.text-success{color:#00a83c} +a.text-success:hover{color:#fff} +b{color:#fff;font-weight:400} +strong{color:#fff;font-weight:400} +s{color:rgba(255,255,255,0.3)} +del{color:rgba(255,255,255,0.3)} +ins{color:rgba(255,255,255,0.7)} +code{color:rgba(255,255,255,0.7)} +samp{color:rgba(255,255,255,0.7)} +kbd{color:rgba(255,255,255,0.7);font-weight:700} +var{color:rgba(255,255,255,0.7)} +code,kbd,pre,samp{font-family:"Consolas","Monaco","Menlo","Courier New",monospace} +abbr[title],abbr[data-original-title]{border-color:rgba(255,255,255,0.15)} +.initialism{font-size:14px} +small{font-size:86.66666667%;color:rgba(255,255,255,0.5)} +p{margin:0 0 33px 0;line-height:25px} +ul,ol{padding:0;margin:0 0 33px 30px;line-height:25px} +ul ul,ol ul,ul ol,ol ol{margin-top:20.625px} +li{line-height:20px;margin:0 0 20.625px 0;padding-left:10px} +li:last-of-type{margin-bottom:0} +li p{margin-bottom:20.625px} +ul.icons li,ol.icons li{padding-left:40px} +ul.icons li [class^="icon-"],ol.icons li [class^="icon-"],ul.icons li [class*=" icon-"],ol.icons li [class*=" icon-"]{left:12px} +ul.inline>li,ol.inline>li{padding-left:10px} +dl{margin:0 0 33px 0} +dl dt{font-weight:400;font-size:12px;line-height:20px;text-transform:uppercase;letter-spacing:.075em;color:rgba(255,255,255,0.3)} +dl dd{margin:0 0 20.625px 40px} +.dl-horizontal{margin-bottom:20px} +blockquote{padding:0 0 0 20px;margin:0 0 33px 0;border-left:5px solid rgba(255,255,255,0.1)} +blockquote p{color:rgba(255,255,255,0.7)} +blockquote .attribution{font-size:13px;line-height:20px;margin-top:20px;color:rgba(255,255,255,0.3)} +blockquote.pull-right{padding-right:20px;border-right:5px solid rgba(255,255,255,0.1)} +address{margin-bottom:20px;line-height:20px} +hr{margin:66px 0 20.625px;border-bottom:1px solid rgba(255,255,255,0.1)} +.documentation-section h1,.documentation-section h2,.documentation-section h3,.documentation-section h4,.documentation-section h5,.documentation-section h6,.documentation-section .heading-1,.documentation-section .heading-2,.documentation-section .heading-3,.documentation-section .heading-4,.documentation-section .heading-5,.documentation-section .heading-6{max-width:800px} +.documentation-section>p,.documentation-section>ul.unstyled,.documentation-section>ol.unstyled{max-width:800px} +.documentation-section>p:last-child,.documentation-section>ul.unstyled:last-child,.documentation-section>ol.unstyled:last-child{margin-bottom:0} +.documentation-section>ul:not(.nav):not(.pager):not(.thumbnails),.documentation-section>ol{max-width:760px} +.documentation-section>blockquote>p{max-width:775px} +.news-article .article-content *:not(a){color:rgba(255,255,255,0.7)} +.news-article>p,.news-article>ul:not(.nav),.news-article>ol{margin-bottom:25px} +.news-article>p:last-child,.news-article>ul:not(.nav):last-child,.news-article>ol:last-child{margin-bottom:0} +.news-article>.heading-2,.news-article>.heading-3,.news-article>.heading-4,.news-article>.heading-5{margin-bottom:25px} +.news-article p{margin-bottom:25px} +.news-article p+.heading-1,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-1,.news-article ol+.heading-1,.news-article dl+.heading-1,.news-article p+.heading-2,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-2,.news-article ol+.heading-2,.news-article dl+.heading-2,.news-article p+.heading-3,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-3,.news-article ol+.heading-3,.news-article dl+.heading-3,.news-article p+.heading-4,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-4,.news-article ol+.heading-4,.news-article dl+.heading-4,.news-article p+.heading-5+.heading-6,.news-article ul:not(.nav):not(.pager):not(.thumbnails)+.heading-5+.heading-6,.news-article ol+.heading-5+.heading-6,.news-article dl+.heading-5+.heading-6{margin-top:40px} +.news-article hr{margin-top:25px} +.well{font-size:13px;min-height:20px;border:1px solid #000;padding:20px;margin-bottom:40px;background-color:#272727;box-shadow:0 0 0 1px rgba(255,255,255,0.07) inset,0 5px 10px rgba(0,0,0,0.75);-moz-box-sizing:border-box;box-sizing:border-box} +.well blockquote{border-color:rgba(255,255,255,0.07)} +.well p,.well ul,.well ol,.well dl{font-size:13px;line-height:20px;margin-bottom:20px} +.well p:last-child,.well ul:last-child,.well ol:last-child,.well dl:last-child{margin-bottom:0} +.well-large{padding:40px 20px} +.well-small{padding:5px 20px} +@media screen and (max-width:767px){.btn,.btn.btn-wide{font-size:17px;width:100%} +.form-actions .btn{float:inherit} +.form-actions .btn+.btn{margin-left:0;margin-top:20px} +select optgroup{font-size:15px} +select option{font-size:15px} +.modal{width:90%;margin-left:-45%} +} \ No newline at end of file diff --git a/v2.18.0/toolkit/css/toolkit/fonts/blizzard-bold-italic.woff b/v2.18.0/toolkit/css/toolkit/fonts/blizzard-bold-italic.woff new file mode 100644 index 00000000..fa174b09 Binary files /dev/null and b/v2.18.0/toolkit/css/toolkit/fonts/blizzard-bold-italic.woff differ diff --git a/v2.18.0/toolkit/css/toolkit/fonts/blizzard-bold.woff b/v2.18.0/toolkit/css/toolkit/fonts/blizzard-bold.woff new file mode 100644 index 00000000..291004b6 Binary files /dev/null and b/v2.18.0/toolkit/css/toolkit/fonts/blizzard-bold.woff differ diff --git a/v2.18.0/toolkit/css/toolkit/fonts/blizzard-light-italic.woff b/v2.18.0/toolkit/css/toolkit/fonts/blizzard-light-italic.woff new file mode 100644 index 00000000..34d597a1 Binary files /dev/null and b/v2.18.0/toolkit/css/toolkit/fonts/blizzard-light-italic.woff differ diff --git a/v2.18.0/toolkit/css/toolkit/fonts/blizzard-light.woff b/v2.18.0/toolkit/css/toolkit/fonts/blizzard-light.woff new file mode 100644 index 00000000..1a36ebea Binary files /dev/null and b/v2.18.0/toolkit/css/toolkit/fonts/blizzard-light.woff differ diff --git a/v2.18.0/toolkit/css/toolkit/fonts/blizzard-regular-italic.woff b/v2.18.0/toolkit/css/toolkit/fonts/blizzard-regular-italic.woff new file mode 100644 index 00000000..7d1ca9bf Binary files /dev/null and b/v2.18.0/toolkit/css/toolkit/fonts/blizzard-regular-italic.woff differ diff --git a/v2.18.0/toolkit/css/toolkit/fonts/blizzard-regular.woff b/v2.18.0/toolkit/css/toolkit/fonts/blizzard-regular.woff new file mode 100644 index 00000000..0425e15d Binary files /dev/null and b/v2.18.0/toolkit/css/toolkit/fonts/blizzard-regular.woff differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/avatars/sprite-default-32.png b/v2.18.0/toolkit/images/toolkit/defaults/avatars/sprite-default-32.png new file mode 100644 index 00000000..7d36c326 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/avatars/sprite-default-32.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/carousels/sprite-carousel-control.png b/v2.18.0/toolkit/images/toolkit/defaults/carousels/sprite-carousel-control.png new file mode 100644 index 00000000..24c95c2e Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/carousels/sprite-carousel-control.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-16-payment-alt.png b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-16-payment-alt.png new file mode 100644 index 00000000..4bc0dcff Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-16-payment-alt.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-16-payment.png b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-16-payment.png new file mode 100644 index 00000000..798a0ee8 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-16-payment.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-24-payment-alt.png b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-24-payment-alt.png new file mode 100644 index 00000000..a87843c8 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-24-payment-alt.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-24-payment.png b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-24-payment.png new file mode 100644 index 00000000..3b5fde14 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-24-payment.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-32-payment-alt.png b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-32-payment-alt.png new file mode 100644 index 00000000..5def8087 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-32-payment-alt.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-32-payment.png b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-32-payment.png new file mode 100644 index 00000000..cd4c1ccf Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-32-payment.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-48-payment-alt.png b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-48-payment-alt.png new file mode 100644 index 00000000..ebb69e0a Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-48-payment-alt.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-48-payment.png b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-48-payment.png new file mode 100644 index 00000000..d0393028 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-48-payment.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-64-payment-alt.png b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-64-payment-alt.png new file mode 100644 index 00000000..89c7cc04 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-64-payment-alt.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-64-payment.png b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-64-payment.png new file mode 100644 index 00000000..1bb8da0f Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/icons/sprite-64-payment.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/blizzard/footer.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/blizzard/footer.png new file mode 100644 index 00000000..2b0cc372 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/blizzard/footer.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/china-default-2x.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/china-default-2x.png new file mode 100644 index 00000000..c4c704d5 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/china-default-2x.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/china-default.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/china-default.png new file mode 100644 index 00000000..c51a49ff Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/china-default.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/default-2x.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/default-2x.png new file mode 100644 index 00000000..53313ae5 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/default-2x.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/default.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/default.png new file mode 100644 index 00000000..76adb754 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/default.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/mark-2x.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/mark-2x.png new file mode 100644 index 00000000..97ae8ef9 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/mark-2x.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/mark.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/mark.png new file mode 100644 index 00000000..ef28f792 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/bnet/mark.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/wow/china-default-2x.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/wow/china-default-2x.png new file mode 100644 index 00000000..2e6af8c9 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/wow/china-default-2x.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/wow/china-default.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/wow/china-default.png new file mode 100644 index 00000000..d59179a2 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/wow/china-default.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/wow/default-2x.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/wow/default-2x.png new file mode 100644 index 00000000..13a8e26b Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/wow/default-2x.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/wow/default.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/wow/default.png new file mode 100644 index 00000000..95747553 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/wow/default.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/wtcg/china-default-2x.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/wtcg/china-default-2x.png new file mode 100644 index 00000000..cac7a000 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/wtcg/china-default-2x.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/wtcg/china-default.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/wtcg/china-default.png new file mode 100644 index 00000000..caa9731d Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/wtcg/china-default.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/wtcg/default-2x.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/wtcg/default-2x.png new file mode 100644 index 00000000..4460d096 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/wtcg/default-2x.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/logos/wtcg/default.png b/v2.18.0/toolkit/images/toolkit/defaults/logos/wtcg/default.png new file mode 100644 index 00000000..cf3a8077 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/logos/wtcg/default.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/meta/favicon.png b/v2.18.0/toolkit/images/toolkit/defaults/meta/favicon.png new file mode 100644 index 00000000..3f0e5124 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/meta/favicon.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/modals/modal-gradient.png b/v2.18.0/toolkit/images/toolkit/defaults/modals/modal-gradient.png new file mode 100644 index 00000000..5207d3f9 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/modals/modal-gradient.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-blue.png b/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-blue.png new file mode 100644 index 00000000..61d47c40 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-blue.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-gray.png b/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-gray.png new file mode 100644 index 00000000..c1f1c78e Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-gray.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-green.png b/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-green.png new file mode 100644 index 00000000..a71c99b6 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-green.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-orange.png b/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-orange.png new file mode 100644 index 00000000..a1ee576d Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-orange.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-red.png b/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-red.png new file mode 100644 index 00000000..1c46b648 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-red.png differ diff --git a/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-white.png b/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-white.png new file mode 100644 index 00000000..de4d996d Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/defaults/spinners/spinner-patching-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/backgrounds/navbar.jpg b/v2.18.0/toolkit/images/toolkit/themes/admin/backgrounds/navbar.jpg new file mode 100644 index 00000000..77ea975b Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/backgrounds/navbar.jpg differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/forms/sprite-18-inputs.png b/v2.18.0/toolkit/images/toolkit/themes/admin/forms/sprite-18-inputs.png new file mode 100644 index 00000000..10467ec0 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/forms/sprite-18-inputs.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/forms/sprite-22-select.png b/v2.18.0/toolkit/images/toolkit/themes/admin/forms/sprite-22-select.png new file mode 100644 index 00000000..ed6f8679 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/forms/sprite-22-select.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/forms/sprite-36-inputs.png b/v2.18.0/toolkit/images/toolkit/themes/admin/forms/sprite-36-inputs.png new file mode 100644 index 00000000..3f1df304 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/forms/sprite-36-inputs.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-128-blue.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-128-blue.png new file mode 100644 index 00000000..18183161 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-128-blue.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-128-dark.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-128-dark.png new file mode 100644 index 00000000..4ed21995 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-128-dark.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-128-gray.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-128-gray.png new file mode 100644 index 00000000..a4799e07 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-128-gray.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-128-white.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-128-white.png new file mode 100644 index 00000000..92597d8c Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-128-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-16-blue.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-16-blue.png new file mode 100644 index 00000000..f5db0b04 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-16-blue.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-16-dark.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-16-dark.png new file mode 100644 index 00000000..b53ccb15 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-16-dark.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-16-gray.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-16-gray.png new file mode 100644 index 00000000..2f54fbe4 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-16-gray.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-16-white.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-16-white.png new file mode 100644 index 00000000..7c4297f8 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-16-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-24-blue.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-24-blue.png new file mode 100644 index 00000000..c5b8f0dc Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-24-blue.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-24-dark.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-24-dark.png new file mode 100644 index 00000000..214b973f Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-24-dark.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-24-gray.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-24-gray.png new file mode 100644 index 00000000..37bd8b59 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-24-gray.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-24-white.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-24-white.png new file mode 100644 index 00000000..a2d94132 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-24-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-32-blue.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-32-blue.png new file mode 100644 index 00000000..f249177b Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-32-blue.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-32-dark.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-32-dark.png new file mode 100644 index 00000000..ee920ccb Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-32-dark.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-32-gray.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-32-gray.png new file mode 100644 index 00000000..c85c7d4d Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-32-gray.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-32-white.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-32-white.png new file mode 100644 index 00000000..92e4189d Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-32-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-48-blue.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-48-blue.png new file mode 100644 index 00000000..04dafcb7 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-48-blue.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-48-dark.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-48-dark.png new file mode 100644 index 00000000..fd933288 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-48-dark.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-48-gray.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-48-gray.png new file mode 100644 index 00000000..b09a6f5c Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-48-gray.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-48-white.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-48-white.png new file mode 100644 index 00000000..8dc2efc7 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-48-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-64-blue.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-64-blue.png new file mode 100644 index 00000000..98c8864e Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-64-blue.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-64-dark.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-64-dark.png new file mode 100644 index 00000000..3c955c1f Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-64-dark.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-64-gray.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-64-gray.png new file mode 100644 index 00000000..a1e11390 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-64-gray.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-64-white.png b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-64-white.png new file mode 100644 index 00000000..d7ad2f48 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/icons/sprite-64-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/progress-bars/progress-pulse.png b/v2.18.0/toolkit/images/toolkit/themes/admin/progress-bars/progress-pulse.png new file mode 100644 index 00000000..1d43613a Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/progress-bars/progress-pulse.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/progress-bars/progress-stripes.png b/v2.18.0/toolkit/images/toolkit/themes/admin/progress-bars/progress-stripes.png new file mode 100644 index 00000000..18bd2c19 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/progress-bars/progress-stripes.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-40-loading-white.png b/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-40-loading-white.png new file mode 100644 index 00000000..26635333 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-40-loading-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-40-loading.png b/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-40-loading.png new file mode 100644 index 00000000..4a055165 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-40-loading.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-80-loading-white.png b/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-80-loading-white.png new file mode 100644 index 00000000..630fc4a1 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-80-loading-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-80-loading.png b/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-80-loading.png new file mode 100644 index 00000000..7db4f98c Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-80-loading.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-loading-white.png b/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-loading-white.png new file mode 100644 index 00000000..67972dad Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-loading-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-loading.png b/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-loading.png new file mode 100644 index 00000000..50a4f71b Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/admin/spinners/spinner-loading.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/armory/spinners/spinner-40-armory.png b/v2.18.0/toolkit/images/toolkit/themes/armory/spinners/spinner-40-armory.png new file mode 100644 index 00000000..b3fc198b Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/armory/spinners/spinner-40-armory.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/armory/spinners/spinner-80-armory.png b/v2.18.0/toolkit/images/toolkit/themes/armory/spinners/spinner-80-armory.png new file mode 100644 index 00000000..f98dd642 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/armory/spinners/spinner-80-armory.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/armory/spinners/spinner-armory.png b/v2.18.0/toolkit/images/toolkit/themes/armory/spinners/spinner-armory.png new file mode 100644 index 00000000..bd197b69 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/armory/spinners/spinner-armory.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/forms/sprite-18-inputs.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/forms/sprite-18-inputs.png new file mode 100644 index 00000000..5abb9807 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/forms/sprite-18-inputs.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/forms/sprite-22-select.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/forms/sprite-22-select.png new file mode 100644 index 00000000..a013eefa Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/forms/sprite-22-select.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/forms/sprite-36-inputs.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/forms/sprite-36-inputs.png new file mode 100644 index 00000000..419940d3 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/forms/sprite-36-inputs.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-blue.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-blue.png new file mode 100644 index 00000000..d0f90952 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-blue.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-fullcolor.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-fullcolor.png new file mode 100644 index 00000000..b1a53861 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-fullcolor.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-gray.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-gray.png new file mode 100644 index 00000000..187494da Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-gray.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-green.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-green.png new file mode 100644 index 00000000..d63b434e Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-green.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-hsorange.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-hsorange.png new file mode 100644 index 00000000..9608d976 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-hsorange.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-orange.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-orange.png new file mode 100644 index 00000000..7fcb8562 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-orange.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-purple.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-purple.png new file mode 100644 index 00000000..d2f31292 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-purple.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-red.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-red.png new file mode 100644 index 00000000..e3c0bcae Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-red.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-sky.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-sky.png new file mode 100644 index 00000000..f92fb42b Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-sky.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-white.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-white.png new file mode 100644 index 00000000..92597d8c Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-128-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-blue.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-blue.png new file mode 100644 index 00000000..e85de8ef Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-blue.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-fullcolor.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-fullcolor.png new file mode 100644 index 00000000..593f908e Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-fullcolor.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-gray.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-gray.png new file mode 100644 index 00000000..a6c627cd Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-gray.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-green.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-green.png new file mode 100644 index 00000000..32234bd6 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-green.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-hsorange.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-hsorange.png new file mode 100644 index 00000000..b907ac3e Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-hsorange.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-orange.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-orange.png new file mode 100644 index 00000000..1757fd18 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-orange.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-purple.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-purple.png new file mode 100644 index 00000000..2ea90f4f Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-purple.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-red.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-red.png new file mode 100644 index 00000000..ae7d935e Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-red.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-sky.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-sky.png new file mode 100644 index 00000000..edd8942d Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-sky.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-white.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-white.png new file mode 100644 index 00000000..7c4297f8 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-16-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-blue.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-blue.png new file mode 100644 index 00000000..64386bdc Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-blue.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-fullcolor.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-fullcolor.png new file mode 100644 index 00000000..f2430942 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-fullcolor.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-gray.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-gray.png new file mode 100644 index 00000000..9f68864d Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-gray.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-green.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-green.png new file mode 100644 index 00000000..eed29459 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-green.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-hsorange.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-hsorange.png new file mode 100644 index 00000000..f935d11a Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-hsorange.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-orange.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-orange.png new file mode 100644 index 00000000..ef67085a Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-orange.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-purple.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-purple.png new file mode 100644 index 00000000..b005b88e Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-purple.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-red.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-red.png new file mode 100644 index 00000000..cba79d82 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-red.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-sky.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-sky.png new file mode 100644 index 00000000..39dbef08 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-sky.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-white.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-white.png new file mode 100644 index 00000000..a2d94132 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-24-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-blue.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-blue.png new file mode 100644 index 00000000..28106913 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-blue.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-fullcolor.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-fullcolor.png new file mode 100644 index 00000000..08428b82 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-fullcolor.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-gray.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-gray.png new file mode 100644 index 00000000..dec68846 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-gray.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-green.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-green.png new file mode 100644 index 00000000..ebaff53b Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-green.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-hsorange.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-hsorange.png new file mode 100644 index 00000000..343fc915 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-hsorange.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-orange.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-orange.png new file mode 100644 index 00000000..ae5bdbd7 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-orange.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-purple.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-purple.png new file mode 100644 index 00000000..511bbdaa Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-purple.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-red.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-red.png new file mode 100644 index 00000000..78f102c1 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-red.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-sky.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-sky.png new file mode 100644 index 00000000..4fc080d7 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-sky.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-white.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-white.png new file mode 100644 index 00000000..92e4189d Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-32-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-blue.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-blue.png new file mode 100644 index 00000000..e05551d1 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-blue.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-fullcolor.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-fullcolor.png new file mode 100644 index 00000000..b9837919 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-fullcolor.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-gray.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-gray.png new file mode 100644 index 00000000..919ee032 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-gray.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-green.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-green.png new file mode 100644 index 00000000..bbbb4404 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-green.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-hsorange.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-hsorange.png new file mode 100644 index 00000000..2a2ccd21 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-hsorange.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-orange.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-orange.png new file mode 100644 index 00000000..a89256c6 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-orange.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-purple.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-purple.png new file mode 100644 index 00000000..e6467a24 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-purple.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-red.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-red.png new file mode 100644 index 00000000..e09673eb Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-red.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-sky.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-sky.png new file mode 100644 index 00000000..b1f831fe Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-sky.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-white.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-white.png new file mode 100644 index 00000000..8dc2efc7 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-48-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-blue.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-blue.png new file mode 100644 index 00000000..1f97a479 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-blue.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-fullcolor.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-fullcolor.png new file mode 100644 index 00000000..b7ab2e93 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-fullcolor.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-gray.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-gray.png new file mode 100644 index 00000000..e99a122a Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-gray.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-green.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-green.png new file mode 100644 index 00000000..3f5366d0 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-green.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-hsorange.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-hsorange.png new file mode 100644 index 00000000..a445dbca Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-hsorange.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-orange.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-orange.png new file mode 100644 index 00000000..1fcf49e3 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-orange.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-purple.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-purple.png new file mode 100644 index 00000000..1e9cce2b Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-purple.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-red.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-red.png new file mode 100644 index 00000000..b9470e24 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-red.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-sky.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-sky.png new file mode 100644 index 00000000..7417defd Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-sky.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-white.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-white.png new file mode 100644 index 00000000..d7ad2f48 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/icons/sprite-64-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/media/media-org.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/media/media-org.png new file mode 100644 index 00000000..b5c283f9 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/media/media-org.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/progress-bars/progress-pulse.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/progress-bars/progress-pulse.png new file mode 100644 index 00000000..1d43613a Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/progress-bars/progress-pulse.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/progress-bars/progress-stripes.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/progress-bars/progress-stripes.png new file mode 100644 index 00000000..18bd2c19 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/progress-bars/progress-stripes.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/scrollbars/border-image-hover.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/scrollbars/border-image-hover.png new file mode 100644 index 00000000..c18e1353 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/scrollbars/border-image-hover.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/scrollbars/border-image.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/scrollbars/border-image.png new file mode 100644 index 00000000..f02d9bba Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/scrollbars/border-image.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-40-battlenet-white.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-40-battlenet-white.png new file mode 100644 index 00000000..26635333 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-40-battlenet-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png new file mode 100644 index 00000000..4a055165 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-40-battlenet.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-80-battlenet-white.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-80-battlenet-white.png new file mode 100644 index 00000000..630fc4a1 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-80-battlenet-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-80-battlenet.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-80-battlenet.png new file mode 100644 index 00000000..7db4f98c Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-80-battlenet.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-battlenet-white.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-battlenet-white.png new file mode 100644 index 00000000..67972dad Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-battlenet-white.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-battlenet.png b/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-battlenet.png new file mode 100644 index 00000000..50a4f71b Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/bnet/spinners/spinner-battlenet.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/wow/spinners/spinner-40-wow.png b/v2.18.0/toolkit/images/toolkit/themes/wow/spinners/spinner-40-wow.png new file mode 100644 index 00000000..5a38fb48 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/wow/spinners/spinner-40-wow.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/wow/spinners/spinner-80-wow.png b/v2.18.0/toolkit/images/toolkit/themes/wow/spinners/spinner-80-wow.png new file mode 100644 index 00000000..79e07f68 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/wow/spinners/spinner-80-wow.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/wow/spinners/spinner-wow.png b/v2.18.0/toolkit/images/toolkit/themes/wow/spinners/spinner-wow.png new file mode 100644 index 00000000..eccb5492 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/wow/spinners/spinner-wow.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/wtcg/spinners/spinner-40-battlenet-hs.png b/v2.18.0/toolkit/images/toolkit/themes/wtcg/spinners/spinner-40-battlenet-hs.png new file mode 100644 index 00000000..11fea6ae Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/wtcg/spinners/spinner-40-battlenet-hs.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/wtcg/spinners/spinner-80-battlenet-hs.png b/v2.18.0/toolkit/images/toolkit/themes/wtcg/spinners/spinner-80-battlenet-hs.png new file mode 100644 index 00000000..bb5c3a98 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/wtcg/spinners/spinner-80-battlenet-hs.png differ diff --git a/v2.18.0/toolkit/images/toolkit/themes/wtcg/spinners/spinner-battlenet-hs.png b/v2.18.0/toolkit/images/toolkit/themes/wtcg/spinners/spinner-battlenet-hs.png new file mode 100644 index 00000000..86797dc1 Binary files /dev/null and b/v2.18.0/toolkit/images/toolkit/themes/wtcg/spinners/spinner-battlenet-hs.png differ diff --git a/v2.18.0/toolkit/js/toolkit/toolkit.min.js b/v2.18.0/toolkit/js/toolkit/toolkit.min.js new file mode 100644 index 00000000..d9c68caa --- /dev/null +++ b/v2.18.0/toolkit/js/toolkit/toolkit.min.js @@ -0,0 +1,2121 @@ +/*! + * Battle.net Front end Toolkit + * + * @copyright ©2012 Blizzard Entertainment, Inc. All rights reserved. + * + * Twitter Bootstrap + * + * @see http://twitter.github.com/bootstrap/ + * @copyright ©2011 Twitter, Inc. All rights reserved. + * @license http://www.apache.org/licenses/LICENSE-2.0 + * + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Twitter typeahead.js + * + * @see https://github.com/twitter/typeahead.js + * @copyright ©2013 Twitter, Inc. All rights reserved. + * @license http://opensource.org/licenses/MIT + * + * Copyright (c) 2013 Twitter, Inc + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +"use strict"; +if(!Object.create){Object.create=function(b){if(arguments.length>1){throw new Error("Object.create implementation only accepts the first parameter."); +}function a(){}a.prototype=b; +return new a(); +}; +}if(!Object.getPrototypeOf){if(typeof"test".__proto__==="object"){Object.getPrototypeOf=function(a){return a.__proto__; +}; +}else{Object.getPrototypeOf=function(a){return a.constructor.prototype; +}; +}}if(!String.fromCodePoint){ +/*! + * ES6 Unicode Shims 0.1 + * (c) 2012 Steven Levithan + * MIT License + */ +String.fromCodePoint=function fromCodePoint(){var d=[],a,e,b,c; +for(c=0; +c65535?[55296+(e>>10),56320+(e&1023)]:[a]; +d.push(String.fromCharCode.apply(null,b)); +}return d.join(""); +}; +}if(!String.prototype.trim){String.prototype.trim=function(){return $.trim(this); +}; +}if(!String.prototype.capitalize){String.prototype.capitalize=function(){return this.charAt(0).toUpperCase()+this.slice(1); +}; +}if(typeof jQuery.expr.createPseudo==="function"){jQuery.expr[":"].caseInsensitiveContains=jQuery.expr.createPseudo(function(a){return function(b){return jQuery(b).text().toLocaleLowerCase().indexOf(a.toLocaleLowerCase())>=0; +}; +}); +jQuery.expr[":"].caseInsensitiveStartsWith=jQuery.expr.createPseudo(function(a){return function(b){return jQuery(b).text().toLocaleLowerCase().indexOf(a.toLocaleLowerCase())===0; +}; +}); +}else{jQuery.expr[":"].caseInsensitiveContains=function(c,b,a){return jQuery(c).text().toLocaleLowerCase().indexOf(a[3].toLocaleLowerCase())>=0; +}; +jQuery.expr[":"].caseInsensitiveStartsWith=function(c,b,a){return jQuery(c).text().toLocaleLowerCase().indexOf(a[3].toLocaleLowerCase())===0; +}; +}$(function(){$.support.transition=(function(){var a=(function(){var d=document.createElement("toolkit"),c={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},b; +for(b in c){if(d.style[b]!==undefined){return c[b]; +}}return""; +}()); +return a&&{end:a}; +})(); +}); +var Affix=function(b,a){this.options=$.extend({},$.fn.affix.defaults,a); +this.$window=$(window).on("scroll.affix.data-api",$.proxy(this.checkPosition,this)).on("click.affix.data-api",$.proxy(function(){setTimeout($.proxy(this.checkPosition,this),1); +},this)); +this.$element=$(b); +this.checkPosition(); +}; +Affix.prototype.checkPosition=function(){if(!this.$element.is(":visible")){return; +}var e=$(document).height(),g=this.$window.scrollTop(),a=this.$element.offset(),h=this.options.offset,c=h.bottom,d=h.top,f="affix affix-top affix-bottom",b; +if(typeof h!=="object"){c=d=h; +}if(typeof d==="function"){d=h.top(); +}if(typeof c==="function"){c=h.bottom(); +}if(this.unpin!==null&&(g+this.unpin<=a.top)){b=false; +}else{if(!isNaN(c)&&(a.top+this.$element.height()>=e-c)){b="bottom"; +}else{if(!isNaN(d)&&g<=d){b="top"; +}else{b=false; +}}}if(this.affixed===b){return; +}this.affixed=b; +this.unpin=b==="bottom"?(a.top-g):null; +this.$element.removeClass(f).addClass("affix"+(b?"-"+b:"")); +}; +$.fn.affix=function(a){return this.each(function(){var d=$(this),c=d.data("affix"),b=typeof a==="object"&&a; +if(!c){d.data("affix",(c=new Affix(this,b))); +}if(typeof a==="string"){c[a](); +}}); +}; +$.fn.affix.Constructor=Affix; +$.fn.affix.defaults={offset:0}; +$(window).on("load",function(){$("[data-spy='affix']").each(function(){var b=$(this),a=b.data(); +a.offset=a.offset||{}; +if(a.offsetBottom){a.offset.bottom=a.offsetBottom; +}if(a.offsetTop){a.offset.top=a.offsetTop; +}b.affix(a); +}); +}); +var dismiss="[data-dismiss='alert']",Alert=function(a){$(a).on("click",dismiss,this.close); +}; +Alert.prototype.close=function(f){var d=$(this),b=d.attr("data-target"),c; +if(!b){b=d.attr("href"); +b=b&&b.replace(/.*(?=#[^\s]*$)/,""); +}c=$(b); +if(f){f.preventDefault(); +}if(!c.length){c=d.hasClass("alert")?d:d.parent(); +}c.trigger(f=$.Event("close")); +if(f.isDefaultPrevented()){return; +}c.removeClass("in"); +function a(){c.trigger("closed").remove(); +}if($.support.transition&&c.hasClass("fade")){c.on($.support.transition.end,a); +}else{a(); +}}; +$.fn.alert=function(a){return this.each(function(){var c=$(this),b=c.data("alert"); +if(!b){c.data("alert",(b=new Alert(this))); +}if(typeof a==="string"){b[a].call(c); +}}); +}; +$.fn.alert.Constructor=Alert; +$(document).on("click.alert.data-api",dismiss,Alert.prototype.close); +var Button=function(b,a){this.$element=$(b); +this.options=$.extend({},$.fn.button.defaults,a); +}; +Button.prototype.setState=function(e){var g="disabled",a=this.$element,c=a.data(),f=a.is("input")?"val":"html",b; +e=e+"Text"; +b=c[e]||this.options[e]; +if(b===""&&e==="loadingText"){a.addClass("loading"); +}else{a.removeClass("loading"); +}if(!c.resetText){a.data("resetText",a[f]()); +}if(b!==""){a[f](b); +}setTimeout(function(){if(e==="loadingText"){a.addClass(g).attr(g,g).prop(g,true); +}else{a.removeClass(g).removeAttr(g).prop(g,false); +}},0); +}; +Button.prototype.toggle=function(){var a=this.$element.closest("[data-toggle='buttons-radio']"); +if(a){a.find(".active").removeClass("active"); +}this.$element.toggleClass("active"); +}; +$.fn.button=function(a){return this.each(function(){var d=$(this),c=d.data("button"),b=typeof a==="object"&&a; +if(!c){d.data("button",(c=new Button(this,b))); +}if(a==="toggle"){c.toggle(); +}else{if(a){c.setState(a); +}}}); +}; +$.fn.button.defaults={loadingText:""}; +$.fn.button.Constructor=Button; +$(document).on("click.button.data-api","[data-toggle^=button]",function(b){var a=$(b.target); +if(!a.hasClass("btn")){a=a.closest(".btn"); +}a.button("toggle"); +}); +var Carousel=function(b,a){this.$element=$(b); +this.options=a; +if(this.options.pause==="hover"){this.$element.on("mouseenter",$.proxy(this.pause,this)).on("mouseleave",$.proxy(this.cycle,this)); +}}; +Carousel.prototype={cycle:function(a){if(!a){this.paused=false; +}if(this.options.interval&&!this.paused){this.interval=setInterval($.proxy(this.next,this),this.options.interval); +}return this; +},to:function(e){var a=this.$element.find(".item.active"),b=a.parent().children(),c=b.index(a),d=this; +if(e>(b.length-1)||e<0){return; +}if(this.sliding){return this.$element.one("slid",function(){d.to(e); +}); +}if(c===e){return this.pause().cycle(); +}return this.slide(e>c?"next":"prev",$(b[e])); +},pause:function(a){if(!a){this.paused=true; +}if(this.$element.find(".next, .prev").length&&$.support.transition.end){this.$element.trigger($.support.transition.end); +this.cycle(); +}clearInterval(this.interval); +this.interval=null; +return this; +},next:function(){if(this.sliding){return; +}return this.slide("next"); +},prev:function(){if(this.sliding){return; +}return this.slide("prev"); +},slide:function(h,b){var j=this.$element.find(".item.active"),a=b||j[h](),g=this.interval,i=h==="next"?"left":"right",c=h==="next"?"first":"last",d=this,f; +this.sliding=true; +if(g){this.pause(); +}a=a.length?a:this.$element.find(".item")[c](); +f=$.Event("slide",{relatedTarget:a[0],direction:i}); +if(a.hasClass("active")){return; +}if($.support.transition){this.$element.trigger(f); +if(f.isDefaultPrevented()){return; +}a.addClass(h); +if(a[0].offsetWidth){void a[0].offsetWidth; +}j.addClass(i); +a.addClass(i); +this.$element.one($.support.transition.end,function(){a.removeClass([h,i].join(" ")).addClass("active"); +j.removeClass(["active",i].join(" ")); +d.sliding=false; +setTimeout(function(){d.$element.trigger("slid"); +},0); +}); +}else{this.$element.trigger(f); +if(f.isDefaultPrevented()){return; +}j.removeClass("active"); +a.addClass("active"); +this.sliding=false; +this.$element.trigger("slid"); +}if(g){this.cycle(); +}return this; +}}; +$.fn.carousel=function(a){return this.each(function(){var e=$(this),d=e.data("carousel"),b=$.extend({},$.fn.carousel.defaults,typeof a==="object"&&a),c=typeof a==="string"?a:b.slide; +if(!d){e.data("carousel",(d=new Carousel(this,b))); +}if(typeof a==="number"){d.to(a); +}else{if(c){d[c](); +}else{if(b.interval){d.cycle(); +}}}}); +}; +$.fn.carousel.defaults={interval:5000,pause:"hover"}; +$.fn.carousel.Constructor=Carousel; +$(document).on("click.carousel.data-api","[data-slide]",function(f){var d=$(this),b,a=$(d.attr("data-target")||(b=d.attr("href"))&&b.replace(/.*(?=#[^\s]+$)/,"")),c=$.extend({},a.data(),d.data()); +a.carousel(c); +f.preventDefault(); +}); +var Charmax=function(b,a){this.init(b,a); +}; +Charmax.prototype={constructor:Charmax,init:function(b,a){this.element=b; +this.$element=$(b); +this.options=this.getOptions(a); +this.maxlength=parseInt(this.$element.attr("maxlength"),10); +this.$element.on("input.charmax",$.proxy(this.countCharsInput,this)); +this.$element.on("keydown.charmax",$.proxy(this.countCharsKeydown,this)); +},getOptions:function(a){a=$.extend({},$.fn.charmax.defaults,a,this.$element.data()); +return a; +},getCount:function getCount(){return this.element.value.length; +},countCharsInput:function countCharsInput(){this.$element.off(".charmax"); +this.$element.on("input.charmax",$.proxy(this.countChars,this)); +this.countChars.call(this); +},countCharsKeydown:function countCharsKeydown(){this.countChars.call(this); +},countChars:function countChars(){var a=this.getCount()-this.maxlength; +this.$element.attr("data-charmax-counter",(a+this.maxlength)+"/"+this.maxlength); +if(a<0){this.$element.trigger("underMaxlength",[a]); +}else{if(a>0){this.$element.trigger("overMaxlength",[a]); +}else{this.$element.trigger("atMaxlength"); +}}this.$element.trigger("charcounter",[a]); +}}; +$.fn.charmax=function(a){return this.each(function(){var d=$(this),c=d.data("charmax"),b=typeof a==="object"&&a; +if(d.attr("maxlength")!=="undefined"){if(!c){d.data("charmax",(c=new Charmax(this,b))); +}if(typeof a==="string"){c[a](); +}}}); +}; +$.fn.charmax.Constructor=Charmax; +$.fn.charmax.defaults={}; +$(window).on("load",function(){$("textarea[maxlength], input[maxlength]").not("[data-charmax='false']").each(function(){$(this).charmax(); +}); +}); +var Checkbox=function(a){this.$element=$(a); +}; +Checkbox.prototype.setState=function(b){var a=this.$element; +if(a.attr(b)===b){a.removeAttr(b); +a.parent(".checkbox-label").removeClass(b); +}else{a.attr(b,b); +a.parent(".checkbox-label").addClass(b); +}}; +Checkbox.prototype.toggle=function(a){if(this.$element.hasClass("partial")&&a!==true){this.$element.removeClass("partial"); +this.$element.removeClass("checked"); +this.$element.children().prop("checked",false); +}if(this.$element.children().prop("checked")){this.$element.addClass("checked"); +}else{this.$element.removeClass("checked"); +}if(this.$element.children().prop("disabled")){this.$element.addClass("disabled"); +}else{this.$element.removeClass("disabled"); +}}; +Checkbox.prototype.focus=function(){this.$element.addClass("focus"); +}; +Checkbox.prototype.blur=function(){this.$element.removeClass("focus"); +}; +$.fn.checkbox=function(a,b){return this.each(function(){var d=$(this),c; +d.data("checkbox",(c=new Checkbox(this))); +if(a==="toggle"){c.toggle(b); +}else{if(a==="focus"){c.focus(); +}else{if(a==="blur"){c.blur(); +}else{if(a){c.setState(a); +}}}}}); +}; +$.fn.checkbox.Constructor=Checkbox; +$(function(){$("body").on("change.checkbox.data-api","input[type=checkbox]:not(.css-input)",function(a){$(a.currentTarget).parent(".checkbox-label").checkbox("toggle"); +}).on("focus.checkbox.data-api","input[type=checkbox]:not(.css-input)",function(a){$(a.currentTarget).parent(".checkbox-label").checkbox("focus"); +}).on("blur.checkbox.data-api","input[type=checkbox]:not(.css-input)",function(a){$(a.currentTarget).parent(".checkbox-label").checkbox("blur"); +}); +$("input[type=checkbox]:not(.css-input)").each(function(){$(this).parent(".checkbox-label").checkbox("toggle",true); +}); +}); +var Collapse=function(b,a){this.$element=$(b); +this.options=$.extend({},$.fn.collapse.defaults,a); +if(this.options.parent){this.$parent=$(this.options.parent); +}if(this.options.toggle){this.toggle(); +}}; +Collapse.prototype={constructor:Collapse,dimension:function(){var a=this.$element.hasClass("width"); +return a?"width":"height"; +},show:function(){var d,a,c,b; +if(this.transitioning){return; +}d=this.dimension(); +a=$.camelCase(["scroll",d].join("-")); +c=this.$parent&&this.$parent.find(".in"); +if(c&&c.length){b=c.data("collapse"); +if(b&&b.transitioning){return; +}c.siblings("a").addClass("collapsed"); +c.prev().find(".accordion-toggle").addClass("collapsed"); +c.collapse("hide"); +if(!b){c.data("collapse",null); +}}this.$element[d](0); +this.transition("addClass",$.Event("show"),"shown"); +if($.support.transition){this.$element[d](this.$element[0][a]); +}},hide:function(){var a; +if(this.transitioning){return; +}a=this.dimension(); +this.reset(this.$element[a]()); +this.transition("removeClass",$.Event("hide"),"hidden"); +this.$element[a](0); +},reset:function(a){var b=this.dimension(); +a=a||"auto"; +void this.$element.removeClass("collapse")[b](a)[0].offsetWidth; +this.$element[a!==null?"addClass":"removeClass"]("collapse"); +return this; +},transition:function(e,b,c){var d=this,a=function(){if(b.type==="show"){d.reset(); +}d.transitioning=0; +d.$element.trigger(c); +}; +this.$element.trigger(b); +if(b.isDefaultPrevented()){return; +}this.transitioning=1; +this.$element[e]("in"); +if($.support.transition&&this.$element.hasClass("collapse")){this.$element.one($.support.transition.end,a); +}else{a(); +}},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"](); +}}; +$.fn.collapse=function(a){return this.each(function(){var d=$(this),c=d.data("collapse"),b=typeof a==="object"&&a; +if(!c){d.data("collapse",(c=new Collapse(this,b))); +}if(typeof a==="string"){c[a](); +}}); +}; +$.fn.collapse.defaults={toggle:true}; +$.fn.collapse.Constructor=Collapse; +$(document).on("click.collapse.data-api","[data-toggle=collapse]",function(f){var d=$(this),a,c=d.attr("data-target")||f.preventDefault()||(a=d.attr("href"))&&a.replace(/.*(?=#[^\s]+$)/,""),b=$(c).data("collapse")?"toggle":d.data(); +d[$(c).hasClass("in")?"addClass":"removeClass"]("collapsed"); +$(c).collapse(b); +}); +var toggle="[data-toggle='dropdown']",Dropdown=function(b){var a=$(b).on("click.dropdown.data-api",this.toggle); +$("html").on("click.dropdown.data-api",function(){a.parent().removeClass("open"); +}); +}; +function getParent(c){var a=c.attr("data-target"),b; +if(!a){a=c.attr("href"); +a=a&&/#/.test(a)&&a.replace(/.*(?=#[^\s]*$)/,""); +}b=$(a); +if(!b.length){(b=c.parent()); +}return b; +}function clearMenus(){$(toggle).each(function(){getParent($(this)).removeClass("open"); +}); +}Dropdown.prototype={constructor:Dropdown,toggle:function(){var c=$(this),b,a; +if(c.is(".disabled, :disabled")){return; +}b=getParent(c); +a=b.hasClass("open"); +clearMenus(); +if(!a){b.toggleClass("open"); +}c.focus(); +b.trigger("toggle.dropdown.data-api",[!a]); +return false; +},keydown:function(f){var d,g,c,b,a; +if(!/(38|40|27)/.test(f.keyCode)){return; +}d=$(this); +f.preventDefault(); +f.stopPropagation(); +if(d.is(".disabled, :disabled")){return; +}c=getParent(d); +b=c.hasClass("open"); +if(!b||(b&&f.keyCode===27)){return d.click(); +}g=$("[role=menu] li:not(.divider):visible a",c); +if(!g.length){return; +}a=g.index(g.filter(":focus")); +if(f.keyCode===38&&a>0){a--; +}if(f.keyCode===40&&a").appendTo(document.body); +this.$backdrop.click(this.options.backdrop==="static"?$.proxy(this.$element[0].focus,this.$element[0]):$.proxy(this.hide,this)); +if(a){void this.$backdrop[0].offsetWidth; +}this.$backdrop.addClass("in"); +if(a){this.$backdrop.one($.support.transition.end,d); +}else{d(); +}}else{if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in"); +if($.support.transition&&this.$element.hasClass("fade")){this.$backdrop.one($.support.transition.end,$.proxy(this.removeBackdrop,this)); +}else{this.removeBackdrop(); +}}else{if(d){d(); +}}}}}; +$.fn.modal=function(a){return this.each(function(){var d=$(this),c=d.data("modal"),b=$.extend({},$.fn.modal.defaults,d.data(),typeof a==="object"&&a); +if(!c){d.data("modal",(c=new Modal(this,b))); +}if(typeof a==="string"){c[a](); +}else{if(b.show){c.show(); +}}}); +}; +$.fn.modal.defaults={backdrop:true,keyboard:true,show:true}; +$.fn.modal.Constructor=Modal; +$(document).on("click.modal.data-api","[data-toggle='modal']",function(f){var d=$(this),b=d.attr("href"),a=$(d.attr("data-target")||(b&&b.replace(/.*(?=#[^\s]+$)/,""))),c=a.data("modal")?"toggle":$.extend({remote:!/#/.test(b)&&b},a.data(),d.data()); +f.preventDefault(); +a.modal(c).one("hide",function(){d.focus(); +}); +}); +var Tooltip=function(b,a){this.init("tooltip",b,a); +}; +Tooltip.prototype={constructor:Tooltip,init:function(d,c,b){var e,a; +this.type=d; +this.$element=$(c); +this.options=this.getOptions(b); +this.enabled=true; +if(this.options.trigger==="click"){this.$element.on("click."+this.type,this.options.selector,$.proxy(this.toggle,this)); +}else{if(this.options.trigger!=="manual"){e=this.options.trigger==="hover"?"mouseenter":"focus"; +a=this.options.trigger==="hover"?"mouseleave":"blur"; +this.$element.on(e+"."+this.type,this.options.selector,$.proxy(this.enter,this)); +this.$element.on(a+"."+this.type,this.options.selector,$.proxy(this.leave,this)); +}}if(this.options.selector){this._options=$.extend({},this.options,{trigger:"manual",selector:""}); +}else{this.fixTitle(); +}},getOptions:function(a){a=$.extend({},$.fn[this.type].defaults,a,this.$element.data()); +if(a.delay&&typeof a.delay==="number"){a.delay={show:a.delay,hide:a.delay}; +}return a; +},enter:function(b){var a=$(b.currentTarget)[this.type](this._options).data(this.type); +if(!a.options.delay||!a.options.delay.show){return a.show(); +}clearTimeout(this.timeout); +a.hoverState="in"; +this.timeout=setTimeout(function(){if(a.hoverState==="in"){a.show(); +}},a.options.delay.show); +return true; +},leave:function(b){var a=$(b.currentTarget)[this.type](this._options).data(this.type); +if(this.timeout){clearTimeout(this.timeout); +}if(!a.options.delay||!a.options.delay.hide){return a.hide(); +}a.hoverState="out"; +this.timeout=setTimeout(function(){if(a.hoverState==="out"){a.hide(); +}},a.options.delay.hide); +return true; +},show:function(){var e,c,h,b,g,d,f,i,a; +if(this.hasContent()&&this.enabled){e=this.tip(); +this.setContent(); +if(this.options.animation){e.addClass("fade"); +}if(typeof this.options.placement==="function"){d=this.options.placement.call(this,e[0],this.$element[0]); +}else{d=this.options.placement; +}if(typeof this.options.position==="function"){f=this.options.position(); +}else{if(typeof this.options.position==="string"&&$.inArray(this.options.position,["static","relative","absolute","fixed","inherit"])>=0){f=this.options.position; +}else{f="static"; +}}c=/in/.test(d); +e.detach().css({top:0,left:0,display:"block"}).insertAfter(this.$element); +a=this.options.container===""?"":$(this.options.container); +if(a.length){e.appendTo(a); +}else{e.insertAfter(this.$element); +}h=this.getPosition(c); +if(f==="fixed"){e.addClass("tooltip-fixed"); +}b=e[0].offsetWidth; +g=e[0].offsetHeight; +switch(c?d.split(" ")[1]:d){case"bottom":i={top:h.top+h.height,left:h.left+h.width/2-b/2}; +break; +case"top":i={top:h.top-g,left:h.left+h.width/2-b/2}; +break; +case"left":i={top:h.top+h.height/2-g/2,left:h.left-b}; +break; +case"right":i={top:h.top+h.height/2-g/2,left:h.left+h.width}; +break; +}e.offset(i).addClass(d).addClass("in"); +}},setContent:function(){var b=this.tip(),a=this.getTitle(); +b.find(".tooltip-inner")[this.options.html?"html":"text"](a); +b.removeClass("fade in top bottom left right"); +},hide:function(){var a=this.tip(); +a.removeClass("in"); +function b(){var c=setTimeout(function(){a.off($.support.transition.end).detach(); +},500); +a.one($.support.transition.end,function(){clearTimeout(c); +a.detach(); +}); +}if($.support.transition&&this.$tip.hasClass("fade")){b(); +}else{a.detach(); +}return this; +},fixTitle:function(){var a=this.$element; +if(a.attr("title")||typeof(a.attr("data-original-title"))!=="string"){a.attr("data-original-title",a.attr("title")||"").attr("title",""); +}},hasContent:function(){return this.getTitle(); +},getPosition:function(a){return $.extend({},(a?{top:0,left:0}:this.$element.offset()),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight}); +},getTitle:function(){var c,a=this.$element,b=this.options; +c=a.attr("data-original-title")||(typeof b.title==="function"?b.title.call(a[0]):b.title); +return c; +},tip:function(){var a; +if(this.$tip){a=this.$tip; +}else{a=$(this.options.template); +this.$tip=a; +}return a; +},validate:function(){if(!this.$element[0].parentNode){this.hide(); +this.$element=null; +this.options=null; +}},enable:function(){this.enabled=true; +},disable:function(){this.enabled=false; +},toggleEnabled:function(){this.enabled=!this.enabled; +},toggle:function(b){var a=(b)?$(b.currentTarget)[this.type](this._options).data(this.type):this; +if(a.tip().hasClass("in")){a.hide(); +}else{a.show(); +}},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type); +}}; +$.fn.tooltip=function(a){return this.each(function(){var d=$(this),c=d.data("tooltip"),b=typeof a==="object"&&a; +if(!c){d.data("tooltip",(c=new Tooltip(this,b))); +}if(typeof a==="string"){c[a](); +}}); +}; +$.fn.tooltip.Constructor=Tooltip; +$.fn.tooltip.defaults={animation:true,placement:"top",position:"static",selector:false,template:"
    ",trigger:"hover",title:"",delay:0,html:false,container:"body"}; +var Popover=function(b,a){this.init("popover",b,a); +}; +Popover.prototype=$.extend({},$.fn.tooltip.Constructor.prototype,{constructor:Popover,setContent:function(){var c=this.tip(),b=this.getTitle(),a=this.getContent(); +c.find(".popover-title")[this.options.html?"html":"text"](b); +c.find(".popover-content")[this.options.html?"html":"text"](a); +c.removeClass("fade top bottom left right in"); +},hasContent:function(){return this.getTitle()||this.getContent(); +},getContent:function(){var b,a=this.$element,c=this.options; +b=a.attr("data-content")||(typeof c.content==="function"?c.content.call(a[0]):c.content); +return b; +},tip:function(){if(!this.$tip){this.$tip=$(this.options.template); +}return this.$tip; +},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type); +}}); +$.fn.popover=function(a){return this.each(function(){var d=$(this),c=d.data("popover"),b=typeof a==="object"&&a; +if(!c){d.data("popover",(c=new Popover(this,b))); +}if(typeof a==="string"){c[a](); +}}); +}; +$.fn.popover.Constructor=Popover; +$.fn.popover.defaults=$.extend({},$.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:"

    "}); +var Radio=function(a){this.$element=$(a); +}; +Radio.prototype.setState=function(b){var a=this.$element; +if(a.attr(b)===b){a.removeAttr(b); +a.parent(".radio-label").removeClass(b); +}else{a.attr(b,b); +a.parent(".radio-label").addClass(b); +}}; +Radio.prototype.toggle=function(){var c=$('input[type=radio][name="'+this.$element.children().attr("name")+'"]'),a=c.parent(".radio-label"),b=c.length-1,d; +if(b>=0){do{d=$(a[b]); +if(c[b].checked){d.addClass("checked"); +}else{d.removeClass("checked"); +}if(c[b].disabled){d.addClass("disabled"); +}else{d.removeClass("disabled"); +}}while(b--); +}}; +Radio.prototype.focus=function(){this.$element.addClass("focus"); +}; +Radio.prototype.blur=function(){this.$element.removeClass("focus"); +}; +$.fn.radio=function(a){return this.each(function(){var c=$(this),b; +c.data("radio",(b=new Radio(this))); +if(a==="toggle"){b.toggle(); +}else{if(a==="focus"){b.focus(); +}else{if(a==="blur"){b.blur(); +}else{if(a){b.setState(a); +}}}}}); +}; +$.fn.radio.Constructor=Radio; +$(function(){$("body").on("change.radio.data-api","input[type=radio]:not(.css-input)",function(a){$(a.currentTarget).parent(".radio-label").radio("toggle"); +}).on("focus.radio.data-api","input[type=radio]:not(.css-input)",function(a){$(a.currentTarget).parent(".radio-label").radio("focus"); +}).on("blur.radio.data-api","input[type=radio]:not(.css-input)",function(a){$(a.currentTarget).parent(".radio-label").radio("blur"); +}); +$("input[type=radio]:not(.css-input)").each(function(){$(this).parent(".radio-label").radio("toggle"); +}); +}); +!function(c){if(typeof ko!=="undefined"&&ko.bindingHandlers&&!ko.bindingHandlers.multiselect){ko.bindingHandlers.multiselect={init:function(h,i,j,g,e){var k=j().selectedOptions; +var f=ko.utils.unwrapObservable(i()); +c(h).multiselect(f); +if(a(k)){c(h).multiselect("select",ko.utils.unwrapObservable(k)); +k.subscribe(function(n){var l=[],m=[]; +d(n,function(o){switch(o.status){case"added":l.push(o.value); +break; +case"deleted":m.push(o.value); +break; +}}); +if(l.length>0){c(h).multiselect("select",l); +}if(m.length>0){c(h).multiselect("deselect",m); +}},null,"arrayChange"); +}},update:function(j,k,l,i,e){var h=l().options,g=c(j).data("multiselect"),f=ko.utils.unwrapObservable(k()); +if(a(h)){h.subscribe(function(m){c(j).multiselect("rebuild"); +}); +}if(!g){c(j).multiselect(f); +}else{g.updateOriginalOptions(); +}}}; +}function a(e){return ko.isObservable(e)&&!(e.destroyAll===undefined); +}function d(g,f){for(var e=0; +e'; +}else{if(f.length==c("option",c(e)).length){return this.allSelectedText+' '; +}else{if(f.length>this.numberDisplayed){return f.length+" "+this.nSelectedText+' '; +}else{var g=""; +f.each(function(){var h=(c(this).attr("label")!==undefined)?c(this).attr("label"):c(this).html(); +g+=h+", "; +}); +return g.substr(0,g.length-2)+' '; +}}}},buttonTitle:function(f,e){if(f.length===0){return this.nonSelectedText; +}else{var g=""; +f.each(function(){g+=c(this).text()+", "; +}); +return g.substr(0,g.length-2); +}},label:function(e){return c(e).attr("label")||c(e).html(); +},onChange:function(e,f){},onDropdownShow:function(e){},onDropdownHide:function(e){},onDropdownShown:function(e){},onDropdownHidden:function(e){},buttonClass:"select-box",buttonWidth:"auto",buttonContainer:'
    ',dropRight:false,selectedClass:"active",maxHeight:false,checkboxName:false,includeSelectAllOption:false,includeSelectAllIfMoreThan:0,selectAllText:" Select all",selectAllValue:"multiselect-all",selectAllName:false,enableFiltering:false,enableCaseInsensitiveFiltering:false,enableClickableOptGroups:false,filterPlaceholder:"Search",filterBehavior:"text",includeFilterClearBtn:true,preventInputChangeEvent:false,nonSelectedText:"None selected",nSelectedText:"selected",allSelectedText:"All selected",numberDisplayed:3,disableIfEmpty:false,templates:{button:'',ul:'',filter:'
  • ',filterClearBtn:'',li:'
  • ',divider:'
  • ',liGroup:'
  • '}},constructor:b,buildContainer:function(){this.$container=c(this.options.buttonContainer); +this.$container.on("show.bs.dropdown",this.options.onDropdownShow); +this.$container.on("hide.bs.dropdown",this.options.onDropdownHide); +this.$container.on("shown.bs.dropdown",this.options.onDropdownShown); +this.$container.on("hidden.bs.dropdown",this.options.onDropdownHidden); +},buildButton:function(){this.$button=c(this.options.templates.button).addClass(this.options.buttonClass); +if(this.$select.prop("disabled")){this.disable(); +}else{this.enable(); +}if(this.options.buttonWidth&&this.options.buttonWidth!=="auto"){this.$button.css({width:this.options.buttonWidth}); +this.$container.css({width:this.options.buttonWidth}); +}var e=this.$select.attr("tabindex"); +if(e){this.$button.attr("tabindex",e); +}this.$container.prepend(this.$button); +},buildDropdown:function(){this.$ul=c(this.options.templates.ul); +if(this.options.dropRight){this.$ul.addClass("pull-right"); +}if(this.options.maxHeight){this.$ul.css({"max-height":this.options.maxHeight+"px","overflow-y":"auto","overflow-x":"hidden"}); +}this.$container.append(this.$ul); +},selectMultiOptions:function(e){var i=e.prop("checked")||false; +if(i){var h=e.parents("li:last").siblings('li[class="active"]:first'); +var g=e.parents("li").index(); +var f=h.index(); +if(g>f){e.parents("li:last").prevUntil(h).each(function(){c(this).find("input:first").prop("checked",true).trigger("change"); +}); +}else{e.parents("li:last").nextUntil(h).each(function(){c(this).find("input:first").prop("checked",true).trigger("change"); +}); +}}},buildDropdownOptions:function(){this.$select.children().each(c.proxy(function(g,h){var f=c(h); +var e=f.prop("tagName").toLowerCase(); +if(f.prop("value")===this.options.selectAllValue){return; +}if(e==="optgroup"){this.createOptgroup(h); +}else{if(e==="option"){if(f.data("role")==="divider"){this.createDivider(); +}else{this.createOptionValue(h); +}}}},this)); +c("li input",this.$ul).on("change",c.proxy(function(i){var e=c(i.target); +var h=e.prop("checked")||false; +var f=e.val()===this.options.selectAllValue; +if(this.options.selectedClass){if(h){e.closest("li").addClass(this.options.selectedClass); +}else{e.closest("li").removeClass(this.options.selectedClass); +}}var j=e.val(); +var k=this.getOptionByValue(j); +var l=c("option",this.$select).not(k); +var g=c("input",this.$container).not(e); +if(f){if(h){this.selectAll(); +}else{this.deselectAll(); +}}if(!f){if(h){k.prop("selected",true); +if(this.options.multiple){k.prop("selected",true); +}else{if(this.options.selectedClass){c(g).closest("li").removeClass(this.options.selectedClass); +}c(g).prop("checked",false); +l.prop("selected",false); +this.$button.click(); +}if(this.options.selectedClass==="active"){l.closest("a").css("outline",""); +}}else{k.prop("selected",false); +}}this.$select.change(); +this.updateButtonText(); +this.updateSelectAll(); +this.options.onChange(k,h); +if(this.options.preventInputChangeEvent){return false; +}},this)); +c("li a",this.$ul).on("touchstart click",c.proxy(function(g){g.stopPropagation(); +g.preventDefault(); +var e=c(g.target); +var f=e.prop("checked",!e.prop("checked")).find("input:first"); +f.prop("checked",!f.prop("checked")); +f.change(); +if(g.shiftKey){var f=e.prop("checked",true).find("input:first"); +f.prop("checked",true); +f.change(); +this.selectMultiOptions(e); +}e.blur(); +},this)); +this.$container.off("keydown.multiselect").on("keydown.multiselect",c.proxy(function(h){if(c('input[type="text"]',this.$container).is(":focus")){return; +}if(h.keyCode===9&&this.$container.hasClass("open")){this.$button.click(); +}else{var i=c(this.$container).find("li:not(.divider):not(.disabled) a").filter(":visible"); +if(!i.length){return; +}var e=i.index(i.filter(":focus")); +if(h.keyCode===38&&e>0){e--; +}else{if(h.keyCode===40&&e").attr("type",f); +if(this.options.checkboxName){e.attr("name",this.options.checkboxName); +}j.append(e); +var g=m.prop("selected")||false; +e.val(l); +if(l===this.options.selectAllValue){i.addClass("multiselect-item multiselect-all"); +e.parent().parent().addClass("multiselect-all"); +}j.append(" "+k); +j.attr("title",m.attr("title")); +this.$ul.append(i); +if(m.is(":disabled")){e.attr("disabled","disabled").prop("disabled",true).closest("a").attr("tabindex","-1").closest("li").addClass("disabled"); +}e.prop("checked",g); +if(g&&this.options.selectedClass){e.closest("li").addClass(this.options.selectedClass); +}},createDivider:function(f){var e=c(this.options.templates.divider); +this.$ul.append(e); +},createOptgroup:function(e){var g=c(e).prop("label"); +var f=c(this.options.templates.liGroup); +c("label",f).text(g); +if(this.options.enableClickableOptGroups){f.addClass("multiselect-group-clickable"); +}this.$ul.append(f); +if(c(e).is(":disabled")){f.addClass("disabled"); +}c("option",e).each(c.proxy(function(h,i){this.createOptionValue(i); +},this)); +},buildSelectAll:function(){var e=this.hasSelectAll(); +if(!e&&this.options.includeSelectAllOption&&this.options.multiple&&c("option",this.$select).length>this.options.includeSelectAllIfMoreThan){if(this.options.includeSelectAllDivider){this.$ul.prepend(c(this.options.templates.divider)); +}var g=c(this.options.templates.li); +c("label",g).addClass("checkbox-label"); +if(this.options.selectAllName){c("label",g).append(''); +}else{c("label",g).append(''); +}var f=c("input",g); +f.val(this.options.selectAllValue); +g.addClass("multiselect-item multiselect-all"); +f.parent().parent().addClass("multiselect-all"); +c("label",g).append(" "+this.options.selectAllText); +this.$ul.prepend(g); +f.prop("checked",false); +}},buildFilter:function(){if(this.options.enableFiltering||this.options.enableCaseInsensitiveFiltering){var f=Math.max(this.options.enableFiltering,this.options.enableCaseInsensitiveFiltering); +if(this.$select.find("option").length>=f){this.$filter=c(this.options.templates.filter); +c("input",this.$filter).attr("placeholder",this.options.filterPlaceholder); +if(this.options.includeFilterClearBtn){var e=c(this.options.templates.filterClearBtn); +e.on("click",c.proxy(function(g){clearTimeout(this.searchTimeout); +this.$filter.find(".multiselect-search").val(""); +this.$filter.find(".input-group").removeClass("filtered"); +c("li",this.$ul).show().removeClass("filter-hidden"); +this.updateSelectAll(); +},this)); +this.$filter.find(".input-group").append(e); +}this.$ul.prepend(this.$filter); +this.$filter.val(this.query).on("click",function(g){g.stopPropagation(); +}).on("input keydown",c.proxy(function(i){if(i.which===13){i.preventDefault(); +}if(i.keyCode===38||i.keyCode===40){var j=c(this.$container).find("li:not(.divider):not(.disabled) a").filter(":visible"); +if(!j.length){return; +}var g=j.index(j.filter(":focus")); +if(i.keyCode===38&&g>0){g--; +}else{if(i.keyCode===40&&g-1){p=true; +}else{if(m.indexOf(this.query)>-1){p=true; +}}c(o).toggle(p).toggleClass("filter-hidden",!p); +if(c(this).hasClass("multiselect-group")){k=o; +l=p; +}else{if(p){c(k).show().removeClass("filter-hidden"); +}if(!p&&l){c(o).show().removeClass("filter-hidden"); +}}}},this)); +}this.updateSelectAll(); +},this),300,this); +},this)); +}}},destroy:function(){this.$container.remove(); +this.$select.show(); +this.$select.data("multiselect",null); +},refresh:function(){c("option",this.$select).each(c.proxy(function(e,f){var g=c("li input",this.$ul).filter(function(){return c(this).val()===c(f).val(); +}); +if(c(f).is(":selected")){g.prop("checked",true); +if(this.options.selectedClass){g.closest("li").addClass(this.options.selectedClass); +}}else{g.prop("checked",false); +if(this.options.selectedClass){g.closest("li").removeClass(this.options.selectedClass); +}}if(c(f).is(":disabled")){g.attr("disabled","disabled").prop("disabled",true).closest("li").addClass("disabled"); +}else{g.prop("disabled",false).closest("li").removeClass("disabled"); +}},this)); +this.updateButtonText(); +this.updateSelectAll(); +},select:function(j,k){if(!c.isArray(j)){j=[j]; +}for(var e=0; +e").attr({label:k.label||"Group "+e}); +d(k.children,function(l){i.append(c("
    + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/v2.18.0/topic-partition.js.html b/v2.18.0/topic-partition.js.html new file mode 100644 index 00000000..802e3465 --- /dev/null +++ b/v2.18.0/topic-partition.js.html @@ -0,0 +1,185 @@ + + + + + JSDoc: Source: topic-partition.js + + + + + + + + + + + + + + + +
    +
    + +
    +

    Source: topic-partition.js

    + + + + + + +
    +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var Topic = require('./topic');
    +
    +module.exports = TopicPartition;
    +
    +/**
    + * Map an array of topic partition js objects to real topic partition objects.
    + *
    + * @param array The array of topic partition raw objects to map to topic
    + *              partition objects
    + */
    +TopicPartition.map = function(array) {
    +  return array.map(function(element) {
    +    return TopicPartition.create(element);
    +  });
    +};
    +
    +/**
    + * Take a topic partition javascript object and convert it to the class.
    + * The class will automatically convert offset identifiers to special constants
    + *
    + * @param element The topic partition raw javascript object
    + */
    +TopicPartition.create = function(element) {
    +  // Just ensure we take something that can have properties. The topic partition
    +  // class will
    +  element = element || {};
    +  return new TopicPartition(element.topic, element.partition, element.offset);
    +};
    +
    +/**
    + * Create a topic partition. Just does some validation and decoration
    + * on topic partitions provided.
    + *
    + * Goal is still to behave like a plain javascript object but with validation
    + * and potentially some extra methods
    + */
    +function TopicPartition(topic, partition, offset) {
    +  if (!(this instanceof TopicPartition)) {
    +    return new TopicPartition(topic, partition, offset);
    +  }
    +
    +  // Validate that the elements we are iterating over are actual topic partition
    +  // js objects. They do not need an offset, but they do need partition
    +  if (!topic) {
    +    throw new TypeError('"topic" must be a string and must be set');
    +  }
    +
    +  if (partition === null || partition === undefined) {
    +    throw new TypeError('"partition" must be a number and must set');
    +  }
    +
    +  // We can just set topic and partition as they stand.
    +  this.topic = topic;
    +  this.partition = partition;
    +
    +  if (offset === undefined || offset === null) {
    +    this.offset = Topic.OFFSET_STORED;
    +  } else if (typeof offset === 'string') {
    +    switch (offset.toLowerCase()) {
    +      case 'earliest':
    +      case 'beginning':
    +        this.offset = Topic.OFFSET_BEGINNING;
    +        break;
    +      case 'latest':
    +      case 'end':
    +        this.offset = Topic.OFFSET_END;
    +        break;
    +      case 'stored':
    +        this.offset = Topic.OFFSET_STORED;
    +        break;
    +      default:
    +        throw new TypeError('"offset", if provided as a string, must be beginning, end, or stored.');
    +    }
    +  } else if (typeof offset === 'number') {
    +    this.offset = offset;
    +  } else {
    +    throw new TypeError('"offset" must be a special string or number if it is set');
    +  }
    +}
    +
    +
    +
    + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/v2.18.0/topic.js.html b/v2.18.0/topic.js.html new file mode 100644 index 00000000..86ecd70c --- /dev/null +++ b/v2.18.0/topic.js.html @@ -0,0 +1,139 @@ + + + + + JSDoc: Source: topic.js + + + + + + + + + + + + + + + +
    +
    + +
    +

    Source: topic.js

    + + + + + + +
    +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var librdkafka = require('../librdkafka');
    +
    +module.exports = Topic;
    +
    +var topicKey = 'RdKafka::Topic::';
    +var topicKeyLength = topicKey.length;
    +
    +// Take all of the topic special codes from librdkafka and add them
    +// to the object
    +// You can find this list in the C++ code at
    +// https://github.com/edenhill/librdkafka/blob/master/src-cpp/rdkafkacpp.h#L1250
    +for (var key in librdkafka.topic) {
    +  // Skip it if it doesn't start with ErrorCode
    +  if (key.indexOf('RdKafka::Topic::') !== 0) {
    +    continue;
    +  }
    +
    +  // Replace/add it if there are any discrepancies
    +  var newKey = key.substring(topicKeyLength);
    +  Topic[newKey] = librdkafka.topic[key];
    +}
    +
    +/**
    + * Create a topic. Just returns the string you gave it right now.
    + *
    + * Looks like a class, but all it does is return the topic name.
    + * This is so that one day if there are interface changes that allow
    + * different use of topic parameters, we can just add to this constructor and
    + * have it return something richer
    + */
    +function Topic(topicName) {
    +  return topicName;
    +}
    +
    +
    +
    + + + + + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + diff --git a/v2.18.0/tutorial-consumer-flow.html b/v2.18.0/tutorial-consumer-flow.html new file mode 100644 index 00000000..4ac9b639 --- /dev/null +++ b/v2.18.0/tutorial-consumer-flow.html @@ -0,0 +1,169 @@ + + + + + JSDoc: Tutorial: consumer-flow + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: consumer-flow

    + +
    + +
    + + +

    consumer-flow

    +
    + +
    +

    Connecting to a Kafka Consumer is easy. Let's try to connect to one using +the Flowing implementation

    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var Kafka = require('../');
    +
    +var consumer = new Kafka.KafkaConsumer({
    +  //'debug': 'all',
    +  'metadata.broker.list': 'localhost:9092',
    +  'group.id': 'node-rdkafka-consumer-flow-example',
    +  'enable.auto.commit': false
    +});
    +
    +var topicName = 'test';
    +
    +//logging debug messages, if debug is enabled
    +consumer.on('event.log', function(log) {
    +  console.log(log);
    +});
    +
    +//logging all errors
    +consumer.on('event.error', function(err) {
    +  console.error('Error from consumer');
    +  console.error(err);
    +});
    +
    +//counter to commit offsets every numMessages are received
    +var counter = 0;
    +var numMessages = 5;
    +
    +consumer.on('ready', function(arg) {
    +  console.log('consumer ready.' + JSON.stringify(arg));
    +
    +  consumer.subscribe([topicName]);
    +  //start consuming messages
    +  consumer.consume();
    +});
    +
    +
    +consumer.on('data', function(m) {
    +  counter++;
    +
    +  //committing offsets every numMessages
    +  if (counter % numMessages === 0) {
    +    console.log('calling commit');
    +    consumer.commit(m);
    +  }
    +
    +  // Output the actual message contents
    +  console.log(JSON.stringify(m));
    +  console.log(m.value.toString());
    +
    +});
    +
    +consumer.on('disconnected', function(arg) {
    +  console.log('consumer disconnected. ' + JSON.stringify(arg));
    +});
    +
    +//starting the consumer
    +consumer.connect();
    +
    +//stopping this example after 30s
    +setTimeout(function() {
    +  consumer.disconnect();
    +}, 30000);
    +
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/tutorial-consumer.html b/v2.18.0/tutorial-consumer.html new file mode 100644 index 00000000..25b54832 --- /dev/null +++ b/v2.18.0/tutorial-consumer.html @@ -0,0 +1,138 @@ + + + + + JSDoc: Tutorial: consumer + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: consumer

    + +
    + +
    + + +

    consumer

    +
    + +
    +

    Connecting to a Kafka Consumer is easy. Let's try to connect to one using +the Stream implementation

    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var Transform = require('stream').Transform;
    +
    +var Kafka = require('../');
    +
    +var stream = Kafka.KafkaConsumer.createReadStream({
    +  'metadata.broker.list': 'localhost:9092',
    +  'group.id': 'librd-test',
    +  'socket.keepalive.enable': true,
    +  'enable.auto.commit': false
    +}, {}, {
    +  topics: 'test',
    +  waitInterval: 0,
    +  objectMode: false
    +});
    +
    +stream.on('error', function(err) {
    +  if (err) console.log(err);
    +  process.exit(1);
    +});
    +
    +stream
    +  .pipe(process.stdout);
    +
    +stream.on('error', function(err) {
    +  console.log(err);
    +  process.exit(1);
    +});
    +
    +stream.consumer.on('event.error', function(err) {
    +  console.log(err);
    +})
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/tutorial-docker-alpine.html b/v2.18.0/tutorial-docker-alpine.html new file mode 100644 index 00000000..1bd8d263 --- /dev/null +++ b/v2.18.0/tutorial-docker-alpine.html @@ -0,0 +1,122 @@ + + + + + JSDoc: Tutorial: docker-alpine + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: docker-alpine

    + +
    + +
    + + +

    docker-alpine

    +
    + +
    +

    When using docker to install node-rdkafka, you need to make sure you install appropriate library dependencies. Alpine linux is a lighter weight version of linux and does not come with the same base libraries as other distributions (like glibc).

    +

    You can see some of the differences here: https://linuxacademy.com/blog/cloud/alpine-linux-and-docker/

    +
    FROM node:14-alpine
    +
    +RUN apk --no-cache add \
    +      bash \
    +      g++ \
    +      ca-certificates \
    +      lz4-dev \
    +      musl-dev \
    +      cyrus-sasl-dev \
    +      openssl-dev \
    +      make \
    +      python3
    +
    +RUN apk add --no-cache --virtual .build-deps gcc zlib-dev libc-dev bsd-compat-headers py-setuptools bash
    +
    +# Create app directory
    +RUN mkdir -p /usr/local/app
    +
    +# Move to the app directory
    +WORKDIR /usr/local/app
    +
    +# Install node-rdkafka
    +RUN npm install node-rdkafka
    +# Copy package.json first to check if an npm install is needed
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/tutorial-high-level-producer.html b/v2.18.0/tutorial-high-level-producer.html new file mode 100644 index 00000000..30db0cf4 --- /dev/null +++ b/v2.18.0/tutorial-high-level-producer.html @@ -0,0 +1,126 @@ + + + + + JSDoc: Tutorial: high-level-producer + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: high-level-producer

    + +
    + +
    + + +

    high-level-producer

    +
    + +
    +
    var Kafka = require('../');
    +
    +var producer = new Kafka.HighLevelProducer({
    +  'metadata.broker.list': 'localhost:9092',
    +});
    +
    +// Throw away the keys
    +producer.setKeySerializer(function(v) {
    +  return new Promise((resolve, reject) => {
    +    setTimeout(() => {
    +      resolve(null);
    +    }, 20);
    +  });
    +});
    +
    +// Take the message field
    +producer.setValueSerializer(function(v) {
    +  return Buffer.from(v.message);
    +});
    +
    +producer.connect(null, function() {
    +  producer.produce('test', null, {
    +    message: 'alliance4ever',
    +  }, null, Date.now(), function(err, offset) {
    +    // The offset if our acknowledgement level allows us to receive delivery offsets
    +    setImmediate(function() {
    +      producer.disconnect();
    +    });
    +  });
    +});
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/tutorial-metadata.html b/v2.18.0/tutorial-metadata.html new file mode 100644 index 00000000..fbfe370e --- /dev/null +++ b/v2.18.0/tutorial-metadata.html @@ -0,0 +1,121 @@ + + + + + JSDoc: Tutorial: metadata + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: metadata

    + +
    + +
    + + +

    metadata

    +
    + +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var Kafka = require('../');
    +
    +var producer = new Kafka.Producer({
    +  'metadata.broker.list': 'localhost:9092',
    +  'client.id': 'hey',
    +  'compression.codec': 'snappy'
    +});
    +
    +producer.connect()
    +  .on('ready', function(i, metadata) {
    +    console.log(i);
    +    console.log(metadata);
    +  })
    +  .on('event.error', function(err) {
    +    console.log(err);
    +  });
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/tutorial-producer-cluster.html b/v2.18.0/tutorial-producer-cluster.html new file mode 100644 index 00000000..e027a763 --- /dev/null +++ b/v2.18.0/tutorial-producer-cluster.html @@ -0,0 +1,197 @@ + + + + + JSDoc: Tutorial: producer-cluster + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: producer-cluster

    + +
    + +
    + + +

    producer-cluster

    +
    + +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var cluster = require('cluster');
    +var numCPUs = 6;
    +var Kafka = require('../');
    +
    +if (cluster.isMaster) {
    +  // Fork workers.
    +  for (var i = 0; i < numCPUs; i++) {
    +    cluster.fork();
    +  }
    +
    +  var exited_workers = 0;
    +
    +  cluster.on('exit', function(worker, code, signal) {
    +    exited_workers++;
    +    if (exited_workers === numCPUs - 1) {
    +      process.exit();
    +    }
    +  });
    +} else {
    +  // Configure client
    +  var producer = new Kafka.Producer({
    +    'client.id': 'kafka',
    +    'metadata.broker.list': 'localhost:9092',
    +    'compression.codec': 'none',
    +    'retry.backoff.ms': 200,
    +    'message.send.max.retries': 10,
    +    'socket.keepalive.enable': true,
    +    'queue.buffering.max.messages': 100000,
    +    'queue.buffering.max.ms': 1000,
    +    'batch.num.messages': 1000000,
    +    'dr_cb': true
    +  });
    +
    +  producer.setPollInterval(100);
    +
    +  var total = 0;
    +  var totalSent = 0;
    +  var max = 20000;
    +  var errors = 0;
    +  var started = Date.now();
    +
    +  var sendMessage = function() {
    +    var ret = producer.sendMessage({
    +      topic: 'librdtesting-01',
    +      message: Buffer.from('message ' + total)
    +    }, function() {
    +    });
    +    total++;
    +    if (total >= max) {
    +    } else {
    +      setImmediate(sendMessage);
    +    }
    +  };
    +
    +  var verified_received = 0;
    +  var exitNextTick = false;
    +  var errorsArr = [];
    +
    +  var t = setInterval(function() {
    +    producer.poll();
    +
    +    if (exitNextTick) {
    +      clearInterval(t);
    +      return setTimeout(function() {
    +        console.log('[%d] Received: %d, Errors: %d, Total: %d', process.pid, verified_received, errors, total);
    +        // console.log('[%d] Finished sending %d in %d seconds', process.pid, total, parseInt((Date.now() - started) / 1000));
    +        if (errors > 0) {
    +          console.error(errorsArr[0]);
    +          return process.exitCode = 1;
    +        }
    +        process.exitCode = 0;
    +        setTimeout(process.exit, 1000);
    +      }, 2000);
    +    }
    +
    +    if (verified_received + errors === max) {
    +      exitNextTick = true;
    +    }
    +
    +  }, 1000);
    +  producer.connect()
    +    .on('event.error', function(e) {
    +      errors++;
    +      errorsArr.push(e);
    +    })
    +    .on('delivery-report', function() {
    +      verified_received++;
    +    })
    +    .on('ready', sendMessage);
    +
    +
    +}
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/v2.18.0/tutorial-producer_.html b/v2.18.0/tutorial-producer_.html new file mode 100644 index 00000000..37ae5730 --- /dev/null +++ b/v2.18.0/tutorial-producer_.html @@ -0,0 +1,167 @@ + + + + + JSDoc: Tutorial: producer + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tutorial: producer

    + +
    + +
    + + +

    producer

    +
    + +
    +
    /*
    + * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
    + *
    + * Copyright (c) 2016 Blizzard Entertainment
    + *
    + * This software may be modified and distributed under the terms
    + * of the MIT license.  See the LICENSE.txt file for details.
    + */
    +
    +var Kafka = require('../');
    +
    +var producer = new Kafka.Producer({
    +  //'debug' : 'all',
    +  'metadata.broker.list': 'localhost:9092',
    +  'dr_cb': true  //delivery report callback
    +});
    +
    +var topicName = 'test';
    +
    +//logging debug messages, if debug is enabled
    +producer.on('event.log', function(log) {
    +  console.log(log);
    +});
    +
    +//logging all errors
    +producer.on('event.error', function(err) {
    +  console.error('Error from producer');
    +  console.error(err);
    +});
    +
    +//counter to stop this sample after maxMessages are sent
    +var counter = 0;
    +var maxMessages = 10;
    +
    +producer.on('delivery-report', function(err, report) {
    +  console.log('delivery-report: ' + JSON.stringify(report));
    +  counter++;
    +});
    +
    +//Wait for the ready event before producing
    +producer.on('ready', function(arg) {
    +  console.log('producer ready.' + JSON.stringify(arg));
    +
    +  for (var i = 0; i < maxMessages; i++) {
    +    var value = Buffer.from('value-' +i);
    +    var key = "key-"+i;
    +    // if partition is set to -1, librdkafka will use the default partitioner
    +    var partition = -1;
    +    var headers = [
    +      { header: "header value" }
    +    ]
    +    producer.produce(topicName, partition, value, key, Date.now(), "", headers);
    +  }
    +
    +  //need to keep polling for a while to ensure the delivery reports are received
    +  var pollLoop = setInterval(function() {
    +      producer.poll();
    +      if (counter === maxMessages) {
    +        clearInterval(pollLoop);
    +        producer.disconnect();
    +      }
    +    }, 1000);
    +
    +});
    +
    +producer.on('disconnected', function(arg) {
    +  console.log('producer disconnected. ' + JSON.stringify(arg));
    +});
    +
    +//starting the producer
    +producer.connect();
    +
    +
    + +
    + +
    + +
    + +
    + + +
    + + +
    +
    + +
    +
    + + + + + + + \ No newline at end of file