Plugin Directory

Changeset 3097807

Timestamp:
06/05/2024 08:53:50 AM (2 months ago)
Author:
akirk
Message:

Friends 2.9.3

Location:
friends/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • friends/trunk/README.md

    r3084764 r3097807  
    66- Tested up to: 6.5
    77- License: GPL-2.0-or-later
    8 - Stable tag: 2.9.2
     8- Stable tag: 2.9.
    99
    1010Your own WordPress at the center of your online activity. Follow friends and other websites and establish friendship relationships between blogs.
     
    9595## Changelog
    9696
     97
     98
     99
     100
     101
     102
     103
    97104### 2.9.2
    98105- Fix Friend Request notification setting saving ([#313])
     
    110117- Fix issues discovered by the plugin check plugin ([#301])
    111118
    112 ### 2.8.9
    113 - One more fix to the update routine for previous version
    114 
    115 ### 2.8.8
    116 - Fix update routine for previous version
    117 
     119[#322]: https://github.com/akirk/friends/pull/322
     120[#321]: https://github.com/akirk/friends/pull/321
     121[#320]: https://github.com/akirk/friends/pull/320
     1228
     123[#317]: https://github.com/akirk/friends/pull/317
     124[#316]: https://github.com/akirk/friends/pull/316
    118125[#313]: https://github.com/akirk/friends/pull/313
    119126[#297]: https://github.com/akirk/friends/pull/297
  • friends/trunk/feed-parsers/class-feed-parser-activitypub.php

    r3084764 r3097807  
    2222    const NAME = 'ActivityPub';
    2323    const URL = 'https://www.w3.org/TR/activitypub/';
    24     const ACTIVITYPUB_USERNAME_REGEXP = '(?:([A-Za-z0-9_-]+)@((?:[A-Za-z0-9_-]+\.)+[A-Za-z]+))';
     24    const ACTIVITYPUB_USERNAME_REGEXP = '(?:([A-Za-z0-9_-]+)@((?:[A-Za-z0-9_-]+\.)+[A-Za-z]+))';
    2525    const EXTERNAL_USERNAME = 'external';
    2626
    2727    private $activitypub_already_handled = array();
    28 
     28    private $mapped_usernames = array();
    2929    private $friends_feed;
    3030
     
    5252        \add_action( 'friends_user_feed_deactivated', array( $this, 'queue_unfollow_user' ), 10 );
    5353        \add_action( 'friends_suggest_display_name', array( $this, 'suggest_display_name' ), 10, 2 );
    54         \add_action( 'mastodon_api_account_follow', array( $this, 'mastodon_api_account_follow' ), 10, 2 );
    5554        \add_action( 'friends_feed_parser_activitypub_follow', array( $this, 'activitypub_follow_user' ), 10, 2 );
    5655        \add_action( 'friends_feed_parser_activitypub_unfollow', array( $this, 'activitypub_unfollow_user' ), 10, 2 );
     
    9998        add_filter( 'friends_get_activitypub_metadata', array( $this, 'friends_activitypub_metadata' ), 10, 2 );
    10099
    101         add_filter( 'mastodon_api_timelines_args', array( $this, 'mastodon_api_timelines_args' ) );
     100        add_filter( 'mastodon_api_mapback_user_id', array( $this, 'mastodon_api_mapback_user_id' ), 30, 4 );
     101        add_filter( 'friends_mastodon_api_username', array( $this, 'friends_mastodon_api_username' ) );
    102102        add_filter( 'mastodon_api_account', array( $this, 'mastodon_api_account_augment_friend_posts' ), 9, 4 );
    103         add_filter( 'mastodon_api_status', array( $this, 'mastodon_api_status_add_reblogs' ), 20, 3 );
     103        add_filter( 'mastodon_api_status', array( $this, 'mastodon_api_status_add_reblogs' ), 0, 3 );
    104104        add_filter( 'mastodon_api_canonical_user_id', array( $this, 'mastodon_api_canonical_user_id' ), 20, 3 );
     105
     106
     107
     108
    105109    }
    106110
     
    178182
    179183
    180     public function mastodon_api_timelines_args( $args ) {
    181         $args['post_type'][] = Friends::CPT;
    182         return $args;
     184    public function mastodon_api_mapback_user_id( $user_id ) {
     185        if ( ! is_string( $user_id ) ) {
     186            return $user_id;
     187        }
     188
     189        $user = self::determine_mastodon_api_user( $user_id );
     190        if ( $user ) {
     191            return $user->ID;
     192        }
     193        return $user_id;
     194    }
     195
     196    public function mastodon_api_account_update_remapped( $account, $user_id, $request = null, $post = null ) {
     197        if ( ! $account instanceof \Enable_Mastodon_Apps\Entity\Account ) {
     198                return $account;
     199        }
     200
     201        if ( in_array( $account->id, $this->mapped_usernames, true ) ) {
     202                return $account;
     203        }
     204
     205            static $updated_accounts = array();
     206        if ( ! isset( $updated_accounts[ $account->id ] ) ) {
     207                $updated_account = \Activitypub\Integration\Enable_Mastodon_Apps::api_account_external( null, $account->id );
     208            if ( ! $updated_account || is_wp_error( $updated_account ) || is_wp_error( $updated_account->acct ) ) {
     209                    $updated_accounts[ $account->id ] = $account;
     210            } else {
     211                    $updated_accounts[ $account->id ] = $updated_account;
     212            }
     213        }
     214            return $updated_accounts[ $account->id ];
    183215    }
    184216
     
    237269            if ( isset( $meta['reblog'] ) && $meta['reblog'] ) {
    238270                $status->reblog = clone $status;
     271
    239272                $status->reblog->id = \Enable_Mastodon_Apps\Mastodon_API::remap_reblog_id( $status->reblog->id );
    240273            }
     
    273306            } else {
    274307                $account = apply_filters( 'mastodon_api_account', null, $friend_user->ID );
     308
    275309            }
    276310
     
    300334    }
    301335
    302     public function mastodon_api_account_follow( $user_id, $request ) {
    303         return apply_filters( 'friends_create_and_follow', null, $user_id );
     336    public function friends_mastodon_api_username( $user_id ) {
     337        if ( ! isset( $this->mapped_usernames[ $user_id ] ) ) {
     338            $user = User::get_user_by_id( $user_id );
     339            if ( $user ) {
     340                foreach ( $user->get_active_feeds() as $user_feed ) {
     341                    if ( 'activitypub' === $user_feed->get_parser() ) {
     342                        $this->mapped_usernames[ $user_id ] = self::convert_actor_to_mastodon_handle( $user_feed->get_url() );
     343                        break;
     344                    }
     345                }
     346            }
     347        }
     348
     349        if ( ! isset( $this->mapped_usernames[ $user_id ] ) ) {
     350            $this->mapped_usernames[ $user_id ] = $user_id;
     351        }
     352
     353        return $this->mapped_usernames[ $user_id ];
     354    }
     355
     356    public function mastodon_api_comment_parent_post_id( $in_reply_to_id ) {
     357        $in_reply_to_id = \Enable_Mastodon_Apps\Mastodon_API::maybe_get_remapped_url( $in_reply_to_id );
     358        if ( ! is_string( $in_reply_to_id ) ) {
     359            return $in_reply_to_id;
     360        }
     361        if ( filter_var( $in_reply_to_id, FILTER_VALIDATE_URL ) ) {
     362            $in_reply_to_id = $this->cache_url( $in_reply_to_id );
     363        }
     364        return $in_reply_to_id;
    304365    }
    305366
    306367    public function mastodon_api_canonical_user_id( $user_id ) {
    307368        static $user_id_map = array();
    308         if ( ! isset( $user_id_map[ $user_id ] ) ) {
     369        if ( ! isset( $user_id_map[ $user_id ] ) ) {
    309370            $user_feed = User_Feed::get_by_url( $user_id );
    310371            if ( $user_feed && ! is_wp_error( $user_feed ) ) {
     
    447508     */
    448509    public static function friends_webfinger_resolve( $url, $incoming_url ) {
     510
     511
     512
     513
     514
     515
     516
     517
     518
     519
    449520        if ( preg_match( '/^@?' . self::ACTIVITYPUB_USERNAME_REGEXP . '$/i', $incoming_url ) ) {
    450521            $resolved_url = \Activitypub\Webfinger::resolve( $incoming_url );
    451522            if ( ! is_wp_error( $resolved_url ) ) {
     523
    452524                return $resolved_url;
    453525            }
     
    646718        if ( isset( $meta['attributedTo']['id'] ) && $meta['attributedTo']['id'] ) {
    647719            $mentions[ $meta['attributedTo']['id'] ] = $meta['attributedTo']['id'];
     720
     721
     722
     723
     724
     725
     726
     727
     728
     729
     730
     731
     732
     733
     734
     735
     736
     737
    648738        }
    649739
     
    13681458        }
    13691459
    1370         $post_id = Feed::url_to_postid( $url );
     1460        $post_id = $this->cache_url( $url );
     1461
     1462        if ( ! $post_id ) {
     1463            $this->show_message_on_frontend(
     1464                sprintf(
     1465                    // translators: %s is a URl.
     1466                    __( 'Could not retrieve URL %s', 'friends' ),
     1467                    '<a href="' . esc_attr( $url ) . '">' . Friends::url_truncate( $url ) . '</a>'
     1468                )
     1469            );
     1470            return;
     1471        }
     1472        $post_id = $this->cache_url( $url );
     1473
     1474        $user = User::get_post_author( get_post( $post_id ) );
     1475        wp_safe_redirect( $user->get_local_friends_page_url( $post_id ) . $append_to_redirect );
     1476        exit;
     1477    }
     1478
     1479    public function cache_url( $url ) {
     1480        $post_id = apply_filters( 'friends_cache_url_post_id', false, $url );
    13711481        if ( ! $post_id ) {
    13721482            $user = $this->get_external_user();
     
    14021512            }
    14031513        }
    1404 
    1405         if ( ! $post_id ) {
    1406             $this->show_message_on_frontend(
    1407                 sprintf(
    1408                     // translators: %s is a URl.
    1409                     __( 'Could not retrieve URL %s', 'friends' ),
    1410                     '<a href="' . esc_attr( $url ) . '">' . Friends::url_truncate( $url ) . '</a>'
    1411                 )
    1412             );
    1413             return;
    1414         }
    1415 
    1416         $user = User::get_post_author( get_post( $post_id ) );
    1417         wp_safe_redirect( $user->get_local_friends_page_url( $post_id ) . $append_to_redirect );
    1418         exit;
     1514        return $post_id;
    14191515    }
    14201516
     
    21432239    }
    21442240
    2145     public function append_comment_form( $content, $post_id, User $friend_user = null, User_Feed $user_feed = null ) {
    2146         if ( User_Feed::get_parser_for_post_id( $post_id ) !== self::SLUG ) {
    2147             return $content;
    2148         }
    2149 
    2150         ob_start();
     2241    public static function comment_form( $post_id ) {
     2242        $post = get_post( $post_id );
     2243        $mentions = self::extract_html_mentions( $post->post_content );
     2244        $meta = get_post_meta( $post->ID, self::SLUG, true );
     2245        if ( isset( $meta['attributedTo']['id'] ) && $meta['attributedTo']['id'] ) {
     2246            $mentions[ $meta['attributedTo']['id'] ] = $meta['attributedTo']['id'];
     2247        }
     2248
     2249        $comment_content = '';
     2250        if ( $mentions ) {
     2251            $comment_content = '@' . implode( ' @', array_map( array( self::class, 'convert_actor_to_mastodon_handle' ), array_keys( $mentions ) ) ) . ' ';
     2252        }
     2253        $html5 = current_theme_supports( 'html5', 'comment-form' ) ? 'html5' : 'xhtml';
     2254        $required_attribute = ( $html5 ? ' required' : ' required="required"' );
     2255        $required_indicator = ' ' . wp_required_field_indicator();
     2256
    21512257        \comment_form(
    21522258            array(
    21532259                'title_reply'          => __( 'Send reply via ActivityPub', 'friends' ),
     2260
     2261
    21542262                'logged_in_as'         => '',
    21552263                'comment_notes_before' => '',
     2264
     2265
     2266
     2267
     2268
     2269
     2270
     2271
     2272
    21562273            ),
    21572274            $post_id
    21582275        );
    2159 
     2276    }
     2277
     2278    public function append_comment_form( $content, $post_id, User $friend_user = null, User_Feed $user_feed = null ) {
     2279        $meta = get_post_meta( $post_id, self::SLUG, true );
     2280        if ( ! $meta ) {
     2281            if ( User_Feed::get_parser_for_post_id( $post_id ) !== self::SLUG ) {
     2282                return $content;
     2283            }
     2284        }
     2285
     2286        ob_start();
     2287        self::comment_form( $post_id );
    21602288        $comment_form = ob_get_contents();
    21612289        ob_end_clean();
  • friends/trunk/friends.css

    r3084764 r3097807  
    1 div{min-width:0}@keyframes loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes slide-down{0%{opacity:0;transform:translateY(-1.6rem)}100%{opacity:1;transform:translateY(0)}}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}hr{box-sizing:content-box;height:0;overflow:visible}a{background-color:rgba(0,0,0,0);-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}address{font-style:normal}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:"SF Mono","Segoe UI Mono","Roboto Mono",Menlo,Courier,monospace;font-size:1em}dfn{font-style:italic}small{font-size:80%;font-weight:400}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}fieldset{border:0;margin:0;padding:0}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item;outline:none}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,*::before,*::after{box-sizing:inherit}html{box-sizing:border-box;font-size:20px;line-height:1.5;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{background:#fff;color:#48427c;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;font-size:.8rem;overflow-x:hidden;text-rendering:optimizeLegibility}a{color:#2e5bec;outline:none;text-decoration:none}a:focus{box-shadow:0 0 0 .1rem rgba(46,91,236,.2)}a:focus,a:hover,a:active,a.active{color:#1341d4;text-decoration:underline}a:visited{color:#5d80f0}h1,h2,h3,h4,h5,h6{color:inherit;font-weight:500;line-height:1.2;margin-bottom:.5em;margin-top:0}.h1,.h2,.h3,.h4,.h5,.h6{font-weight:500}h1,.h1{font-size:2rem}h2,.h2{font-size:1.6rem}h3,.h3{font-size:1.4rem}h4,.h4{font-size:1.2rem}h5,.h5{font-size:1rem}h6,.h6{font-size:.8rem}p{margin:0 0 1.2rem}a,ins,u{text-decoration-skip:ink edges}abbr[title]{border-bottom:.05rem dotted;cursor:help;text-decoration:none}kbd{border-radius:.1rem;line-height:1.25;padding:.1rem .2rem;background:#3e396b;color:#fff;font-size:.7rem}mark{background:#ffe9b3;color:#48427c;border-bottom:.05rem solid #ffd367;border-radius:.1rem;padding:.05rem .1rem 0}blockquote{border-left:.1rem solid #f6f6fa;margin-left:0;padding:.4rem .8rem}blockquote p:last-child{margin-bottom:0}ul,ol{margin:.8rem 0 .8rem .8rem;padding:0}ul ul,ul ol,ol ul,ol ol{margin:.8rem 0 .8rem .8rem}ul li,ol li{margin-top:.4rem}ul{list-style:disc inside}ul ul{list-style-type:circle}ol{list-style:decimal inside}ol ol{list-style-type:lower-alpha}dl dt{font-weight:bold}dl dd{margin:.4rem 0 .8rem 0}html:lang(zh),html:lang(zh-Hans),.lang-zh,.lang-zh-hans{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",sans-serif}html:lang(zh-Hant),.lang-zh-hant{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang TC","Hiragino Sans CNS","Microsoft JhengHei","Helvetica Neue",sans-serif}html:lang(ja),.lang-ja{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Hiragino Sans","Hiragino Kaku Gothic Pro","Yu Gothic",YuGothic,Meiryo,"Helvetica Neue",sans-serif}html:lang(ko),.lang-ko{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Malgun Gothic","Helvetica Neue",sans-serif}:lang(zh) ins,:lang(zh) u,:lang(ja) ins,:lang(ja) u,.lang-cjk ins,.lang-cjk u{border-bottom:.05rem solid;text-decoration:none}:lang(zh) del+del,:lang(zh) del+s,:lang(zh) ins+ins,:lang(zh) ins+u,:lang(zh) s+del,:lang(zh) s+s,:lang(zh) u+ins,:lang(zh) u+u,:lang(ja) del+del,:lang(ja) del+s,:lang(ja) ins+ins,:lang(ja) ins+u,:lang(ja) s+del,:lang(ja) s+s,:lang(ja) u+ins,:lang(ja) u+u,.lang-cjk del+del,.lang-cjk del+s,.lang-cjk ins+ins,.lang-cjk ins+u,.lang-cjk s+del,.lang-cjk s+s,.lang-cjk u+ins,.lang-cjk u+u{margin-left:.125em}.form-group:not(:last-child){margin-bottom:.4rem}fieldset{margin-bottom:.8rem}legend{font-size:.9rem;font-weight:500;margin-bottom:.8rem}.form-label{display:block;line-height:1.2rem;padding:.3rem 0}.form-label.label-sm{font-size:.7rem;padding:.1rem 0}.form-label.label-lg{font-size:.9rem;padding:.4rem 0}.form-input{appearance:none;background:#fff;background-image:none;border:.05rem solid #d6d4e8;border-radius:.1rem;color:#48427c;display:block;font-size:.8rem;height:1.8rem;line-height:1.2rem;max-width:100%;outline:none;padding:.25rem .4rem;position:relative;transition:background .2s,border .2s,box-shadow .2s,color .2s;width:100%}.form-input:focus{box-shadow:0 0 0 .1rem rgba(46,91,236,.2);border-color:#2e5bec}.form-input::placeholder{color:#d6d4e8}.form-input.input-sm{font-size:.7rem;height:1.4rem;padding:.05rem .3rem}.form-input.input-lg{font-size:.9rem;height:2rem;padding:.35rem .6rem}.form-input.input-inline{display:inline-block;vertical-align:middle;width:auto}.form-input[type=file]{height:auto}textarea.form-input,textarea.form-input.input-lg,textarea.form-input.input-sm{height:auto}.form-input-hint{color:#d6d4e8;font-size:.7rem;margin-top:.2rem}.has-success .form-input-hint,.is-success+.form-input-hint{color:#32b643}.has-error .form-input-hint,.is-error+.form-input-hint{color:#e85600}.form-select{appearance:none;border:.05rem solid #d6d4e8;border-radius:.1rem;color:inherit;font-size:.8rem;height:1.8rem;line-height:1.2rem;outline:none;padding:.25rem .4rem;vertical-align:middle;width:100%;background:#fff}.form-select:focus{box-shadow:0 0 0 .1rem rgba(46,91,236,.2);border-color:#2e5bec}.form-select::-ms-expand{display:none}.form-select.select-sm{font-size:.7rem;height:1.4rem;padding:.05rem 1.1rem .05rem .3rem}.form-select.select-lg{font-size:.9rem;height:2rem;padding:.35rem 1.4rem .35rem .6rem}.form-select[size],.form-select[multiple]{height:auto;padding:.25rem .4rem}.form-select[size] option,.form-select[multiple] option{padding:.1rem .2rem}.form-select:not([multiple]):not([size]){background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right .35rem center/0.4rem .5rem;padding-right:1.2rem}.has-icon-left,.has-icon-right{position:relative}.has-icon-left .form-icon,.has-icon-right .form-icon{height:.8rem;margin:0 .25rem;position:absolute;top:50%;transform:translateY(-50%);width:.8rem;z-index:2}.has-icon-left .form-icon{left:.05rem}.has-icon-left .form-input{padding-left:1.3rem}.has-icon-right .form-icon{right:.05rem}.has-icon-right .form-input{padding-right:1.3rem}.form-checkbox,.form-radio,.form-switch{display:block;line-height:1.2rem;margin:.2rem 0;min-height:1.4rem;padding:.1rem .4rem .1rem 1.2rem;position:relative}.form-checkbox input,.form-radio input,.form-switch input{clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;position:absolute;width:1px}.form-checkbox input:focus+.form-icon,.form-radio input:focus+.form-icon,.form-switch input:focus+.form-icon{box-shadow:0 0 0 .1rem rgba(46,91,236,.2);border-color:#2e5bec}.form-checkbox input:checked+.form-icon,.form-radio input:checked+.form-icon,.form-switch input:checked+.form-icon{background:#2e5bec;border-color:#2e5bec}.form-checkbox .form-icon,.form-radio .form-icon,.form-switch .form-icon{border:.05rem solid #d6d4e8;cursor:pointer;display:inline-block;position:absolute;transition:background .2s,border .2s,box-shadow .2s,color .2s}.form-checkbox.input-sm,.form-radio.input-sm,.form-switch.input-sm{font-size:.7rem;margin:0}.form-checkbox.input-lg,.form-radio.input-lg,.form-switch.input-lg{font-size:.9rem;margin:.3rem 0}.form-checkbox .form-icon,.form-radio .form-icon{background:#fff;height:.8rem;left:0;top:.3rem;width:.8rem}.form-checkbox input:active+.form-icon,.form-radio input:active+.form-icon{background:#f5f5fa}.form-checkbox .form-icon{border-radius:.1rem}.form-checkbox input:checked+.form-icon::before{background-clip:padding-box;border:.1rem solid #fff;border-left-width:0;border-top-width:0;content:"";height:9px;left:50%;margin-left:-3px;margin-top:-6px;position:absolute;top:50%;transform:rotate(45deg);width:6px}.form-checkbox input:indeterminate+.form-icon{background:#2e5bec;border-color:#2e5bec}.form-checkbox input:indeterminate+.form-icon::before{background:#fff;content:"";height:2px;left:50%;margin-left:-5px;margin-top:-1px;position:absolute;top:50%;width:10px}.form-radio .form-icon{border-radius:50%}.form-radio input:checked+.form-icon::before{background:#fff;border-radius:50%;content:"";height:6px;left:50%;position:absolute;top:50%;transform:translate(-50%, -50%);width:6px}.form-switch{padding-left:2rem}.form-switch .form-icon{background:#d6d4e8;background-clip:padding-box;border-radius:.45rem;height:.9rem;left:0;top:.25rem;width:1.6rem}.form-switch .form-icon::before{background:#fff;border-radius:50%;content:"";display:block;height:.8rem;left:0;position:absolute;top:0;transition:background .2s,border .2s,box-shadow .2s,color .2s,left .2s;width:.8rem}.form-switch input:checked+.form-icon::before{left:14px}.form-switch input:active+.form-icon::before{background:#fff}.input-group{display:flex}.input-group .input-group-addon{background:#fff;border:.05rem solid #d6d4e8;border-radius:.1rem;line-height:1.2rem;padding:.25rem .4rem;white-space:nowrap}.input-group .input-group-addon.addon-sm{font-size:.7rem;padding:.05rem .3rem}.input-group .input-group-addon.addon-lg{font-size:.9rem;padding:.35rem .6rem}.input-group .form-input,.input-group .form-select{flex:1 1 auto;width:1%}.input-group .input-group-btn{z-index:1}.input-group .form-input:first-child:not(:last-child),.input-group .form-select:first-child:not(:last-child),.input-group .input-group-addon:first-child:not(:last-child),.input-group .input-group-btn:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.input-group .form-input:not(:first-child):not(:last-child),.input-group .form-select:not(:first-child):not(:last-child),.input-group .input-group-addon:not(:first-child):not(:last-child),.input-group .input-group-btn:not(:first-child):not(:last-child){border-radius:0;margin-left:-0.05rem}.input-group .form-input:last-child:not(:first-child),.input-group .form-select:last-child:not(:first-child),.input-group .input-group-addon:last-child:not(:first-child),.input-group .input-group-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-0.05rem}.input-group .form-input:focus,.input-group .form-select:focus,.input-group .input-group-addon:focus,.input-group .input-group-btn:focus{z-index:2}.input-group .form-select{width:auto}.input-group.input-inline{display:inline-flex}.has-success .form-input,.form-input.is-success,.has-success .form-select,.form-select.is-success{background:#f9fdfa;border-color:#32b643}.has-success .form-input:focus,.form-input.is-success:focus,.has-success .form-select:focus,.form-select.is-success:focus{box-shadow:0 0 0 .1rem rgba(50,182,67,.2)}.has-error .form-input,.form-input.is-error,.has-error .form-select,.form-select.is-error{background:#fffaf7;border-color:#e85600}.has-error .form-input:focus,.form-input.is-error:focus,.has-error .form-select:focus,.form-select.is-error:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.has-error .form-checkbox .form-icon,.form-checkbox.is-error .form-icon,.has-error .form-radio .form-icon,.form-radio.is-error .form-icon,.has-error .form-switch .form-icon,.form-switch.is-error .form-icon{border-color:#e85600}.has-error .form-checkbox input:checked+.form-icon,.form-checkbox.is-error input:checked+.form-icon,.has-error .form-radio input:checked+.form-icon,.form-radio.is-error input:checked+.form-icon,.has-error .form-switch input:checked+.form-icon,.form-switch.is-error input:checked+.form-icon{background:#e85600;border-color:#e85600}.has-error .form-checkbox input:focus+.form-icon,.form-checkbox.is-error input:focus+.form-icon,.has-error .form-radio input:focus+.form-icon,.form-radio.is-error input:focus+.form-icon,.has-error .form-switch input:focus+.form-icon,.form-switch.is-error input:focus+.form-icon{box-shadow:0 0 0 .1rem rgba(232,86,0,.2);border-color:#e85600}.has-error .form-checkbox input:indeterminate+.form-icon,.form-checkbox.is-error input:indeterminate+.form-icon{background:#e85600;border-color:#e85600}.form-input:not(:placeholder-shown):invalid{border-color:#e85600}.form-input:not(:placeholder-shown):invalid:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2);background:#fffaf7}.form-input:not(:placeholder-shown):invalid+.form-input-hint{color:#e85600}.form-input:disabled,.form-input.disabled,.form-select:disabled,.form-select.disabled{background-color:#f5f5fa;cursor:not-allowed;opacity:.5}.form-input[readonly]{background-color:#fff}input:disabled+.form-icon,input.disabled+.form-icon{background:#f5f5fa;cursor:not-allowed;opacity:.5}.form-switch input:disabled+.form-icon::before,.form-switch input.disabled+.form-icon::before{background:#fff}.form-horizontal{padding:.4rem 0}.form-horizontal .form-group{display:flex;flex-wrap:wrap}.form-inline{display:inline-block}.btn,.friends-page .nav-links div a,.friends-page .nav-links div a:hover{appearance:none;background:#fff;border:.05rem solid #2e5bec;border-radius:.1rem;color:#2e5bec;cursor:pointer;display:inline-block;font-size:.8rem;height:1.8rem;line-height:1.2rem;outline:none;padding:.25rem .4rem;text-align:center;text-decoration:none;transition:background .2s,border .2s,box-shadow .2s,color .2s;user-select:none;vertical-align:middle;white-space:nowrap}.btn:focus,.friends-page .nav-links div a:focus{box-shadow:0 0 0 .1rem rgba(46,91,236,.2)}.btn:focus,.friends-page .nav-links div a:focus,.btn:hover,.friends-page .nav-links div a:hover{background:#dde5fc;border-color:#2050eb;text-decoration:none}.btn:active,.friends-page .nav-links div a:active,.btn.active,.friends-page .nav-links div a.active{background:#2050eb;border-color:#1444dd;color:#fff;text-decoration:none}.btn:active.loading::after,.friends-page .nav-links div a:active.loading::after,.btn.active.loading::after,.friends-page .nav-links div a.active.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn[disabled],.friends-page .nav-links div a[disabled],.btn:disabled,.friends-page .nav-links div a:disabled,.btn.disabled,.friends-page .nav-links div a.disabled{cursor:default;opacity:.5;pointer-events:none}.btn.btn-primary,.friends-page .nav-links div a,.friends-page .nav-links div a:hover{background:#2e5bec;border-color:#2050eb;color:#fff}.btn.btn-primary:focus,.friends-page .nav-links div a:focus,.btn.btn-primary:hover,.friends-page .nav-links div a:hover{background:#1749ea;border-color:#1444dd;color:#fff}.btn.btn-primary:active,.friends-page .nav-links div a:active,.btn.btn-primary.active,.friends-page .nav-links div a.active{background:#1545e2;border-color:#1341d4;color:#fff}.btn.btn-primary.loading::after,.friends-page .nav-links div a.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn.btn-success,.friends-page .nav-links div a.btn-success{background:#32b643;border-color:#2faa3f;color:#fff}.btn.btn-success:focus,.friends-page .nav-links div a.btn-success:focus{box-shadow:0 0 0 .1rem rgba(50,182,67,.2)}.btn.btn-success:focus,.friends-page .nav-links div a.btn-success:focus,.btn.btn-success:hover,.friends-page .nav-links div a.btn-success:hover{background:#30ae40;border-color:#2da23c;color:#fff}.btn.btn-success:active,.friends-page .nav-links div a.btn-success:active,.btn.btn-success.active,.friends-page .nav-links div a.btn-success.active{background:#2a9a39;border-color:#278e34;color:#fff}.btn.btn-success.loading::after,.friends-page .nav-links div a.btn-success.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn.btn-error,.friends-page .nav-links div a.btn-error{background:#e85600;border-color:#d95000;color:#fff}.btn.btn-error:focus,.friends-page .nav-links div a.btn-error:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.btn.btn-error:focus,.friends-page .nav-links div a.btn-error:focus,.btn.btn-error:hover,.friends-page .nav-links div a.btn-error:hover{background:#de5200;border-color:#cf4d00;color:#fff}.btn.btn-error:active,.friends-page .nav-links div a.btn-error:active,.btn.btn-error.active,.friends-page .nav-links div a.btn-error.active{background:#c44900;border-color:#b54300;color:#fff}.btn.btn-error.loading::after,.friends-page .nav-links div a.btn-error.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn.btn-link,.friends-page .nav-links div a.btn-link{background:rgba(0,0,0,0);border-color:rgba(0,0,0,0);color:#2e5bec}.btn.btn-link:focus,.friends-page .nav-links div a.btn-link:focus,.btn.btn-link:hover,.friends-page .nav-links div a.btn-link:hover,.btn.btn-link:active,.friends-page .nav-links div a.btn-link:active,.btn.btn-link.active,.friends-page .nav-links div a.btn-link.active{color:#1341d4}.btn.btn-sm,.friends-page .nav-links div a.btn-sm{font-size:.7rem;height:1.4rem;padding:.05rem .3rem}.btn.btn-lg,.friends-page .nav-links div a.btn-lg{font-size:.9rem;height:2rem;padding:.35rem .6rem}.btn.btn-block,.friends-page .nav-links div a.btn-block{display:block;width:100%}.btn.btn-action,.friends-page .nav-links div a.btn-action{width:1.8rem;padding-left:0;padding-right:0}.btn.btn-action.btn-sm,.friends-page .nav-links div a.btn-action.btn-sm{width:1.4rem}.btn.btn-action.btn-lg,.friends-page .nav-links div a.btn-action.btn-lg{width:2rem}.btn.btn-clear,.friends-page .nav-links div a.btn-clear{background:rgba(0,0,0,0);border:0;color:currentColor;height:1rem;line-height:.8rem;margin-left:.2rem;margin-right:-2px;opacity:1;padding:.1rem;text-decoration:none;width:1rem}.btn.btn-clear:focus,.friends-page .nav-links div a.btn-clear:focus,.btn.btn-clear:hover,.friends-page .nav-links div a.btn-clear:hover{background:rgba(255,255,255,.5);opacity:.95}.btn.btn-clear::before,.friends-page .nav-links div a.btn-clear::before{content:"✕"}.btn-group{display:inline-flex;flex-wrap:wrap}.btn-group .btn,.btn-group .friends-page .nav-links div a,.friends-page .nav-links div .btn-group a{flex:1 0 auto}.btn-group .btn:first-child:not(:last-child),.btn-group .friends-page .nav-links div a:first-child:not(:last-child),.friends-page .nav-links div .btn-group a:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group .btn:not(:first-child):not(:last-child),.btn-group .friends-page .nav-links div a:not(:first-child):not(:last-child),.friends-page .nav-links div .btn-group a:not(:first-child):not(:last-child){border-radius:0;margin-left:-0.05rem}.btn-group .btn:last-child:not(:first-child),.btn-group .friends-page .nav-links div a:last-child:not(:first-child),.friends-page .nav-links div .btn-group a:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-0.05rem}.btn-group .btn:focus,.btn-group .friends-page .nav-links div a:focus,.friends-page .nav-links div .btn-group a:focus,.btn-group .btn:hover,.btn-group .friends-page .nav-links div a:hover,.friends-page .nav-links div .btn-group a:hover,.btn-group .btn:active,.btn-group .friends-page .nav-links div a:active,.friends-page .nav-links div .btn-group a:active,.btn-group .btn.active,.btn-group .friends-page .nav-links div a.active,.friends-page .nav-links div .btn-group a.active{z-index:1}.btn-group.btn-group-block{display:flex}.btn-group.btn-group-block .btn,.btn-group.btn-group-block .friends-page .nav-links div a,.friends-page .nav-links div .btn-group.btn-group-block a{flex:1 0 0}.container{margin-left:auto;margin-right:auto;padding-left:.4rem;padding-right:.4rem;width:100%}.container.grid-xl{max-width:1296px}.container.grid-lg{max-width:976px}.container.grid-md{max-width:856px}.container.grid-sm{max-width:616px}.container.grid-xs{max-width:496px}.show-xs,.show-sm,.show-md,.show-lg,.show-xl{display:none !important}.cols,.columns{display:flex;flex-wrap:wrap;margin-left:-0.4rem;margin-right:-0.4rem}.cols.col-gapless,.columns.col-gapless{margin-left:0;margin-right:0}.cols.col-gapless>.column,.columns.col-gapless>.column{padding-left:0;padding-right:0}.cols.col-oneline,.columns.col-oneline{flex-wrap:nowrap;overflow-x:auto}[class~=col-],.column{flex:1;max-width:100%;padding-left:.4rem;padding-right:.4rem}[class~=col-].col-12,[class~=col-].col-11,[class~=col-].col-10,[class~=col-].col-9,[class~=col-].col-8,[class~=col-].col-7,[class~=col-].col-6,[class~=col-].col-5,[class~=col-].col-4,[class~=col-].col-3,[class~=col-].col-2,[class~=col-].col-1,[class~=col-].col-auto,.column.col-12,.column.col-11,.column.col-10,.column.col-9,.column.col-8,.column.col-7,.column.col-6,.column.col-5,.column.col-4,.column.col-3,.column.col-2,.column.col-1,.column.col-auto{flex:none}.col-12{width:100%}.col-11{width:91.66666667%}.col-10{width:83.33333333%}.col-9{width:75%}.col-8{width:66.66666667%}.col-7{width:58.33333333%}.col-6{width:50%}.col-5{width:41.66666667%}.col-4{width:33.33333333%}.col-3{width:25%}.col-2{width:16.66666667%}.col-1{width:8.33333333%}.col-auto{flex:0 0 auto;max-width:none;width:auto}.col-mx-auto{margin-left:auto;margin-right:auto}.col-ml-auto{margin-left:auto}.col-mr-auto{margin-right:auto}@media(max-width: 1280px){.col-xl-12,.col-xl-11,.col-xl-10,.col-xl-9,.col-xl-8,.col-xl-7,.col-xl-6,.col-xl-5,.col-xl-4,.col-xl-3,.col-xl-2,.col-xl-1,.col-xl-auto{flex:none}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-auto{width:auto}.hide-xl{display:none !important}.show-xl{display:block !important}}@media(max-width: 960px){.col-lg-12,.col-lg-11,.col-lg-10,.col-lg-9,.col-lg-8,.col-lg-7,.col-lg-6,.col-lg-5,.col-lg-4,.col-lg-3,.col-lg-2,.col-lg-1,.col-lg-auto{flex:none}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-auto{width:auto}.hide-lg{display:none !important}.show-lg{display:block !important}}@media(max-width: 840px){.col-md-12,.col-md-11,.col-md-10,.col-md-9,.col-md-8,.col-md-7,.col-md-6,.col-md-5,.col-md-4,.col-md-3,.col-md-2,.col-md-1,.col-md-auto{flex:none}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-auto{width:auto}.hide-md{display:none !important}.show-md{display:block !important}}@media(max-width: 600px){.col-sm-12,.col-sm-11,.col-sm-10,.col-sm-9,.col-sm-8,.col-sm-7,.col-sm-6,.col-sm-5,.col-sm-4,.col-sm-3,.col-sm-2,.col-sm-1,.col-sm-auto{flex:none}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-auto{width:auto}.hide-sm{display:none !important}.show-sm{display:block !important}}@media(max-width: 480px){.col-xs-12,.col-xs-11,.col-xs-10,.col-xs-9,.col-xs-8,.col-xs-7,.col-xs-6,.col-xs-5,.col-xs-4,.col-xs-3,.col-xs-2,.col-xs-1,.col-xs-auto{flex:none}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-auto{width:auto}.hide-xs{display:none !important}.show-xs{display:block !important}}.navbar{align-items:stretch;display:flex;flex-wrap:wrap;justify-content:space-between}.navbar .navbar-section{align-items:center;display:flex;flex:1 0 0}.navbar .navbar-section:not(:first-child):last-child{justify-content:flex-end}.navbar .navbar-center{align-items:center;display:flex;flex:0 0 auto}.navbar .navbar-brand{font-size:.9rem;text-decoration:none}.off-canvas{display:flex;flex-flow:nowrap;height:100%;position:relative;width:100%}.off-canvas .off-canvas-toggle{display:block;position:absolute;top:.4rem;transition:none;z-index:1;left:.4rem}.off-canvas .off-canvas-sidebar{background:#fff;bottom:0;min-width:10rem;overflow-y:auto;position:fixed;top:0;transition:transform .25s;z-index:200;left:0;transform:translateX(-100%)}.off-canvas .off-canvas-content{flex:1 1 auto;height:100%;padding:.4rem .4rem .4rem 4rem}.off-canvas .off-canvas-overlay{background:rgba(62,57,107,.1);border-color:rgba(0,0,0,0);border-radius:0;bottom:0;display:none;height:100%;left:0;position:fixed;right:0;top:0;width:100%}.off-canvas .off-canvas-sidebar:target,.off-canvas .off-canvas-sidebar.active{transform:translateX(0)}.off-canvas .off-canvas-sidebar:target~.off-canvas-overlay,.off-canvas .off-canvas-sidebar.active~.off-canvas-overlay{display:block;z-index:100}@media(min-width: 960px){.off-canvas.off-canvas-sidebar-show .off-canvas-toggle{display:none}.off-canvas.off-canvas-sidebar-show .off-canvas-sidebar{flex:0 0 auto;position:relative;transform:none}.off-canvas.off-canvas-sidebar-show .off-canvas-overlay{display:none !important}}.accordion input:checked~.accordion-header>.icon:first-child,.accordion[open] .accordion-header>.icon:first-child{transform:rotate(90deg)}.accordion input:checked~.accordion-body,.accordion[open] .accordion-body{max-height:50rem}.accordion .accordion-header{display:block;padding:.2rem .4rem}.accordion .accordion-header .icon{transition:transform .25s}.accordion .accordion-body{margin-bottom:.4rem;max-height:0;overflow:hidden;transition:max-height .25s}summary.accordion-header::-webkit-details-marker{display:none}.card{background:#fff;border:.05rem solid #f6f6fa;border-radius:.1rem;display:flex;flex-direction:column}.card .card-header,.card .card-body,.card .card-footer{padding:.8rem;padding-bottom:0}.card .card-header:last-child,.card .card-body:last-child,.card .card-footer:last-child{padding-bottom:.8rem}.card .card-body{flex:1 1 auto}.card .card-image{padding-top:.8rem}.card .card-image:first-child{padding-top:0}.card .card-image:first-child img{border-top-left-radius:.1rem;border-top-right-radius:.1rem}.card .card-image:last-child img{border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem}.nav{display:flex;flex-direction:column;list-style:none;margin:.2rem 0}.nav .nav-item a{color:#7770b3;padding:.2rem .4rem;text-decoration:none}.nav .nav-item a:focus,.nav .nav-item a:hover{color:#2e5bec}.nav .nav-item.active>a{color:#5b549d;font-weight:bold}.nav .nav-item.active>a:focus,.nav .nav-item.active>a:hover{color:#2e5bec}.nav .nav{margin-bottom:.4rem;margin-left:.8rem}.chip{align-items:center;background:#f5f5fa;border-radius:5rem;display:inline-flex;font-size:90%;height:1.2rem;line-height:.8rem;margin:.1rem;max-width:320px;overflow:hidden;padding:.2rem .4rem;text-decoration:none;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.chip.active{background:#2e5bec;color:#fff}.chip .avatar{margin-left:-0.4rem;margin-right:.2rem}.chip .btn-clear{border-radius:50%;transform:scale(0.75)}.menu{box-shadow:0 .05rem .2rem rgba(62,57,107,.3);background:#fff;border-radius:.1rem;list-style:none;margin:0;min-width:180px;padding:.4rem;transform:translateY(0.2rem);z-index:300}.menu.menu-nav{background:rgba(0,0,0,0);box-shadow:none}.menu .menu-item{margin-top:0;padding:0 .4rem;position:relative;text-decoration:none}.menu .menu-item>a{border-radius:.1rem;color:inherit;display:block;margin:0 -0.4rem;padding:.2rem .4rem;text-decoration:none}.menu .menu-item>a:focus,.menu .menu-item>a:hover{background:#dde5fc;color:#2e5bec}.menu .menu-item>a:active,.menu .menu-item>a.active{background:#dde5fc;color:#2e5bec}.menu .menu-item .form-checkbox,.menu .menu-item .form-radio,.menu .menu-item .form-switch{margin:.1rem 0}.menu .menu-item+.menu-item{margin-top:.2rem}.menu .menu-badge{align-items:center;display:flex;height:100%;position:absolute;right:0;top:0}.menu .menu-badge .label{margin-right:.4rem}.form-autocomplete{position:relative}.form-autocomplete .form-autocomplete-input{align-content:flex-start;display:flex;flex-wrap:wrap;height:auto;min-height:1.6rem;padding:.1rem}.form-autocomplete .form-autocomplete-input.is-focused{box-shadow:0 0 0 .1rem rgba(46,91,236,.2);border-color:#2e5bec}.form-autocomplete .form-autocomplete-input .form-input{border-color:rgba(0,0,0,0);box-shadow:none;display:inline-block;flex:1 0 auto;height:1.2rem;line-height:.8rem;margin:.1rem;width:auto}.form-autocomplete .menu{left:0;position:absolute;top:100%;width:100%}.form-autocomplete.autocomplete-oneline .form-autocomplete-input{flex-wrap:nowrap;overflow-x:auto}.form-autocomplete.autocomplete-oneline .chip{flex:1 0 auto}.loading{color:rgba(0,0,0,0) !important;min-height:.8rem;pointer-events:none;position:relative}.loading::after{animation:loading 500ms infinite linear;background:rgba(0,0,0,0);border:.1rem solid #2e5bec;border-radius:50%;border-right-color:rgba(0,0,0,0);border-top-color:rgba(0,0,0,0);content:"";display:block;height:.8rem;left:50%;margin-left:-0.4rem;margin-top:-0.4rem;opacity:1;padding:0;position:absolute;top:50%;width:.8rem;z-index:1}.loading.loading-lg{min-height:2rem}.loading.loading-lg::after{height:1.6rem;margin-left:-0.8rem;margin-top:-0.8rem;width:1.6rem}.text-primary{color:#2e5bec !important}a.text-primary:focus,a.text-primary:hover{color:#1749ea}a.text-primary:visited{color:#456dee}.text-secondary{color:#cfdafb !important}a.text-secondary:focus,a.text-secondary:hover{color:#b8c7f9}a.text-secondary:visited{color:#e7ecfd}.text-gray{color:#d6d4e8 !important}a.text-gray:focus,a.text-gray:hover{color:#c6c4df}a.text-gray:visited{color:#e6e5f1}.text-light{color:#fff !important}a.text-light:focus,a.text-light:hover{color:#f2f2f2}a.text-light:visited{color:#fff}.text-dark{color:#48427c !important}a.text-dark:focus,a.text-dark:hover{color:#3e396b}a.text-dark:visited{color:#514b8c}.text-success{color:#32b643 !important}a.text-success:focus,a.text-success:hover{color:#2da23c}a.text-success:visited{color:#39c94b}.text-warning{color:#ffb700 !important}a.text-warning:focus,a.text-warning:hover{color:#e6a500}a.text-warning:visited{color:#ffbe1a}.text-error{color:#e85600 !important}a.text-error:focus,a.text-error:hover{color:#cf4d00}a.text-error:visited{color:#ff6003}.bg-primary{background:#2e5bec !important;color:#fff}.bg-secondary{background:#dde5fc !important}.bg-dark{background:#3e396b !important;color:#fff}.bg-gray{background:#fff !important}.bg-success{background:#32b643 !important;color:#fff}.bg-warning{background:#ffb700 !important;color:#fff}.bg-error{background:#e85600 !important;color:#fff}.divider,.divider-vert{display:block;position:relative}.divider[data-content]::after,.divider-vert[data-content]::after{background:#fff;color:#d6d4e8;content:attr(data-content);display:inline-block;font-size:.7rem;padding:0 .4rem;transform:translateY(-0.65rem)}.divider{border-top:.05rem solid #eee;height:.05rem;margin:.4rem 0}.divider[data-content]{margin:.8rem 0}.divider-vert{display:block;padding:.8rem}.divider-vert::before{border-left:.05rem solid #f6f6fa;bottom:.4rem;content:"";display:block;left:50%;position:absolute;top:.4rem;transform:translateX(-50%)}.divider-vert[data-content]::after{left:50%;padding:.2rem 0;position:absolute;top:50%;transform:translate(-50%, -50%)}.d-block{display:block}.d-inline{display:inline}.d-inline-block{display:inline-block}.d-flex{display:flex}.d-inline-flex{display:inline-flex}.d-none,.d-hide{display:none !important}.d-visible{visibility:visible}.d-invisible{visibility:hidden}.text-hide{background:rgba(0,0,0,0);border:0;color:rgba(0,0,0,0);font-size:0;line-height:0;text-shadow:none}.text-assistive{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.clearfix::after{clear:both;content:"";display:table}.float-left{float:left !important}.float-right{float:right !important}.p-relative{position:relative !important}.p-absolute{position:absolute !important}.p-fixed{position:fixed !important}.p-sticky{position:sticky !important}.p-centered{display:block;float:none;margin-left:auto;margin-right:auto}.flex-centered{align-items:center;display:flex;justify-content:center}.m-0{margin:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mr-0{margin-right:0 !important}.mt-0{margin-top:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-bottom:0 !important;margin-top:0 !important}.m-1{margin:.2rem !important}.mb-1{margin-bottom:.2rem !important}.ml-1{margin-left:.2rem !important}.mr-1{margin-right:.2rem !important}.mt-1{margin-top:.2rem !important}.mx-1{margin-left:.2rem !important;margin-right:.2rem !important}.my-1{margin-bottom:.2rem !important;margin-top:.2rem !important}.m-2{margin:.4rem !important}.mb-2{margin-bottom:.4rem !important}.ml-2{margin-left:.4rem !important}.mr-2{margin-right:.4rem !important}.mt-2{margin-top:.4rem !important}.mx-2{margin-left:.4rem !important;margin-right:.4rem !important}.my-2{margin-bottom:.4rem !important;margin-top:.4rem !important}.p-0{padding:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.pr-0{padding-right:0 !important}.pt-0{padding-top:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-bottom:0 !important;padding-top:0 !important}.p-1{padding:.2rem !important}.pb-1{padding-bottom:.2rem !important}.pl-1{padding-left:.2rem !important}.pr-1{padding-right:.2rem !important}.pt-1{padding-top:.2rem !important}.px-1{padding-left:.2rem !important;padding-right:.2rem !important}.py-1{padding-bottom:.2rem !important;padding-top:.2rem !important}.p-2{padding:.4rem !important}.pb-2{padding-bottom:.4rem !important}.pl-2{padding-left:.4rem !important}.pr-2{padding-right:.4rem !important}.pt-2{padding-top:.4rem !important}.px-2{padding-left:.4rem !important;padding-right:.4rem !important}.py-2{padding-bottom:.4rem !important;padding-top:.4rem !important}.friends-dropdown{display:inline-block;position:relative}.friends-dropdown .menu{animation:slide-down .15s ease 1;display:none;left:0;max-height:50vh;overflow-y:auto;position:absolute;top:100%;z-index:300}.friends-dropdown.friends-dropdown-right .menu{left:auto;right:0}.friends-dropdown.active .menu,.friends-dropdown .friends-dropdown-toggle:focus+.menu,.friends-dropdown .menu:hover{display:block}.friends-dropdown .btn-group .friends-dropdown-toggle:nth-last-child(2){border-bottom-right-radius:.1rem;border-top-right-radius:.1rem}.off-canvas .off-canvas-content{margin-top:32px;padding-top:1rem;padding-left:1rem;padding-right:1rem}@media(min-width: 960px){.off-canvas .off-canvas-content{padding-left:2rem;padding-right:2rem}}.off-canvas .off-canvas-toggle{top:3rem;left:1rem}.off-canvas .off-canvas-content header.navbar{margin-bottom:32px}.off-canvas .off-canvas-sidebar{margin-top:32px;width:12rem;background:#f7f8f9}.off-canvas .off-canvas-content header.navbar #page-title{margin-left:3rem}h2#page-title a.dashicons{font-size:.8em;margin-right:.5em;vertical-align:baseline}@media(min-width: 960px){.off-canvas .off-canvas-content header.navbar #page-title{margin-left:0}}::backdrop{background-color:rgba(0,0,0,.75)}.friends-page{background-color:#fff;color:#48427c;overflow-wrap:break-word;min-height:100vh}.friends-page code,.friends-page pre{overflow:auto}.friends-page a:visited{color:#1341d4}.friends-page a.off-canvas-toggle:visited{color:#2e5bec}.friends-page a,.friends-page a:visited,.friends-page a:hover,.friends-page a:focus,.friends-page a:active{color:#2e5bec}.friends-page summary.accordion-header{color:#2e5bec;cursor:pointer;white-space:nowrap;text-overflow:ellipsis}.friends-page .accordion[open] .accordion-body{max-height:100rem}.friends-page .menu a,.friends-page .menu a:active,.friends-page .menu a:visited{color:#333}.friends-page .menu .menu-item+.menu-item{margin-top:0}.friends-page .menu .divider[data-content]{margin:.8rem 0 .4rem 0}.friends-page .menu .menu-item.friends-dropdown{margin-top:.2rem;margin-bottom:.4rem}.friends-page .menu .menu-item small.label-secondary{display:none}.friends-page .menu .menu-item:hover small.label-secondary{display:inline-block}.friends-page .menu .has-icon-left .ab-icon{line-height:1.2;margin-right:.2em}.friends-page .menu .has-icon-left .ab-icon .dashicons.dashicons-plus{color:#32c170;font-size:.5em;margin-left:-1.5em;margin-top:-2.1em}.friends-page button,.friends-page input{min-height:auto}.friends-page .d-none{display:none}.friends-page dialog{border:0;box-shadow:0 0 10px rgba(0,0,0,.6)}.friends-page header.navbar section.navbar-section.author{flex:3}.friends-page summary.quick-status-panel-opener{margin-bottom:2em;cursor:pointer}.friends-page article .card-body img,.friends-page article .card-body video{max-width:100% !important;height:auto}.friends-page article.format-status{border-bottom:1px solid #3e396b;padding-bottom:2em;margin-bottom:2em}.friends-page article.format-status div.teaser{display:none}.friends-page article.format-status header div.overflow,.friends-page article.format-status header div.post-meta,.friends-page article.format-status header div.teaser{margin-top:.4em}.friends-page article.format-status header div.overflow .btn,.friends-page article.format-status header .nav-links div.overflow a,.friends-page .nav-links article.format-status header div.overflow a{margin-top:-0.5em}.friends-page .card{height:100%;box-shadow:none;padding:0;border:0;border-bottom:1px solid #eee;padding:0 0 1em 0;margin:0 0 1em 0}.friends-page .card .card-body{padding:0}.friends-page .card .card-body ul,.friends-page .card .card-body ol{margin-left:1rem}.friends-page .card .card-body img,.friends-page .card .card-body video{max-width:100% !important;height:auto}.friends-page .card .card-body .wp-block-image.alignfull,.friends-page .card .card-body .wp-block-image.alignwide,.friends-page .card .card-body .wp-block-gallery.alignfull,.friends-page .card .card-body .wp-block-gallery.alignwide{margin:0}.friends-page .card .card-body .wp-block-image figcaption,.friends-page .card .card-body .wp-block-gallery figcaption{text-align:center;font-size:.8rem}.friends-page .card .card-body p.note{border-left:4px solid #eee;padding:1rem;margin-left:1rem;font-size:.8rem;color:#666;background-color:#f7f7f7}@media(min-width: 960px){.friends-page .card{border:0;box-shadow:0 .25rem 1rem rgba(48,55,66,.15);border-bottom:1px solid #87a6bc;padding:0 0 1em 0;margin:0 0 1em 0}.friends-page .card .card-body{padding:1rem}.friends-page .card .card-title{padding-left:1rem}}.friends-page .friends-brand{position:fixed}.friends-page .friends-brand .friends-logo a,.friends-page .friends-brand .friends-logo a:visited,.friends-page .friends-brand .friends-logo a:active{color:#2e5bec}.friends-page .friends-brand .friends-logo h2{display:inline-block;font-size:1.2rem;font-weight:700;line-height:1.5rem;margin-top:1.5rem;margin-bottom:0;margin-left:1.5rem;margin-right:.3rem;text-transform:uppercase}@media(min-width: 782px){.friends-page .friends-brand .friends-logo{margin-top:1rem}}.friends-page .friends-brand .friends-sidebar-customize{margin-left:1.5rem;color:#999;font-size:.4rem;line-height:.6rem;display:block}.friends-page #friends-sidebar .friends-nav{bottom:1.5rem;-webkit-overflow-scrolling:touch;overflow-y:auto;padding:.5rem 1.5rem;position:fixed;top:5.5rem;width:12rem}.friends-page #friends-sidebar .friends-nav .accordion-header{padding:0}.friends-page #quick-post-panel{display:none;margin-bottom:2em}.friends-page #quick-post-panel.open{display:block}.friends-page #quick-post-panel p.description{font-color:#3e396b;font-size:.6rem}.friends-page #quick-post-panel .activitypub_preview{background-color:#f7f8f9;padding:.5em;margin-top:1em;margin-bottom:1em;max-height:6em;overflow-y:auto}.friends-page #quick-post-panel .activitypub_preview figcaption{float:right}.friends-page #quick-post-panel .activitypub_preview figcaption a:any-link{color:#999}.friends-page img.avatar{border-radius:100%}.friends-page div.friends-widget{margin-bottom:2em}.friends-page div.friends-main-widget h1 a{color:#222;text-decoration:none}.friends-page div.friends-widget h4 a{color:#222;text-decoration:none}.friends-page div.friends-widget a.open-requests{font-size:90%;font-weight:normal}.friends-page div.friends-widget ul{margin:.5em 0 1em 0;padding:0}.friends-page div.friends-widget h5{margin-bottom:.5em;font-size:.7rem;text-transform:uppercase;font-weight:bold;letter-spacing:2px}.friends-page section.posts .card header.entry-header{display:flex;font-size:88%;line-height:1.4;max-width:100%;margin:auto -0.4rem;padding:.5rem;padding-bottom:1.5em}.friends-page section.posts .card header.entry-header div.avatar{margin-right:.5em}@media(min-width: 960px){.friends-page section.posts .card header.entry-header{padding:.8rem;padding-bottom:1.5em}}.friends-page section.posts .card h4.entry-title{font-size:130%;line-height:1.4;margin:0 0 1em 0;text-align:left}.friends-page section.posts .card h4.entry-title a{text-decoration:none}.friends-page section.posts .card h4.entry-title a span.dashicons{margin-top:4px;margin-left:6px;color:#32c170}.friends-page section.posts .card h4.entry-title:after{display:none}.friends-page section.posts span.reading-time::before{content:" | "}.friends-page section.posts article.status-trash{opacity:.5}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child) div.card-body,.friends-page section.posts article.collapsed div.card-body{display:none}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child) header,.friends-page section.posts article.collapsed header{padding-left:1rem;padding-bottom:0}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child) header div.avatar,.friends-page section.posts article.collapsed header div.avatar{display:none}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child) header div.author,.friends-page section.posts article.collapsed header div.author{display:inline}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child) header div.permalink,.friends-page section.posts article.collapsed header div.permalink{display:inline}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child) header div.permalink::before,.friends-page section.posts article.collapsed header div.permalink::before{content:" | "}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child) h4.card-title,.friends-page section.posts article.collapsed h4.card-title{margin-bottom:0}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child).format-status,.friends-page section.posts article.collapsed.format-status{padding-bottom:0;margin-bottom:.5em;width:100%}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child).format-status .overflow,.friends-page section.posts article.collapsed.format-status .overflow{width:6em;margin-left:1em}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child).format-status div.teaser,.friends-page section.posts article.collapsed.format-status div.teaser{text-overflow:ellipsis;width:calc(100% - 7em);overflow:hidden;white-space:nowrap;display:inline-block}@media(min-width: 960px){.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child).format-status div.teaser,.friends-page section.posts article.collapsed.format-status div.teaser{width:calc(100% - 25em)}}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child).format-status header,.friends-page section.posts article.collapsed.format-status header{padding-left:0;margin-bottom:0}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child).format-status header div.post-meta,.friends-page section.posts article.collapsed.format-status header div.post-meta{max-width:15em;max-height:1.5em;overflow:hidden;text-overflow:ellipsis}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child).format-status header div.avatar,.friends-page section.posts article.collapsed.format-status header div.avatar{display:block}.friends-page section.posts.all-collapsed article:not(.uncollapsed):not(:only-child) footer.entry-meta,.friends-page section.posts article.collapsed footer.entry-meta{display:none}.friends-page section.posts footer.entry-meta{display:flex;justify-content:flex-end}.friends-page section.posts footer.entry-meta a{color:#2e5bec}.friends-page section.posts footer.entry-meta a .dashicons{vertical-align:middle}.friends-page section.posts footer.entry-meta .btn:hover,.friends-page section.posts footer.entry-meta .nav-links div a:hover,.friends-page .nav-links div section.posts footer.entry-meta a:hover{color:#2e5bec}.friends-page section.posts footer.comments-content{display:none}.friends-page ul.friend-posts img.avatar{vertical-align:middle;margin-right:.3em}.friends-page a.explanation-friends-auth-link,.friends-page a.friends-auth-link,.friends-page a.friends-auth-link:link,.friends-page a.friends-auth-link:active,.friends-page a.friends-auth-link,.friends-page a.friends-auth-link:link,.friends-page a.friends-auth-link:active{color:#333}.friends-page a.friends-auth-link span.dashicons-admin-users{display:inline}.friends-page a.friends-auth-link span.dashicons,.friends-page button.friends-auth-link span.dashicons{color:#32c170;margin-left:6px}.friends-page a.explanation-friends-auth-link:hover,.friends-page a.friends-auth-link :hover,.friends-page a.friends-auth-link:hover,.friends-page a.friends-auth-link:hover span.dashicons,.friends-page button.friends-auth-link:hover span.dashicons{color:#32c170}.friends-page a.explanation-friends-auth-link:hover,.friends-page a.friends-auth-link :hover,.friends-page a.friends-auth-link:hover{text-decoration:underline}.friends-page a.explanation-friends-auth-link:hover span,.friends-page a.friends-auth-link :hover span,.friends-page a.friends-auth-link:hover span{text-decoration:none}.friends-page .form-autocomplete .form-autocomplete-input .form-input{width:auto}.friends-page .friends-reaction-picker button{padding:.5rem;margin:0;font-size:18px;background-color:#fff;border:0;cursor:pointer;z-index:999999}.friends-page .friends-reaction-picker button:focus{outline:none}.friends-page a.display-message.unread{font-weight:bold}.friends-page .friend-message .conversation .messages{max-height:40em;overflow:auto}.friends-page .friend-message .conversation .messages .wp-block-friends-message{max-width:80%;margin:1em;border-bottom:1px solid #eee}.friends-page .invisible{font-size:0;line-height:0;display:inline-block;width:0;height:0;position:absolute}.friends-page .invisible img,.friends-page .invisible svg{margin:0 !important;border:0 !important;padding:0 !important;width:0 !important;height:0 !important}.friends-page .ellipsis::after{content:"…"}/*# sourceMappingURL=friends.css.map */
     1div{min-width:0}@keyframes loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes slide-down{0%{opacity:0;transform:translateY(-1.6rem)}100%{opacity:1;transform:translateY(0)}}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}hr{box-sizing:content-box;height:0;overflow:visible}a{background-color:rgba(0,0,0,0);-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}address{font-style:normal}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:"SF Mono","Segoe UI Mono","Roboto Mono",Menlo,Courier,monospace;font-size:1em}dfn{font-style:italic}small{font-size:80%;font-weight:400}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}fieldset{border:0;margin:0;padding:0}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item;outline:none}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,*::before,*::after{box-sizing:inherit}html{box-sizing:border-box;font-size:20px;line-height:1.5;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{background:#fff;color:#48427c;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;font-size:.8rem;overflow-x:hidden;text-rendering:optimizeLegibility}a{color:#2e5bec;outline:none;text-decoration:none}a:focus{box-shadow:0 0 0 .1rem rgba(46,91,236,.2)}a:focus,a:hover,a:active,a.active{color:#1341d4;text-decoration:underline}a:visited{color:#5d80f0}h1,h2,h3,h4,h5,h6{color:inherit;font-weight:500;line-height:1.2;margin-bottom:.5em;margin-top:0}.h1,.h2,.h3,.h4,.h5,.h6{font-weight:500}h1,.h1{font-size:2rem}h2,.h2{font-size:1.6rem}h3,.h3{font-size:1.4rem}h4,.h4{font-size:1.2rem}h5,.h5{font-size:1rem}h6,.h6{font-size:.8rem}p{margin:0 0 1.2rem}a,ins,u{text-decoration-skip:ink edges}abbr[title]{border-bottom:.05rem dotted;cursor:help;text-decoration:none}kbd{border-radius:.1rem;line-height:1.25;padding:.1rem .2rem;background:#3e396b;color:#fff;font-size:.7rem}mark{background:#ffe9b3;color:#48427c;border-bottom:.05rem solid #ffd367;border-radius:.1rem;padding:.05rem .1rem 0}blockquote{border-left:.1rem solid #f6f6fa;margin-left:0;padding:.4rem .8rem}blockquote p:last-child{margin-bottom:0}ul,ol{margin:.8rem 0 .8rem .8rem;padding:0}ul ul,ul ol,ol ul,ol ol{margin:.8rem 0 .8rem .8rem}ul li,ol li{margin-top:.4rem}ul{list-style:disc inside}ul ul{list-style-type:circle}ol{list-style:decimal inside}ol ol{list-style-type:lower-alpha}dl dt{font-weight:bold}dl dd{margin:.4rem 0 .8rem 0}html:lang(zh),html:lang(zh-Hans),.lang-zh,.lang-zh-hans{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",sans-serif}html:lang(zh-Hant),.lang-zh-hant{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang TC","Hiragino Sans CNS","Microsoft JhengHei","Helvetica Neue",sans-serif}html:lang(ja),.lang-ja{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Hiragino Sans","Hiragino Kaku Gothic Pro","Yu Gothic",YuGothic,Meiryo,"Helvetica Neue",sans-serif}html:lang(ko),.lang-ko{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Malgun Gothic","Helvetica Neue",sans-serif}:lang(zh) ins,:lang(zh) u,:lang(ja) ins,:lang(ja) u,.lang-cjk ins,.lang-cjk u{border-bottom:.05rem solid;text-decoration:none}:lang(zh) del+del,:lang(zh) del+s,:lang(zh) ins+ins,:lang(zh) ins+u,:lang(zh) s+del,:lang(zh) s+s,:lang(zh) u+ins,:lang(zh) u+u,:lang(ja) del+del,:lang(ja) del+s,:lang(ja) ins+ins,:lang(ja) ins+u,:lang(ja) s+del,:lang(ja) s+s,:lang(ja) u+ins,:lang(ja) u+u,.lang-cjk del+del,.lang-cjk del+s,.lang-cjk ins+ins,.lang-cjk ins+u,.lang-cjk s+del,.lang-cjk s+s,.lang-cjk u+ins,.lang-cjk u+u{margin-left:.125em}.form-group:not(:last-child){margin-bottom:.4rem}fieldset{margin-bottom:.8rem}legend{font-size:.9rem;font-weight:500;margin-bottom:.8rem}.form-label{display:block;line-height:1.2rem;padding:.3rem 0}.form-label.label-sm{font-size:.7rem;padding:.1rem 0}.form-label.label-lg{font-size:.9rem;padding:.4rem 0}.form-input{appearance:none;background:#fff;background-image:none;border:.05rem solid #d6d4e8;border-radius:.1rem;color:#48427c;display:block;font-size:.8rem;height:1.8rem;line-height:1.2rem;max-width:100%;outline:none;padding:.25rem .4rem;position:relative;transition:background .2s,border .2s,box-shadow .2s,color .2s;width:100%}.form-input:focus{box-shadow:0 0 0 .1rem rgba(46,91,236,.2);border-color:#2e5bec}.form-input::placeholder{color:#d6d4e8}.form-input.input-sm{font-size:.7rem;height:1.4rem;padding:.05rem .3rem}.form-input.input-lg{font-size:.9rem;height:2rem;padding:.35rem .6rem}.form-input.input-inline{display:inline-block;vertical-align:middle;width:auto}.form-input[type=file]{height:auto}textarea.form-input,textarea.form-input.input-lg,textarea.form-input.input-sm{height:auto}.form-input-hint{color:#d6d4e8;font-size:.7rem;margin-top:.2rem}.has-success .form-input-hint,.is-success+.form-input-hint{color:#32b643}.has-error .form-input-hint,.is-error+.form-input-hint{color:#e85600}.form-select{appearance:none;border:.05rem solid #d6d4e8;border-radius:.1rem;color:inherit;font-size:.8rem;height:1.8rem;line-height:1.2rem;outline:none;padding:.25rem .4rem;vertical-align:middle;width:100%;background:#fff}.form-select:focus{box-shadow:0 0 0 .1rem rgba(46,91,236,.2);border-color:#2e5bec}.form-select::-ms-expand{display:none}.form-select.select-sm{font-size:.7rem;height:1.4rem;padding:.05rem 1.1rem .05rem .3rem}.form-select.select-lg{font-size:.9rem;height:2rem;padding:.35rem 1.4rem .35rem .6rem}.form-select[size],.form-select[multiple]{height:auto;padding:.25rem .4rem}.form-select[size] option,.form-select[multiple] option{padding:.1rem .2rem}.form-select:not([multiple]):not([size]){background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right .35rem center/0.4rem .5rem;padding-right:1.2rem}.has-icon-left,.has-icon-right{position:relative}.has-icon-left .form-icon,.has-icon-right .form-icon{height:.8rem;margin:0 .25rem;position:absolute;top:50%;transform:translateY(-50%);width:.8rem;z-index:2}.has-icon-left .form-icon{left:.05rem}.has-icon-left .form-input{padding-left:1.3rem}.has-icon-right .form-icon{right:.05rem}.has-icon-right .form-input{padding-right:1.3rem}.form-checkbox,.form-radio,.form-switch{display:block;line-height:1.2rem;margin:.2rem 0;min-height:1.4rem;padding:.1rem .4rem .1rem 1.2rem;position:relative}.form-checkbox input,.form-radio input,.form-switch input{clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;position:absolute;width:1px}.form-checkbox input:focus+.form-icon,.form-radio input:focus+.form-icon,.form-switch input:focus+.form-icon{box-shadow:0 0 0 .1rem rgba(46,91,236,.2);border-color:#2e5bec}.form-checkbox input:checked+.form-icon,.form-radio input:checked+.form-icon,.form-switch input:checked+.form-icon{background:#2e5bec;border-color:#2e5bec}.form-checkbox .form-icon,.form-radio .form-icon,.form-switch .form-icon{border:.05rem solid #d6d4e8;cursor:pointer;display:inline-block;position:absolute;transition:background .2s,border .2s,box-shadow .2s,color .2s}.form-checkbox.input-sm,.form-radio.input-sm,.form-switch.input-sm{font-size:.7rem;margin:0}.form-checkbox.input-lg,.form-radio.input-lg,.form-switch.input-lg{font-size:.9rem;margin:.3rem 0}.form-checkbox .form-icon,.form-radio .form-icon{background:#fff;height:.8rem;left:0;top:.3rem;width:.8rem}.form-checkbox input:active+.form-icon,.form-radio input:active+.form-icon{background:#f5f5fa}.form-checkbox .form-icon{border-radius:.1rem}.form-checkbox input:checked+.form-icon::before{background-clip:padding-box;border:.1rem solid #fff;border-left-width:0;border-top-width:0;content:"";height:9px;left:50%;margin-left:-3px;margin-top:-6px;position:absolute;top:50%;transform:rotate(45deg);width:6px}.form-checkbox input:indeterminate+.form-icon{background:#2e5bec;border-color:#2e5bec}.form-checkbox input:indeterminate+.form-icon::before{background:#fff;content:"";height:2px;left:50%;margin-left:-5px;margin-top:-1px;position:absolute;top:50%;width:10px}.form-radio .form-icon{border-radius:50%}.form-radio input:checked+.form-icon::before{background:#fff;border-radius:50%;content:"";height:6px;left:50%;position:absolute;top:50%;transform:translate(-50%, -50%);width:6px}.form-switch{padding-left:2rem}.form-switch .form-icon{background:#d6d4e8;background-clip:padding-box;border-radius:.45rem;height:.9rem;left:0;top:.25rem;width:1.6rem}.form-switch .form-icon::before{background:#fff;border-radius:50%;content:"";display:block;height:.8rem;left:0;position:absolute;top:0;transition:background .2s,border .2s,box-shadow .2s,color .2s,left .2s;width:.8rem}.form-switch input:checked+.form-icon::before{left:14px}.form-switch input:active+.form-icon::before{background:#fff}.input-group{display:flex}.input-group .input-group-addon{background:#fff;border:.05rem solid #d6d4e8;border-radius:.1rem;line-height:1.2rem;padding:.25rem .4rem;white-space:nowrap}.input-group .input-group-addon.addon-sm{font-size:.7rem;padding:.05rem .3rem}.input-group .input-group-addon.addon-lg{font-size:.9rem;padding:.35rem .6rem}.input-group .form-input,.input-group .form-select{flex:1 1 auto;width:1%}.input-group .input-group-btn{z-index:1}.input-group .form-input:first-child:not(:last-child),.input-group .form-select:first-child:not(:last-child),.input-group .input-group-addon:first-child:not(:last-child),.input-group .input-group-btn:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.input-group .form-input:not(:first-child):not(:last-child),.input-group .form-select:not(:first-child):not(:last-child),.input-group .input-group-addon:not(:first-child):not(:last-child),.input-group .input-group-btn:not(:first-child):not(:last-child){border-radius:0;margin-left:-0.05rem}.input-group .form-input:last-child:not(:first-child),.input-group .form-select:last-child:not(:first-child),.input-group .input-group-addon:last-child:not(:first-child),.input-group .input-group-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-0.05rem}.input-group .form-input:focus,.input-group .form-select:focus,.input-group .input-group-addon:focus,.input-group .input-group-btn:focus{z-index:2}.input-group .form-select{width:auto}.input-group.input-inline{display:inline-flex}.has-success .form-input,.form-input.is-success,.has-success .form-select,.form-select.is-success{background:#f9fdfa;border-color:#32b643}.has-success .form-input:focus,.form-input.is-success:focus,.has-success .form-select:focus,.form-select.is-success:focus{box-shadow:0 0 0 .1rem rgba(50,182,67,.2)}.has-error .form-input,.form-input.is-error,.has-error .form-select,.form-select.is-error{background:#fffaf7;border-color:#e85600}.has-error .form-input:focus,.form-input.is-error:focus,.has-error .form-select:focus,.form-select.is-error:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.has-error .form-checkbox .form-icon,.form-checkbox.is-error .form-icon,.has-error .form-radio .form-icon,.form-radio.is-error .form-icon,.has-error .form-switch .form-icon,.form-switch.is-error .form-icon{border-color:#e85600}.has-error .form-checkbox input:checked+.form-icon,.form-checkbox.is-error input:checked+.form-icon,.has-error .form-radio input:checked+.form-icon,.form-radio.is-error input:checked+.form-icon,.has-error .form-switch input:checked+.form-icon,.form-switch.is-error input:checked+.form-icon{background:#e85600;border-color:#e85600}.has-error .form-checkbox input:focus+.form-icon,.form-checkbox.is-error input:focus+.form-icon,.has-error .form-radio input:focus+.form-icon,.form-radio.is-error input:focus+.form-icon,.has-error .form-switch input:focus+.form-icon,.form-switch.is-error input:focus+.form-icon{box-shadow:0 0 0 .1rem rgba(232,86,0,.2);border-color:#e85600}.has-error .form-checkbox input:indeterminate+.form-icon,.form-checkbox.is-error input:indeterminate+.form-icon{background:#e85600;border-color:#e85600}.form-input:not(:placeholder-shown):invalid{border-color:#e85600}.form-input:not(:placeholder-shown):invalid:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2);background:#fffaf7}.form-input:not(:placeholder-shown):invalid+.form-input-hint{color:#e85600}.form-input:disabled,.form-input.disabled,.form-select:disabled,.form-select.disabled{background-color:#f5f5fa;cursor:not-allowed;opacity:.5}.form-input[readonly]{background-color:#fff}input:disabled+.form-icon,input.disabled+.form-icon{background:#f5f5fa;cursor:not-allowed;opacity:.5}.form-switch input:disabled+.form-icon::before,.form-switch input.disabled+.form-icon::before{background:#fff}.form-horizontal{padding:.4rem 0}.form-horizontal .form-group{display:flex;flex-wrap:wrap}.form-inline{display:inline-block}.btn,.friends-page .nav-links div a,.friends-page .nav-links div a:hover{appearance:none;background:#fff;border:.05rem solid #2e5bec;border-radius:.1rem;color:#2e5bec;cursor:pointer;display:inline-block;font-size:.8rem;height:1.8rem;line-height:1.2rem;outline:none;padding:.25rem .4rem;text-align:center;text-decoration:none;transition:background .2s,border .2s,box-shadow .2s,color .2s;user-select:none;vertical-align:middle;white-space:nowrap}.btn:focus,.friends-page .nav-links div a:focus{box-shadow:0 0 0 .1rem rgba(46,91,236,.2)}.btn:focus,.friends-page .nav-links div a:focus,.btn:hover,.friends-page .nav-links div a:hover{background:#dde5fc;border-color:#2050eb;text-decoration:none}.btn:active,.friends-page .nav-links div a:active,.btn.active,.friends-page .nav-links div a.active{background:#2050eb;border-color:#1444dd;color:#fff;text-decoration:none}.btn:active.loading::after,.friends-page .nav-links div a:active.loading::after,.btn.active.loading::after,.friends-page .nav-links div a.active.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn[disabled],.friends-page .nav-links div a[disabled],.btn:disabled,.friends-page .nav-links div a:disabled,.btn.disabled,.friends-page .nav-links div a.disabled{cursor:default;opacity:.5;pointer-events:none}.btn.btn-primary,.friends-page .nav-links div a,.friends-page .nav-links div a:hover{background:#2e5bec;border-color:#2050eb;color:#fff}.btn.btn-primary:focus,.friends-page .nav-links div a:focus,.btn.btn-primary:hover,.friends-page .nav-links div a:hover{background:#1749ea;border-color:#1444dd;color:#fff}.btn.btn-primary:active,.friends-page .nav-links div a:active,.btn.btn-primary.active,.friends-page .nav-links div a.active{background:#1545e2;border-color:#1341d4;color:#fff}.btn.btn-primary.loading::after,.friends-page .nav-links div a.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn.btn-success,.friends-page .nav-links div a.btn-success{background:#32b643;border-color:#2faa3f;color:#fff}.btn.btn-success:focus,.friends-page .nav-links div a.btn-success:focus{box-shadow:0 0 0 .1rem rgba(50,182,67,.2)}.btn.btn-success:focus,.friends-page .nav-links div a.btn-success:focus,.btn.btn-success:hover,.friends-page .nav-links div a.btn-success:hover{background:#30ae40;border-color:#2da23c;color:#fff}.btn.btn-success:active,.friends-page .nav-links div a.btn-success:active,.btn.btn-success.active,.friends-page .nav-links div a.btn-success.active{background:#2a9a39;border-color:#278e34;color:#fff}.btn.btn-success.loading::after,.friends-page .nav-links div a.btn-success.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn.btn-error,.friends-page .nav-links div a.btn-error{background:#e85600;border-color:#d95000;color:#fff}.btn.btn-error:focus,.friends-page .nav-links div a.btn-error:focus{box-shadow:0 0 0 .1rem rgba(232,86,0,.2)}.btn.btn-error:focus,.friends-page .nav-links div a.btn-error:focus,.btn.btn-error:hover,.friends-page .nav-links div a.btn-error:hover{background:#de5200;border-color:#cf4d00;color:#fff}.btn.btn-error:active,.friends-page .nav-links div a.btn-error:active,.btn.btn-error.active,.friends-page .nav-links div a.btn-error.active{background:#c44900;border-color:#b54300;color:#fff}.btn.btn-error.loading::after,.friends-page .nav-links div a.btn-error.loading::after{border-bottom-color:#fff;border-left-color:#fff}.btn.btn-link,.friends-page .nav-links div a.btn-link{background:rgba(0,0,0,0);border-color:rgba(0,0,0,0);color:#2e5bec}.btn.btn-link:focus,.friends-page .nav-links div a.btn-link:focus,.btn.btn-link:hover,.friends-page .nav-links div a.btn-link:hover,.btn.btn-link:active,.friends-page .nav-links div a.btn-link:active,.btn.btn-link.active,.friends-page .nav-links div a.btn-link.active{color:#1341d4}.btn.btn-sm,.friends-page .nav-links div a.btn-sm{font-size:.7rem;height:1.4rem;padding:.05rem .3rem}.btn.btn-lg,.friends-page .nav-links div a.btn-lg{font-size:.9rem;height:2rem;padding:.35rem .6rem}.btn.btn-block,.friends-page .nav-links div a.btn-block{display:block;width:100%}.btn.btn-action,.friends-page .nav-links div a.btn-action{width:1.8rem;padding-left:0;padding-right:0}.btn.btn-action.btn-sm,.friends-page .nav-links div a.btn-action.btn-sm{width:1.4rem}.btn.btn-action.btn-lg,.friends-page .nav-links div a.btn-action.btn-lg{width:2rem}.btn.btn-clear,.friends-page .nav-links div a.btn-clear{background:rgba(0,0,0,0);border:0;color:currentColor;height:1rem;line-height:.8rem;margin-left:.2rem;margin-right:-2px;opacity:1;padding:.1rem;text-decoration:none;width:1rem}.btn.btn-clear:focus,.friends-page .nav-links div a.btn-clear:focus,.btn.btn-clear:hover,.friends-page .nav-links div a.btn-clear:hover{background:rgba(255,255,255,.5);opacity:.95}.btn.btn-clear::before,.friends-page .nav-links div a.btn-clear::before{content:"✕"}.btn-group{display:inline-flex;flex-wrap:wrap}.btn-group .btn,.btn-group .friends-page .nav-links div a,.friends-page .nav-links div .btn-group a{flex:1 0 auto}.btn-group .btn:first-child:not(:last-child),.btn-group .friends-page .nav-links div a:first-child:not(:last-child),.friends-page .nav-links div .btn-group a:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group .btn:not(:first-child):not(:last-child),.btn-group .friends-page .nav-links div a:not(:first-child):not(:last-child),.friends-page .nav-links div .btn-group a:not(:first-child):not(:last-child){border-radius:0;margin-left:-0.05rem}.btn-group .btn:last-child:not(:first-child),.btn-group .friends-page .nav-links div a:last-child:not(:first-child),.friends-page .nav-links div .btn-group a:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-0.05rem}.btn-group .btn:focus,.btn-group .friends-page .nav-links div a:focus,.friends-page .nav-links div .btn-group a:focus,.btn-group .btn:hover,.btn-group .friends-page .nav-links div a:hover,.friends-page .nav-links div .btn-group a:hover,.btn-group .btn:active,.btn-group .friends-page .nav-links div a:active,.friends-page .nav-links div .btn-group a:active,.btn-group .btn.active,.btn-group .friends-page .nav-links div a.active,.friends-page .nav-links div .btn-group a.active{z-index:1}.btn-group.btn-group-block{display:flex}.btn-group.btn-group-block .btn,.btn-group.btn-group-block .friends-page .nav-links div a,.friends-page .nav-links div .btn-group.btn-group-block a{flex:1 0 0}.container{margin-left:auto;margin-right:auto;padding-left:.4rem;padding-right:.4rem;width:100%}.container.grid-xl{max-width:1296px}.container.grid-lg{max-width:976px}.container.grid-md{max-width:856px}.container.grid-sm{max-width:616px}.container.grid-xs{max-width:496px}.show-xs,.show-sm,.show-md,.show-lg,.show-xl{display:none !important}.cols,.columns{display:flex;flex-wrap:wrap;margin-left:-0.4rem;margin-right:-0.4rem}.cols.col-gapless,.columns.col-gapless{margin-left:0;margin-right:0}.cols.col-gapless>.column,.columns.col-gapless>.column{padding-left:0;padding-right:0}.cols.col-oneline,.columns.col-oneline{flex-wrap:nowrap;overflow-x:auto}[class~=col-],.column{flex:1;max-width:100%;padding-left:.4rem;padding-right:.4rem}[class~=col-].col-12,[class~=col-].col-11,[class~=col-].col-10,[class~=col-].col-9,[class~=col-].col-8,[class~=col-].col-7,[class~=col-].col-6,[class~=col-].col-5,[class~=col-].col-4,[class~=col-].col-3,[class~=col-].col-2,[class~=col-].col-1,[class~=col-].col-auto,.column.col-12,.column.col-11,.column.col-10,.column.col-9,.column.col-8,.column.col-7,.column.col-6,.column.col-5,.column.col-4,.column.col-3,.column.col-2,.column.col-1,.column.col-auto{flex:none}.col-12{width:100%}.col-11{width:91.66666667%}.col-10{width:83.33333333%}.col-9{width:75%}.col-8{width:66.66666667%}.col-7{width:58.33333333%}.col-6{width:50%}.col-5{width:41.66666667%}.col-4{width:33.33333333%}.col-3{width:25%}.col-2{width:16.66666667%}.col-1{width:8.33333333%}.col-auto{flex:0 0 auto;max-width:none;width:auto}.col-mx-auto{margin-left:auto;margin-right:auto}.col-ml-auto{margin-left:auto}.col-mr-auto{margin-right:auto}@media(max-width: 1280px){.col-xl-12,.col-xl-11,.col-xl-10,.col-xl-9,.col-xl-8,.col-xl-7,.col-xl-6,.col-xl-5,.col-xl-4,.col-xl-3,.col-xl-2,.col-xl-1,.col-xl-auto{flex:none}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-auto{width:auto}.hide-xl{display:none !important}.show-xl{display:block !important}}@media(max-width: 960px){.col-lg-12,.col-lg-11,.col-lg-10,.col-lg-9,.col-lg-8,.col-lg-7,.col-lg-6,.col-lg-5,.col-lg-4,.col-lg-3,.col-lg-2,.col-lg-1,.col-lg-auto{flex:none}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-auto{width:auto}.hide-lg{display:none !important}.show-lg{display:block !important}}@media(max-width: 840px){.col-md-12,.col-md-11,.col-md-10,.col-md-9,.col-md-8,.col-md-7,.col-md-6,.col-md-5,.col-md-4,.col-md-3,.col-md-2,.col-md-1,.col-md-auto{flex:none}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-auto{width:auto}.hide-md{display:none !important}.show-md{display:block !important}}@media(max-width: 600px){.col-sm-12,.col-sm-11,.col-sm-10,.col-sm-9,.col-sm-8,.col-sm-7,.col-sm-6,.col-sm-5,.col-sm-4,.col-sm-3,.col-sm-2,.col-sm-1,.col-sm-auto{flex:none}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-auto{width:auto}.hide-sm{display:none !important}.show-sm{display:block !important}}@media(max-width: 480px){.col-xs-12,.col-xs-11,.col-xs-10,.col-xs-9,.col-xs-8,.col-xs-7,.col-xs-6,.col-xs-5,.col-xs-4,.col-xs-3,.col-xs-2,.col-xs-1,.col-xs-auto{flex:none}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-auto{width:auto}.hide-xs{display:none !important}.show-xs{display:block !important}}.navbar{align-items:stretch;display:flex;flex-wrap:wrap;justify-content:space-between}.navbar .navbar-section{align-items:center;display:flex;flex:1 0 0}.navbar .navbar-section:not(:first-child):last-child{justify-content:flex-end}.navbar .navbar-center{align-items:center;display:flex;flex:0 0 auto}.navbar .navbar-brand{font-size:.9rem;text-decoration:none}.off-canvas{display:flex;flex-flow:nowrap;height:100%;position:relative;width:100%}.off-canvas .off-canvas-toggle{display:block;position:absolute;top:.4rem;transition:none;z-index:1;left:.4rem}.off-canvas .off-canvas-sidebar{background:#fff;bottom:0;min-width:10rem;overflow-y:auto;position:fixed;top:0;transition:transform .25s;z-index:200;left:0;transform:translateX(-100%)}.off-canvas .off-canvas-content{flex:1 1 auto;height:100%;padding:.4rem .4rem .4rem 4rem}.off-canvas .off-canvas-overlay{background:rgba(62,57,107,.1);border-color:rgba(0,0,0,0);border-radius:0;bottom:0;display:none;height:100%;left:0;position:fixed;right:0;top:0;width:100%}.off-canvas .off-canvas-sidebar:target,.off-canvas .off-canvas-sidebar.active{transform:translateX(0)}.off-canvas .off-canvas-sidebar:target~.off-canvas-overlay,.off-canvas .off-canvas-sidebar.active~.off-canvas-overlay{display:block;z-index:100}@media(min-width: 960px){.off-canvas.off-canvas-sidebar-show .off-canvas-toggle{display:none}.off-canvas.off-canvas-sidebar-show .off-canvas-sidebar{flex:0 0 auto;position:relative;transform:none}.off-canvas.off-canvas-sidebar-show .off-canvas-overlay{display:none !important}}.accordion input:checked~.accordion-header>.icon:first-child,.accordion[open] .accordion-header>.icon:first-child{transform:rotate(90deg)}.accordion input:checked~.accordion-body,.accordion[open] .accordion-body{max-height:50rem}.accordion .accordion-header{display:block;padding:.2rem .4rem}.accordion .accordion-header .icon{transition:transform .25s}.accordion .accordion-body{margin-bottom:.4rem;max-height:0;overflow:hidden;transition:max-height .25s}summary.accordion-header::-webkit-details-marker{display:none}.card{background:#fff;border:.05rem solid #f6f6fa;border-radius:.1rem;display:flex;flex-direction:column}.card .card-header,.card .card-body,.card .card-footer{padding:.8rem;padding-bottom:0}.card .card-header:last-child,.card .card-body:last-child,.card .card-footer:last-child{padding-bottom:.8rem}.card .card-body{flex:1 1 auto}.card .card-image{padding-top:.8rem}.card .card-image:first-child{padding-top:0}.card .card-image:first-child img{border-top-left-radius:.1rem;border-top-right-radius:.1rem}.card .card-image:last-child img{border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem}.nav{display:flex;flex-direction:column;list-style:none;margin:.2rem 0}.nav .nav-item a{color:#7770b3;padding:.2rem .4rem;text-decoration:none}.nav .nav-item a:focus,.nav .nav-item a:hover{color:#2e5bec}.nav .nav-item.active>a{color:#5b549d;font-weight:bold}.nav .nav-item.active>a:focus,.nav .nav-item.active>a:hover{color:#2e5bec}.nav .nav{margin-bottom:.4rem;margin-left:.8rem}.chip{align-items:center;background:#f5f5fa;border-radius:5rem;display:inline-flex;font-size:90%;height:1.2rem;line-height:.8rem;margin:.1rem;max-width:320px;overflow:hidden;padding:.2rem .4rem;text-decoration:none;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.chip.active{background:#2e5bec;color:#fff}.chip .avatar{margin-left:-0.4rem;margin-right:.2rem}.chip .btn-clear{border-radius:50%;transform:scale(0.75)}.menu{box-shadow:0 .05rem .2rem rgba(62,57,107,.3);background:#fff;border-radius:.1rem;list-style:none;margin:0;min-width:180px;padding:.4rem;transform:translateY(0.2rem);z-index:300}.menu.menu-nav{background:rgba(0,0,0,0);box-shadow:none}.menu .menu-item{margin-top:0;padding:0 .4rem;position:relative;text-decoration:none}.menu .menu-item>a{border-radius:.1rem;color:inherit;display:block;margin:0 -0.4rem;padding:.2rem .4rem;text-decoration:none}.menu .menu-item>a:focus,.menu .menu-item>a:hover{background:#dde5fc;color:#2e5bec}.menu .menu-item>a:active,.menu .menu-item>a.active{background:#dde5fc;color:#2e5bec}.menu .menu-item .form-checkbox,.menu .menu-item .form-radio,.menu .menu-item .form-switch{margin:.1rem 0}.menu .menu-item+.menu-item{margin-top:.2rem}.menu .menu-badge{align-items:center;display:flex;height:100%;position:absolute;right:0;top:0}.menu .menu-badge .label{margin-right:.4rem}.form-autocomplete{position:relative}.form-autocomplete .form-autocomplete-input{align-content:flex-start;display:flex;flex-wrap:wrap;height:auto;min-height:1.6rem;padding:.1rem}.form-autocomplete .form-autocomplete-input.is-focused{box-shadow:0 0 0 .1rem rgba(46,91,236,.2);border-color:#2e5bec}.form-autocomplete .form-autocomplete-input .form-input{border-color:rgba(0,0,0,0);box-shadow:none;display:inline-block;flex:1 0 auto;height:1.2rem;line-height:.8rem;margin:.1rem;width:auto}.form-autocomplete .menu{left:0;position:absolute;top:100%;width:100%}.form-autocomplete.autocomplete-oneline .form-autocomplete-input{flex-wrap:nowrap;overflow-x:auto}.form-autocomplete.autocomplete-oneline .chip{flex:1 0 auto}.loading{color:rgba(0,0,0,0) !important;min-height:.8rem;pointer-events:none;position:relative}.loading::after{animation:loading 500ms infinite linear;background:rgba(0,0,0,0);border:.1rem solid #2e5bec;border-radius:50%;border-right-color:rgba(0,0,0,0);border-top-color:rgba(0,0,0,0);content:"";display:block;height:.8rem;left:50%;margin-left:-0.4rem;margin-top:-0.4rem;opacity:1;padding:0;position:absolute;top:50%;width:.8rem;z-index:1}.loading.loading-lg{min-height:2rem}.loading.loading-lg::after{height:1.6rem;margin-left:-0.8rem;margin-top:-0.8rem;width:1.6rem}.text-primary{color:#2e5bec !important}a.text-primary:focus,a.text-primary:hover{color:#1749ea}a.text-primary:visited{color:#456dee}.text-secondary{color:#cfdafb !important}a.text-secondary:focus,a.text-secondary:hover{color:#b8c7f9}a.text-secondary:visited{color:#e7ecfd}.text-gray{color:#d6d4e8 !important}a.text-gray:focus,a.text-gray:hover{color:#c6c4df}a.text-gray:visited{color:#e6e5f1}.text-light{color:#fff !important}a.text-light:focus,a.text-light:hover{color:#f2f2f2}a.text-light:visited{color:#fff}.text-dark{color:#48427c !important}a.text-dark:focus,a.text-dark:hover{color:#3e396b}a.text-dark:visited{color:#514b8c}.text-success{color:#32b643 !important}a.text-success:focus,a.text-success:hover{color:#2da23c}a.text-success:visited{color:#39c94b}.text-warning{color:#ffb700 !important}a.text-warning:focus,a.text-warning:hover{color:#e6a500}a.text-warning:visited{color:#ffbe1a}.text-error{color:#e85600 !important}a.text-error:focus,a.text-error:hover{color:#cf4d00}a.text-error:visited{color:#ff6003}.bg-primary{background:#2e5bec !important;color:#fff}.bg-secondary{background:#dde5fc !important}.bg-dark{background:#3e396b !important;color:#fff}.bg-gray{background:#fff !important}.bg-success{background:#32b643 !important;color:#fff}.bg-warning{background:#ffb700 !important;color:#fff}.bg-error{background:#e85600 !important;color:#fff}.divider,.divider-vert{display:block;position:relative}.divider[data-content]::after,.divider-vert[data-content]::after{background:#fff;color:#d6d4e8;content:attr(data-content);display:inline-block;font-size:.7rem;padding:0 .4rem;transform:translateY(-0.65rem)}.divider{border-top:.05rem solid #eee;height:.05rem;margin:.4rem 0}.divider[data-content]{margin:.8rem 0}.divider-vert{display:block;padding:.8rem}.divider-vert::before{border-left:.05rem solid #f6f6fa;bottom:.4rem;content:"";display:block;left:50%;position:absolute;top:.4rem;transform:translateX(-50%)}.divider-vert[data-content]::after{left:50%;padding:.2rem 0;position:absolute;top:50%;transform:translate(-50%, -50%)}.d-block{display:block}.d-inline{display:inline}.d-inline-block{display:inline-block}.d-flex{display:flex}.d-inline-flex{display:inline-flex}.d-none,.d-hide{display:none !important}.d-visible{visibility:visible}.d-invisible{visibility:hidden}.text-hide{background:rgba(0,0,0,0);border:0;color:rgba(0,0,0,0);font-size:0;line-height:0;text-shadow:none}.text-assistive{border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.clearfix::after{clear:both;content:"";display:table}.float-left{float:left !important}.float-right{float:right !important}.p-relative{position:relative !important}.p-absolute{position:absolute !important}.p-fixed{position:fixed !important}.p-sticky{position:sticky !important}.p-centered{display:block;float:none;margin-left:auto;margin-right:auto}.flex-centered{align-items:center;display:flex;justify-content:center}.m-0{margin:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mr-0{margin-right:0 !important}.mt-0{margin-top:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-bottom:0 !important;margin-top:0 !important}.m-1{margin:.2rem !important}.mb-1{margin-bottom:.2rem !important}.ml-1{margin-left:.2rem !important}.mr-1{margin-right:.2rem !important}.mt-1{margin-top:.2rem !important}.mx-1{margin-left:.2rem !important;margin-right:.2rem !important}.my-1{margin-bottom:.2rem !important;margin-top:.2rem !important}.m-2{margin:.4rem !important}.mb-2{margin-bottom:.4rem !important}.ml-2{margin-left:.4rem !important}.mr-2{margin-right:.4rem !important}.mt-2{margin-top:.4rem !important}.mx-2{margin-left:.4rem !important;margin-right:.4rem !important}.my-2{margin-bottom:.4rem !important;margin-top:.4rem !important}.p-0{padding:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.pr-0{padding-right:0 !important}.pt-0{padding-top:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-bottom:0 !important;padding-top:0 !important}.p-1{padding:.2rem !important}.pb-1{padding-bottom:.2rem !important}.pl-1{padding-left:.2rem !important}.pr-1{padding-right:.2rem !important}.pt-1{padding-top:.2rem !important}.px-1{padding-left:.2rem !important;padding-right:.2rem !important}.py-1{padding-bottom:.2rem !important;padding-top:.2rem !important}.p-2{padding:.4rem !important}.pb-2{padding-bottom:.4rem !important}.pl-2{padding-left:.4rem !important}.pr-2{padding-right:.4rem !important}.pt-2{padding-top:.4rem !important}.px-2{padding-left:.4rem !important;padding-right:.4rem !important}.py-2{padding-bottom:.4rem !important;padding-top:.4rem !important}.friends-dropdown{display:inline-block;position:relative}.friends-dropdown .menu{animation:slide-down .15s ease 1;display:none;left:0;max-height:50vh;overflow-y:auto;position:absolute;top:100%}.friends-page ul.friend-posts img.avatar{vertical-align:middle;margin-right:.3em}.friends-page a.explanation-friends-auth-link,.friends-page a.friends-auth-link,.friends-page a.friends-auth-link:link,.friends-page a.friends-auth-link:active,.friends-page a.friends-auth-link,.friends-page a.friends-auth-link:link,.friends-page a.friends-auth-link:active{color:#333}.friends-page a.friends-auth-link span.dashicons-admin-users{display:inline}.friends-page a.friends-auth-link span.dashicons,.friends-page button.friends-auth-link span.dashicons{color:#32c170;margin-left:6px}.friends-page a.explanation-friends-auth-link:hover,.friends-page a.friends-auth-link :hover,.friends-page a.friends-auth-link:hover,.friends-page a.friends-auth-link:hover span.dashicons,.friends-page button.friends-auth-link:hover span.dashicons{color:#32c170}.friends-page a.explanation-friends-auth-link:hover,.friends-page a.friends-auth-link :hover,.friends-page a.friends-auth-link:hover{text-decoration:underline}.friends-page a.explanation-friends-auth-link:hover span,.friends-page a.friends-auth-link :hover span,.friends-page a.friends-auth-link:hover span{text-decoration:none}.friends-page .form-autocomplete .form-autocomplete-input .form-input{width:auto}.friends-page .friends-reaction-picker button{padding:.5rem;margin:0;font-size:18px;background-color:#fff;border:0;cursor:pointer;z-index:999999}.friends-page .friends-reaction-picker button:focus{outline:none}.friends-page a.display-message.unread{font-weight:bold}.friends-page .friend-message .conversation .messages{max-height:40em;overflow:auto}.friends-page .friend-message .conversation .messages .wp-block-friends-message{max-width:80%;margin:1em;border-bottom:1px solid #eee}.friends-page .invisible{font-size:0;line-height:0;display:inline-block;width:0;height:0;position:absolute}.friends-page .invisible img,.friends-page .invisible svg{margin:0 !important;border:0 !important;padding:0 !important;width:0 !important;height:0 !important}.friends-page .ellipsis::after{content:"…"}/*# sourceMappingURL=friends.css.map */
  • friends/trunk/friends.php

    r3084764 r3097807  
    44 * Plugin author: Alex Kirk
    55 * Plugin URI: https://github.com/akirk/friends
    6  * Version: 2.9.2
     6 * Version: 2.9.
    77 * Requires PHP: 5.6
    88
     
    2626define( 'FRIENDS_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
    2727define( 'FRIENDS_PLUGIN_FILE', plugin_dir_path( __FILE__ ) . '/' . basename( __FILE__ ) );
    28 define( 'FRIENDS_VERSION', '2.9.2' );
     28define( 'FRIENDS_VERSION', '2.9.' );
    2929
    3030require_once __DIR__ . '/libs/Mf2/Parser.php';
  • friends/trunk/includes/class-admin.php

    r3084764 r3097807  
    17751775            }
    17761776        } else {
    1777             if ( home_url() === trailingslashit( $friend_url ) ) {
     1777            if ( ) ) {
    17781778                return new \WP_Error( 'friend-yourself', __( 'It seems like you sent a friend request to yourself.', 'friends' ) );
    17791779            }
  • friends/trunk/includes/class-frontend.php

    r3084764 r3097807  
    102102     */
    103103    public function add_rewrite_rule() {
    104         add_rewrite_rule(
    105             'friends/(.*)/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$',
    106             'index.php?pagename=friends/$matches[1]&feed=$matches[2]',
    107             'top'
    108         );
    109         add_rewrite_rule(
    110             'friends/(.*)/(\d+)/?$',
    111             'index.php?pagename=friends/$matches[1]&page=$matches[2]',
    112             'top'
    113         );
    114         add_rewrite_rule(
    115             'friends/(.*)',
    116             'index.php?pagename=friends/$matches[1]',
    117             'top'
    118         );
     104        $existing_rules = get_option( 'rewrite_rules' );
     105        $needs_flush = false;
     106
     107        $rules = array(
     108            '^friends/(.*)/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$' => 'index.php?pagename=friends/$matches[1]&feed=$matches[2]',
     109            '^friends/(.*)/(\d+)/?$' => 'index.php?pagename=friends/$matches[1]&page=$matches[2]',
     110            '^friends/(.*)'          => 'index.php?pagename=friends/$matches[1]',
     111        );
     112
     113        foreach ( $rules as $rule => $rewrite ) {
     114            if ( empty( $existing_rules[ $rule ] ) ) {
     115                $needs_flush = true;
     116            }
     117            add_rewrite_rule( $rule, $rewrite, 'top' );
     118        }
     119
     120        if ( $needs_flush ) {
     121            global $wp_rewrite;
     122            $wp_rewrite->flush_rules();
     123        }
    119124    }
    120125
     
    680685            $content = apply_filters( 'friends_no_comments_feed_available', __( 'We tried to load comments remotely but there were no comments.', 'friends' ), $post_id, $friend_user, $user_feed );
    681686        } else {
     687
    682688            $template_loader = Friends::template_loader();
    683689            ob_start();
    684690            ?>
    685691            <h5><?php esc_html_e( 'Comments' ); /* phpcs:ignore WordPress.WP.I18n.MissingArgDomain */ ?></h5>
     692
     693
     694
     695
     696
     697
     698
     699
     700
     701
     702
     703
    686704            <?php
    687             foreach ( $comments as $comment ) {
    688                 $template_loader->get_template_part(
    689                     'frontend/parts/comment',
    690                     null,
    691                     array(
    692                         'author'       => $comment->comment_author,
    693                         'date'         => $comment->comment_date,
    694                         'permalink'    => $comment->guid . '#comment-' . $comment->comment_ID,
    695                         'post_content' => $comment->comment_content,
    696                     )
    697                 );
    698             }
    699 
    700705            $content = ob_get_contents();
    701706            ob_end_clean();
     
    10981103        if ( isset( $wp_query->query['pagename'] ) ) {
    10991104            $pagename = $wp_query->query['pagename'];
     1105
     1106
    11001107        } elseif ( isset( $wp_query->query['name'] ) ) {
    11011108            $pagename = $wp_query->query['name'];
     
    11041111        $pagename_parts = explode( '/', trim( $pagename, '/' ) );
    11051112        $is_friends = array_shift( $pagename_parts );
     1113
    11061114        if ( 'friends' !== $is_friends ) {
    11071115            return $query;
     
    12361244        $query->is_comments_feed = false;
    12371245        $query->set( 'pagename', null );
     1246
    12381247        if ( 'collapsed' === get_option( 'friends_frontend_default_view', 'expanded' ) && get_option( 'posts_per_page' ) < 20 ) {
    12391248            if ( 'status' === $post_format ) {
  • friends/trunk/includes/class-user.php

    r3084764 r3097807  
    12871287            return $account;
    12881288        }
     1289
     1290
     1291
     1292
    12891293        $user = Feed_Parser_ActivityPub::determine_mastodon_api_user( $user_id );
     1294
    12901295        if ( ! $user ) {
    12911296            if ( ! $post instanceof \WP_Post ) {
     
    13021307                $note = '';
    13031308            }
    1304             $account->id             = $user->user_login;
     1309            $account->id             = ;
    13051310            $account->username       = $user->user_login;
    13061311            $account->display_name   = $user->display_name;
     
    13261331            );
    13271332        }
     1333
    13281334        return $account;
    13291335    }
  • friends/trunk/integrations/class-enable-mastodon-apps.php

    r3084764 r3097807  
    1717        add_filter( 'mastodon_api_get_posts_query_args', array( 'Friends\User', 'mastodon_api_get_posts_query_args' ) );
    1818        add_filter( 'mastodon_entity_relationship', array( 'Friends\User', 'mastodon_entity_relationship' ), 10, 2 );
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
    1930    }
    2031}
  • friends/trunk/templates/frontend/parts/comments-content.php

    r2817248 r3097807  
    77 */
    88
    9 ?><footer class="comments-content card-footer"></footer>
     9?><footer class="comments-content card-footer <?php echo is_single() ? 'open' : 'closed'; ?>">
     10<?php
     11if ( is_single() ) {
     12    $post_id = get_the_ID();
     13    $comments = apply_filters(
     14        'friends_get_comments',
     15        get_comments(
     16            array(
     17                'post_id' => $post_id,
     18                'status'  => 'approve',
     19                'order'   => 'ASC',
     20                'orderby' => 'comment_date_gmt',
     21            )
     22        ),
     23        $post_id
     24    );
     25
     26    if ( ! empty( $comments ) ) {
     27        $template_loader = Friends\Friends::template_loader();
     28        ?>
     29    <h5><?php esc_html_e( 'Comments' ); /* phpcs:ignore WordPress.WP.I18n.MissingArgDomain */ ?></h5>
     30        <ol class="comment-list">
     31            <?php
     32                remove_all_filters( 'comments_template' );
     33                wp_list_comments(
     34                    array(
     35                        'style'       => 'ol',
     36                        'short_ping'  => true,
     37                        'avatar_size' => 24,
     38                    ),
     39                    $comments
     40                );
     41            ?>
     42        </ol><!-- .comment-list -->
     43        <?php
     44    }
     45    do_action( 'friends_comments_form', $post_id );
     46}
     47?>
     48</footer>
Note: See TracChangeset for help on using the changeset viewer.