Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

first commit

  • Loading branch information...
commit 589c7aeec5f87eb96e0302fc4641f9734bc20700 0 parents
authored August 19, 2011

Showing 64 changed files with 57,658 additions and 0 deletions. Show diff stats Hide diff stats

  1. 1,093  jsbeautifier.py
  2. BIN  twitter.com/capture.png
  3. BIN  twitter.com/firebug.png
  4. 1  twitter.com/formatted/css/inline_01.css
  5. 101  twitter.com/formatted/css/inline_02.css
  6. 3  twitter.com/formatted/css/inline_03.css
  7. 3  twitter.com/formatted/css/inline_04.css
  8. 121  twitter.com/formatted/index.html
  9. BIN  twitter.com/formatted/index_files/1145.jpg
  10. BIN  twitter.com/formatted/index_files/agata_pict_mini.jpg
  11. BIN  twitter.com/formatted/index_files/agata_pict_normal.jpg
  12. BIN  twitter.com/formatted/index_files/ayu_19980408_normal.jpg
  13. BIN  twitter.com/formatted/index_files/backlog-logo_mini.gif
  14. BIN  twitter.com/formatted/index_files/backlog-logo_normal.gif
  15. BIN  twitter.com/formatted/index_files/bother_normal.png
  16. BIN  twitter.com/formatted/index_files/d2e1fa1785de86ba1e35e48756af47a8_normal.jpg
  17. BIN  twitter.com/formatted/index_files/default_profile_3_normal.png
  18. 50  twitter.com/formatted/index_files/ga.js
  19. BIN  twitter.com/formatted/index_files/profile-1_mini.gif
  20. BIN  twitter.com/formatted/index_files/profile-1_normal.gif
  21. 2  twitter.com/formatted/index_files/receiver.html
  22. BIN  twitter.com/formatted/index_files/spinner.gif
  23. BIN  twitter.com/formatted/index_files/toqlla_prof_mini.png
  24. 16  twitter.com/formatted/js/inline_01.js
  25. 214  twitter.com/formatted/js/inline_02.js
  26. 21  twitter.com/formatted/js/inline_03.js
  27. 18  twitter.com/formatted/js/inline_04.js
  28. 690  twitter.com/formatted/js/inline_05.js
  29. 1  twitter.com/formatted/js/inline_06.js
  30. 2,229  twitter.com/formatted/js/inline_07.js
  31. 1  twitter.com/formatted/js/inline_08.js
  32. 23,433  twitter.com/formatted/js/phoenix-core-ja-201108171009.js
  33. 26,329  twitter.com/formatted/js/phoenix-more-ja-201108171009.js
  34. 81  twitter.com/formatted/json/1.json
  35. 1,222  twitter.com/formatted/json/available.json
  36. 12  twitter.com/formatted/json/random_json_promo.json
  37. 189  twitter.com/formatted/json/recommendations.json
  38. 16  twitter.com/formatted/json/resolve.json
  39. 42  twitter.com/formatted/json/services.json
  40. BIN  twitter.com/original/.DS_Store
  41. 1,415  twitter.com/original/index.html
  42. BIN  twitter.com/original/index_files/1145.jpg
  43. BIN  twitter.com/original/index_files/agata_pict_mini.jpg
  44. BIN  twitter.com/original/index_files/agata_pict_normal.jpg
  45. BIN  twitter.com/original/index_files/ayu_19980408_normal.jpg
  46. BIN  twitter.com/original/index_files/backlog-logo_mini.gif
  47. BIN  twitter.com/original/index_files/backlog-logo_normal.gif
  48. BIN  twitter.com/original/index_files/bother_normal.png
  49. BIN  twitter.com/original/index_files/d2e1fa1785de86ba1e35e48756af47a8_normal.jpg
  50. BIN  twitter.com/original/index_files/default_profile_3_normal.png
  51. 50  twitter.com/original/index_files/ga.js
  52. 229  twitter.com/original/index_files/phoenix-core-ja-201108171009.js
  53. 62  twitter.com/original/index_files/phoenix-more-ja-201108171009.js
  54. BIN  twitter.com/original/index_files/profile-1_mini.gif
  55. BIN  twitter.com/original/index_files/profile-1_normal.gif
  56. 2  twitter.com/original/index_files/receiver.html
  57. BIN  twitter.com/original/index_files/spinner.gif
  58. BIN  twitter.com/original/index_files/toqlla_prof_mini.png
  59. 2  twitter.com/original/json/1.json
  60. 2  twitter.com/original/json/available.json
  61. 2  twitter.com/original/json/random_json_promo.json
  62. 2  twitter.com/original/json/recommendations.json
  63. 2  twitter.com/original/json/resolve.json
  64. 2  twitter.com/original/json/services.json
1,093  jsbeautifier.py
... ...
@@ -0,0 +1,1093 @@
  1
+#!/usr/bin/env python
  2
+
  3
+import sys
  4
+import getopt
  5
+import re
  6
+
  7
+#
  8
+# Originally written by Einar Lielmanis et al.,
  9
+# Conversion to python by Einar Lielmanis, einar@jsbeautifier.org,
  10
+# MIT licence, enjoy.
  11
+#
  12
+# Python is not my native language, feel free to push things around.
  13
+#
  14
+# Use either from command line (script displays its usage when run
  15
+# without any parameters),
  16
+#
  17
+#
  18
+# or, alternatively, use it as a module:
  19
+#
  20
+#   import jsbeautifier
  21
+#   res = jsbeautifier.beautify('your javascript string')
  22
+#   res = jsbeautifier.beautify_file('some_file.js')
  23
+#
  24
+#  you may specify some options:
  25
+#
  26
+#   opts = jsbeautifier.default_options()
  27
+#   opts.indent_size = 2
  28
+#   res = jsbeautifier.beautify('some javascript', opts)
  29
+#
  30
+#
  31
+# Here are the available options: (read source)
  32
+
  33
+
  34
+class BeautifierOptions:
  35
+    def __init__(self):
  36
+        self.indent_size = 4
  37
+        self.indent_char = ' '
  38
+        self.preserve_newlines = True
  39
+        self.max_preserve_newlines = 10.
  40
+        self.jslint_happy = False
  41
+        self.brace_style = 'collapse'
  42
+        self.keep_array_indentation = False
  43
+
  44
+
  45
+
  46
+    def __repr__(self):
  47
+        return \
  48
+"""indent_size = %d
  49
+indent_char = [%s]
  50
+preserve_newlines = %s
  51
+max_preserve_newlines = %d
  52
+jslint_happy = %s
  53
+brace_style = %s
  54
+keep_array_indentation = %s
  55
+""" % ( self.indent_size,
  56
+        self.indent_char,
  57
+        self.preserve_newlines,
  58
+        self.max_preserve_newlines,
  59
+        self.jslint_happy,
  60
+        self.brace_style,
  61
+        self.keep_array_indentation
  62
+        )
  63
+
  64
+
  65
+class BeautifierFlags:
  66
+    def __init__(self, mode):
  67
+        self.previous_mode = 'BLOCK'
  68
+        self.mode = mode
  69
+        self.var_line = False
  70
+        self.var_line_tainted = False
  71
+        self.var_line_reindented = False
  72
+        self.in_html_comment = False
  73
+        self.if_line = False
  74
+        self.in_case = False
  75
+        self.eat_next_space = False
  76
+        self.indentation_baseline = -1
  77
+        self.indentation_level = 0
  78
+        self.ternary_depth = 0
  79
+
  80
+
  81
+def default_options():
  82
+    return BeautifierOptions()
  83
+
  84
+
  85
+def beautify(string, opts = default_options() ):
  86
+    b = Beautifier()
  87
+    return b.beautify(string, opts)
  88
+
  89
+
  90
+def beautify_file(file_name, opts = default_options() ):
  91
+
  92
+    if file_name == '-': # stdin
  93
+        f = sys.stdin
  94
+    else:
  95
+        f = open(file_name)
  96
+
  97
+    b = Beautifier()
  98
+    return b.beautify(''.join(f.readlines()), opts)
  99
+
  100
+
  101
+def usage():
  102
+
  103
+    print("""Javascript beautifier (http://jsbeautifier.org/)
  104
+
  105
+Usage: jsbeautifier.py [options] <infile>
  106
+
  107
+    <infile> can be "-", which means stdin.
  108
+    <outfile> defaults to stdout
  109
+
  110
+Input options:
  111
+
  112
+ -i,  --stdin                      read input from stdin
  113
+
  114
+Output options:
  115
+
  116
+ -s,  --indent-size=NUMBER         indentation size. (default 4).
  117
+ -c,  --indent-char=CHAR           character to indent with. (default space).
  118
+ -d,  --disable-preserve-newlines  do not preserve existing line breaks.
  119
+ -j,  --jslint-happy               more jslint-compatible output
  120
+ -b,  --brace-style=collapse       brace style (collapse, expand, end-expand)
  121
+ -k,  --keep-array-indentation     keep array indentation.
  122
+ -o,  --outfile=FILE               specify a file to output to (default stdout)
  123
+
  124
+Rarely needed options:
  125
+
  126
+ -l,  --indent-level=NUMBER        initial indentation level. (default 0).
  127
+
  128
+ -h,  --help, --usage              prints this help statement.
  129
+
  130
+""");
  131
+
  132
+
  133
+
  134
+
  135
+
  136
+
  137
+class Beautifier:
  138
+
  139
+    def __init__(self, opts = default_options() ):
  140
+
  141
+        self.opts = opts
  142
+        self.blank_state()
  143
+
  144
+    def blank_state(self):
  145
+
  146
+        # internal flags
  147
+        self.flags = BeautifierFlags('BLOCK')
  148
+        self.flag_store = []
  149
+        self.wanted_newline = False
  150
+        self.just_added_newline = False
  151
+        self.do_block_just_closed = False
  152
+
  153
+
  154
+        self.indent_string = self.opts.indent_char * self.opts.indent_size
  155
+        self.preindent_string = ''
  156
+        self.last_word = ''              # last TK_WORD seen
  157
+        self.last_type = 'TK_START_EXPR' # last token type
  158
+        self.last_text = ''              # last token text
  159
+        self.last_last_text = ''         # pre-last token text
  160
+
  161
+        self.input = None
  162
+        self.output = []                 # formatted javascript gets built here
  163
+
  164
+        self.whitespace = ["\n", "\r", "\t", " "]
  165
+        self.wordchar = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$'
  166
+        self.digits = '0123456789'
  167
+        self.punct = '+ - * / % & ++ -- = += -= *= /= %= == === != !== > < >= <= >> << >>> >>>= >>= <<= && &= | || ! !! , : ? ^ ^= |= ::'.split(' ');
  168
+
  169
+
  170
+        # Words which always should start on a new line
  171
+        self.line_starters = 'continue,try,throw,return,var,if,switch,case,default,for,while,break,function'.split(',')
  172
+        self.set_mode('BLOCK')
  173
+
  174
+        global parser_pos
  175
+        parser_pos = 0
  176
+
  177
+
  178
+    def beautify(self, s, opts = None ):
  179
+
  180
+        if opts != None:
  181
+            self.opts = opts
  182
+
  183
+
  184
+        if self.opts.brace_style not in ['expand', 'collapse', 'end-expand']:
  185
+            raise(Exception('opts.brace_style must be "expand", "collapse" or "end-expand".'))
  186
+
  187
+        self.blank_state()
  188
+
  189
+        while s and s[0] in [' ', '\t']:
  190
+            self.preindent_string += s[0]
  191
+            s = s[1:]
  192
+
  193
+        self.input = s
  194
+
  195
+        parser_pos = 0
  196
+        while True:
  197
+            token_text, token_type = self.get_next_token()
  198
+            #print (token_text, token_type, self.flags.mode)
  199
+            if token_type == 'TK_EOF':
  200
+                break
  201
+
  202
+            handlers = {
  203
+                'TK_START_EXPR': self.handle_start_expr,
  204
+                'TK_END_EXPR': self.handle_end_expr,
  205
+                'TK_START_BLOCK': self.handle_start_block,
  206
+                'TK_END_BLOCK': self.handle_end_block,
  207
+                'TK_WORD': self.handle_word,
  208
+                'TK_SEMICOLON': self.handle_semicolon,
  209
+                'TK_STRING': self.handle_string,
  210
+                'TK_EQUALS': self.handle_equals,
  211
+                'TK_OPERATOR': self.handle_operator,
  212
+                'TK_BLOCK_COMMENT': self.handle_block_comment,
  213
+                'TK_INLINE_COMMENT': self.handle_inline_comment,
  214
+                'TK_COMMENT': self.handle_comment,
  215
+                'TK_UNKNOWN': self.handle_unknown,
  216
+            }
  217
+
  218
+            handlers[token_type](token_text)
  219
+
  220
+            self.last_last_text = self.last_text
  221
+            self.last_type = token_type
  222
+            self.last_text = token_text
  223
+
  224
+        sweet_code = self.preindent_string + re.sub('[\n ]+$', '', ''.join(self.output))
  225
+        return sweet_code
  226
+
  227
+
  228
+
  229
+    def trim_output(self, eat_newlines = False):
  230
+        while len(self.output) \
  231
+              and (
  232
+                  self.output[-1] == ' '\
  233
+                  or self.output[-1] == self.indent_string \
  234
+                  or self.output[-1] == self.preindent_string \
  235
+                  or (eat_newlines and self.output[-1] in ['\n', '\r'])):
  236
+            self.output.pop()
  237
+
  238
+
  239
+    def is_array(self, mode):
  240
+        return mode in ['[EXPRESSION]', '[INDENDED-EXPRESSION]']
  241
+
  242
+
  243
+    def is_expression(self, mode):
  244
+        return mode in ['[EXPRESSION]', '[INDENDED-EXPRESSION]', '(EXPRESSION)']
  245
+
  246
+
  247
+    def append_newline_forced(self):
  248
+        old_array_indentation = self.opts.keep_array_indentation
  249
+        self.opts.keep_array_indentation = False
  250
+        self.append_newline()
  251
+        self.opts.keep_array_indentation = old_array_indentation
  252
+
  253
+    def append_newline(self, ignore_repeated = True):
  254
+
  255
+        self.flags.eat_next_space = False;
  256
+
  257
+        if self.opts.keep_array_indentation and self.is_array(self.flags.mode):
  258
+            return
  259
+
  260
+        self.flags.if_line = False;
  261
+        self.trim_output();
  262
+
  263
+        if len(self.output) == 0:
  264
+            # no newline on start of file
  265
+            return
  266
+
  267
+        if self.output[-1] != '\n' or not ignore_repeated:
  268
+            self.just_added_newline = True
  269
+            self.output.append('\n')
  270
+
  271
+        if self.preindent_string:
  272
+            self.output.append(self.preindent_string)
  273
+
  274
+        for i in range(self.flags.indentation_level):
  275
+            self.output.append(self.indent_string)
  276
+
  277
+        if self.flags.var_line and self.flags.var_line_reindented:
  278
+            self.output.append(self.indent_string)
  279
+
  280
+
  281
+    def append(self, s):
  282
+        if s == ' ':
  283
+            # make sure only single space gets drawn
  284
+            if self.flags.eat_next_space:
  285
+                self.flags.eat_next_space = False
  286
+            elif len(self.output) and self.output[-1] not in [' ', '\n', self.indent_string]:
  287
+                self.output.append(' ')
  288
+        else:
  289
+            self.just_added_newline = False
  290
+            self.flags.eat_next_space = False
  291
+            self.output.append(s)
  292
+
  293
+
  294
+    def indent(self):
  295
+        self.flags.indentation_level = self.flags.indentation_level + 1
  296
+
  297
+
  298
+    def remove_indent(self):
  299
+        if len(self.output) and self.output[-1] in [self.indent_string, self.preindent_string]:
  300
+            self.output.pop()
  301
+
  302
+
  303
+    def set_mode(self, mode):
  304
+
  305
+        prev = BeautifierFlags('BLOCK')
  306
+
  307
+        if self.flags:
  308
+            self.flag_store.append(self.flags)
  309
+            prev = self.flags
  310
+
  311
+        self.flags = BeautifierFlags(mode)
  312
+
  313
+        if len(self.flag_store) == 1:
  314
+            self.flags.indentation_level = 0
  315
+        else:
  316
+            self.flags.indentation_level = prev.indentation_level
  317
+            if prev.var_line and prev.var_line_reindented:
  318
+                self.flags.indentation_level = self.flags.indentation_level + 1
  319
+        self.flags.previous_mode = prev.mode
  320
+
  321
+
  322
+    def restore_mode(self):
  323
+        self.do_block_just_closed = self.flags.mode == 'DO_BLOCK'
  324
+        if len(self.flag_store) > 0:
  325
+            self.flags = self.flag_store.pop()
  326
+
  327
+
  328
+    def get_next_token(self):
  329
+
  330
+        global parser_pos
  331
+
  332
+        self.n_newlines = 0
  333
+
  334
+        if parser_pos >= len(self.input):
  335
+            return '', 'TK_EOF'
  336
+
  337
+        self.wanted_newline = False;
  338
+        c = self.input[parser_pos]
  339
+        parser_pos += 1
  340
+
  341
+        keep_whitespace = self.opts.keep_array_indentation and self.is_array(self.flags.mode)
  342
+
  343
+        if keep_whitespace:
  344
+            # slight mess to allow nice preservation of array indentation and reindent that correctly
  345
+            # first time when we get to the arrays:
  346
+            # var a = [
  347
+            # ....'something'
  348
+            # we make note of whitespace_count = 4 into flags.indentation_baseline
  349
+            # so we know that 4 whitespaces in original source match indent_level of reindented source
  350
+            #
  351
+            # and afterwards, when we get to
  352
+            #    'something,
  353
+            # .......'something else'
  354
+            # we know that this should be indented to indent_level + (7 - indentation_baseline) spaces
  355
+
  356
+            whitespace_count = 0
  357
+            while c in self.whitespace:
  358
+                if c == '\n':
  359
+                    self.trim_output()
  360
+                    self.output.append('\n')
  361
+                    self.just_added_newline = True
  362
+                    whitespace_count = 0
  363
+                elif c == '\t':
  364
+                    whitespace_count += 4
  365
+                elif c == '\r':
  366
+                    pass
  367
+                else:
  368
+                    whitespace_count += 1
  369
+
  370
+                if parser_pos >= len(self.input):
  371
+                    return '', 'TK_EOF'
  372
+
  373
+                c = self.input[parser_pos]
  374
+                parser_pos += 1
  375
+
  376
+            if self.flags.indentation_baseline == -1:
  377
+
  378
+                self.flags.indentation_baseline = whitespace_count
  379
+
  380
+            if self.just_added_newline:
  381
+                for i in range(self.flags.indentation_level + 1):
  382
+                    self.output.append(self.indent_string)
  383
+
  384
+                if self.flags.indentation_baseline != -1:
  385
+                    for i in range(whitespace_count - self.flags.indentation_baseline):
  386
+                        self.output.append(' ')
  387
+
  388
+        else: # not keep_whitespace
  389
+            while c in self.whitespace:
  390
+                if c == '\n':
  391
+                    if self.opts.max_preserve_newlines == 0 or self.opts.max_preserve_newlines > self.n_newlines:
  392
+                        self.n_newlines += 1
  393
+
  394
+                if parser_pos >= len(self.input):
  395
+                    return '', 'TK_EOF'
  396
+
  397
+                c = self.input[parser_pos]
  398
+                parser_pos += 1
  399
+
  400
+            if self.opts.preserve_newlines and self.n_newlines > 1:
  401
+                for i in range(self.n_newlines):
  402
+                    self.append_newline(i == 0)
  403
+                    self.just_added_newline = True
  404
+
  405
+            self.wanted_newline = self.n_newlines > 0
  406
+
  407
+
  408
+        if c in self.wordchar:
  409
+            if parser_pos < len(self.input):
  410
+                while self.input[parser_pos] in self.wordchar:
  411
+                    c = c + self.input[parser_pos]
  412
+                    parser_pos += 1
  413
+                    if parser_pos == len(self.input):
  414
+                        break
  415
+
  416
+            # small and surprisingly unugly hack for 1E-10 representation
  417
+            if parser_pos != len(self.input) and self.input[parser_pos] in '+-' \
  418
+               and re.match('^[0-9]+[Ee]$', c):
  419
+
  420
+                sign = self.input[parser_pos]
  421
+                parser_pos += 1
  422
+                t = self.get_next_token()
  423
+                c += sign + t[0]
  424
+                return c, 'TK_WORD'
  425
+
  426
+            if c == 'in': # in is an operator, need to hack
  427
+                return c, 'TK_OPERATOR'
  428
+
  429
+            if self.wanted_newline and \
  430
+               self.last_type != 'TK_OPERATOR' and\
  431
+               self.last_type != 'TK_EQUALS' and\
  432
+               not self.flags.if_line and \
  433
+               (self.opts.preserve_newlines or self.last_text != 'var'):
  434
+                self.append_newline()
  435
+
  436
+            return c, 'TK_WORD'
  437
+
  438
+        if c in '([':
  439
+            return c, 'TK_START_EXPR'
  440
+
  441
+        if c in ')]':
  442
+            return c, 'TK_END_EXPR'
  443
+
  444
+        if c == '{':
  445
+            return c, 'TK_START_BLOCK'
  446
+
  447
+        if c == '}':
  448
+            return c, 'TK_END_BLOCK'
  449
+
  450
+        if c == ';':
  451
+            return c, 'TK_SEMICOLON'
  452
+
  453
+        if c == '/':
  454
+            comment = ''
  455
+            inline_comment = True
  456
+            comment_mode = 'TK_INLINE_COMMENT'
  457
+            if self.input[parser_pos] == '*': # peek /* .. */ comment
  458
+                parser_pos += 1
  459
+                if parser_pos < len(self.input):
  460
+                    while not (self.input[parser_pos] == '*' and \
  461
+                               parser_pos + 1 < len(self.input) and \
  462
+                               self.input[parser_pos + 1] == '/')\
  463
+                          and parser_pos < len(self.input):
  464
+                        c = self.input[parser_pos]
  465
+                        comment += c
  466
+                        if c in '\r\n':
  467
+                            comment_mode = 'TK_BLOCK_COMMENT'
  468
+                        parser_pos += 1
  469
+                        if parser_pos >= len(self.input):
  470
+                            break
  471
+                parser_pos += 2
  472
+                return '/*' + comment + '*/', comment_mode
  473
+            if self.input[parser_pos] == '/': # peek // comment
  474
+                comment = c
  475
+                while self.input[parser_pos] not in '\r\n':
  476
+                    comment += self.input[parser_pos]
  477
+                    parser_pos += 1
  478
+                    if parser_pos >= len(self.input):
  479
+                        break
  480
+                parser_pos += 1
  481
+                if self.wanted_newline:
  482
+                    self.append_newline()
  483
+                return comment, 'TK_COMMENT'
  484
+
  485
+
  486
+
  487
+        if c == "'" or c == '"' or \
  488
+           (c == '/' and ((self.last_type == 'TK_WORD' and self.last_text in ['return', 'do']) or \
  489
+                          (self.last_type in ['TK_COMMENT', 'TK_START_EXPR', 'TK_START_BLOCK', 'TK_END_BLOCK', 'TK_OPERATOR',
  490
+                                              'TK_EQUALS', 'TK_EOF', 'TK_SEMICOLON']))):
  491
+             sep = c
  492
+             esc = False
  493
+             resulting_string = c
  494
+             in_char_class = False
  495
+
  496
+             if parser_pos < len(self.input):
  497
+                if sep == '/':
  498
+                    # handle regexp
  499
+                    in_char_class = False
  500
+                    while esc or in_char_class or self.input[parser_pos] != sep:
  501
+                        resulting_string += self.input[parser_pos]
  502
+                        if not esc:
  503
+                            esc = self.input[parser_pos] == '\\'
  504
+                            if self.input[parser_pos] == '[':
  505
+                                in_char_class = True
  506
+                            elif self.input[parser_pos] == ']':
  507
+                                in_char_class = False
  508
+                        else:
  509
+                            esc = False
  510
+                        parser_pos += 1
  511
+                        if parser_pos >= len(self.input):
  512
+                            # incomplete regex when end-of-file reached
  513
+                            # bail out with what has received so far
  514
+                            return resulting_string, 'TK_STRING'
  515
+                else:
  516
+                    # handle string
  517
+                    while esc or self.input[parser_pos] != sep:
  518
+                        resulting_string += self.input[parser_pos]
  519
+                        if not esc:
  520
+                            esc = self.input[parser_pos] == '\\'
  521
+                        else:
  522
+                            esc = False
  523
+                        parser_pos += 1
  524
+                        if parser_pos >= len(self.input):
  525
+                            # incomplete string when end-of-file reached
  526
+                            # bail out with what has received so far
  527
+                            return resulting_string, 'TK_STRING'
  528
+
  529
+
  530
+             parser_pos += 1
  531
+             resulting_string += sep
  532
+             if sep == '/':
  533
+                 # regexps may have modifiers /regexp/MOD, so fetch those too
  534
+                 while parser_pos < len(self.input) and self.input[parser_pos] in self.wordchar:
  535
+                     resulting_string += self.input[parser_pos]
  536
+                     parser_pos += 1
  537
+             return resulting_string, 'TK_STRING'
  538
+
  539
+        if c == '#':
  540
+
  541
+            # she-bang
  542
+            if len(self.output) == 0 and len(self.input) > 1 and self.input[parser_pos] == '!':
  543
+                resulting_string = c
  544
+                while parser_pos < len(self.input) and c != '\n':
  545
+                    c = self.input[parser_pos]
  546
+                    resulting_string += c
  547
+                    parser_pos += 1
  548
+                self.output.append(resulting_string.strip() + "\n")
  549
+                self.append_newline()
  550
+                return self.get_next_token()
  551
+
  552
+
  553
+            # Spidermonkey-specific sharp variables for circular references
  554
+            # https://developer.mozilla.org/En/Sharp_variables_in_JavaScript
  555
+            # http://mxr.mozilla.org/mozilla-central/source/js/src/jsscan.cpp around line 1935
  556
+            sharp = '#'
  557
+            if parser_pos < len(self.input) and self.input[parser_pos] in self.digits:
  558
+                while True:
  559
+                    c = self.input[parser_pos]
  560
+                    sharp += c
  561
+                    parser_pos += 1
  562
+                    if parser_pos >= len(self.input)  or c == '#' or c == '=':
  563
+                        break
  564
+            if c == '#' or parser_pos >= len(self.input):
  565
+                pass
  566
+            elif self.input[parser_pos] == '[' and self.input[parser_pos + 1] == ']':
  567
+                sharp += '[]'
  568
+                parser_pos += 2
  569
+            elif self.input[parser_pos] == '{' and self.input[parser_pos + 1] == '}':
  570
+                sharp += '{}'
  571
+                parser_pos += 2
  572
+            return sharp, 'TK_WORD'
  573
+
  574
+        if c == '<' and self.input[parser_pos - 1 : parser_pos + 3] == '<!--':
  575
+            parser_pos += 3
  576
+            self.flags.in_html_comment = True
  577
+            return '<!--', 'TK_COMMENT'
  578
+
  579
+        if c == '-' and self.flags.in_html_comment and self.input[parser_pos - 1 : parser_pos + 2] == '-->':
  580
+            self.flags.in_html_comment = False
  581
+            parser_pos += 2
  582
+            if self.wanted_newline:
  583
+                self.append_newline()
  584
+            return '-->', 'TK_COMMENT'
  585
+
  586
+        if c in self.punct:
  587
+            while parser_pos < len(self.input) and c + self.input[parser_pos] in self.punct:
  588
+                c += self.input[parser_pos]
  589
+                parser_pos += 1
  590
+                if parser_pos >= len(self.input):
  591
+                    break
  592
+            if c == '=':
  593
+                return c, 'TK_EQUALS'
  594
+            else:
  595
+                return c, 'TK_OPERATOR'
  596
+        return c, 'TK_UNKNOWN'
  597
+
  598
+
  599
+
  600
+    def handle_start_expr(self, token_text):
  601
+        if token_text == '[':
  602
+            if self.last_type == 'TK_WORD' or self.last_text == ')':
  603
+                if self.last_text in self.line_starters:
  604
+                    self.append(' ')
  605
+                self.set_mode('(EXPRESSION)')
  606
+                self.append(token_text)
  607
+                return
  608
+
  609
+            if self.flags.mode in ['[EXPRESSION]', '[INDENTED-EXPRESSION]']:
  610
+                if self.last_last_text == ']' and self.last_text == ',':
  611
+                    # ], [ goes to a new line
  612
+                    if self.flags.mode == '[EXPRESSION]':
  613
+                        self.flags.mode = '[INDENTED-EXPRESSION]'
  614
+                        if not self.opts.keep_array_indentation:
  615
+                            self.indent()
  616
+                    self.set_mode('[EXPRESSION]')
  617
+                    if not self.opts.keep_array_indentation:
  618
+                        self.append_newline()
  619
+                elif self.last_text == '[':
  620
+                    if self.flags.mode == '[EXPRESSION]':
  621
+                        self.flags.mode = '[INDENTED-EXPRESSION]'
  622
+                        if not self.opts.keep_array_indentation:
  623
+                            self.indent()
  624
+                    self.set_mode('[EXPRESSION]')
  625
+
  626
+                    if not self.opts.keep_array_indentation:
  627
+                        self.append_newline()
  628
+                else:
  629
+                    self.set_mode('[EXPRESSION]')
  630
+            else:
  631
+                self.set_mode('[EXPRESSION]')
  632
+        else:
  633
+            self.set_mode('(EXPRESSION)')
  634
+
  635
+
  636
+        if self.last_text == ';' or self.last_type == 'TK_START_BLOCK':
  637
+            self.append_newline()
  638
+        elif self.last_type in ['TK_END_EXPR', 'TK_START_EXPR', 'TK_END_BLOCK'] or self.last_text == '.':
  639
+            # do nothing on (( and )( and ][ and ]( and .(
  640
+            pass
  641
+        elif self.last_type not in ['TK_WORD', 'TK_OPERATOR']:
  642
+            self.append(' ')
  643
+        elif self.last_word == 'function' or self.last_word == 'typeof':
  644
+            # function() vs function (), typeof() vs typeof ()
  645
+            if self.opts.jslint_happy:
  646
+                self.append(' ')
  647
+        elif self.last_text in self.line_starters or self.last_text == 'catch':
  648
+            self.append(' ')
  649
+
  650
+        self.append(token_text)
  651
+
  652
+
  653
+    def handle_end_expr(self, token_text):
  654
+        if token_text == ']':
  655
+            if self.opts.keep_array_indentation:
  656
+                if self.last_text == '}':
  657
+                    self.remove_indent()
  658
+                    self.append(token_text)
  659
+                    self.restore_mode()
  660
+                    return
  661
+            else:
  662
+                if self.flags.mode == '[INDENTED-EXPRESSION]':
  663
+                    if self.last_text == ']':
  664
+                        self.restore_mode()
  665
+                        self.append_newline()
  666
+                        self.append(token_text)
  667
+                        return
  668
+        self.restore_mode()
  669
+        self.append(token_text)
  670
+
  671
+
  672
+    def handle_start_block(self, token_text):
  673
+        if self.last_word == 'do':
  674
+            self.set_mode('DO_BLOCK')
  675
+        else:
  676
+            self.set_mode('BLOCK')
  677
+
  678
+        if self.opts.brace_style == 'expand':
  679
+            if self.last_type != 'TK_OPERATOR':
  680
+                if self.last_text in ['return', '=']:
  681
+                    self.append(' ')
  682
+                else:
  683
+                    self.append_newline(True)
  684
+
  685
+            self.append(token_text)
  686
+            self.indent()
  687
+        else:
  688
+            if self.last_type not in ['TK_OPERATOR', 'TK_START_EXPR']:
  689
+                if self.last_type == 'TK_START_BLOCK':
  690
+                    self.append_newline()
  691
+                else:
  692
+                    self.append(' ')
  693
+            else:
  694
+                # if TK_OPERATOR or TK_START_EXPR
  695
+                if self.is_array(self.flags.previous_mode) and self.last_text == ',':
  696
+                    if self.last_last_text == '}':
  697
+                        self.append(' ')
  698
+                    else:
  699
+                        self.append_newline()
  700
+            self.indent()
  701
+            self.append(token_text)
  702
+
  703
+
  704
+    def handle_end_block(self, token_text):
  705
+        self.restore_mode()
  706
+        if self.opts.brace_style == 'expand':
  707
+            if self.last_text != '{':
  708
+                self.append_newline()
  709
+        else:
  710
+            if self.last_type == 'TK_START_BLOCK':
  711
+                if self.just_added_newline:
  712
+                    self.remove_indent()
  713
+                else:
  714
+                    # {}
  715
+                    self.trim_output()
  716
+            else:
  717
+                if self.is_array(self.flags.mode) and self.opts.keep_array_indentation:
  718
+                    self.opts.keep_array_indentation = False
  719
+                    self.append_newline()
  720
+                    self.opts.keep_array_indentation = True
  721
+                else:
  722
+                    self.append_newline()
  723
+
  724
+        self.append(token_text)
  725
+
  726
+
  727
+    def handle_word(self, token_text):
  728
+        if self.do_block_just_closed:
  729
+            self.append(' ')
  730
+            self.append(token_text)
  731
+            self.append(' ')
  732
+            self.do_block_just_closed = False
  733
+            return
  734
+
  735
+        if token_text == 'function':
  736
+
  737
+            if self.flags.var_line:
  738
+                self.flags.var_line_reindented = True
  739
+            if (self.just_added_newline or self.last_text == ';') and self.last_text != '{':
  740
+                # make sure there is a nice clean space of at least one blank line
  741
+                # before a new function definition
  742
+                have_newlines = self.n_newlines
  743
+                if not self.just_added_newline:
  744
+                    have_newlines = 0
  745
+                if not self.opts.preserve_newlines:
  746
+                    have_newlines = 1
  747
+                for i in range(2 - have_newlines):
  748
+                    self.append_newline(False)
  749
+
  750
+        if token_text in ['case', 'default']:
  751
+            if self.last_text == ':':
  752
+                self.remove_indent()
  753
+            else:
  754
+                self.flags.indentation_level -= 1
  755
+                self.append_newline()
  756
+                self.flags.indentation_level += 1
  757
+            self.append(token_text)
  758
+            self.flags.in_case = True
  759
+            return
  760
+
  761
+        prefix = 'NONE'
  762
+
  763
+        if self.last_type == 'TK_END_BLOCK':
  764
+            if token_text not in ['else', 'catch', 'finally']:
  765
+                prefix = 'NEWLINE'
  766
+            else:
  767
+                if self.opts.brace_style in ['expand', 'end-expand']:
  768
+                    prefix = 'NEWLINE'
  769
+                else:
  770
+                    prefix = 'SPACE'
  771
+                    self.append(' ')
  772
+        elif self.last_type == 'TK_SEMICOLON' and self.flags.mode in ['BLOCK', 'DO_BLOCK']:
  773
+            prefix = 'NEWLINE'
  774
+        elif self.last_type == 'TK_SEMICOLON' and self.is_expression(self.flags.mode):
  775
+            prefix = 'SPACE'
  776
+        elif self.last_type == 'TK_STRING':
  777
+            prefix = 'NEWLINE'
  778
+        elif self.last_type == 'TK_WORD':
  779
+            if self.last_text == 'else':
  780
+                # eat newlines between ...else *** some_op...
  781
+                # won't preserve extra newlines in this place (if any), but don't care that much
  782
+                self.trim_output(True);
  783
+            prefix = 'SPACE'
  784
+        elif self.last_type == 'TK_START_BLOCK':
  785
+            prefix = 'NEWLINE'
  786
+        elif self.last_type == 'TK_END_EXPR':
  787
+            self.append(' ')
  788
+            prefix = 'NEWLINE'
  789
+
  790
+        if self.flags.if_line and self.last_type == 'TK_END_EXPR':
  791
+            self.flags.if_line = False
  792
+
  793
+        if token_text in self.line_starters:
  794
+            if self.last_text == 'else':
  795
+                prefix = 'SPACE'
  796
+            else:
  797
+                prefix = 'NEWLINE'
  798
+
  799
+        if token_text in ['else', 'catch', 'finally']:
  800
+            if self.last_type != 'TK_END_BLOCK' \
  801
+               or self.opts.brace_style == 'expand' \
  802
+               or self.opts.brace_style == 'end-expand':
  803
+                self.append_newline()
  804
+            else:
  805
+                self.trim_output(True)
  806
+                self.append(' ')
  807
+        elif prefix == 'NEWLINE':
  808
+            if token_text == 'function' and (self.last_type == 'TK_START_EXPR' or self.last_text in '=,'):
  809
+                # no need to force newline on "function" -
  810
+                #   (function...
  811
+                pass
  812
+            elif token_text == 'function' and self.last_text == 'new':
  813
+                self.append(' ')
  814
+            elif self.last_text in ['return', 'throw']:
  815
+                # no newline between return nnn
  816
+                self.append(' ')
  817
+            elif self.last_type != 'TK_END_EXPR':
  818
+                if (self.last_type != 'TK_START_EXPR' or token_text != 'var') and self.last_text != ':':
  819
+                    # no need to force newline on VAR -
  820
+                    # for (var x = 0...
  821
+                    if token_text == 'if' and self.last_word == 'else' and self.last_text != '{':
  822
+                        self.append(' ')
  823
+                    else:
  824
+                        self.flags.var_line = False
  825
+                        self.flags.var_line_reindented = False
  826
+                        self.append_newline()
  827
+            elif token_text in self.line_starters and self.last_text != ')':
  828
+                self.flags.var_line = False
  829
+                self.flags.var_line_reindented = False
  830
+                self.append_newline()
  831
+        elif self.is_array(self.flags.mode) and self.last_text == ',' and self.last_last_text == '}':
  832
+                self.append_newline() # }, in lists get a newline
  833
+        elif prefix == 'SPACE':
  834
+            self.append(' ')
  835
+
  836
+
  837
+        self.append(token_text)
  838
+        self.last_word = token_text
  839
+
  840
+        if token_text == 'var':
  841
+            self.flags.var_line = True
  842
+            self.flags.var_line_reindented = False
  843
+            self.flags.var_line_tainted = False
  844
+
  845
+
  846
+        if token_text == 'if':
  847
+            self.flags.if_line = True
  848
+
  849
+        if token_text == 'else':
  850
+            self.flags.if_line = False
  851
+
  852
+
  853
+    def handle_semicolon(self, token_text):
  854
+        self.append(token_text)
  855
+        self.flags.var_line = False
  856
+        self.flags.var_line_reindented = False
  857
+        if self.flags.mode == 'OBJECT':
  858
+            # OBJECT mode is weird and doesn't get reset too well.
  859
+            self.flags.mode = 'BLOCK'
  860
+
  861
+
  862
+    def handle_string(self, token_text):
  863
+        if self.last_type in ['TK_START_BLOCK', 'TK_END_BLOCK', 'TK_SEMICOLON']:
  864
+            self.append_newline()
  865
+        elif self.last_type == 'TK_WORD':
  866
+            self.append(' ')
  867
+
  868
+        self.append(token_text)
  869
+
  870
+
  871
+    def handle_equals(self, token_text):
  872
+        if self.flags.var_line:
  873
+            # just got an '=' in a var-line, different line breaking rules will apply
  874
+            self.flags.var_line_tainted = True
  875
+
  876
+        self.append(' ')
  877
+        self.append(token_text)
  878
+        self.append(' ')
  879
+
  880
+
  881
+    def handle_operator(self, token_text):
  882
+        space_before = True
  883
+        space_after = True
  884
+
  885
+        if self.flags.var_line and token_text == ',' and self.is_expression(self.flags.mode):
  886
+            # do not break on comma, for ( var a = 1, b = 2
  887
+            self.flags.var_line_tainted = False
  888
+
  889
+        if self.flags.var_line and token_text == ',':
  890
+            if self.flags.var_line_tainted:
  891
+                self.append(token_text)
  892
+                self.flags.var_line_reindented = True
  893
+                self.flags.var_line_tainted = False
  894
+                self.append_newline()
  895
+                return
  896
+            else:
  897
+                self.flags.var_line_tainted = False
  898
+
  899
+        if self.last_text in ['return', 'throw']:
  900
+            # return had a special handling in TK_WORD
  901
+            self.append(' ')
  902
+            self.append(token_text)
  903
+            return
  904
+
  905
+        if token_text == ':' and self.flags.in_case:
  906
+            self.append(token_text)
  907
+            self.append_newline()
  908
+            self.flags.in_case = False
  909
+            return
  910
+
  911
+        if token_text == '::':
  912
+            # no spaces around the exotic namespacing syntax operator
  913
+            self.append(token_text)
  914
+            return
  915
+
  916
+        if token_text == ',':
  917
+            if self.flags.var_line:
  918
+                if self.flags.var_line_tainted:
  919
+                    # This never happens, as it's handled previously, right?
  920
+                    self.append(token_text)
  921
+                    self.append_newline()
  922
+                    self.flags.var_line_tainted = False
  923
+                else:
  924
+                    self.append(token_text)
  925
+                    self.append(' ')
  926
+            elif self.last_type == 'TK_END_BLOCK' and self.flags.mode != '(EXPRESSION)':
  927
+                self.append(token_text)
  928
+                if self.flags.mode == 'OBJECT' and self.last_text == '}':
  929
+                    self.append_newline()
  930
+                else:
  931
+                    self.append(' ')
  932
+            else:
  933
+                if self.flags.mode == 'OBJECT':
  934
+                    self.append(token_text)
  935
+                    self.append_newline()
  936
+                else:
  937
+                    # EXPR or DO_BLOCK
  938
+                    self.append(token_text)
  939
+                    self.append(' ')
  940
+            # comma handled
  941
+            return
  942
+        elif token_text in ['--', '++', '!'] \
  943
+                or (token_text in ['+', '-'] \
  944
+                    and self.last_type in ['TK_START_BLOCK', 'TK_START_EXPR', 'TK_EQUALS', 'TK_OPERATOR']) \
  945
+                or self.last_text in self.line_starters:
  946
+
  947
+            space_before = False
  948
+            space_after = False
  949
+
  950
+            if self.last_text == ';' and self.is_expression(self.flags.mode):
  951
+                # for (;; ++i)
  952
+                #         ^^
  953
+                space_before = True
  954
+
  955
+            if self.last_type == 'TK_WORD' and self.last_text in self.line_starters:
  956
+                space_before = True
  957
+
  958
+            if self.flags.mode == 'BLOCK' and self.last_text in ['{', ';']:
  959
+                # { foo: --i }
  960
+                # foo(): --bar
  961
+                self.append_newline()
  962
+
  963
+        elif token_text == '.':
  964
+            # decimal digits or object.property
  965
+            space_before = False
  966
+
  967
+        elif token_text == ':':
  968
+            if self.flags.ternary_depth == 0:
  969
+                self.flags.mode = 'OBJECT'
  970
+                space_before = False
  971
+            else:
  972
+                self.flags.ternary_depth -= 1
  973
+        elif token_text == '?':
  974
+            self.flags.ternary_depth += 1
  975
+
  976
+        if space_before:
  977
+            self.append(' ')
  978
+
  979
+        self.append(token_text)
  980
+
  981
+        if space_after:
  982
+            self.append(' ')
  983
+
  984
+
  985
+
  986
+    def handle_block_comment(self, token_text):
  987
+
  988
+        lines = token_text.replace('\x0d', '').split('\x0a')
  989
+        # all lines start with an asterisk? that's a proper box comment
  990
+        if not any(l for l in lines[1:] if (l.lstrip())[0] != '*'):
  991
+            self.append_newline()
  992
+            self.append(lines[0])
  993
+            for line in lines[1:]:
  994
+                self.append_newline()
  995
+                self.append(' ' + line.strip())
  996
+        else:
  997
+            # simple block comment: leave intact
  998
+            if len(lines) > 1:
  999
+                # multiline comment starts on a new line
  1000
+                self.append_newline()
  1001
+                self.trim_output()
  1002
+            else:
  1003
+                # single line /* ... */ comment stays on the same line
  1004
+                self.append(' ')
  1005
+            for line in lines:
  1006
+                self.append(line)
  1007
+                self.append('\n')
  1008
+        self.append_newline()
  1009
+
  1010
+
  1011
+    def handle_inline_comment(self, token_text):
  1012
+        self.append(' ')
  1013
+        self.append(token_text)
  1014
+        if self.is_expression(self.flags.mode):
  1015
+            self.append(' ')
  1016
+        else:
  1017
+            self.append_newline_forced()
  1018
+
  1019
+
  1020
+    def handle_comment(self, token_text):
  1021
+        if self.wanted_newline:
  1022
+            self.append_newline()
  1023
+        else:
  1024
+            self.append(' ')
  1025
+
  1026
+        self.append(token_text)
  1027
+        self.append_newline_forced()
  1028
+
  1029
+
  1030
+    def handle_unknown(self, token_text):
  1031
+        if self.last_text in ['return', 'throw']:
  1032
+            self.append(' ')
  1033
+
  1034
+        self.append(token_text)
  1035
+
  1036
+
  1037
+
  1038
+
  1039
+
  1040
+def main():
  1041
+
  1042
+    argv = sys.argv[1:]
  1043
+
  1044
+    try:
  1045
+        opts, args = getopt.getopt(argv, "s:c:o:djbkil:h", ['indent-size=','indent-char=','outfile=', 'disable-preserve-newlines',
  1046
+                                                          'jslint-happy', 'brace-style=',
  1047
+                                                          'keep-array-indentation', 'indent-level=', 'help',
  1048
+                                                          'usage', 'stdin'])
  1049
+    except getopt.GetoptError:
  1050
+        usage()
  1051
+        sys.exit(2)
  1052
+
  1053
+    js_options = default_options()
  1054
+
  1055
+    file = None
  1056
+    outfile = 'stdout'
  1057
+    if len(args) == 1:
  1058
+        file = args[0]
  1059
+
  1060
+    for opt, arg in opts:
  1061
+        if opt in ('--keep-array-indentation', '-k'):
  1062
+            js_options.keep_array_indentation = True
  1063
+        elif opt in ('--outfile', '-o'):
  1064
+            outfile = arg
  1065
+        elif opt in ('--indent-size', '-s'):
  1066
+            js_options.indent_size = int(arg)
  1067
+        elif opt in ('--indent-char', '-c'):
  1068
+            js_options.indent_char = arg
  1069
+        elif opt in ('--disable-preserve_newlines', '-d'):
  1070
+            js_options.preserve_newlines = False
  1071
+        elif opt in ('--jslint-happy', '-j'):
  1072
+            js_options.jslint_happy = True
  1073
+        elif opt in ('--brace-style', '-b'):
  1074
+            js_options.brace_style = arg
  1075
+        elif opt in ('--stdin', '-i'):
  1076
+            file = '-'
  1077
+        elif opt in ('--help', '--usage', '--h'):
  1078
+            return usage()
  1079
+
  1080
+    if file == None:
  1081
+        return usage()
  1082
+    else:
  1083
+        if outfile == 'stdout':
  1084
+            print(beautify_file(file, js_options))
  1085
+        else:
  1086
+            f = open(outfile, 'w')
  1087
+            f.write(beautify_file(file, js_options) + '\n')
  1088
+            f.close()
  1089
+
  1090
+
  1091
+if __name__ == "__main__":
  1092
+    main()
  1093
+
BIN  twitter.com/capture.png
BIN  twitter.com/firebug.png
1  twitter.com/formatted/css/inline_01.css
... ...
@@ -0,0 +1 @@
  1
+.stream{position:relative;background-color:#fff;padding-top:1px;min-height:800px;margin-top:1px;zoom:1;}.stream .stream-item:first-child,.stream .hovered-stream-item:first-child,.related-tweets .stream-item:first-child:hover{border-top:none;}.stream-item{position:relative;border-bottom:1px solid #ebebeb;min-height:60px;clear:both;display:block;outline:none;margin-top:-1px;border-top:1px solid transparent;}.stream-item.blocked{display:none;}.stream-item:hover,.related-tweets .stream-item:hover,.hovered-stream-item{cursor:pointer;background:#f4f4f4;border-top:1px solid #EBEBEB;}.stream-item[data-item-type="list"]{border-color:#EBEBEB!important;background:#fff!important;}.stream-item .more{_visibility:hidden!important;display:none;width:17px;height:18px;background:red;position:absolute;margin-top:8px;z-index:1;outline:none;text-indent:-99999px;right:10px;background:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat -288px 0;}.stream-item .more:hover{background:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat -288px -32px;}.stream-item:active .more{background:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat -288px -64px;}.stream-item:hover .more,.hovered-stream-item .more{display:block;}.stream-item.focused-stream-item .more{background:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat -320px 0;}.stream-item.focused-stream-item .more:hover{background:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat -320px -32px;}.stream-item.focused-stream-item:active .more{background:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat -320px -64px;}.stream-item .arrow{display:none;width:17px;height:29px;background:red;position:absolute;margin-top:3px;z-index:6;outline:none;text-indent:-99999px;right:-17px;background:url(http://a1.twimg.com/a/1313600695/phoenix/img/pointer-right-hover.png);}.focused-stream-item,.focused-stream-item:hover{cursor:pointer;background:#eee;border-bottom:1px solid #ccc;margin-top:-1px;border-top:1px solid #ccc;outline:none;}.focused-stream-item:hover .arrow,.focused-stream-item .arrow{display:block!important;}.hovered-stream-item,.related-tweets .stream-item:hover{background:#f4f4f4;}.stream-loading{position:relative;height:60px;text-align:center;}.stream-loading .spinner{display:block;height:32px;width:32px;background-image:url(http://a1.twimg.com/a/1313600695/phoenix/img/loader.gif);margin:10px auto;}.stream-end,.stream-whale-end{position:relative;min-height:60px;text-align:center;color:#666;}.stream-end{padding:20px 15px;}.stream-whale-end{padding:20px 80px;}.stream-end img{margin:5px 3px -5px 0;}.stream-end div{margin-top:2px;}.stream-whale-end .title{font-weight:bold;}.stream-title h2{padding:14px 20px 5px 20px;font-size:15px;font-weight:300;margin-bottom:0;color:#666;}.stream-title .go-to-list-page{float:right;text-decoration:none;font-size:12px;font-weight:normal;}#new-tweets-bar{font-size:13px;display:block;padding:5px 1px;margin:10px 15px 10px 15px;cursor:pointer;background:#E3F1FA;border:1px solid #C6E4F2;text-align:center;text-shadow:0 1px 0 #fff;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;z-index:2;}#new-tweets-bar:hover{background:#D9ECF9;border-color:#B1D4E4;}#new-tweets-bar:active{background:#E3F1FA;}.stream-list{padding:10px 20px;}.list-image{width:36px;height:36px;float:left;}.list-content{margin-left:51px;position:relative;}.list-name{display:block;}.list-description{display:block;}.list-buttons{position:absolute;top:0;right:0;}.pending-request{float:left;font-size:12px;margin:4px 3px 0;}.more-button{cursor:pointer;text-decoration:none;background:#fff url(http://a1.twimg.com/a/1313600695/phoenix/img/more.gif) repeat-x left top;border-color:#ddd #aaa #aaa #ddd;border-style:solid;border-width:1px;display:block;font-size:14px;font-weight:bold;height:22px;line-height:1.5em;margin:6px auto;outline:medium none;padding:6px 0;text-align:center;text-shadow:1px 1px 1px #fff;width:97%;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;}.more-button:hover{background-position:left -78px;border:1px solid #bbb;text-decoration:none;}.query-token{font-weight:bold;}.stream-tabs,.stream-subtabs{padding:0 10px;border-bottom:1px solid #eee;list-style-type:none;display:block;clear:both;margin:0;}.stream-tabs{height:30px;}.stream-subtabs{display:none;height:35px;padding-top:7px;}.stream-subtabs.active{display:block;}body.ja .profile-header .stream-tabs,body.ja .profile-header .stream-tabs .tab-text,body.ja .profile-header .stream-tabs .stream-tab.active .tab-text{height:50px;}.stream-tabs .stream-tab,.stream-subtabs .stream-tab{padding:0;margin:0;float:left;position:relative;cursor:pointer;}.stream-tabs .stream-tab{-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;border-top-left-radius:4px;border-top-right-radius:4px;}.stream-tabs .stream-tab .drop-down{cursor:default;}.stream-tabs .tab-text,.stream-subtabs .tab-text{text-decoration:none;cursor:pointer;display:block;outline:none;line-height:24px;overflow:hidden;}.stream-tabs .tab-text{padding:4px 10px 3px;border-radius:inherit;-webkit-border-radius:inherit;-moz-border-radius:inherit;text-overflow:ellipsis-word;text-shadow:0 1px 0 #fff;}.stream-subtabs .tab-text{padding:1px 7px;}.stream-tabs .tab-text i{background-position:-47px -64px;width:7px;background-image:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png);background-repeat:no-repeat;display:inline-block;opacity:.4;height:13px;outline:medium none;overflow:hidden;margin-left:4px;position:relative;top:2px;border:none;*left:4px;*top:0;_margin-top:8px;}.stream-tabs .stream-tab:hover .tab-text i{opacity:1;}.stream-tabs .stream-tab.active .tab-text,.stream-tabs .stream-tab.active .tab-text:hover{border:1px solid #eee;border-bottom:1px solid #fff;padding-top:3px;color:#333;background:#fff;font-weight:bold;outline:none;}.stream-subtabs .stream-tab.active .tab-text{color:#333;margin-top:-1px;font-weight:bold;outline:none;}.stream-subtabs .stream-tab-separator{line-height:25px;color:#999;}.profile-header .stream-tabs .stream-tab.active .tab-text,.profile-header .stream-tabs .stream-tab.active .tab-text:hover{border-color:#eee;border-bottom-color:#fff;color:#333;background:#fff;}.stream-tabs .saved-search-icon{background-image:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png);background-position:-224px -80px;width:12px;height:12px;margin-right:0;}.stream-tabs a:hover .saved-search-icon{background-position:-240px -80px;}.stream-tabs .list-icon{width:12px;height:12px;background-image:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png);background-position:-64px -64px;margin-right:1px;}.stream-tabs a:hover .list-icon{background-position:-64px -96px;}.stream-tabs .delete-icon{position:absolute;right:-2px;top:0;}.stream-tabs .lock-icon{position:absolute;right:10px;top:8px;}ul.stream-tabs li ul.drop-down{-webkit-border-radius:4px;-webkit-border-top-left-radius:0;-moz-border-radius:4px;-moz-border-radius-topleft:0;border-radius:4px;border-top-left-radius:0;}ul.stream-tabs li{position:relative;}ul.stream-tabs .tab-text:hover{background:#eee;border-color:#eee;}ul.stream-tabs li.dropdown-link .tab-text:hover{padding-bottom:2px;}ul.stream-tabs li.open,ul.stream-tabs li.open:hover,ul.stream-tabs li.open .tab-text,ul.stream-tabs li.open .tab-text:hover{background:#999;border-color:#999;color:#fff;text-shadow:none;}.route-search ul.stream-tabs li.open,.route-search ul.stream-tabs li.open,.route-home .stream-title ul.stream-tabs li.open,.route-home .stream-title ul.stream-tabs li.open{margin-top:3px;}.route-search ul.stream-tabs li.open .tab-text,.route-search ul.stream-tabs li.open .tab-text:hover,.route-home .stream-title ul.stream-tabs li.open .tab-text,.route-home .stream-title ul.stream-tabs li.open .tab-text:hover{padding:0 6px;z-index:auto!important;}.promoted-tweet{cursor:default;}.promoted-tweet .tweet-labels{width:100%;height:1%;}.stream-item:hover .promoted-tweet .tweet-labels .tweet-label{color:#333!important;}.promoted-tweet:hover{background-color:#ffce6!important;border-color:#e7e3ce!important;}.promoted-tweet .dismiss-action,.stream-item-feedback .cancel-feedback,.stream-item-feedback .close-feedback{font-size:11px;cursor:pointer;}.promoted-tweet .dismiss-action{padding-left:5px;display:none;}.stream-item-feedback{background:#f5f5f5;padding:15px 20px;cursor:default;}.stream-item-feedback p{margin-bottom:5px;}.stream-item-feedback .cancel-feedback{float:right;}.stream-item-feedback .feedback-confirmation{padding-left:58px;background:url(http://a1.twimg.com/a/1313600695/phoenix/img/circle-check.png) no-repeat 0 0;}.promoted-tweet .dismiss-action i,.stream-item-feedback .cancel-feedback i,.stream-item-feedback .close-feedback i{background:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat -270px -14px;display:inline-block;width:12px;height:13px;margin-right:2px;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);vertical-align:text-bottom;}.promoted-tweet .dismiss-action:hover i,.stream-item-feedback .cancel-feedback:hover i,.stream-item-feedback .close-feedback:hover i{opacity:1;-moz-opacity:1;filter:alpha(opacity=100);}.stream-item:hover .dismiss-action,.related-tweets .stream-item:hover .dismiss-action,.hovered-stream-item .dismiss-action,.stream-item.focused-stream-item .dismiss-action{display:inline;}.stream-item .close-feedback{float:right;}body{font:13px/1.5 Helvetica Neue,Arial,Helvetica,'Liberation Sans',FreeSans,sans-serif;}body.tr{font-family:Arial,Helvetica,'Liberation Sans',FreeSans,sans-serif;}a{color:#2D76B9;text-decoration:none;}a:hover{text-decoration:underline;}a:focus{outline:1px dotted;}hr{border:0;border-top:1px solid rgba(0,0,0,0.1);border-bottom:1px solid rgba(255,255,255,0.3);*border-top:1px solid #000;*border-bottom:1px solid #fff;*filter:alpha(opacity = 30);clear:both;height:0;display:block;margin:15px 0 15px 0;}h1{font-size:25px;}h2{font-size:23px;}h3{font-size:21px;}h4{font-size:19px;}h5{font-size:17px;}h6{font-size:15px;}ol{list-style:decimal;}ul{list-style:disc;}li{margin-left:30px;}b,strong{font-weight:bold;}*{margin:0;padding:0;}fieldset,img{border:0;}body{position:relative;}#doc{width:100%;position:relative;text-align:center;z-index:1;}#top-stuff{position:fixed;_position:relative;top:0;left:0;z-index:12;width:100%;}#flash-object-container{position:absolute;top:-9000px;left:-9000px;}#page-outer{width:1000px;padding-top:60px;margin:0 auto 0 auto;_padding-top:20px;}#front-container,#page-container{width:920px;margin:0 40px;position:relative;z-index:1;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;overflow:hidden;text-align:left;}.main-content,.details-pane{color:#444;}.main-content{width:540px;float:left;display:inline-block;z-index:4;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;box-shadow:0 3px 4px rgba(0,0,0,.5);-moz-box-shadow:0 3px 4px rgba(0,0,0,.5);-webkit-box-shadow:0 3px 4px rgba(0,0,0,.5);*border-right:1px solid #eee;position:relative;background:#fff;height:100%;min-height:700px;}.dashboard{_width:325px;max-width:460px;min-width:340px;position:relative;padding:12px 20px;*padding-right:19px;overflow:hidden;-webkit-border-top-right-radius:5px;-moz-border-radius-topright:5px;border-top-right-radius:5px;}#details-pane-outer{position:fixed;z-index:3;left:0;right:0;top:60px;width:100%;_position:static;_width:520px;_float:left;_display:inline-block;}#details-pane-outer.tracking-vertically{position:absolute;}.details-pane-shell{position:relative;width:920px;margin:0 auto;padding:0 40px;_position:static;_width:520px;_padding:0;_margin:0;}#details-pane-outer.tracking-vertically .details-pane-shell{padding:0;}.details-pane{background:#fff;position:relative;left:10px;top:0;max-width:490px;min-width:370px;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px;border-top-right-radius:6px;border-bottom-right-radius:6px;box-shadow:0 2px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.3);-moz-box-shadow:0 2px 2px rgba(0,0,0,0.3);display:none;overflow:hidden;_position:static;_width:520px;}#layout-detail{width:4px;height:32px;background:#F4F4F4;*background:transparent;position:fixed;margin:0 0 0 536px;z-index:-1;display:none;}.messages-container .details-pane{min-width:520px;max-width:630px;left:400px;display:block;}#message-drawer{position:absolute;z-index:2;top:41px;width:100%;text-align:center;_left:0;}#message-drawer .message{-webkit-border-bottom-right-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-bottomright:5px;-moz-border-radius-bottomleft:5px;background-color:transparent;font-weight:bold;_width:400px;min-width:100px;max-width:490px;width:auto;display:inline-block;font-weight:normal;margin:0 auto;margin-top:-1px;padding:0 6px 5px 6px;border:0;-moz-box-shadow:0 1px 3px rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.2);background:#999;background:rgba(0,0,0,0.5);}@media screen and(-webkit-min-device-pixel-ratio:0){#message-drawer .message{padding:0 6px 4px 6px;}}#message-drawer .message .message-inside{background:#fff;padding:8px 12px 8px 16px;display:inline-block;font-size:13px;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;min-width:100px;}#message-drawer .message .message-inside span{display:inline-block;color:#333;max-width:440px;vertical-align:middle;}#message-drawer a.dismiss{display:inline-block;padding:6px 6px 2px 6px;background:#fff;height:22px;margin:-5px -10px -10px 10px;font-family:Tahoma;font-weight:bold;font-size:12px;background:#f8f8f8;color:#999;}#message-drawer a.dismiss:hover{text-decoration:none;background:#eee;color:#333;}#message-drawer em.blink{text-decoration:blink;}#first-container .header{background-color:#ededed;background-color:rgba(237,237,237);height:24px;padding:13px;border-bottom:1px solid rgba(0,0,0,.05);}.base-list,.base-list li,.inline-list,.inline-list li{margin:0;padding:0;list-style:none;}.inline-list li{display:inline;}.clearfix:after{content:". ";display:block;clear:both;visibility:hidden;line-height:0;height:0;}.clearfix{display:inline-block;}html[xmlns] .clearfix{display:block;}* html .clearfix{height:1%;}#doc ::-webkit-scrollbar{width:9px;height:9px;}#doc ::-webkit-scrollbar-button:start:decrement,#doc ::-webkit-scrollbar-button:end:increment{display:block;height:0;background-color:transparent;}#doc ::-webkit-scrollbar-track-piece{background-color:#FAFAFA;-webkit-border-radius:0;-webkit-border-bottom-right-radius:8px;-webkit-border-bottom-left-radius:8px;}#doc ::-webkit-scrollbar-thumb:vertical{height:50px;background-color:#999;-webkit-border-radius:8px;}#doc ::-webkit-scrollbar-thumb:horizontal{width:50px;background-color:#999;-webkit-border-radius:8px;}#off-screen-preload{position:absolute;top:-5000px;left:-5000px;height:1px;width:1px;overflow:hidden;}#off-screen-preload .content-fe-sprites{position:absolute;height:1px;width:1px;background:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite_icons-contentfe.png);}body.user-style-twttr{background:url(http://a1.twimg.com/a/1313600695/phoenix/img/bg-clouds.png) repeat-x scroll left 40px #C0DEED;color:#333;}body.user-style-twttr a,body.user-style-twttr ul.stream-tabs li,body.user-style-twttr .component .promo strong,body.user-style-twttr .message-thread-preview:hover .message-count{color:#0084B4;}body.user-style-twttr .stream-item:hover .tweet-screen-name,body.user-style-twttr .stream-item:hover .tweet-timestamp,body.user-style-twttr .stream-item:hover .tweet-geo-text,body.user-style-twttr .stream-item:hover .user-profile-link,body.user-style-twttr span.user-stat-link{color:#0084B4!important;}body.user-style-twttr .stream-item:hover,body.user-style-twttr #new-tweets-bar,body.user-style-twttr #new-tweets-bar:active{background-color:rgba(0,132,180,0.1);border-color:rgba(0,132,180,0.15);}body.user-style-twttr .stream-item.feedback-shown:hover{background-color:#fff!important;}body.user-style-twttr #new-tweets-bar:hover{background-color:rgba(0,132,180,0.2);border-color:rgba(0,132,180,0.25);}body.user-style-twttr .user-small-list-item .user-screen-name,body.user-style-twttr .profile-screenname,body.user-style-twttr .title-link,body.user-style-twttr div.latest-tweet .latest-tweet-timestamp,body.user-style-twttr div.embedded-tweet .latest-tweet-timestamp,body.user-style-twttr div.truncated-tweet .latest-tweet-timestamp,body.user-style-twttr .welcome-steps li .active a strong{color:#333;}body.user-style-twttr .dashboard .dot,body.user-style-twttr .dashboard .copyright{color:#999;}body.user-style-twttr #page-container,body.user-style-twttr .user-sidebar-color{background:#DDEEF6;background:rgba(221,238,246,0.9);_background-color:#DDEEF6;}body.loading-body{background:#F5F6F7;}body.loading-body #page-container{display:none;}body.static-page{background:white;}#top-bar-outer{width:100%;height:40px;display:block;text-align:center;position:relative;}#top-bar-bg{width:100%;height:100%;position:absolute;top:0;left:0;background:#111;background:-webkit-gradient(linear,left top,left bottom,from(#333),to(#111));background:-moz-linear-gradient(top,#333,#111);background:transparent\9;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333',endColorstr='#111111');box-shadow:0 1px 2px rgba(0,0,0,0.5);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.5);-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.5);}#top-bar{margin:0 auto;width:1000px;text-align:left;}#top-bar .top-bar-inside{width:920px;margin:0 40px;position:relative;}#top-bar ul{float:left;list-style-type:none;margin:0;}#top-bar ul li{margin:0;padding:0;float:left;}#top-bar ul li a{color:#bababa;padding:10px 10px;display:block;font-weight:normal;}body.ja #top-bar ul li a,body.ru #top-bar ul li a{padding:10px 8px;}@media screen and(-webkit-min-device-pixel-ratio:0){#top-bar ul li a{padding:10px 10px 11px 10px;}}#top-bar ul li a:hover{text-decoration:none;}#logo{float:left;}#logo a{text-indent:-9999px;background:transparent url(http://a1.twimg.com/a/1313600695/phoenix/img/twitter_logo_right.png) no-repeat 20px 9px;display:block;color:#fff;height:40px;width:140px;margin-right:5px;outline:none;}body.jp #logo a,body.ru #logo a{margin-right:0;}#top-bar .active-links{position:absolute;right:8px;top:0;}#top-bar .static-links{float:left;}#global-nav{float:left;margin-left:8px;}#global-nav li a{margin-right:1px;outline:none;}#global-nav li a:hover{color:#fff;}#global-nav li:first-child a{border-left:none;}#global-nav li:last-child a{border-right:none;}#global-nav .active a{color:#fff;background-color:#111;background:rgba(0,0,0,0.7);font-weight:bold;}#global-nav .new a{background-image:url(http://a1.twimg.com/a/1313600695/phoenix/img/light.png);background-repeat:no-repeat;background-position:center bottom;}#session{display:inline-block;padding:10px 12px;height:20px;vertical-align:top;cursor:pointer;white-space:nowrap;_width:0;}#new-tweet{display:inline-block;width:16px;height:14px;padding:13px 6px;vertical-align:top;cursor:pointer;}#new-tweet:hover{text-decoration:none;}#new-tweet span{display:block;width:14px;height:14px;vertical-align:top;text-indent:-9999px;background-image:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png);background-position:-176px -96px;font-size:0;}#new-tweet:hover span{background-position:-192px -96px;}#top-bar .vr{border-left:1px solid #040404;border-right:1px solid #2F2F2F;height:26px;display:inline-block;margin:6px 3px 1px 3px;}#session a.profile-links:hover,#session a:hover{text-decoration:none!important;}#session img{display:inline-block;width:20px;height:20px;vertical-align:top;margin-right:6px;border:none;cursor:pointer;}#session .promotional{color:black;padding:3px 6px 3px 5px;font-size:12px;-moz-border-radius:3px;-webkit-border-radius:3px;-moz-box-shadow:0 1px 0 #000;-webkit-box-shadow:0 1px 0 #000;border:0;margin-top:-2px;outline:none;}#search-form{float:left;margin:6px 0 0 0;*margin:5px 0 0 0;opacity:1;position:relative;}#search-form #search-query{border:1px solid black;-moz-border-radius:4px;-webkit-border-radius:4px;font:13px Arial,sans-serif;width:180px;padding:6px 25px 4px 6px;color:#ccc;background:#666;-webkit-box-shadow:0 1px 0 #444;-moz-box-shadow:0 1px 0 #444;box-shadow:0 1px 0 #444;}#search-form #search-query:hover{background:#777;color:#fff;}#search-form span.glass{display:block;position:absolute;cursor:pointer;display:block;right:0;padding:7px 8px 5px 8px;}#search-form span.glass i{background-image:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png);background-position:-224px -96px;width:14px;height:14px;display:block;font-size:0;}#search-form #search-query:focus,#search-form #search-query.focused{outline:none;background:#eee;color:#333;text-shadow:0 1px 0 #fff;border:1px solid #eee;-webkit-box-shadow:0 0 3px #000;-moz-box-shadow:0 0 3px #000;box-shadow:0 0 3px #000;}#top-bar .dropdown{clear:both;position:absolute;right:0;z-index:0;top:-999px;-webkit-border-bottom-right-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-bottomright:5px;-moz-border-radius-bottomleft:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;background:#121212;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.6);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.6);box-shadow:0 1px 2px rgba(0,0,0,0.6);zoom:1;min-width:160px;max-height:350px;}#top-bar .active .dropdown{top:40px;}#top-bar ul.user-dropdown{font-size:12px;width:100%;}#top-bar ul.user-dropdown li{clear:both;display:block;width:100%;background:#333;background:rgba(255,255,255,0.1);}#top-bar ul.user-dropdown li:last-child,#top-bar ul.user-dropdown li:last-child a{-webkit-border-bottom-right-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-bottomright:5px;-moz-border-radius-bottomleft:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;}#top-bar ul.user-dropdown li a,#top-bar ul.user-dropdown li h2{clear:both;display:block;background-image:none;padding:6px 15px;}#top-bar ul.user-dropdown li span{clear:both;display:block;background-image:none;background:#222;padding:6px 15px;-moz-box-shadow:0 -1px #333;border-top:1px solid #000;cursor:default;color:#666!important;}#top-bar ul.user-dropdown li:last-child h2{display:none;}#top-bar ul.user-dropdown li a:hover{background:#666;background:rgba(255,255,255,0.1);color:#fff;}#top-bar #session.active,#top-bar #session:hover{color:#fff;background:#666;background:rgba(255,255,255,0.1);}#top-bar #session.active span{color:#fff;}#session *{outline:none;}#session #screen-name{color:#bababa;cursor:pointer;font-weight:normal;display:inline-block;max-width:200px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}body.ru #session #screen-name{max-width:100px;}body.ja #session #screen-name{max-width:100px;}#session #screen-name-dropdown{width:7px;height:7px;display:inline-block;background:transparent url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat scroll -79px -68px;vertical-align:top;margin-top:8px;margin-left:1px;}#session:hover #screen-name,#session:hover #signup-link,#session:hover #signin-link,.active #signin-link{color:#fff;}a#signup-link,a#signin-link{color:#BABABA;position:relative;}a#signup-link em,a#signin-link em{font-style:normal;font-size:10px;margin-right:4px;}a#signup-link strong{color:#fc0;}a#signin-link strong{color:#fff;}a#signin-link i{width:13px;height:13px;display:inline-block;vertical-align:middle;background:transparent url(http://a1.twimg.com/a/1313600695/phoenix/img/toggle_down_light.png) no-repeat;position:relative;left:4px;top:-1px;}.active a#signin-link i{background-image:url(http://a1.twimg.com/a/1313600695/phoenix/img/toggle_up_light.png);}#signin-dropdown form{padding:10px;background:#333;background:rgba(255,255,255,0.1);cursor:auto;_width:215px;}#signin-dropdown .textbox span{color:#BABABA!important;}#signin-dropdown .textbox input{width:200px;}#signin-dropdown .subchck{*width:212px;}#signin-dropdown p a{color:#0084B4;}body.ja #signin-dropdown a.mobile{display:none;}#top-bar form.turn-phx-off-form button.turn-phx-off-button{background:none;border:0;color:#BABABA;font-family:'Helvetica Neue',Arial,Helvetica,'Liberation Sans',FreeSans,sans-serif;font-size:12px;padding:6px 15px;text-align:left;}#top-bar form.turn-phx-off-form button::-moz-focus-inner{padding:0;}#top-bar form.turn-phx-off-form:hover{background:#666;background:rgba(255,255,255,0.1);}#top-bar form.turn-phx-off-form:hover,#top-bar form.turn-phx-off-form button:hover{cursor:pointer;color:#fff;}.text-area{position:relative;margin-bottom:10px;}.tweet-thumbnail-container{position:relative;}.tweet-box .twitter-anywhere-tweet-box-editor,.proxy-editor{border:1px solid #ccc;border-radius:4px;-moz-border-radius:4px;-webkit-border-radius:4px;padding:8px;-webkit-box-shadow:0 1px #fff;-moz-box-shadow:0 1px #fff;box-shadow:0 1px #fff;width:482px;height:56px;color:#222;font:14px/18px "Helvetica Neue",Arial,sans-serif;outline:none;_width:442px;overflow-x:hidden;overflow-y:auto;white-space:pre-wrap;word-wrap:break-word;}.rich-editor .twitter-anywhere-tweet-box-editor{margin-bottom:-5px;color:#555;overflow-y:hidden;position:relative;opacity:.5;filter:alpha(opacity=50);resize:none;}.rich-editor .twitter-anywhere-tweet-box-editor,.proxy-editor{min-height:3em;background-color:#fff;}.rich-editor{background-color:#fff;}.proxy-editor{width:0;opacity:1;filter:alpha(opacity=99);overflow-y:hidden;margin-bottom:-5px;position:absolute;top:0;left:0;border-color:transparent;}.mozilla .proxy-editor{left:1px;}.tweetbox-counter-tipsy{color:#666;text-align:right;display:inline-block;font-size:12px;margin-right:2px;}.mozilla .tweetbox-counter-tipsy,.msie .tweetbox-counter-tipsy{position:relative;top:-8px;}.tweetbox-tipsy .tipsy-inner{max-width:250px!important;}span.tweetbox-tipsy-text{font-size:12px;}.tweetbox-tipsy .tipsy-inner{max-width:250px!important;}span.tweetbox-tipsy-text{font-size:12px;}.tweet-box .tweet-meta{opacity:.6;position:absolute;right:2px;top:5px;}.tweet-box textarea{resize:vertical;}.tweet-box textarea:focus,.tweet-box input[type=text]{-moz-box-shadow:0 0 8px rgba(82,168,236,0.5);-webkit-box-shadow:0 0 8px rgba(82,168,236,0.5);border-color:rgba(82,168,236,0.75)!important;}.condensed .twitter-anywhere-tweet-box-editor,.condensed .proxy-editor{height:15px!important;min-height:15px!important;overflow:hidden;}.tweet-box-title{overflow:hidden;padding:1px 0;}body.tr .tweet-box h2{font:bold 18px Arial,sans-serif;}.tweet-box h2{font:bold 18px Helvetica Neue,Helvetica,sans-serif;text-shadow:0 1px 0 #fff;margin:0 0 6px 0;color:#999;}body .latest-status-text{font:13px/2 'helvetica neue',helvetica,arial,sans-serif;color:#999;float:right;}body .latest-status-text a{color:#999!important;}.twttr-dialog-content .tweet-box h2{display:none;}.tweet-box textarea:hover{outline:none;border:1px solid #999;cursor:text!important;}.condensed .tweet-button-container{display:none;}.tweet-counter{background-color:transparent;color:#999;display:inline-block;width:35px;border:0;font:normal 16px 'helvetica neue','lucida grande',helvetica,arial;padding:0 3px;position:relative;vertical-align:top;top:5px;text-align:right;}.tweet-button-sub-container{display:inline-block;}.tweet-counter-proxy{position:absolute;}.tweet-counter.warn{color:#5c0002;}.tweet-counter.superwarn{color:#d40d12;}.tweet-button-container{position:relative;text-align:right;margin:5px 0 3px 0;height:29px;z-index:3;}.tweet-box .geo-activation-prompt{display:block;text-align:left;}.tweet-spinner{position:relative;vertical-align:top;top:7px;right:4px;}.twttr-editor .twitter-media-thumbs{display:none;}.twttr-editor.has-thumbnails textarea{vertical-align:top;resize:none;}.twttr-editor.has-thumbnails .twitter-media-thumbs{display:block;position:absolute;bottom:1px;left:1px;right:1px;height:60px;background:#f1f1f1;border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;}.twttr-editor.has-thumbnails.closing .twitter-media-thumbs{display:none;}.twttr-editor.has-thumbnails.html4 .twitter-media-thumbs{height:37px;}.twttr-editor.rich-editor .twitter-media-thumbs{bottom:-4px;}.twitter-media-thumbs .media-thumbnails{position:relative;height:48px;max-width:240px;margin:6px 9px;float:left;}.html4 .twitter-media-thumbs .media-thumbnails{height:25px;}.html4.photo-2 .twitter-media-thumbs .media-thumbnails{height:52px;}.html4.photo-3 .twitter-media-thumbs .media-thumbnails{height:79px;}.twitter-media-thumbs .media-thumbnails-message{position:relative;float:left;height:60px;line-height:60px;font-size:13px;color:#a9a9a9;margin-left:8px;}.html4 .twitter-media-thumbs .media-thumbnails-message{height:37px;line-height:37px;}.html4.photo-2 .twitter-media-thumbs .media-thumbnails-message{height:64px;line-height:64px;}.html4.photo-3 .twitter-media-thumbs .media-thumbnails-message{height:91px;line-height:91px;}.page-header{background:#f5f5f5;border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;padding:15px 20px 0 20px;position:relative;z-index:2;zoom:1;}.page-header h1{font-size:20px;font-weight:300;color:#333;text-shadow:0 1px 0 #fff;}.page-header .stream-tabs{margin:15px -20px 0 -20px;}.profile-header{background:#fff;border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;}.stream-manager{z-index:1;}.user-content-medium{line-height:16px;padding:10px 20px;font-size:14px;line-height:17px;min-height:34px;display:block;}.user-content-medium .user-content-image{display:block;float:left;height:48px;overflow:hidden;width:48px;margin-top:2px;}.user-content-medium .user-content-rest{margin-left:58px;}.user-content-medium .user-content-rest .user-profile-link{color:#333;}.user-content-medium .user-content-rest .full-name{color:#999;font-size:12px;}.user-content-medium .user-content-rest .user-profile-link:hover{text-decoration:underline;}.user-content-medium .user-content-rest .user-description{color:#666;padding:1px 0;font:italic 13px/18px Georgia,Palatino,serif;word-wrap:break-word;}.user-content-medium .user-content-rest .user-description a,.user-content-medium .user-content-rest .user-meta a{color:#666;overflow:hidden;}.user-content-medium .user-content-rest .user-meta{color:#999;font-size:11px;line-height:14px;word-wrap:break-word;}.user-content-medium .user-content-rest .user-meta .followed-by-you{display:none;}.who-to-follow-suggestions-stream .user-content-medium .user-content-rest .user-meta .followed-by-you{display:inline;}.recent-tweets .more-link,.related-tweets .more-link{clear:both;float:left;margin-left:20px;margin-top:10px;}.stream-user-buttons{float:right;position:relative;padding-left:1em;}.stream-user-buttons .button{margin-left:2px;}.stream-user-buttons .unfollow-button em.wrapper{text-shadow:none;font-style:normal;padding:0 5px;}.stream-user-buttons .unfollow-button em b{position:absolute;}.stream-user-buttons .unfollow-button em b.unfollow{position:static;visibility:hidden;}.stream-user-buttons .unfollow-button:hover em b{visibility:hidden;}.stream-user-buttons .unfollow-button:hover em b.unfollow{visibility:visible;}body.ja .stream-item .unfollow-button{height:28px;}body.ja .stream-item .unfollow-button .you-follow{margin-top:1.5em;}.stream-user-buttons .button .down-arrow{margin-left:0;}.stream-user-buttons div.dismiss{text-align:right;margin:1px 2px 0 0;display:none;}.who-to-follow-suggestions-stream .stream-user-buttons div.dismiss,.user-similarities-stream .stream-user-buttons div.dismiss{display:block;}.stream-user-buttons div.dismiss a{color:#AAA;font-size:11px;}.tweet{padding:10px 20px;font-size:15px;position:relative;zoom:1;}.tweet a:hover{text-decoration:underline;}a.twitter-hashtag,a.twitter-atreply,a.pretty-link{white-space:nowrap;}.hash-text{white-space:normal;}.pretty-link a.twitter-hashtag:hover,.pretty-link a.twitter-atreply:hover,a.pretty-link:hover,.screen-name-and-location a.pretty-link:hover{text-decoration:none;}.pretty-link a.twitter-hashtag:hover span.at-text,.pretty-link a.twitter-atreply:hover span.at-text,a.pretty-link:hover span.at-text,.pretty-link a.twitter-hashtag:hover span.hash-text,.pretty-link a.twitter-atreply:hover span.hash-text,a.pretty-link:hover span.hash-text{text-decoration:underline;_background:transparent;}span.hash{display:inline-block;filter:alpha(opacity=70);_filter:none;opacity:.7;}span.at{display:inline-block;filter:alpha(opacity=50);_filter:none;opacity:.5;}span.at:hover,span.hash:hover{cursor:pointer;}.tweet-image{float:left;height:48px;overflow:hidden;width:48px;margin-top:3px;}.tweet-content{margin-left:58px;min-height:48px;}.tweet-row{display:block;position:relative;line-height:15px;}.tweet-corner{display:inline-block;margin-right:10px;}.tweet-full-name{color:#999;font-size:12px;}.tweet-user-follow,.tweet-user-follow a{color:#5EBF7E!important;font-size:12px;}.simple-tweet-content .tweet-full-name{font-size:11px;}.tweet-screen-name{font-weight:bold;color:#333!important;}.tweet-user-block-image{width:32px;height:32px;float:left;}.tweet-user-block-name{margin-left:40px;min-height:36px;line-height:16px;padding-top:0;}.tweet-user-block-screen-name{display:inline-block;color:#333;font-weight:bold;margin-top:-2px;}.tweet-user-block-full-name{display:block;font-size:12px;margin-top:1px;color:#999;}.tweet hr{margin:20px 0;}.tweet .speech-bubble{position:absolute;margin:-22px 0 0 32px;width:11px;height:6px;background:url(http://a1.twimg.com/a/1313600695/phoenix/img/divot-bubble.gif) no-repeat;}.tweet-timestamp,.tweet-contributors{color:#999!important;font-size:11px;}body.new-tweet-labels .tweet-timestamp,body.new-tweet-labels .tweet-source{display:inline-block;line-height:1;position:relative;top:3px;}body.new-tweet-labels.mozilla .tweet-timestamp,body.new-tweet-labels.mozilla .tweet-source{top:1px;}.details-pane-tweet .tweet-timestamp{line-height:1.9;}.tweet-source,.tweet-source a{color:#999;font-size:11px;}.tweet-geo-text{color:#999!important;font-size:11px;}span.inlinemedia-icons{display:inline-block;margin-right:0!important;}a .geo-pin{background:#999 url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat -305px -97px;display:inline-block;height:11px;width:7px;}span.geo-pin{background:transparent url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat -224px -64px;display:inline-block;height:11px;width:7px;margin-right:3px!important;margin-top:1px!important;}.stream-item.last-new-tweet{border-bottom:1px solid #b3b3b3!important;z-index:1;}.stream-item:hover span.geo-pin{background-color:transparent!important;}.tweet-text{padding:0;font-family:Arial,"Helvetica Neue",sans-serif;line-height:19px;word-wrap:break-word;}.tweet-text-rtl{direction:rtl;unicode-bidi:embed;text-align:right;padding-right:2px;}.tweet-text-rtl a{direction:ltr;unicode-bidi:bidi-override;}.tweet-meta{color:#999;font-size:11px;font-style:normal;}.tweet-meta i.at{color:#999;font-style:normal;font-size:12px;}.favorited-icon{display:inline-block;background:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat scroll 0 0 transparent;background-position:-64px 0;height:15px;margin:0 2px 0;outline:medium none;text-indent:-99999px;width:15px;display:none;}.tweet-meta .reply-icon{margin-right:-3px!important;margin-bottom:-3px!important;text-indent:-9999px;vertical-align:baseline;}.extra-icons{position:absolute;top:0;right:5px;}.retweet-icon{display:inline-block;background:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat scroll -32px -96px transparent;overflow:hidden;width:15px;height:12px;margin-right:-2px!important;margin-bottom:-3px!important;}.tweet-meta em,.tweet-meta i{font-style:normal;}.tweet-meta .photo,.tweet-meta .video,.tweet-meta .song,.tweet-meta .generic{position:relative;top:1px;width:16px;margin-right:3px;margin-bottom:-3px;height:14px;background:url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat;display:inline-block;vertical-align:top;}.tweet-meta .photo{background-position:0 -96px;}.tweet-meta .video{background-position:-16px -96px;}.tweet-meta .generic{width:12px;background-position:-48px -96px;}.tweet-meta .song{background-position:-128px -96px;}.tweet-meta .icons *{margin:0 2px;}.stream-tweet .tweet-actions{visibility:hidden;_visibility:visible;}.stream-tweet:hover .tweet-actions,.focused-stream-item .stream-tweet .tweet-actions{visibility:visible;}.stream-tweet:hover .activity-count,.focused-stream-item .stream-tweet .activity-actions{display:inline;}.stream-tweet .activity-count{color:#999;}.tweet-actions{font-size:11px;}.tweet-actions .activity-count{display:none;}.details-pane-tweet .tweet-actions{display:block;margin:3px 0 0 -3px;}body.new-tweet-labels .tweet-actions{position:absolute;right:0;top:4px;}.tweet-actions a{outline:none!important;}.tweet-actions a:hover{text-decoration:none;}.tweet-actions a span b{font-weight:normal;}.tweet-actions a:hover span b{text-decoration:underline;}.tweet-actions a span i{text-indent:-99999px;outline:none;background:transparent url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat;width:15px;height:15px;margin:0 2px 0 2px;display:block;}.tweet-actions a span i{display:inline-block;vertical-align:baseline;margin-bottom:-3px;margin-right:3px;position:relative;}.details-pane-tweet .tweet-user-block-screen-name{margin-top:-1px;}.tweet-actions .reply-action span i{background-position:0 0;margin-right:0;margin-left:3px;}.tweet-actions .reply-action:hover span i{background-position:-16px 0;}.tweet-actions .delete-action span i{background-position:-112px 0;}.tweet-actions .delete-action:hover span i{background-position:-128px 0;}.tweet-actions .retweet-action span i{background-position:-176px 0;}.tweet-actions .retweet-action:hover span i{background-position:-192px 0;}.tweet-actions .unretweet-action span i,.tweet-actions .unretweet-action:hover span i{background-position:-240px 0;}.tweet-actions .favorite-action span i{background-position:-32px 0;}.tweet-actions .favorite-action:hover span i{background-position:-48px 0;}.tweet-actions .unfavorite-action span i,.tweet-actions .unfavorite-action:hover span i{background-position:-64px 0;}.tweet-actions .not-relevant-action span i{background-position:-269px -12px;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);}.tweet-actions .not-relevant-action:hover span i{opacity:1;-moz-opacity:1;filter:alpha(opacity=100);}.favorite-icon,.retweet-icon{text-indent:-99999px;outline:none;background:transparent url(http://a1.twimg.com/a/1313600695/phoenix/img/sprite-icons.png) no-repeat;width:14px;height:14px;margin:0 2px -1px 2px;display:inline-block;}.favorite-icon{background-position:-48px 0;}.retweet-icon{background-position:-192px 0;width:15px;}.stream-item .stream-tweet .tweet-corner .tweet-meta .retweet-icon{margin-bottom:-2px!important;}.simple-tweet-image{width:40px;}.simple-tweet-content{margin-left:40px;font-size:13px;}.tweet-dogear{background:url(http://a1.twimg.com/a/1313600695/phoenix/img/tweet-dogear.png) no-repeat 24px 25px;position:absolute;top:0;left:0;width:24px;height:25px;}.favorited .tweet-dogear{background-position:0 0;}.retweeted .tweet-dogear{background-position:0 -50px;}.retweeted.favorited .tweet-dogear{background-position:0 -25px;}.tweet-labels{display:inline-block;}.stream-item:hover .tweet-label,.focused-stream-item .tweet-label{opacity:1;}.tweet-label{background-color:#999;background-image:-webkit-gradient(linear,0 0,0 100%,from(#ccc),to(#aaa));background-image:-moz-linear-gradient(top,#ccc,#aaa);color:#444;margin:0 10px 0 0;padding:1px 5px;text-shadow:0 1px 1px rgba(255,255,255,.5);border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25),0 1px 0 rgba(255,255,255,.25);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25),0 1px 0 rgba(255,255,255,.25);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25),0 1px 0 rgba(255,255,255,.25);color:#fff;font-size:11px;line-height:15px;display:inline-block;}.mozilla .tweet-label{padding-bottom:2px;}.tweet .tweet-label{font-size:11px;display:inline-block;margin:4px 0 0 0;}.promoted-label{background:#ffebbe url(http://a1.twimg.com/a/1313600695/phoenix/img/commercial/garuda-overlay.gif) repeat-x 0 0;background-color:#ffebbe;background:-webkit-gradient(linear,0 0,0 100%,from(#fff39b),to(#ffca7d));background:-moz-linear-gradient(top,#fff39b,#ffca7d);color:#333!important;box-shadow:inset 0 -1px 0 #e4b775;-moz-box-shadow:inset 0 -1px 0 #e4b775;-webkit-box-shadow:inset 0 -1px 0 #e4b775;text-decoration:none;}body .dashboard .user-small-list-item:hover div.user-meta a.promoted-label,body .dashboard .user-small-list-item:hover div.user-meta a.promoted-label-new{color:#333!important;}.stream-item:hover .promoted-label,.focused-stream-item .promoted-label{background-color:#ffebbe;background:-webkit-gradient(linear,0 0,0 100%,from(#ffed65),to(#ffad37));background:-moz-linear-gradient(top,#ffed65,#ffad37);box-shadow:inset 0 -1px 0 #d6902b;-moz-box-shadow:inset 0 -1px 0 #d6902b;-webkit-box-shadow:inset 0 -1px 0 #d6902b;color:#333;}.top-tweet-label{background-color:#d7eaf5;background:-webkit-gradient(linear,0 0,0 100%,from(#d7eaf5),to(#b6d8ea));background:-moz-linear-gradient(top,#d7eaf5,#b6d8ea);color:#333;-webkit-box-shadow:inset 0 -1px 0 #99c5e2;-moz-box-shadow:inset 0 -1px 0 #99c5e2;box-shadow:inset 0 -1px 0 #99c5e2;}.icon-link{font-size:11px;color:#999;}.icon-link i{display:inline-block;margin-right:4px;}.icon-link b{font-weight:normal;color:inherit;}a.icon-link:hover{text-decoration:none;}a.icon-link:hover b{text-decoration:underline;}i.badge-tweet{background:url(http://a1.twimg.com/a/1313600695/phoenix/img/tweet-badges.png) no-repeat 0 0;width:18px;height:14px;position:relative;top:3px;*top:0;}i.badge-tweet-promoted{background-position:0 0;}i.badge-tweet-top{background-position:0 -14px;}.user-name-info .user-meta .icon-link{position:relative;top:-2px;}.stream-item a.tweet-context{color:#999;}ul.trends li a span.tweet-context{padding-left:10px;}ul.trends li.promoted-trend a,ul.trends li.promoted-trend a:hover{text-decoration:none;}ul.trends li.promoted-trend a:hover span.trend-term,ul.trends li.promoted-trend a:hover span.tweet-context b{text-decoration:underline;}ul.trends li.promoted-trend a.trend-link:hover,ul.trends li.promoted-trend a.tweet-label:hover{text-decoration:underline;}ul.trends li.pretty-link a.twitter-hashtag:hover,ul.trends li.pretty-link a.twitter-hashtag:hover span.trend-term{text-decoration:none;}ul.trends li.promoted-trend a.trend-link-arrow:hover,{text-decoration:none;}div.trends-page div.full-page-trends ul.trends li a:hover span.icon-link{color:#2D76B9!important;}.tipsy{padding:5px;font-size:10px;position:absolute;z-index:100000;opacity:.8;filter:alpha(opacity=80);}.tipsy-inner{padding:5px 8px 4px 8px;background-color:black;color:white;max-width:200px;text-align:center;}.tipsy-inner{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;}.tipsy-arrow{position:absolute;background:url(http://a1.twimg.com/a/1313600695/phoenix/img/tipsy.gif) no-repeat top left;width:9px;height:5px;}.tipsy-n .tipsy-arrow{top:0;left:50%;margin-left:-4px;}.tipsy-nw .tipsy-arrow{top:0;left:10px;}.tipsy-ne .tipsy-arrow{top:0;right:10px;}.tipsy-s .tipsy-arrow{bottom:0;left:50%;margin-left:-4px;background-position:bottom left;}.tipsy-sw .tipsy-arrow{bottom:0;left:10px;background-position:bottom left;}.tipsy-se .tipsy-arrow{bottom:0;right:10px;background-position:bottom left;}.tipsy-e .tipsy-arrow{top:50%;margin-top:-4px;right:0;width:5px;height:9px;background-position:top right;}.tipsy-w .tipsy-arrow{top:50%;margin-top:-4px;left:0;width:5px;height:9px;}
101  twitter.com/formatted/css/inline_02.css
... ...
@@ -0,0 +1,101 @@
  1
+  body.user-style-jsreaders {
  2
+          background-position: left 40px;
  3
+      background-attachment: fixed;
  4
+              background-repeat: no-repeat;
  5
+            background-color: #C0DEED;
  6
+          color: #333333;
  7
+    }
  8
+  body.user-style-jsreaders a,
  9
+  body.user-style-jsreaders ul.stream-tabs li,
  10
+  body.user-style-jsreaders .component .promo strong,
  11
+  body.user-style-jsreaders .message-thread-preview:hover .message-count,
  12
+  body.user-style-jsreaders .list-membership-container li.create-a-list {
  13
+          color: #0084B4;
  14
+    }
  15
+  body.user-style-jsreaders .stream-item:hover .tweet-screen-name,
  16
+  body.user-style-jsreaders .stream-item:hover .tweet-timestamp,
  17
+  body.user-style-jsreaders .stream-item:hover .tweet-geo-text,
  18
+  body.user-style-jsreaders .stream-item:hover .user-profile-link,
  19
+  body.user-style-jsreaders span.user-stat-link,
  20
+  body.user-style-jsreaders a.title-link:hover,
  21
+  body.user-style-jsreaders a.user-stats-count:hover span.user-stats-stat,
  22
+  body.user-style-jsreaders .dashboard .user-small-list-item:hover a.user-screen-name,
  23
+  body.user-style-jsreaders .dashboard .user-small-list-item:hover .user-meta a,
  24
+  body.user-style-jsreaders .user-detailed-list-item:hover a.user-screen-name,
  25